[cs2as] - Regenerating
diff --git a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/MiniOCLTables.java b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/MiniOCLTables.java
index 4d9e525..af86c69 100644
--- a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/MiniOCLTables.java
+++ b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/MiniOCLTables.java
@@ -23,6 +23,7 @@
 import org.eclipse.ocl.pivot.internal.library.executor.ExecutorStandardLibrary;
 import org.eclipse.ocl.pivot.internal.library.executor.ExecutorType;
 import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibTables;
+import org.eclipse.qvtd.doc.miniocl.MiniOCLTables;
 
 /**
  * MiniOCLTables provides the dispatch tables for the miniocl for use by the OCL dispatcher.
diff --git a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedOperationLookupVisitor.java b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedOperationLookupVisitor.java
index c6c603b..c2838d7 100644
--- a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedOperationLookupVisitor.java
+++ b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedOperationLookupVisitor.java
@@ -11,9 +11,17 @@
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.evaluation.Executor;
 import org.eclipse.ocl.pivot.ids.IdManager;
 import org.eclipse.ocl.pivot.ids.TypeId;
+import org.eclipse.ocl.pivot.internal.library.executor.ExecutorSingleIterationManager;
+import org.eclipse.ocl.pivot.library.AbstractBinaryOperation;
+import org.eclipse.ocl.pivot.library.LibraryIteration;
+import org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsSetOperation;
+import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibTables;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.values.InvalidValueException;
+import org.eclipse.ocl.pivot.values.SetValue;
 import org.eclipse.qvtd.doc.miniocl.MiniOCLPackage;
 import org.eclipse.qvtd.doc.miniocl.Operation;
 import org.eclipse.qvtd.doc.miniocl.lookup.EnvironmentPackage;
@@ -34,6 +42,7 @@
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_OclElement = PACKid_$metamodel$.getClassId("OclElement", 0);
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Operation = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_doc_s_MiniOCL_s_1_0.getClassId("Operation", 0);
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_Operation = TypeId.ORDERED_SET.getSpecializedId(CLSSid_Operation);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Class = TypeId.SET.getSpecializedId(CLSSid_Class);
     
     protected final /*@Thrown*/ org.eclipse.ocl.pivot.evaluation.@org.eclipse.jdt.annotation.NonNull Executor executor;
     protected final /*@Thrown*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver;
@@ -58,6 +67,32 @@
      */
     @Override
     public /*@NonInvalid*/ LookupEnvironment visitClass(final /*@NonInvalid*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.NonNull Class element) {
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull StandardLibrary standardLibrary = idResolver.getStandardLibrary();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue oclAsSet = OclAnyOclAsSetOperation.INSTANCE.evaluate(executor, SET_CLSSid_Class, element);
+        final org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYPE_superClasses_0 = executor.getStaticTypeOf(oclAsSet);
+        final LibraryIteration.@org.eclipse.jdt.annotation.NonNull LibraryIterationExtension IMPL_superClasses_0 = (LibraryIteration.LibraryIterationExtension)TYPE_superClasses_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
+        final @NonNull Object ACC_superClasses_0 = IMPL_superClasses_0.createAccumulatorValue(executor, SET_CLSSid_Class, CLSSid_Class);
+        /**
+         * Implementation of the iterator body.
+         */
+        final @NonNull AbstractBinaryOperation BODY_superClasses_0 = new AbstractBinaryOperation()
+        {
+            /**
+             * _'null' : miniocl::Class[?]
+             */
+            @Override
+            public @Nullable Object evaluate(final @NonNull Executor executor, final @NonNull TypeId typeId, final @Nullable Object oclAsSet, final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.Nullable Object _1) {
+                final /*@NonInvalid*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.Nullable Class symbol_0 = (org.eclipse.qvtd.doc.miniocl.Class)_1;
+                if (symbol_0 == null) {
+                    throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/doc/MiniOCL/1.0\'::Class::superClass\'");
+                }
+                final /*@Thrown*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.Nullable Class superClass = symbol_0.getSuperClass();
+                return superClass;
+            }
+        };
+        final @NonNull  ExecutorSingleIterationManager MGR_superClasses_0 = new ExecutorSingleIterationManager(executor, SET_CLSSid_Class, BODY_superClasses_0, oclAsSet, ACC_superClasses_0);
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue superClasses = ClassUtil.nonNullState((SetValue)IMPL_superClasses_0.evaluateIteration(MGR_superClasses_0));
         @SuppressWarnings("null")
         final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Operation> ownedOperations = element.getOwnedOperations();
         @SuppressWarnings("null")
diff --git a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedPropertyLookupVisitor.java b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedPropertyLookupVisitor.java
index 273a5d6..8c92871 100644
--- a/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedPropertyLookupVisitor.java
+++ b/doc/org.eclipse.qvtd.doc.miniocl/emf-gen/org/eclipse/qvtd/doc/miniocl/util/MiniOCLExportedPropertyLookupVisitor.java
@@ -11,9 +11,17 @@
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.jdt.annotation.Nullable;
+import org.eclipse.ocl.pivot.evaluation.Executor;
 import org.eclipse.ocl.pivot.ids.IdManager;
 import org.eclipse.ocl.pivot.ids.TypeId;
+import org.eclipse.ocl.pivot.internal.library.executor.ExecutorSingleIterationManager;
+import org.eclipse.ocl.pivot.library.AbstractBinaryOperation;
+import org.eclipse.ocl.pivot.library.LibraryIteration;
+import org.eclipse.ocl.pivot.library.oclany.OclAnyOclAsSetOperation;
+import org.eclipse.ocl.pivot.oclstdlib.OCLstdlibTables;
 import org.eclipse.ocl.pivot.utilities.ClassUtil;
+import org.eclipse.ocl.pivot.values.InvalidValueException;
+import org.eclipse.ocl.pivot.values.SetValue;
 import org.eclipse.qvtd.doc.miniocl.MiniOCLPackage;
 import org.eclipse.qvtd.doc.miniocl.Property;
 import org.eclipse.qvtd.doc.miniocl.lookup.EnvironmentPackage;
@@ -34,6 +42,7 @@
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_OclElement = PACKid_$metamodel$.getClassId("OclElement", 0);
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull ClassId CLSSid_Property = PACKid_http_c_s_s_www_eclipse_org_s_qvtd_s_doc_s_MiniOCL_s_1_0.getClassId("Property", 0);
     public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId ORD_CLSSid_Property = TypeId.ORDERED_SET.getSpecializedId(CLSSid_Property);
+    public static final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull CollectionTypeId SET_CLSSid_Class = TypeId.SET.getSpecializedId(CLSSid_Class);
     
     protected final /*@Thrown*/ org.eclipse.ocl.pivot.evaluation.@org.eclipse.jdt.annotation.NonNull Executor executor;
     protected final /*@Thrown*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver;
@@ -58,6 +67,32 @@
      */
     @Override
     public /*@NonInvalid*/ LookupEnvironment visitClass(final /*@NonInvalid*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.NonNull Class element) {
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.ids.@org.eclipse.jdt.annotation.NonNull IdResolver idResolver = executor.getIdResolver();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull StandardLibrary standardLibrary = idResolver.getStandardLibrary();
+        final /*@NonInvalid*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue oclAsSet = OclAnyOclAsSetOperation.INSTANCE.evaluate(executor, SET_CLSSid_Class, element);
+        final org.eclipse.ocl.pivot.@org.eclipse.jdt.annotation.NonNull Class TYPE_superClasses_0 = executor.getStaticTypeOf(oclAsSet);
+        final LibraryIteration.@org.eclipse.jdt.annotation.NonNull LibraryIterationExtension IMPL_superClasses_0 = (LibraryIteration.LibraryIterationExtension)TYPE_superClasses_0.lookupImplementation(standardLibrary, OCLstdlibTables.Operations._Set__closure);
+        final @NonNull Object ACC_superClasses_0 = IMPL_superClasses_0.createAccumulatorValue(executor, SET_CLSSid_Class, CLSSid_Class);
+        /**
+         * Implementation of the iterator body.
+         */
+        final @NonNull AbstractBinaryOperation BODY_superClasses_0 = new AbstractBinaryOperation()
+        {
+            /**
+             * _'null' : miniocl::Class[?]
+             */
+            @Override
+            public @Nullable Object evaluate(final @NonNull Executor executor, final @NonNull TypeId typeId, final @Nullable Object oclAsSet, final /*@NonInvalid*/ java.lang.@org.eclipse.jdt.annotation.Nullable Object _1) {
+                final /*@NonInvalid*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.Nullable Class symbol_0 = (org.eclipse.qvtd.doc.miniocl.Class)_1;
+                if (symbol_0 == null) {
+                    throw new InvalidValueException("Null source for \'\'http://www.eclipse.org/qvtd/doc/MiniOCL/1.0\'::Class::superClass\'");
+                }
+                final /*@Thrown*/ org.eclipse.qvtd.doc.miniocl.@org.eclipse.jdt.annotation.Nullable Class superClass = symbol_0.getSuperClass();
+                return superClass;
+            }
+        };
+        final @NonNull  ExecutorSingleIterationManager MGR_superClasses_0 = new ExecutorSingleIterationManager(executor, SET_CLSSid_Class, BODY_superClasses_0, oclAsSet, ACC_superClasses_0);
+        final /*@Thrown*/ org.eclipse.ocl.pivot.values.@org.eclipse.jdt.annotation.NonNull SetValue superClasses = ClassUtil.nonNullState((SetValue)IMPL_superClasses_0.evaluateIteration(MGR_superClasses_0));
         @SuppressWarnings("null")
         final /*@Thrown*/ java.util.@org.eclipse.jdt.annotation.NonNull List<Property> ownedProperties = element.getOwnedProperties();
         @SuppressWarnings("null")
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/MiniOCLCSParser.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/MiniOCLCSParser.java
index df09b5b..a6a70da 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/MiniOCLCSParser.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/MiniOCLCSParser.java
@@ -37,16 +37,25 @@
 				{
 					put(grammarAccess.getRootCSAccess().getAlternatives(), "rule__RootCS__Alternatives");
 					put(grammarAccess.getPackageCSAccess().getAlternatives_3(), "rule__PackageCS__Alternatives_3");
+					put(grammarAccess.getClassifierCSAccess().getAlternatives(), "rule__ClassifierCS__Alternatives");
 					put(grammarAccess.getClassCSAccess().getAlternatives_4(), "rule__ClassCS__Alternatives_4");
+					put(grammarAccess.getPropertyCSAccess().getAlternatives_0(), "rule__PropertyCS__Alternatives_0");
+					put(grammarAccess.getMultiplicityCSAccess().getAlternatives_1(), "rule__MultiplicityCS__Alternatives_1");
+					put(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_2_2(), "rule__MultiplicityCS__Alternatives_1_2_2");
 					put(grammarAccess.getLogicExpCSAccess().getOpAlternatives_1_1_0(), "rule__LogicExpCS__OpAlternatives_1_1_0");
 					put(grammarAccess.getCallExpCSAccess().getOpAlternatives_1_1_0(), "rule__CallExpCS__OpAlternatives_1_1_0");
 					put(grammarAccess.getPrimaryExpCSAccess().getAlternatives(), "rule__PrimaryExpCS__Alternatives");
+					put(grammarAccess.getNavigationExpCSAccess().getAlternatives(), "rule__NavigationExpCS__Alternatives");
+					put(grammarAccess.getLoopExpCSAccess().getAlternatives(), "rule__LoopExpCS__Alternatives");
 					put(grammarAccess.getLiteralExpCSAccess().getAlternatives(), "rule__LiteralExpCS__Alternatives");
 					put(grammarAccess.getBooleanLiteralExpCSAccess().getAlternatives_1(), "rule__BooleanLiteralExpCS__Alternatives_1");
 					put(grammarAccess.getPackageCSAccess().getGroup(), "rule__PackageCS__Group__0");
 					put(grammarAccess.getClassCSAccess().getGroup(), "rule__ClassCS__Group__0");
 					put(grammarAccess.getClassCSAccess().getGroup_2(), "rule__ClassCS__Group_2__0");
+					put(grammarAccess.getDatatypeCSAccess().getGroup(), "rule__DatatypeCS__Group__0");
 					put(grammarAccess.getPropertyCSAccess().getGroup(), "rule__PropertyCS__Group__0");
+					put(grammarAccess.getMultiplicityCSAccess().getGroup(), "rule__MultiplicityCS__Group__0");
+					put(grammarAccess.getMultiplicityCSAccess().getGroup_1_2(), "rule__MultiplicityCS__Group_1_2__0");
 					put(grammarAccess.getOperationCSAccess().getGroup(), "rule__OperationCS__Group__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_3(), "rule__OperationCS__Group_3__0");
 					put(grammarAccess.getOperationCSAccess().getGroup_3_1(), "rule__OperationCS__Group_3_1__0");
@@ -57,24 +66,48 @@
 					put(grammarAccess.getLogicExpCSAccess().getGroup_1(), "rule__LogicExpCS__Group_1__0");
 					put(grammarAccess.getCallExpCSAccess().getGroup(), "rule__CallExpCS__Group__0");
 					put(grammarAccess.getCallExpCSAccess().getGroup_1(), "rule__CallExpCS__Group_1__0");
+					put(grammarAccess.getSelfExpCSAccess().getGroup(), "rule__SelfExpCS__Group__0");
+					put(grammarAccess.getCollectExpCSAccess().getGroup(), "rule__CollectExpCS__Group__0");
+					put(grammarAccess.getCollectExpCSAccess().getGroup_2(), "rule__CollectExpCS__Group_2__0");
+					put(grammarAccess.getIteratorVarCSAccess().getGroup(), "rule__IteratorVarCS__Group__0");
+					put(grammarAccess.getIteratorVarCSAccess().getGroup_1(), "rule__IteratorVarCS__Group_1__0");
+					put(grammarAccess.getIterateExpCSAccess().getGroup(), "rule__IterateExpCS__Group__0");
+					put(grammarAccess.getAccVarCSAccess().getGroup(), "rule__AccVarCS__Group__0");
+					put(grammarAccess.getAccVarCSAccess().getGroup_1(), "rule__AccVarCS__Group_1__0");
 					put(grammarAccess.getNameExpCSAccess().getGroup(), "rule__NameExpCS__Group__0");
 					put(grammarAccess.getRoundedBracketClauseCSAccess().getGroup(), "rule__RoundedBracketClauseCS__Group__0");
 					put(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2(), "rule__RoundedBracketClauseCS__Group_2__0");
 					put(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2_1(), "rule__RoundedBracketClauseCS__Group_2_1__0");
 					put(grammarAccess.getBooleanLiteralExpCSAccess().getGroup(), "rule__BooleanLiteralExpCS__Group__0");
+					put(grammarAccess.getNullLiteralExpCSAccess().getGroup(), "rule__NullLiteralExpCS__Group__0");
+					put(grammarAccess.getCollectionLiteralExpCSAccess().getGroup(), "rule__CollectionLiteralExpCS__Group__0");
+					put(grammarAccess.getCollectionLiteralPartCSAccess().getGroup(), "rule__CollectionLiteralPartCS__Group__0");
+					put(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1(), "rule__CollectionLiteralPartCS__Group_1__0");
+					put(grammarAccess.getLetExpCSAccess().getGroup(), "rule__LetExpCS__Group__0");
+					put(grammarAccess.getLetExpCSAccess().getGroup_2(), "rule__LetExpCS__Group_2__0");
+					put(grammarAccess.getLetVarCSAccess().getGroup(), "rule__LetVarCS__Group__0");
+					put(grammarAccess.getLetVarCSAccess().getGroup_1(), "rule__LetVarCS__Group_1__0");
 					put(grammarAccess.getPathNameCSAccess().getGroup(), "rule__PathNameCS__Group__0");
 					put(grammarAccess.getPathNameCSAccess().getGroup_1(), "rule__PathNameCS__Group_1__0");
 					put(grammarAccess.getRootCSAccess().getPackagesAssignment_0(), "rule__RootCS__PackagesAssignment_0");
 					put(grammarAccess.getRootCSAccess().getContraintsAssignment_1(), "rule__RootCS__ContraintsAssignment_1");
 					put(grammarAccess.getPackageCSAccess().getNameAssignment_1(), "rule__PackageCS__NameAssignment_1");
 					put(grammarAccess.getPackageCSAccess().getPackagesAssignment_3_0(), "rule__PackageCS__PackagesAssignment_3_0");
-					put(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1(), "rule__PackageCS__ClassesAssignment_3_1");
+					put(grammarAccess.getPackageCSAccess().getClassifiersAssignment_3_1(), "rule__PackageCS__ClassifiersAssignment_3_1");
 					put(grammarAccess.getClassCSAccess().getNameAssignment_1(), "rule__ClassCS__NameAssignment_1");
 					put(grammarAccess.getClassCSAccess().getExtendsAssignment_2_1(), "rule__ClassCS__ExtendsAssignment_2_1");
 					put(grammarAccess.getClassCSAccess().getPropertiesAssignment_4_0(), "rule__ClassCS__PropertiesAssignment_4_0");
 					put(grammarAccess.getClassCSAccess().getOperationsAssignment_4_1(), "rule__ClassCS__OperationsAssignment_4_1");
+					put(grammarAccess.getDatatypeCSAccess().getNameAssignment_1(), "rule__DatatypeCS__NameAssignment_1");
+					put(grammarAccess.getDatatypeCSAccess().getTypeNameAssignment_3(), "rule__DatatypeCS__TypeNameAssignment_3");
 					put(grammarAccess.getPropertyCSAccess().getNameAssignment_1(), "rule__PropertyCS__NameAssignment_1");
 					put(grammarAccess.getPropertyCSAccess().getTypeRefAssignment_3(), "rule__PropertyCS__TypeRefAssignment_3");
+					put(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4(), "rule__PropertyCS__MultiplicityAssignment_4");
+					put(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0(), "rule__MultiplicityCS__OptAssignment_1_0");
+					put(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1(), "rule__MultiplicityCS__MultAssignment_1_1");
+					put(grammarAccess.getMultiplicityCSAccess().getLowerAssignment_1_2_0(), "rule__MultiplicityCS__LowerAssignment_1_2_0");
+					put(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_2_2_0(), "rule__MultiplicityCS__UpperIntAssignment_1_2_2_0");
+					put(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_2_2_1(), "rule__MultiplicityCS__UpperMultAssignment_1_2_2_1");
 					put(grammarAccess.getOperationCSAccess().getNameAssignment_1(), "rule__OperationCS__NameAssignment_1");
 					put(grammarAccess.getOperationCSAccess().getParamsAssignment_3_0(), "rule__OperationCS__ParamsAssignment_3_0");
 					put(grammarAccess.getOperationCSAccess().getParamsAssignment_3_1_1(), "rule__OperationCS__ParamsAssignment_3_1_1");
@@ -88,15 +121,34 @@
 					put(grammarAccess.getLogicExpCSAccess().getOpAssignment_1_1(), "rule__LogicExpCS__OpAssignment_1_1");
 					put(grammarAccess.getLogicExpCSAccess().getRightAssignment_1_2(), "rule__LogicExpCS__RightAssignment_1_2");
 					put(grammarAccess.getCallExpCSAccess().getOpAssignment_1_1(), "rule__CallExpCS__OpAssignment_1_1");
-					put(grammarAccess.getCallExpCSAccess().getNameExpAssignment_1_2(), "rule__CallExpCS__NameExpAssignment_1_2");
+					put(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2(), "rule__CallExpCS__NavExpAssignment_1_2");
+					put(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0(), "rule__CollectExpCS__ItVarAssignment_2_0");
+					put(grammarAccess.getCollectExpCSAccess().getExpAssignment_3(), "rule__CollectExpCS__ExpAssignment_3");
+					put(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0(), "rule__IteratorVarCS__ItNameAssignment_0");
+					put(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1(), "rule__IteratorVarCS__ItTypeAssignment_1_1");
+					put(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2(), "rule__IterateExpCS__ItVarAssignment_2");
+					put(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4(), "rule__IterateExpCS__AccVarAssignment_4");
+					put(grammarAccess.getIterateExpCSAccess().getExpAssignment_6(), "rule__IterateExpCS__ExpAssignment_6");
+					put(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0(), "rule__AccVarCS__AccNameAssignment_0");
+					put(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1(), "rule__AccVarCS__AccTypeAssignment_1_1");
+					put(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3(), "rule__AccVarCS__AccInitExpAssignment_3");
 					put(grammarAccess.getNameExpCSAccess().getExpNameAssignment_0(), "rule__NameExpCS__ExpNameAssignment_0");
 					put(grammarAccess.getNameExpCSAccess().getRoundedBracketsAssignment_1(), "rule__NameExpCS__RoundedBracketsAssignment_1");
 					put(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_0(), "rule__RoundedBracketClauseCS__ArgsAssignment_2_0");
 					put(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_1_1(), "rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1");
 					put(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolAssignment(), "rule__IntLiteralExpCS__IntSymbolAssignment");
-					put(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolAssignment(), "rule__StringLiteralExpCS__StringSymbolAssignment");
 					put(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolAssignment_1_0(), "rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0");
-					put(grammarAccess.getPathNameCSAccess().getPathAssignment_0(), "rule__PathNameCS__PathAssignment_0");
+					put(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0(), "rule__CollectionLiteralExpCS__KindAssignment_0");
+					put(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2(), "rule__CollectionLiteralExpCS__PartsAssignment_2");
+					put(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0(), "rule__CollectionLiteralPartCS__FirstAssignment_0");
+					put(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1(), "rule__CollectionLiteralPartCS__LastAssignment_1_1");
+					put(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1(), "rule__LetExpCS__LetVarsAssignment_1");
+					put(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1(), "rule__LetExpCS__LetVarsAssignment_2_1");
+					put(grammarAccess.getLetExpCSAccess().getInExpAssignment_4(), "rule__LetExpCS__InExpAssignment_4");
+					put(grammarAccess.getLetVarCSAccess().getNameAssignment_0(), "rule__LetVarCS__NameAssignment_0");
+					put(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1(), "rule__LetVarCS__TypeRefAssignment_1_1");
+					put(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3(), "rule__LetVarCS__InitExpAssignment_3");
+					put(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0(), "rule__PathNameCS__PathElementsAssignment_0");
 					put(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_1_1(), "rule__PathNameCS__PathElementsAssignment_1_1");
 					put(grammarAccess.getPathElementCSAccess().getElementNameAssignment(), "rule__PathElementCS__ElementNameAssignment");
 				}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.g b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.g
index ca26ead..72da3b4 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.g
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.g
@@ -100,6 +100,31 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleClassifierCS
+entryRuleClassifierCS
+:
+{ before(grammarAccess.getClassifierCSRule()); }
+	 ruleClassifierCS
+{ after(grammarAccess.getClassifierCSRule()); } 
+	 EOF 
+;
+
+// Rule ClassifierCS
+ruleClassifierCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getClassifierCSAccess().getAlternatives()); }
+		(rule__ClassifierCS__Alternatives)
+		{ after(grammarAccess.getClassifierCSAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRuleClassCS
 entryRuleClassCS
 :
@@ -125,6 +150,31 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleDatatypeCS
+entryRuleDatatypeCS
+:
+{ before(grammarAccess.getDatatypeCSRule()); }
+	 ruleDatatypeCS
+{ after(grammarAccess.getDatatypeCSRule()); } 
+	 EOF 
+;
+
+// Rule DatatypeCS
+ruleDatatypeCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getDatatypeCSAccess().getGroup()); }
+		(rule__DatatypeCS__Group__0)
+		{ after(grammarAccess.getDatatypeCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRulePropertyCS
 entryRulePropertyCS
 :
@@ -150,6 +200,31 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleMultiplicityCS
+entryRuleMultiplicityCS
+:
+{ before(grammarAccess.getMultiplicityCSRule()); }
+	 ruleMultiplicityCS
+{ after(grammarAccess.getMultiplicityCSRule()); } 
+	 EOF 
+;
+
+// Rule MultiplicityCS
+ruleMultiplicityCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getGroup()); }
+		(rule__MultiplicityCS__Group__0)
+		{ after(grammarAccess.getMultiplicityCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRuleOperationCS
 entryRuleOperationCS
 :
@@ -350,6 +425,181 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleSelfExpCS
+entryRuleSelfExpCS
+:
+{ before(grammarAccess.getSelfExpCSRule()); }
+	 ruleSelfExpCS
+{ after(grammarAccess.getSelfExpCSRule()); } 
+	 EOF 
+;
+
+// Rule SelfExpCS
+ruleSelfExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getSelfExpCSAccess().getGroup()); }
+		(rule__SelfExpCS__Group__0)
+		{ after(grammarAccess.getSelfExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleNavigationExpCS
+entryRuleNavigationExpCS
+:
+{ before(grammarAccess.getNavigationExpCSRule()); }
+	 ruleNavigationExpCS
+{ after(grammarAccess.getNavigationExpCSRule()); } 
+	 EOF 
+;
+
+// Rule NavigationExpCS
+ruleNavigationExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getNavigationExpCSAccess().getAlternatives()); }
+		(rule__NavigationExpCS__Alternatives)
+		{ after(grammarAccess.getNavigationExpCSAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleLoopExpCS
+entryRuleLoopExpCS
+:
+{ before(grammarAccess.getLoopExpCSRule()); }
+	 ruleLoopExpCS
+{ after(grammarAccess.getLoopExpCSRule()); } 
+	 EOF 
+;
+
+// Rule LoopExpCS
+ruleLoopExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getLoopExpCSAccess().getAlternatives()); }
+		(rule__LoopExpCS__Alternatives)
+		{ after(grammarAccess.getLoopExpCSAccess().getAlternatives()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleCollectExpCS
+entryRuleCollectExpCS
+:
+{ before(grammarAccess.getCollectExpCSRule()); }
+	 ruleCollectExpCS
+{ after(grammarAccess.getCollectExpCSRule()); } 
+	 EOF 
+;
+
+// Rule CollectExpCS
+ruleCollectExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getCollectExpCSAccess().getGroup()); }
+		(rule__CollectExpCS__Group__0)
+		{ after(grammarAccess.getCollectExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleIteratorVarCS
+entryRuleIteratorVarCS
+:
+{ before(grammarAccess.getIteratorVarCSRule()); }
+	 ruleIteratorVarCS
+{ after(grammarAccess.getIteratorVarCSRule()); } 
+	 EOF 
+;
+
+// Rule IteratorVarCS
+ruleIteratorVarCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getIteratorVarCSAccess().getGroup()); }
+		(rule__IteratorVarCS__Group__0)
+		{ after(grammarAccess.getIteratorVarCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleIterateExpCS
+entryRuleIterateExpCS
+:
+{ before(grammarAccess.getIterateExpCSRule()); }
+	 ruleIterateExpCS
+{ after(grammarAccess.getIterateExpCSRule()); } 
+	 EOF 
+;
+
+// Rule IterateExpCS
+ruleIterateExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getIterateExpCSAccess().getGroup()); }
+		(rule__IterateExpCS__Group__0)
+		{ after(grammarAccess.getIterateExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleAccVarCS
+entryRuleAccVarCS
+:
+{ before(grammarAccess.getAccVarCSRule()); }
+	 ruleAccVarCS
+{ after(grammarAccess.getAccVarCSRule()); } 
+	 EOF 
+;
+
+// Rule AccVarCS
+ruleAccVarCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getAccVarCSAccess().getGroup()); }
+		(rule__AccVarCS__Group__0)
+		{ after(grammarAccess.getAccVarCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRuleNameExpCS
 entryRuleNameExpCS
 :
@@ -450,31 +700,6 @@
 	restoreStackSize(stackSize);
 }
 
-// Entry rule entryRuleStringLiteralExpCS
-entryRuleStringLiteralExpCS
-:
-{ before(grammarAccess.getStringLiteralExpCSRule()); }
-	 ruleStringLiteralExpCS
-{ after(grammarAccess.getStringLiteralExpCSRule()); } 
-	 EOF 
-;
-
-// Rule StringLiteralExpCS
-ruleStringLiteralExpCS 
-	@init {
-		int stackSize = keepStackSize();
-	}
-	:
-	(
-		{ before(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolAssignment()); }
-		(rule__StringLiteralExpCS__StringSymbolAssignment)
-		{ after(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolAssignment()); }
-	)
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
 // Entry rule entryRuleBooleanLiteralExpCS
 entryRuleBooleanLiteralExpCS
 :
@@ -500,6 +725,131 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRuleNullLiteralExpCS
+entryRuleNullLiteralExpCS
+:
+{ before(grammarAccess.getNullLiteralExpCSRule()); }
+	 ruleNullLiteralExpCS
+{ after(grammarAccess.getNullLiteralExpCSRule()); } 
+	 EOF 
+;
+
+// Rule NullLiteralExpCS
+ruleNullLiteralExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getNullLiteralExpCSAccess().getGroup()); }
+		(rule__NullLiteralExpCS__Group__0)
+		{ after(grammarAccess.getNullLiteralExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleCollectionLiteralExpCS
+entryRuleCollectionLiteralExpCS
+:
+{ before(grammarAccess.getCollectionLiteralExpCSRule()); }
+	 ruleCollectionLiteralExpCS
+{ after(grammarAccess.getCollectionLiteralExpCSRule()); } 
+	 EOF 
+;
+
+// Rule CollectionLiteralExpCS
+ruleCollectionLiteralExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); }
+		(rule__CollectionLiteralExpCS__Group__0)
+		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleCollectionLiteralPartCS
+entryRuleCollectionLiteralPartCS
+:
+{ before(grammarAccess.getCollectionLiteralPartCSRule()); }
+	 ruleCollectionLiteralPartCS
+{ after(grammarAccess.getCollectionLiteralPartCSRule()); } 
+	 EOF 
+;
+
+// Rule CollectionLiteralPartCS
+ruleCollectionLiteralPartCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); }
+		(rule__CollectionLiteralPartCS__Group__0)
+		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleLetExpCS
+entryRuleLetExpCS
+:
+{ before(grammarAccess.getLetExpCSRule()); }
+	 ruleLetExpCS
+{ after(grammarAccess.getLetExpCSRule()); } 
+	 EOF 
+;
+
+// Rule LetExpCS
+ruleLetExpCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getLetExpCSAccess().getGroup()); }
+		(rule__LetExpCS__Group__0)
+		{ after(grammarAccess.getLetExpCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRuleLetVarCS
+entryRuleLetVarCS
+:
+{ before(grammarAccess.getLetVarCSRule()); }
+	 ruleLetVarCS
+{ after(grammarAccess.getLetVarCSRule()); } 
+	 EOF 
+;
+
+// Rule LetVarCS
+ruleLetVarCS 
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getLetVarCSAccess().getGroup()); }
+		(rule__LetVarCS__Group__0)
+		{ after(grammarAccess.getLetVarCSAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRulePathNameCS
 entryRulePathNameCS
 :
@@ -550,6 +900,22 @@
 	restoreStackSize(stackSize);
 }
 
+// Rule CollectionKindCS
+ruleCollectionKindCS
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); }
+		('Collection')
+		{ after(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 rule__RootCS__Alternatives
 	@init {
 		int stackSize = keepStackSize();
@@ -583,9 +949,30 @@
 	)
 	|
 	(
-		{ before(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); }
-		(rule__PackageCS__ClassesAssignment_3_1)
-		{ after(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); }
+		{ before(grammarAccess.getPackageCSAccess().getClassifiersAssignment_3_1()); }
+		(rule__PackageCS__ClassifiersAssignment_3_1)
+		{ after(grammarAccess.getPackageCSAccess().getClassifiersAssignment_3_1()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ClassifierCS__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0()); }
+		ruleClassCS
+		{ after(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1()); }
+		ruleDatatypeCS
+		{ after(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1()); }
 	)
 ;
 finally {
@@ -613,6 +1000,81 @@
 	restoreStackSize(stackSize);
 }
 
+rule__PropertyCS__Alternatives_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0()); }
+		'attribute'
+		{ after(grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1()); }
+		'containment'
+		{ after(grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2()); }
+		'cross_reference'
+		{ after(grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Alternatives_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); }
+		(rule__MultiplicityCS__OptAssignment_1_0)
+		{ after(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); }
+		(rule__MultiplicityCS__MultAssignment_1_1)
+		{ after(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getGroup_1_2()); }
+		(rule__MultiplicityCS__Group_1_2__0)
+		{ after(grammarAccess.getMultiplicityCSAccess().getGroup_1_2()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Alternatives_1_2_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_2_2_0()); }
+		(rule__MultiplicityCS__UpperIntAssignment_1_2_2_0)
+		{ after(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_2_2_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_2_2_1()); }
+		(rule__MultiplicityCS__UpperMultAssignment_1_2_2_1)
+		{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_2_2_1()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 rule__LogicExpCS__OpAlternatives_1_1_0
 	@init {
 		int stackSize = keepStackSize();
@@ -661,15 +1123,69 @@
 	}
 :
 	(
-		{ before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0()); }
-		ruleNameExpCS
-		{ after(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0()); }
+		{ before(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); }
+		ruleSelfExpCS
+		{ after(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1()); }
+		{ before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); }
+		ruleNameExpCS
+		{ after(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); }
 		ruleLiteralExpCS
-		{ after(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1()); }
+		{ after(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); }
+		ruleLetExpCS
+		{ after(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NavigationExpCS__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); }
+		ruleLoopExpCS
+		{ after(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); }
+		ruleNameExpCS
+		{ after(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LoopExpCS__Alternatives
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); }
+		ruleCollectExpCS
+		{ after(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); }
+		ruleIterateExpCS
+		{ after(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); }
 	)
 ;
 finally {
@@ -688,15 +1204,21 @@
 	)
 	|
 	(
-		{ before(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); }
-		ruleStringLiteralExpCS
-		{ after(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); }
+		{ before(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); }
+		ruleBooleanLiteralExpCS
+		{ after(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); }
-		ruleBooleanLiteralExpCS
-		{ after(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); }
+		{ before(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); }
+		ruleNullLiteralExpCS
+		{ after(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); }
+		ruleCollectionLiteralExpCS
+		{ after(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); }
 	)
 ;
 finally {
@@ -1075,6 +1597,141 @@
 }
 
 
+rule__DatatypeCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__DatatypeCS__Group__0__Impl
+	rule__DatatypeCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0()); }
+	'datatype'
+	{ after(grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__DatatypeCS__Group__1__Impl
+	rule__DatatypeCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getDatatypeCSAccess().getNameAssignment_1()); }
+	(rule__DatatypeCS__NameAssignment_1)
+	{ after(grammarAccess.getDatatypeCSAccess().getNameAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__DatatypeCS__Group__2__Impl
+	rule__DatatypeCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getDatatypeCSAccess().getColonKeyword_2()); }
+	':'
+	{ after(grammarAccess.getDatatypeCSAccess().getColonKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__DatatypeCS__Group__3__Impl
+	rule__DatatypeCS__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getDatatypeCSAccess().getTypeNameAssignment_3()); }
+	(rule__DatatypeCS__TypeNameAssignment_3)
+	{ after(grammarAccess.getDatatypeCSAccess().getTypeNameAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__DatatypeCS__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4()); }
+	';'
+	{ after(grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
 rule__PropertyCS__Group__0
 	@init {
 		int stackSize = keepStackSize();
@@ -1093,9 +1750,9 @@
 	}
 :
 (
-	{ before(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); }
-	'prop'
-	{ after(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); }
+	{ before(grammarAccess.getPropertyCSAccess().getAlternatives_0()); }
+	(rule__PropertyCS__Alternatives_0)
+	{ after(grammarAccess.getPropertyCSAccess().getAlternatives_0()); }
 )
 ;
 finally {
@@ -1189,6 +1846,7 @@
 	}
 :
 	rule__PropertyCS__Group__4__Impl
+	rule__PropertyCS__Group__5
 ;
 finally {
 	restoreStackSize(stackSize);
@@ -1200,9 +1858,197 @@
 	}
 :
 (
-	{ before(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4()); }
+	{ before(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); }
+	(rule__PropertyCS__MultiplicityAssignment_4)?
+	{ after(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PropertyCS__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__PropertyCS__Group__5__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PropertyCS__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); }
 	';'
-	{ after(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4()); }
+	{ after(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__MultiplicityCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group__0__Impl
+	rule__MultiplicityCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); }
+	'['
+	{ after(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group__1__Impl
+	rule__MultiplicityCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); }
+	(rule__MultiplicityCS__Alternatives_1)
+	{ after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); }
+	']'
+	{ after(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__MultiplicityCS__Group_1_2__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group_1_2__0__Impl
+	rule__MultiplicityCS__Group_1_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group_1_2__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getLowerAssignment_1_2_0()); }
+	(rule__MultiplicityCS__LowerAssignment_1_2_0)
+	{ after(grammarAccess.getMultiplicityCSAccess().getLowerAssignment_1_2_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group_1_2__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group_1_2__1__Impl
+	rule__MultiplicityCS__Group_1_2__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group_1_2__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1()); }
+	'..'
+	{ after(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group_1_2__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__MultiplicityCS__Group_1_2__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__Group_1_2__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_2_2()); }
+	(rule__MultiplicityCS__Alternatives_1_2_2)
+	{ after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_2_2()); }
 )
 ;
 finally {
@@ -2172,9 +3018,738 @@
 	}
 :
 (
-	{ before(grammarAccess.getCallExpCSAccess().getNameExpAssignment_1_2()); }
-	(rule__CallExpCS__NameExpAssignment_1_2)
-	{ after(grammarAccess.getCallExpCSAccess().getNameExpAssignment_1_2()); }
+	{ before(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); }
+	(rule__CallExpCS__NavExpAssignment_1_2)
+	{ after(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SelfExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__SelfExpCS__Group__0__Impl
+	rule__SelfExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SelfExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); }
+	()
+	{ after(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SelfExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__SelfExpCS__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SelfExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); }
+	'self'
+	{ after(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CollectExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group__0__Impl
+	rule__CollectExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); }
+	'collect'
+	{ after(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group__1__Impl
+	rule__CollectExpCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); }
+	'('
+	{ after(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group__2__Impl
+	rule__CollectExpCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getGroup_2()); }
+	(rule__CollectExpCS__Group_2__0)?
+	{ after(grammarAccess.getCollectExpCSAccess().getGroup_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group__3__Impl
+	rule__CollectExpCS__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); }
+	(rule__CollectExpCS__ExpAssignment_3)
+	{ after(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); }
+	')'
+	{ after(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CollectExpCS__Group_2__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group_2__0__Impl
+	rule__CollectExpCS__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group_2__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); }
+	(rule__CollectExpCS__ItVarAssignment_2_0)
+	{ after(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group_2__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectExpCS__Group_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__Group_2__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); }
+	'|'
+	{ after(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IteratorVarCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IteratorVarCS__Group__0__Impl
+	rule__IteratorVarCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); }
+	(rule__IteratorVarCS__ItNameAssignment_0)
+	{ after(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IteratorVarCS__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIteratorVarCSAccess().getGroup_1()); }
+	(rule__IteratorVarCS__Group_1__0)?
+	{ after(grammarAccess.getIteratorVarCSAccess().getGroup_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IteratorVarCS__Group_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IteratorVarCS__Group_1__0__Impl
+	rule__IteratorVarCS__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); }
+	':'
+	{ after(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IteratorVarCS__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__Group_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); }
+	(rule__IteratorVarCS__ItTypeAssignment_1_1)
+	{ after(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__IterateExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__0__Impl
+	rule__IterateExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); }
+	'iterate'
+	{ after(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__1__Impl
+	rule__IterateExpCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); }
+	'('
+	{ after(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__2__Impl
+	rule__IterateExpCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); }
+	(rule__IterateExpCS__ItVarAssignment_2)
+	{ after(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__3__Impl
+	rule__IterateExpCS__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); }
+	';'
+	{ after(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__4__Impl
+	rule__IterateExpCS__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); }
+	(rule__IterateExpCS__AccVarAssignment_4)
+	{ after(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__5
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__5__Impl
+	rule__IterateExpCS__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__5__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); }
+	'|'
+	{ after(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__6__Impl
+	rule__IterateExpCS__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__6__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); }
+	(rule__IterateExpCS__ExpAssignment_6)
+	{ after(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__7
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__IterateExpCS__Group__7__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__Group__7__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); }
+	')'
+	{ after(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AccVarCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group__0__Impl
+	rule__AccVarCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); }
+	(rule__AccVarCS__AccNameAssignment_0)
+	{ after(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group__1__Impl
+	rule__AccVarCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getGroup_1()); }
+	(rule__AccVarCS__Group_1__0)?
+	{ after(grammarAccess.getAccVarCSAccess().getGroup_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group__2__Impl
+	rule__AccVarCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); }
+	'='
+	{ after(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); }
+	(rule__AccVarCS__AccInitExpAssignment_3)
+	{ after(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__AccVarCS__Group_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group_1__0__Impl
+	rule__AccVarCS__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); }
+	':'
+	{ after(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__AccVarCS__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__Group_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); }
+	(rule__AccVarCS__AccTypeAssignment_1_1)
+	{ after(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); }
 )
 ;
 finally {
@@ -2506,6 +4081,627 @@
 }
 
 
+rule__NullLiteralExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NullLiteralExpCS__Group__0__Impl
+	rule__NullLiteralExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NullLiteralExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); }
+	()
+	{ after(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NullLiteralExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__NullLiteralExpCS__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__NullLiteralExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); }
+	'null'
+	{ after(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CollectionLiteralExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralExpCS__Group__0__Impl
+	rule__CollectionLiteralExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); }
+	(rule__CollectionLiteralExpCS__KindAssignment_0)
+	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralExpCS__Group__1__Impl
+	rule__CollectionLiteralExpCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); }
+	'{'
+	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralExpCS__Group__2__Impl
+	rule__CollectionLiteralExpCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); }
+	(rule__CollectionLiteralExpCS__PartsAssignment_2)*
+	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralExpCS__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); }
+	'}'
+	{ after(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CollectionLiteralPartCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralPartCS__Group__0__Impl
+	rule__CollectionLiteralPartCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); }
+	(rule__CollectionLiteralPartCS__FirstAssignment_0)
+	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralPartCS__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); }
+	(rule__CollectionLiteralPartCS__Group_1__0)?
+	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__CollectionLiteralPartCS__Group_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralPartCS__Group_1__0__Impl
+	rule__CollectionLiteralPartCS__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); }
+	'..'
+	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__CollectionLiteralPartCS__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__Group_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); }
+	(rule__CollectionLiteralPartCS__LastAssignment_1_1)
+	{ after(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__LetExpCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group__0__Impl
+	rule__LetExpCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); }
+	'let'
+	{ after(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group__1__Impl
+	rule__LetExpCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); }
+	(rule__LetExpCS__LetVarsAssignment_1)
+	{ after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group__2__Impl
+	rule__LetExpCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getGroup_2()); }
+	(rule__LetExpCS__Group_2__0)*
+	{ after(grammarAccess.getLetExpCSAccess().getGroup_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group__3__Impl
+	rule__LetExpCS__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getInKeyword_3()); }
+	'in'
+	{ after(grammarAccess.getLetExpCSAccess().getInKeyword_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group__4__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); }
+	(rule__LetExpCS__InExpAssignment_4)
+	{ after(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__LetExpCS__Group_2__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group_2__0__Impl
+	rule__LetExpCS__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group_2__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); }
+	','
+	{ after(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group_2__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetExpCS__Group_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__Group_2__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); }
+	(rule__LetExpCS__LetVarsAssignment_2_1)
+	{ after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__LetVarCS__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group__0__Impl
+	rule__LetVarCS__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); }
+	(rule__LetVarCS__NameAssignment_0)
+	{ after(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group__1__Impl
+	rule__LetVarCS__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getGroup_1()); }
+	(rule__LetVarCS__Group_1__0)?
+	{ after(grammarAccess.getLetVarCSAccess().getGroup_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group__2__Impl
+	rule__LetVarCS__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__2__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); }
+	'='
+	{ after(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group__3__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); }
+	(rule__LetVarCS__InitExpAssignment_3)
+	{ after(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__LetVarCS__Group_1__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group_1__0__Impl
+	rule__LetVarCS__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group_1__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); }
+	':'
+	{ after(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group_1__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__LetVarCS__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__Group_1__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); }
+	(rule__LetVarCS__TypeRefAssignment_1_1)
+	{ after(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
 rule__PathNameCS__Group__0
 	@init {
 		int stackSize = keepStackSize();
@@ -2524,9 +4720,9 @@
 	}
 :
 (
-	{ before(grammarAccess.getPathNameCSAccess().getPathAssignment_0()); }
-	(rule__PathNameCS__PathAssignment_0)
-	{ after(grammarAccess.getPathNameCSAccess().getPathAssignment_0()); }
+	{ before(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); }
+	(rule__PathNameCS__PathElementsAssignment_0)
+	{ after(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); }
 )
 ;
 finally {
@@ -2674,15 +4870,15 @@
 	restoreStackSize(stackSize);
 }
 
-rule__PackageCS__ClassesAssignment_3_1
+rule__PackageCS__ClassifiersAssignment_3_1
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); }
-		ruleClassCS
-		{ after(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); }
+		{ before(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0()); }
+		ruleClassifierCS
+		{ after(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0()); }
 	)
 ;
 finally {
@@ -2749,6 +4945,36 @@
 	restoreStackSize(stackSize);
 }
 
+rule__DatatypeCS__NameAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0()); }
+		RULE_ID
+		{ after(grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DatatypeCS__TypeNameAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0()); }
+		RULE_STRING
+		{ after(grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 rule__PropertyCS__NameAssignment_1
 	@init {
 		int stackSize = keepStackSize();
@@ -2779,6 +5005,108 @@
 	restoreStackSize(stackSize);
 }
 
+rule__PropertyCS__MultiplicityAssignment_4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); }
+		ruleMultiplicityCS
+		{ after(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__OptAssignment_1_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
+		(
+			{ before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
+			'?'
+			{ after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
+		)
+		{ after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__MultAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
+		(
+			{ before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
+			'*'
+			{ after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
+		)
+		{ after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__LowerAssignment_1_2_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0()); }
+		RULE_INT
+		{ after(grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__UpperIntAssignment_1_2_2_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0()); }
+		RULE_INT
+		{ after(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MultiplicityCS__UpperMultAssignment_1_2_2_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); }
+		(
+			{ before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); }
+			'*'
+			{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); }
+		)
+		{ after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 rule__OperationCS__NameAssignment_1
 	@init {
 		int stackSize = keepStackSize();
@@ -2974,15 +5302,165 @@
 	restoreStackSize(stackSize);
 }
 
-rule__CallExpCS__NameExpAssignment_1_2
+rule__CallExpCS__NavExpAssignment_1_2
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0()); }
-		ruleNameExpCS
-		{ after(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0()); }
+		{ before(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); }
+		ruleNavigationExpCS
+		{ after(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__ItVarAssignment_2_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); }
+		ruleIteratorVarCS
+		{ after(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectExpCS__ExpAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__ItNameAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); }
+		RULE_ID
+		{ after(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IteratorVarCS__ItTypeAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); }
+		rulePathNameCS
+		{ after(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__ItVarAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); }
+		ruleIteratorVarCS
+		{ after(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__AccVarAssignment_4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); }
+		ruleAccVarCS
+		{ after(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__IterateExpCS__ExpAssignment_6
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__AccNameAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); }
+		RULE_ID
+		{ after(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__AccTypeAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); }
+		rulePathNameCS
+		{ after(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__AccVarCS__AccInitExpAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); }
 	)
 ;
 finally {
@@ -3064,21 +5542,6 @@
 	restoreStackSize(stackSize);
 }
 
-rule__StringLiteralExpCS__StringSymbolAssignment
-	@init {
-		int stackSize = keepStackSize();
-	}
-:
-	(
-		{ before(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0()); }
-		RULE_STRING
-		{ after(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0()); }
-	)
-;
-finally {
-	restoreStackSize(stackSize);
-}
-
 rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0
 	@init {
 		int stackSize = keepStackSize();
@@ -3098,15 +5561,165 @@
 	restoreStackSize(stackSize);
 }
 
-rule__PathNameCS__PathAssignment_0
+rule__CollectionLiteralExpCS__KindAssignment_0
 	@init {
 		int stackSize = keepStackSize();
 	}
 :
 	(
-		{ before(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0()); }
+		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); }
+		ruleCollectionKindCS
+		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralExpCS__PartsAssignment_2
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); }
+		ruleCollectionLiteralPartCS
+		{ after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__FirstAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__CollectionLiteralPartCS__LastAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__LetVarsAssignment_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); }
+		ruleLetVarCS
+		{ after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__LetVarsAssignment_2_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); }
+		ruleLetVarCS
+		{ after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetExpCS__InExpAssignment_4
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__NameAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); }
+		RULE_ID
+		{ after(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__TypeRefAssignment_1_1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); }
+		rulePathNameCS
+		{ after(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__LetVarCS__InitExpAssignment_3
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); }
+		ruleExpCS
+		{ after(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PathNameCS__PathElementsAssignment_0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	(
+		{ before(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); }
 		rulePathElementCS
-		{ after(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0()); }
+		{ after(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); }
 	)
 ;
 finally {
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.tokens b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.tokens
index 9b69b6b..4df24e8 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.tokens
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCS.tokens
@@ -1,30 +1,46 @@
-'('=25
-')'=26
-','=27
-'->'=14
-'.'=13
-':'=22
-'::'=30
-';'=23
-'<>'=12
-'='=11
-'class'=19
-'context'=28
-'extends'=20
-'false'=15
-'inv'=29
-'op'=24
-'package'=16
-'prop'=21
-'true'=31
-'{'=17
-'}'=18
+'('=32
+')'=33
+'*'=46
+','=34
+'->'=18
+'.'=17
+'..'=30
+':'=26
+'::'=44
+';'=27
+'<>'=16
+'='=15
+'?'=45
+'Collection'=11
+'['=28
+']'=29
+'attribute'=12
+'class'=23
+'collect'=38
+'containment'=13
+'context'=35
+'cross_reference'=14
+'datatype'=25
+'extends'=24
+'false'=19
+'in'=43
+'inv'=36
+'iterate'=40
+'let'=42
+'null'=41
+'op'=31
+'package'=20
+'self'=37
+'true'=47
+'{'=21
+'|'=39
+'}'=22
 RULE_ANY_OTHER=10
 RULE_ID=4
-RULE_INT=5
+RULE_INT=6
 RULE_ML_COMMENT=7
 RULE_SL_COMMENT=8
-RULE_STRING=6
+RULE_STRING=5
 RULE_WS=9
 T__11=11
 T__12=12
@@ -47,3 +63,19 @@
 T__29=29
 T__30=30
 T__31=31
+T__32=32
+T__33=33
+T__34=34
+T__35=35
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+T__40=40
+T__41=41
+T__42=42
+T__43=43
+T__44=44
+T__45=45
+T__46=46
+T__47=47
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSLexer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSLexer.java
index 0514d47..8498e16 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSLexer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSLexer.java
@@ -12,8 +12,6 @@
 
 @SuppressWarnings("all")
 public class InternalMiniOCLCSLexer extends Lexer {
-    public static final int RULE_STRING=6;
-    public static final int RULE_SL_COMMENT=8;
     public static final int T__19=19;
     public static final int T__15=15;
     public static final int T__16=16;
@@ -23,16 +21,11 @@
     public static final int T__12=12;
     public static final int T__13=13;
     public static final int T__14=14;
-    public static final int EOF=-1;
-    public static final int T__30=30;
-    public static final int T__31=31;
     public static final int RULE_ID=4;
-    public static final int RULE_WS=9;
-    public static final int RULE_ANY_OTHER=10;
     public static final int T__26=26;
     public static final int T__27=27;
     public static final int T__28=28;
-    public static final int RULE_INT=5;
+    public static final int RULE_INT=6;
     public static final int T__29=29;
     public static final int T__22=22;
     public static final int RULE_ML_COMMENT=7;
@@ -41,6 +34,29 @@
     public static final int T__25=25;
     public static final int T__20=20;
     public static final int T__21=21;
+    public static final int RULE_STRING=5;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__33=33;
+    public static final int T__34=34;
+    public static final int T__35=35;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__42=42;
+    public static final int T__43=43;
 
     // delegates
     // delegators
@@ -60,10 +76,11 @@
         try {
             int _type = T__11;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:11:7: ( '=' )
-            // InternalMiniOCLCS.g:11:9: '='
+            // InternalMiniOCLCS.g:11:7: ( 'Collection' )
+            // InternalMiniOCLCS.g:11:9: 'Collection'
             {
-            match('='); 
+            match("Collection"); 
+
 
             }
 
@@ -80,10 +97,10 @@
         try {
             int _type = T__12;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:12:7: ( '<>' )
-            // InternalMiniOCLCS.g:12:9: '<>'
+            // InternalMiniOCLCS.g:12:7: ( 'attribute' )
+            // InternalMiniOCLCS.g:12:9: 'attribute'
             {
-            match("<>"); 
+            match("attribute"); 
 
 
             }
@@ -101,10 +118,11 @@
         try {
             int _type = T__13;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:13:7: ( '.' )
-            // InternalMiniOCLCS.g:13:9: '.'
+            // InternalMiniOCLCS.g:13:7: ( 'containment' )
+            // InternalMiniOCLCS.g:13:9: 'containment'
             {
-            match('.'); 
+            match("containment"); 
+
 
             }
 
@@ -121,10 +139,10 @@
         try {
             int _type = T__14;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:14:7: ( '->' )
-            // InternalMiniOCLCS.g:14:9: '->'
+            // InternalMiniOCLCS.g:14:7: ( 'cross_reference' )
+            // InternalMiniOCLCS.g:14:9: 'cross_reference'
             {
-            match("->"); 
+            match("cross_reference"); 
 
 
             }
@@ -142,11 +160,10 @@
         try {
             int _type = T__15;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:15:7: ( 'false' )
-            // InternalMiniOCLCS.g:15:9: 'false'
+            // InternalMiniOCLCS.g:15:7: ( '=' )
+            // InternalMiniOCLCS.g:15:9: '='
             {
-            match("false"); 
-
+            match('='); 
 
             }
 
@@ -163,10 +180,10 @@
         try {
             int _type = T__16;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:16:7: ( 'package' )
-            // InternalMiniOCLCS.g:16:9: 'package'
+            // InternalMiniOCLCS.g:16:7: ( '<>' )
+            // InternalMiniOCLCS.g:16:9: '<>'
             {
-            match("package"); 
+            match("<>"); 
 
 
             }
@@ -184,10 +201,10 @@
         try {
             int _type = T__17;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:17:7: ( '{' )
-            // InternalMiniOCLCS.g:17:9: '{'
+            // InternalMiniOCLCS.g:17:7: ( '.' )
+            // InternalMiniOCLCS.g:17:9: '.'
             {
-            match('{'); 
+            match('.'); 
 
             }
 
@@ -204,10 +221,11 @@
         try {
             int _type = T__18;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:18:7: ( '}' )
-            // InternalMiniOCLCS.g:18:9: '}'
+            // InternalMiniOCLCS.g:18:7: ( '->' )
+            // InternalMiniOCLCS.g:18:9: '->'
             {
-            match('}'); 
+            match("->"); 
+
 
             }
 
@@ -224,10 +242,10 @@
         try {
             int _type = T__19;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:19:7: ( 'class' )
-            // InternalMiniOCLCS.g:19:9: 'class'
+            // InternalMiniOCLCS.g:19:7: ( 'false' )
+            // InternalMiniOCLCS.g:19:9: 'false'
             {
-            match("class"); 
+            match("false"); 
 
 
             }
@@ -245,10 +263,10 @@
         try {
             int _type = T__20;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:20:7: ( 'extends' )
-            // InternalMiniOCLCS.g:20:9: 'extends'
+            // InternalMiniOCLCS.g:20:7: ( 'package' )
+            // InternalMiniOCLCS.g:20:9: 'package'
             {
-            match("extends"); 
+            match("package"); 
 
 
             }
@@ -266,11 +284,10 @@
         try {
             int _type = T__21;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:21:7: ( 'prop' )
-            // InternalMiniOCLCS.g:21:9: 'prop'
+            // InternalMiniOCLCS.g:21:7: ( '{' )
+            // InternalMiniOCLCS.g:21:9: '{'
             {
-            match("prop"); 
-
+            match('{'); 
 
             }
 
@@ -287,10 +304,10 @@
         try {
             int _type = T__22;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:22:7: ( ':' )
-            // InternalMiniOCLCS.g:22:9: ':'
+            // InternalMiniOCLCS.g:22:7: ( '}' )
+            // InternalMiniOCLCS.g:22:9: '}'
             {
-            match(':'); 
+            match('}'); 
 
             }
 
@@ -307,10 +324,11 @@
         try {
             int _type = T__23;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:23:7: ( ';' )
-            // InternalMiniOCLCS.g:23:9: ';'
+            // InternalMiniOCLCS.g:23:7: ( 'class' )
+            // InternalMiniOCLCS.g:23:9: 'class'
             {
-            match(';'); 
+            match("class"); 
+
 
             }
 
@@ -327,10 +345,10 @@
         try {
             int _type = T__24;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:24:7: ( 'op' )
-            // InternalMiniOCLCS.g:24:9: 'op'
+            // InternalMiniOCLCS.g:24:7: ( 'extends' )
+            // InternalMiniOCLCS.g:24:9: 'extends'
             {
-            match("op"); 
+            match("extends"); 
 
 
             }
@@ -348,10 +366,11 @@
         try {
             int _type = T__25;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:25:7: ( '(' )
-            // InternalMiniOCLCS.g:25:9: '('
+            // InternalMiniOCLCS.g:25:7: ( 'datatype' )
+            // InternalMiniOCLCS.g:25:9: 'datatype'
             {
-            match('('); 
+            match("datatype"); 
+
 
             }
 
@@ -368,10 +387,10 @@
         try {
             int _type = T__26;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:26:7: ( ')' )
-            // InternalMiniOCLCS.g:26:9: ')'
+            // InternalMiniOCLCS.g:26:7: ( ':' )
+            // InternalMiniOCLCS.g:26:9: ':'
             {
-            match(')'); 
+            match(':'); 
 
             }
 
@@ -388,10 +407,10 @@
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:27:7: ( ',' )
-            // InternalMiniOCLCS.g:27:9: ','
+            // InternalMiniOCLCS.g:27:7: ( ';' )
+            // InternalMiniOCLCS.g:27:9: ';'
             {
-            match(','); 
+            match(';'); 
 
             }
 
@@ -408,11 +427,10 @@
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:28:7: ( 'context' )
-            // InternalMiniOCLCS.g:28:9: 'context'
+            // InternalMiniOCLCS.g:28:7: ( '[' )
+            // InternalMiniOCLCS.g:28:9: '['
             {
-            match("context"); 
-
+            match('['); 
 
             }
 
@@ -429,11 +447,10 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:29:7: ( 'inv' )
-            // InternalMiniOCLCS.g:29:9: 'inv'
+            // InternalMiniOCLCS.g:29:7: ( ']' )
+            // InternalMiniOCLCS.g:29:9: ']'
             {
-            match("inv"); 
-
+            match(']'); 
 
             }
 
@@ -450,10 +467,10 @@
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:30:7: ( '::' )
-            // InternalMiniOCLCS.g:30:9: '::'
+            // InternalMiniOCLCS.g:30:7: ( '..' )
+            // InternalMiniOCLCS.g:30:9: '..'
             {
-            match("::"); 
+            match(".."); 
 
 
             }
@@ -471,10 +488,10 @@
         try {
             int _type = T__31;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:31:7: ( 'true' )
-            // InternalMiniOCLCS.g:31:9: 'true'
+            // InternalMiniOCLCS.g:31:7: ( 'op' )
+            // InternalMiniOCLCS.g:31:9: 'op'
             {
-            match("true"); 
+            match("op"); 
 
 
             }
@@ -487,15 +504,345 @@
     }
     // $ANTLR end "T__31"
 
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:32:7: ( '(' )
+            // InternalMiniOCLCS.g:32:9: '('
+            {
+            match('('); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:33:7: ( ')' )
+            // InternalMiniOCLCS.g:33:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:34:7: ( ',' )
+            // InternalMiniOCLCS.g:34:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "T__35"
+    public final void mT__35() throws RecognitionException {
+        try {
+            int _type = T__35;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:35:7: ( 'context' )
+            // InternalMiniOCLCS.g:35:9: 'context'
+            {
+            match("context"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__35"
+
+    // $ANTLR start "T__36"
+    public final void mT__36() throws RecognitionException {
+        try {
+            int _type = T__36;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:36:7: ( 'inv' )
+            // InternalMiniOCLCS.g:36:9: 'inv'
+            {
+            match("inv"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__36"
+
+    // $ANTLR start "T__37"
+    public final void mT__37() throws RecognitionException {
+        try {
+            int _type = T__37;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:37:7: ( 'self' )
+            // InternalMiniOCLCS.g:37:9: 'self'
+            {
+            match("self"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__37"
+
+    // $ANTLR start "T__38"
+    public final void mT__38() throws RecognitionException {
+        try {
+            int _type = T__38;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:38:7: ( 'collect' )
+            // InternalMiniOCLCS.g:38:9: 'collect'
+            {
+            match("collect"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__38"
+
+    // $ANTLR start "T__39"
+    public final void mT__39() throws RecognitionException {
+        try {
+            int _type = T__39;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:39:7: ( '|' )
+            // InternalMiniOCLCS.g:39:9: '|'
+            {
+            match('|'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "T__40"
+    public final void mT__40() throws RecognitionException {
+        try {
+            int _type = T__40;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:40:7: ( 'iterate' )
+            // InternalMiniOCLCS.g:40:9: 'iterate'
+            {
+            match("iterate"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__40"
+
+    // $ANTLR start "T__41"
+    public final void mT__41() throws RecognitionException {
+        try {
+            int _type = T__41;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:41:7: ( 'null' )
+            // InternalMiniOCLCS.g:41:9: 'null'
+            {
+            match("null"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__41"
+
+    // $ANTLR start "T__42"
+    public final void mT__42() throws RecognitionException {
+        try {
+            int _type = T__42;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:42:7: ( 'let' )
+            // InternalMiniOCLCS.g:42:9: 'let'
+            {
+            match("let"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__42"
+
+    // $ANTLR start "T__43"
+    public final void mT__43() throws RecognitionException {
+        try {
+            int _type = T__43;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:43:7: ( 'in' )
+            // InternalMiniOCLCS.g:43:9: 'in'
+            {
+            match("in"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__43"
+
+    // $ANTLR start "T__44"
+    public final void mT__44() throws RecognitionException {
+        try {
+            int _type = T__44;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:44:7: ( '::' )
+            // InternalMiniOCLCS.g:44:9: '::'
+            {
+            match("::"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__44"
+
+    // $ANTLR start "T__45"
+    public final void mT__45() throws RecognitionException {
+        try {
+            int _type = T__45;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:45:7: ( '?' )
+            // InternalMiniOCLCS.g:45:9: '?'
+            {
+            match('?'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__45"
+
+    // $ANTLR start "T__46"
+    public final void mT__46() throws RecognitionException {
+        try {
+            int _type = T__46;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:46:7: ( '*' )
+            // InternalMiniOCLCS.g:46:9: '*'
+            {
+            match('*'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__46"
+
+    // $ANTLR start "T__47"
+    public final void mT__47() throws RecognitionException {
+        try {
+            int _type = T__47;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:47:7: ( 'true' )
+            // InternalMiniOCLCS.g:47:9: 'true'
+            {
+            match("true"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__47"
+
     // $ANTLR start "RULE_ID"
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3146:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // InternalMiniOCLCS.g:3146:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalMiniOCLCS.g:5759:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalMiniOCLCS.g:5759:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // InternalMiniOCLCS.g:3146:11: ( '^' )?
+            // InternalMiniOCLCS.g:5759:11: ( '^' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -504,7 +851,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // InternalMiniOCLCS.g:3146:11: '^'
+                    // InternalMiniOCLCS.g:5759:11: '^'
                     {
                     match('^'); 
 
@@ -522,7 +869,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalMiniOCLCS.g:3146:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalMiniOCLCS.g:5759:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop2:
             do {
                 int alt2=2;
@@ -571,10 +918,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3148:10: ( ( '0' .. '9' )+ )
-            // InternalMiniOCLCS.g:3148:12: ( '0' .. '9' )+
+            // InternalMiniOCLCS.g:5761:10: ( ( '0' .. '9' )+ )
+            // InternalMiniOCLCS.g:5761:12: ( '0' .. '9' )+
             {
-            // InternalMiniOCLCS.g:3148:12: ( '0' .. '9' )+
+            // InternalMiniOCLCS.g:5761:12: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -588,7 +935,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:3148:13: '0' .. '9'
+            	    // InternalMiniOCLCS.g:5761:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -620,10 +967,10 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3150:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // InternalMiniOCLCS.g:3150:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalMiniOCLCS.g:5763:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalMiniOCLCS.g:5763:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // InternalMiniOCLCS.g:3150:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalMiniOCLCS.g:5763:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -641,10 +988,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalMiniOCLCS.g:3150:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // InternalMiniOCLCS.g:5763:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"'); 
-                    // InternalMiniOCLCS.g:3150:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // InternalMiniOCLCS.g:5763:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop4:
                     do {
                         int alt4=3;
@@ -660,7 +1007,7 @@
 
                         switch (alt4) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:3150:21: '\\\\' .
+                    	    // InternalMiniOCLCS.g:5763:21: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -668,7 +1015,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalMiniOCLCS.g:3150:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    // InternalMiniOCLCS.g:5763:28: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -693,10 +1040,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:3150:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // InternalMiniOCLCS.g:5763:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\''); 
-                    // InternalMiniOCLCS.g:3150:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // InternalMiniOCLCS.g:5763:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -712,7 +1059,7 @@
 
                         switch (alt5) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:3150:54: '\\\\' .
+                    	    // InternalMiniOCLCS.g:5763:54: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -720,7 +1067,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalMiniOCLCS.g:3150:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // InternalMiniOCLCS.g:5763:61: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -763,12 +1110,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3152:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // InternalMiniOCLCS.g:3152:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // InternalMiniOCLCS.g:5765:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalMiniOCLCS.g:5765:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // InternalMiniOCLCS.g:3152:24: ( options {greedy=false; } : . )*
+            // InternalMiniOCLCS.g:5765:24: ( options {greedy=false; } : . )*
             loop7:
             do {
                 int alt7=2;
@@ -793,7 +1140,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:3152:52: .
+            	    // InternalMiniOCLCS.g:5765:52: .
             	    {
             	    matchAny(); 
 
@@ -823,12 +1170,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3154:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalMiniOCLCS.g:3154:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalMiniOCLCS.g:5767:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalMiniOCLCS.g:5767:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalMiniOCLCS.g:3154:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalMiniOCLCS.g:5767:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop8:
             do {
                 int alt8=2;
@@ -841,7 +1188,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:3154:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalMiniOCLCS.g:5767: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();
@@ -861,7 +1208,7 @@
                 }
             } while (true);
 
-            // InternalMiniOCLCS.g:3154:40: ( ( '\\r' )? '\\n' )?
+            // InternalMiniOCLCS.g:5767:40: ( ( '\\r' )? '\\n' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -870,9 +1217,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalMiniOCLCS.g:3154:41: ( '\\r' )? '\\n'
+                    // InternalMiniOCLCS.g:5767:41: ( '\\r' )? '\\n'
                     {
-                    // InternalMiniOCLCS.g:3154:41: ( '\\r' )?
+                    // InternalMiniOCLCS.g:5767:41: ( '\\r' )?
                     int alt9=2;
                     int LA9_0 = input.LA(1);
 
@@ -881,7 +1228,7 @@
                     }
                     switch (alt9) {
                         case 1 :
-                            // InternalMiniOCLCS.g:3154:41: '\\r'
+                            // InternalMiniOCLCS.g:5767:41: '\\r'
                             {
                             match('\r'); 
 
@@ -913,10 +1260,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3156:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalMiniOCLCS.g:3156:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalMiniOCLCS.g:5769:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalMiniOCLCS.g:5769:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalMiniOCLCS.g:3156:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalMiniOCLCS.g:5769:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt11=0;
             loop11:
             do {
@@ -970,8 +1317,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:3158:16: ( . )
-            // InternalMiniOCLCS.g:3158:18: .
+            // InternalMiniOCLCS.g:5771:16: ( . )
+            // InternalMiniOCLCS.g:5771:18: .
             {
             matchAny(); 
 
@@ -986,8 +1333,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalMiniOCLCS.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=28;
+        // InternalMiniOCLCS.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=44;
         alt12 = dfa12.predict(input);
         switch (alt12) {
             case 1 :
@@ -1138,49 +1485,161 @@
                 }
                 break;
             case 22 :
-                // InternalMiniOCLCS.g:1:136: RULE_ID
+                // InternalMiniOCLCS.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // InternalMiniOCLCS.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // InternalMiniOCLCS.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // InternalMiniOCLCS.g:1:154: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 26 :
+                // InternalMiniOCLCS.g:1:160: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 27 :
+                // InternalMiniOCLCS.g:1:166: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 28 :
+                // InternalMiniOCLCS.g:1:172: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 29 :
+                // InternalMiniOCLCS.g:1:178: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 30 :
+                // InternalMiniOCLCS.g:1:184: T__40
+                {
+                mT__40(); 
+
+                }
+                break;
+            case 31 :
+                // InternalMiniOCLCS.g:1:190: T__41
+                {
+                mT__41(); 
+
+                }
+                break;
+            case 32 :
+                // InternalMiniOCLCS.g:1:196: T__42
+                {
+                mT__42(); 
+
+                }
+                break;
+            case 33 :
+                // InternalMiniOCLCS.g:1:202: T__43
+                {
+                mT__43(); 
+
+                }
+                break;
+            case 34 :
+                // InternalMiniOCLCS.g:1:208: T__44
+                {
+                mT__44(); 
+
+                }
+                break;
+            case 35 :
+                // InternalMiniOCLCS.g:1:214: T__45
+                {
+                mT__45(); 
+
+                }
+                break;
+            case 36 :
+                // InternalMiniOCLCS.g:1:220: T__46
+                {
+                mT__46(); 
+
+                }
+                break;
+            case 37 :
+                // InternalMiniOCLCS.g:1:226: T__47
+                {
+                mT__47(); 
+
+                }
+                break;
+            case 38 :
+                // InternalMiniOCLCS.g:1:232: RULE_ID
                 {
                 mRULE_ID(); 
 
                 }
                 break;
-            case 23 :
-                // InternalMiniOCLCS.g:1:144: RULE_INT
+            case 39 :
+                // InternalMiniOCLCS.g:1:240: RULE_INT
                 {
                 mRULE_INT(); 
 
                 }
                 break;
-            case 24 :
-                // InternalMiniOCLCS.g:1:153: RULE_STRING
+            case 40 :
+                // InternalMiniOCLCS.g:1:249: RULE_STRING
                 {
                 mRULE_STRING(); 
 
                 }
                 break;
-            case 25 :
-                // InternalMiniOCLCS.g:1:165: RULE_ML_COMMENT
+            case 41 :
+                // InternalMiniOCLCS.g:1:261: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT(); 
 
                 }
                 break;
-            case 26 :
-                // InternalMiniOCLCS.g:1:181: RULE_SL_COMMENT
+            case 42 :
+                // InternalMiniOCLCS.g:1:277: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT(); 
 
                 }
                 break;
-            case 27 :
-                // InternalMiniOCLCS.g:1:197: RULE_WS
+            case 43 :
+                // InternalMiniOCLCS.g:1:293: RULE_WS
                 {
                 mRULE_WS(); 
 
                 }
                 break;
-            case 28 :
-                // InternalMiniOCLCS.g:1:205: RULE_ANY_OTHER
+            case 44 :
+                // InternalMiniOCLCS.g:1:301: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -1194,106 +1653,194 @@
 
     protected DFA12 dfa12 = new DFA12(this);
     static final String DFA12_eotS =
-        "\2\uffff\1\32\1\uffff\1\32\2\40\2\uffff\2\40\1\51\1\uffff\1\40\3\uffff\2\40\1\32\2\uffff\3\32\6\uffff\1\40\1\uffff\2\40\2\uffff\3\40\3\uffff\1\74\3\uffff\2\40\5\uffff\6\40\1\uffff\1\105\3\40\1\111\3\40\1\uffff\1\115\1\116\1\40\1\uffff\1\120\2\40\2\uffff\1\40\1\uffff\2\40\1\126\1\127\1\130\3\uffff";
+        "\1\uffff\3\47\1\uffff\1\45\1\57\1\45\2\47\2\uffff\2\47\1\70\3\uffff\1\47\3\uffff\2\47\1\uffff\2\47\2\uffff\1\47\1\45\2\uffff\3\45\2\uffff\1\47\1\uffff\4\47\5\uffff\2\47\2\uffff\2\47\5\uffff\1\130\3\uffff\1\132\2\47\1\uffff\2\47\2\uffff\1\47\5\uffff\12\47\1\uffff\1\152\1\uffff\3\47\1\156\13\47\1\uffff\1\47\1\174\1\175\1\uffff\1\176\6\47\1\u0085\1\u0086\4\47\3\uffff\6\47\2\uffff\7\47\1\u0098\1\u0099\1\47\1\u009b\1\u009c\1\47\1\u009e\3\47\2\uffff\1\47\2\uffff\1\u00a3\1\uffff\1\47\1\u00a5\2\47\1\uffff\1\u00a8\1\uffff\2\47\1\uffff\1\u00ab\1\47\1\uffff\3\47\1\u00b0\1\uffff";
     static final String DFA12_eofS =
-        "\131\uffff";
+        "\u00b1\uffff";
     static final String DFA12_minS =
-        "\1\0\1\uffff\1\76\1\uffff\1\76\2\141\2\uffff\1\154\1\170\1\72\1\uffff\1\160\3\uffff\1\156\1\162\1\101\2\uffff\2\0\1\52\6\uffff\1\154\1\uffff\1\143\1\157\2\uffff\1\141\1\156\1\164\3\uffff\1\60\3\uffff\1\166\1\165\5\uffff\1\163\1\153\1\160\1\163\1\164\1\145\1\uffff\1\60\2\145\1\141\1\60\1\163\1\145\1\156\1\uffff\2\60\1\147\1\uffff\1\60\1\170\1\144\2\uffff\1\145\1\uffff\1\164\1\163\3\60\3\uffff";
+        "\1\0\1\157\1\164\1\154\1\uffff\1\76\1\56\1\76\2\141\2\uffff\1\170\1\141\1\72\3\uffff\1\160\3\uffff\1\156\1\145\1\uffff\1\165\1\145\2\uffff\1\162\1\101\2\uffff\2\0\1\52\2\uffff\1\154\1\uffff\1\164\1\154\1\157\1\141\5\uffff\1\154\1\143\2\uffff\2\164\5\uffff\1\60\3\uffff\1\60\1\145\1\154\1\uffff\1\154\1\164\2\uffff\1\165\5\uffff\1\154\1\162\1\164\1\154\3\163\1\153\1\145\1\141\1\uffff\1\60\1\uffff\1\162\1\146\1\154\1\60\2\145\1\151\1\141\1\145\2\163\1\145\1\141\1\156\1\164\1\uffff\1\141\2\60\1\uffff\1\60\1\143\1\142\1\151\1\170\1\143\1\137\2\60\1\147\1\144\1\171\1\164\3\uffff\1\164\1\165\1\156\2\164\1\162\2\uffff\1\145\1\163\1\160\1\145\1\151\1\164\1\155\2\60\1\145\2\60\1\145\1\60\1\157\2\145\2\uffff\1\146\2\uffff\1\60\1\uffff\1\156\1\60\1\156\1\145\1\uffff\1\60\1\uffff\1\164\1\162\1\uffff\1\60\1\145\1\uffff\1\156\1\143\1\145\1\60\1\uffff";
     static final String DFA12_maxS =
-        "\1\uffff\1\uffff\1\76\1\uffff\1\76\1\141\1\162\2\uffff\1\157\1\170\1\72\1\uffff\1\160\3\uffff\1\156\1\162\1\172\2\uffff\2\uffff\1\57\6\uffff\1\154\1\uffff\1\143\1\157\2\uffff\1\141\1\156\1\164\3\uffff\1\172\3\uffff\1\166\1\165\5\uffff\1\163\1\153\1\160\1\163\1\164\1\145\1\uffff\1\172\2\145\1\141\1\172\1\163\1\145\1\156\1\uffff\2\172\1\147\1\uffff\1\172\1\170\1\144\2\uffff\1\145\1\uffff\1\164\1\163\3\172\3\uffff";
+        "\1\uffff\1\157\1\164\1\162\1\uffff\1\76\1\56\1\76\2\141\2\uffff\1\170\1\141\1\72\3\uffff\1\160\3\uffff\1\164\1\145\1\uffff\1\165\1\145\2\uffff\1\162\1\172\2\uffff\2\uffff\1\57\2\uffff\1\154\1\uffff\1\164\1\156\1\157\1\141\5\uffff\1\154\1\143\2\uffff\2\164\5\uffff\1\172\3\uffff\1\172\1\145\1\154\1\uffff\1\154\1\164\2\uffff\1\165\5\uffff\1\154\1\162\1\164\1\154\3\163\1\153\1\145\1\141\1\uffff\1\172\1\uffff\1\162\1\146\1\154\1\172\2\145\1\151\2\145\2\163\1\145\1\141\1\156\1\164\1\uffff\1\141\2\172\1\uffff\1\172\1\143\1\142\1\151\1\170\1\143\1\137\2\172\1\147\1\144\1\171\1\164\3\uffff\1\164\1\165\1\156\2\164\1\162\2\uffff\1\145\1\163\1\160\1\145\1\151\1\164\1\155\2\172\1\145\2\172\1\145\1\172\1\157\2\145\2\uffff\1\146\2\uffff\1\172\1\uffff\1\156\1\172\1\156\1\145\1\uffff\1\172\1\uffff\1\164\1\162\1\uffff\1\172\1\145\1\uffff\1\156\1\143\1\145\1\172\1\uffff";
     static final String DFA12_acceptS =
-        "\1\uffff\1\1\1\uffff\1\3\3\uffff\1\7\1\10\3\uffff\1\15\1\uffff\1\17\1\20\1\21\3\uffff\1\26\1\27\3\uffff\1\33\1\34\1\1\1\2\1\3\1\4\1\uffff\1\26\2\uffff\1\7\1\10\3\uffff\1\24\1\14\1\15\1\uffff\1\17\1\20\1\21\2\uffff\1\27\1\30\1\31\1\32\1\33\6\uffff\1\16\10\uffff\1\23\3\uffff\1\13\3\uffff\1\25\1\5\1\uffff\1\11\5\uffff\1\6\1\22\1\12";
+        "\4\uffff\1\5\5\uffff\1\13\1\14\3\uffff\1\21\1\22\1\23\1\uffff\1\26\1\27\1\30\2\uffff\1\35\2\uffff\1\43\1\44\2\uffff\1\46\1\47\3\uffff\1\53\1\54\1\uffff\1\46\4\uffff\1\5\1\6\1\24\1\7\1\10\2\uffff\1\13\1\14\2\uffff\1\42\1\20\1\21\1\22\1\23\1\uffff\1\26\1\27\1\30\3\uffff\1\35\2\uffff\1\43\1\44\1\uffff\1\47\1\50\1\51\1\52\1\53\12\uffff\1\25\1\uffff\1\41\17\uffff\1\32\3\uffff\1\40\15\uffff\1\33\1\37\1\45\6\uffff\1\15\1\11\21\uffff\1\31\1\34\1\uffff\1\12\1\16\1\uffff\1\36\4\uffff\1\17\1\uffff\1\2\2\uffff\1\1\2\uffff\1\3\4\uffff\1\4";
     static final String DFA12_specialS =
-        "\1\0\25\uffff\1\1\1\2\101\uffff}>";
+        "\1\0\40\uffff\1\2\1\1\u008e\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\11\32\2\31\2\32\1\31\22\32\1\31\1\32\1\26\4\32\1\27\1\16\1\17\2\32\1\20\1\4\1\3\1\30\12\25\1\13\1\14\1\2\1\1\3\32\32\24\3\32\1\23\1\24\1\32\2\24\1\11\1\24\1\12\1\5\2\24\1\21\5\24\1\15\1\6\3\24\1\22\6\24\1\7\1\32\1\10\uff82\32",
-            "",
-            "\1\34",
-            "",
-            "\1\36",
-            "\1\37",
-            "\1\41\20\uffff\1\42",
-            "",
-            "",
-            "\1\45\2\uffff\1\46",
-            "\1\47",
+            "\11\45\2\44\2\45\1\44\22\45\1\44\1\45\1\41\4\45\1\42\1\23\1\24\1\34\1\45\1\25\1\7\1\6\1\43\12\40\1\16\1\17\1\5\1\4\1\45\1\33\1\45\2\37\1\1\27\37\1\20\1\45\1\21\1\36\1\37\1\45\1\2\1\37\1\3\1\15\1\14\1\10\2\37\1\26\2\37\1\32\1\37\1\31\1\22\1\11\2\37\1\27\1\35\6\37\1\12\1\30\1\13\uff82\45",
+            "\1\46",
             "\1\50",
+            "\1\53\2\uffff\1\51\2\uffff\1\52",
             "",
-            "\1\53",
-            "",
-            "",
-            "",
-            "\1\57",
+            "\1\55",
+            "\1\56",
             "\1\60",
-            "\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\1\61",
+            "\1\62",
             "",
             "",
-            "\0\62",
-            "\0\62",
-            "\1\63\4\uffff\1\64",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "",
+            "\1\65",
             "\1\66",
-            "",
             "\1\67",
-            "\1\70",
-            "",
-            "",
-            "\1\71",
-            "\1\72",
-            "\1\73",
             "",
             "",
             "",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "\1\74",
             "",
             "",
             "",
-            "\1\75",
-            "\1\76",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\77",
-            "\1\100",
-            "\1\101",
+            "\1\100\5\uffff\1\101",
             "\1\102",
-            "\1\103",
+            "",
             "\1\104",
+            "\1\105",
             "",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\1\106",
-            "\1\107",
+            "",
             "\1\110",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\1\112",
-            "\1\113",
-            "\1\114",
+            "\32\47\4\uffff\1\47\1\uffff\32\47",
             "",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
+            "",
+            "\0\112",
+            "\0\112",
+            "\1\113\4\uffff\1\114",
+            "",
+            "",
+            "\1\116",
+            "",
             "\1\117",
-            "",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\1\121",
+            "\1\121\1\uffff\1\120",
             "\1\122",
-            "",
-            "",
             "\1\123",
             "",
+            "",
+            "",
+            "",
+            "",
             "\1\124",
             "\1\125",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
-            "\12\40\7\uffff\32\40\4\uffff\1\40\1\uffff\32\40",
             "",
             "",
+            "\1\126",
+            "\1\127",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\25\47\1\131\4\47",
+            "\1\133",
+            "\1\134",
+            "",
+            "\1\135",
+            "\1\136",
+            "",
+            "",
+            "\1\137",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\140",
+            "\1\141",
+            "\1\142",
+            "\1\143",
+            "\1\144",
+            "\1\145",
+            "\1\146",
+            "\1\147",
+            "\1\150",
+            "\1\151",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\153",
+            "\1\154",
+            "\1\155",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\157",
+            "\1\160",
+            "\1\161",
+            "\1\162\3\uffff\1\163",
+            "\1\164",
+            "\1\165",
+            "\1\166",
+            "\1\167",
+            "\1\170",
+            "\1\171",
+            "\1\172",
+            "",
+            "\1\173",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\177",
+            "\1\u0080",
+            "\1\u0081",
+            "\1\u0082",
+            "\1\u0083",
+            "\1\u0084",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u0087",
+            "\1\u0088",
+            "\1\u0089",
+            "\1\u008a",
+            "",
+            "",
+            "",
+            "\1\u008b",
+            "\1\u008c",
+            "\1\u008d",
+            "\1\u008e",
+            "\1\u008f",
+            "\1\u0090",
+            "",
+            "",
+            "\1\u0091",
+            "\1\u0092",
+            "\1\u0093",
+            "\1\u0094",
+            "\1\u0095",
+            "\1\u0096",
+            "\1\u0097",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u009a",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u009d",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u009f",
+            "\1\u00a0",
+            "\1\u00a1",
+            "",
+            "",
+            "\1\u00a2",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\u00a4",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u00a6",
+            "\1\u00a7",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\u00a9",
+            "\1\u00aa",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u00ac",
+            "",
+            "\1\u00ad",
+            "\1\u00ae",
+            "\1\u00af",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
             ""
     };
 
@@ -1327,7 +1874,7 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
@@ -1337,77 +1884,99 @@
                         int LA12_0 = input.LA(1);
 
                         s = -1;
-                        if ( (LA12_0=='=') ) {s = 1;}
+                        if ( (LA12_0=='C') ) {s = 1;}
 
-                        else if ( (LA12_0=='<') ) {s = 2;}
+                        else if ( (LA12_0=='a') ) {s = 2;}
 
-                        else if ( (LA12_0=='.') ) {s = 3;}
+                        else if ( (LA12_0=='c') ) {s = 3;}
 
-                        else if ( (LA12_0=='-') ) {s = 4;}
+                        else if ( (LA12_0=='=') ) {s = 4;}
 
-                        else if ( (LA12_0=='f') ) {s = 5;}
+                        else if ( (LA12_0=='<') ) {s = 5;}
 
-                        else if ( (LA12_0=='p') ) {s = 6;}
+                        else if ( (LA12_0=='.') ) {s = 6;}
 
-                        else if ( (LA12_0=='{') ) {s = 7;}
+                        else if ( (LA12_0=='-') ) {s = 7;}
 
-                        else if ( (LA12_0=='}') ) {s = 8;}
+                        else if ( (LA12_0=='f') ) {s = 8;}
 
-                        else if ( (LA12_0=='c') ) {s = 9;}
+                        else if ( (LA12_0=='p') ) {s = 9;}
 
-                        else if ( (LA12_0=='e') ) {s = 10;}
+                        else if ( (LA12_0=='{') ) {s = 10;}
 
-                        else if ( (LA12_0==':') ) {s = 11;}
+                        else if ( (LA12_0=='}') ) {s = 11;}
 
-                        else if ( (LA12_0==';') ) {s = 12;}
+                        else if ( (LA12_0=='e') ) {s = 12;}
 
-                        else if ( (LA12_0=='o') ) {s = 13;}
+                        else if ( (LA12_0=='d') ) {s = 13;}
 
-                        else if ( (LA12_0=='(') ) {s = 14;}
+                        else if ( (LA12_0==':') ) {s = 14;}
 
-                        else if ( (LA12_0==')') ) {s = 15;}
+                        else if ( (LA12_0==';') ) {s = 15;}
 
-                        else if ( (LA12_0==',') ) {s = 16;}
+                        else if ( (LA12_0=='[') ) {s = 16;}
 
-                        else if ( (LA12_0=='i') ) {s = 17;}
+                        else if ( (LA12_0==']') ) {s = 17;}
 
-                        else if ( (LA12_0=='t') ) {s = 18;}
+                        else if ( (LA12_0=='o') ) {s = 18;}
 
-                        else if ( (LA12_0=='^') ) {s = 19;}
+                        else if ( (LA12_0=='(') ) {s = 19;}
 
-                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||LA12_0=='d'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='n')||(LA12_0>='q' && LA12_0<='s')||(LA12_0>='u' && LA12_0<='z')) ) {s = 20;}
+                        else if ( (LA12_0==')') ) {s = 20;}
 
-                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 21;}
+                        else if ( (LA12_0==',') ) {s = 21;}
 
-                        else if ( (LA12_0=='\"') ) {s = 22;}
+                        else if ( (LA12_0=='i') ) {s = 22;}
 
-                        else if ( (LA12_0=='\'') ) {s = 23;}
+                        else if ( (LA12_0=='s') ) {s = 23;}
 
-                        else if ( (LA12_0=='/') ) {s = 24;}
+                        else if ( (LA12_0=='|') ) {s = 24;}
 
-                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 25;}
+                        else if ( (LA12_0=='n') ) {s = 25;}
 
-                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='*' && LA12_0<='+')||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 26;}
+                        else if ( (LA12_0=='l') ) {s = 26;}
+
+                        else if ( (LA12_0=='?') ) {s = 27;}
+
+                        else if ( (LA12_0=='*') ) {s = 28;}
+
+                        else if ( (LA12_0=='t') ) {s = 29;}
+
+                        else if ( (LA12_0=='^') ) {s = 30;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='B')||(LA12_0>='D' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='b'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='k')||LA12_0=='m'||(LA12_0>='q' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 31;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 32;}
+
+                        else if ( (LA12_0=='\"') ) {s = 33;}
+
+                        else if ( (LA12_0=='\'') ) {s = 34;}
+
+                        else if ( (LA12_0=='/') ) {s = 35;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 36;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||LA12_0=='+'||LA12_0=='>'||LA12_0=='@'||LA12_0=='\\'||LA12_0=='`'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 37;}
 
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA12_22 = input.LA(1);
+                        int LA12_34 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA12_22>='\u0000' && LA12_22<='\uFFFF')) ) {s = 50;}
+                        if ( ((LA12_34>='\u0000' && LA12_34<='\uFFFF')) ) {s = 74;}
 
-                        else s = 26;
+                        else s = 37;
 
                         if ( s>=0 ) return s;
                         break;
                     case 2 : 
-                        int LA12_23 = input.LA(1);
+                        int LA12_33 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA12_23>='\u0000' && LA12_23<='\uFFFF')) ) {s = 50;}
+                        if ( ((LA12_33>='\u0000' && LA12_33<='\uFFFF')) ) {s = 74;}
 
-                        else s = 26;
+                        else s = 37;
 
                         if ( s>=0 ) return s;
                         break;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSParser.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSParser.java
index 27939c7..20997b0 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSParser.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ide/src-gen/org/eclipse/qvtd/doc/ide/contentassist/antlr/internal/InternalMiniOCLCSParser.java
@@ -23,10 +23,8 @@
 @SuppressWarnings("all")
 public class InternalMiniOCLCSParser extends AbstractInternalContentAssistParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'='", "'<>'", "'.'", "'->'", "'false'", "'package'", "'{'", "'}'", "'class'", "'extends'", "'prop'", "':'", "';'", "'op'", "'('", "')'", "','", "'context'", "'inv'", "'::'", "'true'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Collection'", "'attribute'", "'containment'", "'cross_reference'", "'='", "'<>'", "'.'", "'->'", "'false'", "'package'", "'{'", "'}'", "'class'", "'extends'", "'datatype'", "':'", "';'", "'['", "']'", "'..'", "'op'", "'('", "')'", "','", "'context'", "'inv'", "'self'", "'collect'", "'|'", "'iterate'", "'null'", "'let'", "'in'", "'::'", "'?'", "'*'", "'true'"
     };
-    public static final int RULE_STRING=6;
-    public static final int RULE_SL_COMMENT=8;
     public static final int T__19=19;
     public static final int T__15=15;
     public static final int T__16=16;
@@ -36,16 +34,11 @@
     public static final int T__12=12;
     public static final int T__13=13;
     public static final int T__14=14;
-    public static final int EOF=-1;
-    public static final int T__30=30;
-    public static final int T__31=31;
     public static final int RULE_ID=4;
-    public static final int RULE_WS=9;
-    public static final int RULE_ANY_OTHER=10;
     public static final int T__26=26;
     public static final int T__27=27;
     public static final int T__28=28;
-    public static final int RULE_INT=5;
+    public static final int RULE_INT=6;
     public static final int T__29=29;
     public static final int T__22=22;
     public static final int RULE_ML_COMMENT=7;
@@ -54,6 +47,29 @@
     public static final int T__25=25;
     public static final int T__20=20;
     public static final int T__21=21;
+    public static final int RULE_STRING=5;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__33=33;
+    public static final int T__34=34;
+    public static final int T__35=35;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__42=42;
+    public static final int T__43=43;
 
     // delegates
     // delegators
@@ -146,7 +162,7 @@
                 int alt1=2;
                 int LA1_0 = input.LA(1);
 
-                if ( (LA1_0==16||LA1_0==28) ) {
+                if ( (LA1_0==20||LA1_0==35) ) {
                     alt1=1;
                 }
 
@@ -278,12 +294,97 @@
     // $ANTLR end "rulePackageCS"
 
 
+    // $ANTLR start "entryRuleClassifierCS"
+    // InternalMiniOCLCS.g:104:1: entryRuleClassifierCS : ruleClassifierCS EOF ;
+    public final void entryRuleClassifierCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:105:1: ( ruleClassifierCS EOF )
+            // InternalMiniOCLCS.g:106:1: ruleClassifierCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getClassifierCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleClassifierCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getClassifierCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleClassifierCS"
+
+
+    // $ANTLR start "ruleClassifierCS"
+    // InternalMiniOCLCS.g:113:1: ruleClassifierCS : ( ( rule__ClassifierCS__Alternatives ) ) ;
+    public final void ruleClassifierCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:117:2: ( ( ( rule__ClassifierCS__Alternatives ) ) )
+            // InternalMiniOCLCS.g:118:2: ( ( rule__ClassifierCS__Alternatives ) )
+            {
+            // InternalMiniOCLCS.g:118:2: ( ( rule__ClassifierCS__Alternatives ) )
+            // InternalMiniOCLCS.g:119:3: ( rule__ClassifierCS__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getClassifierCSAccess().getAlternatives()); 
+            }
+            // InternalMiniOCLCS.g:120:3: ( rule__ClassifierCS__Alternatives )
+            // InternalMiniOCLCS.g:120:4: rule__ClassifierCS__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__ClassifierCS__Alternatives();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getClassifierCSAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleClassifierCS"
+
+
     // $ANTLR start "entryRuleClassCS"
-    // InternalMiniOCLCS.g:104:1: entryRuleClassCS : ruleClassCS EOF ;
+    // InternalMiniOCLCS.g:129:1: entryRuleClassCS : ruleClassCS EOF ;
     public final void entryRuleClassCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:105:1: ( ruleClassCS EOF )
-            // InternalMiniOCLCS.g:106:1: ruleClassCS EOF
+            // InternalMiniOCLCS.g:130:1: ( ruleClassCS EOF )
+            // InternalMiniOCLCS.g:131:1: ruleClassCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSRule()); 
@@ -313,23 +414,23 @@
 
 
     // $ANTLR start "ruleClassCS"
-    // InternalMiniOCLCS.g:113:1: ruleClassCS : ( ( rule__ClassCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:138:1: ruleClassCS : ( ( rule__ClassCS__Group__0 ) ) ;
     public final void ruleClassCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:117:2: ( ( ( rule__ClassCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:118:2: ( ( rule__ClassCS__Group__0 ) )
+            // InternalMiniOCLCS.g:142:2: ( ( ( rule__ClassCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:143:2: ( ( rule__ClassCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:118:2: ( ( rule__ClassCS__Group__0 ) )
-            // InternalMiniOCLCS.g:119:3: ( rule__ClassCS__Group__0 )
+            // InternalMiniOCLCS.g:143:2: ( ( rule__ClassCS__Group__0 ) )
+            // InternalMiniOCLCS.g:144:3: ( rule__ClassCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:120:3: ( rule__ClassCS__Group__0 )
-            // InternalMiniOCLCS.g:120:4: rule__ClassCS__Group__0
+            // InternalMiniOCLCS.g:145:3: ( rule__ClassCS__Group__0 )
+            // InternalMiniOCLCS.g:145:4: rule__ClassCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__ClassCS__Group__0();
@@ -363,12 +464,97 @@
     // $ANTLR end "ruleClassCS"
 
 
+    // $ANTLR start "entryRuleDatatypeCS"
+    // InternalMiniOCLCS.g:154:1: entryRuleDatatypeCS : ruleDatatypeCS EOF ;
+    public final void entryRuleDatatypeCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:155:1: ( ruleDatatypeCS EOF )
+            // InternalMiniOCLCS.g:156:1: ruleDatatypeCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleDatatypeCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleDatatypeCS"
+
+
+    // $ANTLR start "ruleDatatypeCS"
+    // InternalMiniOCLCS.g:163:1: ruleDatatypeCS : ( ( rule__DatatypeCS__Group__0 ) ) ;
+    public final void ruleDatatypeCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:167:2: ( ( ( rule__DatatypeCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:168:2: ( ( rule__DatatypeCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:168:2: ( ( rule__DatatypeCS__Group__0 ) )
+            // InternalMiniOCLCS.g:169:3: ( rule__DatatypeCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:170:3: ( rule__DatatypeCS__Group__0 )
+            // InternalMiniOCLCS.g:170:4: rule__DatatypeCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDatatypeCS"
+
+
     // $ANTLR start "entryRulePropertyCS"
-    // InternalMiniOCLCS.g:129:1: entryRulePropertyCS : rulePropertyCS EOF ;
+    // InternalMiniOCLCS.g:179:1: entryRulePropertyCS : rulePropertyCS EOF ;
     public final void entryRulePropertyCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:130:1: ( rulePropertyCS EOF )
-            // InternalMiniOCLCS.g:131:1: rulePropertyCS EOF
+            // InternalMiniOCLCS.g:180:1: ( rulePropertyCS EOF )
+            // InternalMiniOCLCS.g:181:1: rulePropertyCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSRule()); 
@@ -398,23 +584,23 @@
 
 
     // $ANTLR start "rulePropertyCS"
-    // InternalMiniOCLCS.g:138:1: rulePropertyCS : ( ( rule__PropertyCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:188:1: rulePropertyCS : ( ( rule__PropertyCS__Group__0 ) ) ;
     public final void rulePropertyCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:142:2: ( ( ( rule__PropertyCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:143:2: ( ( rule__PropertyCS__Group__0 ) )
+            // InternalMiniOCLCS.g:192:2: ( ( ( rule__PropertyCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:193:2: ( ( rule__PropertyCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:143:2: ( ( rule__PropertyCS__Group__0 ) )
-            // InternalMiniOCLCS.g:144:3: ( rule__PropertyCS__Group__0 )
+            // InternalMiniOCLCS.g:193:2: ( ( rule__PropertyCS__Group__0 ) )
+            // InternalMiniOCLCS.g:194:3: ( rule__PropertyCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:145:3: ( rule__PropertyCS__Group__0 )
-            // InternalMiniOCLCS.g:145:4: rule__PropertyCS__Group__0
+            // InternalMiniOCLCS.g:195:3: ( rule__PropertyCS__Group__0 )
+            // InternalMiniOCLCS.g:195:4: rule__PropertyCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__PropertyCS__Group__0();
@@ -448,12 +634,97 @@
     // $ANTLR end "rulePropertyCS"
 
 
+    // $ANTLR start "entryRuleMultiplicityCS"
+    // InternalMiniOCLCS.g:204:1: entryRuleMultiplicityCS : ruleMultiplicityCS EOF ;
+    public final void entryRuleMultiplicityCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:205:1: ( ruleMultiplicityCS EOF )
+            // InternalMiniOCLCS.g:206:1: ruleMultiplicityCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleMultiplicityCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleMultiplicityCS"
+
+
+    // $ANTLR start "ruleMultiplicityCS"
+    // InternalMiniOCLCS.g:213:1: ruleMultiplicityCS : ( ( rule__MultiplicityCS__Group__0 ) ) ;
+    public final void ruleMultiplicityCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:217:2: ( ( ( rule__MultiplicityCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:218:2: ( ( rule__MultiplicityCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:218:2: ( ( rule__MultiplicityCS__Group__0 ) )
+            // InternalMiniOCLCS.g:219:3: ( rule__MultiplicityCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:220:3: ( rule__MultiplicityCS__Group__0 )
+            // InternalMiniOCLCS.g:220:4: rule__MultiplicityCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleMultiplicityCS"
+
+
     // $ANTLR start "entryRuleOperationCS"
-    // InternalMiniOCLCS.g:154:1: entryRuleOperationCS : ruleOperationCS EOF ;
+    // InternalMiniOCLCS.g:229:1: entryRuleOperationCS : ruleOperationCS EOF ;
     public final void entryRuleOperationCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:155:1: ( ruleOperationCS EOF )
-            // InternalMiniOCLCS.g:156:1: ruleOperationCS EOF
+            // InternalMiniOCLCS.g:230:1: ( ruleOperationCS EOF )
+            // InternalMiniOCLCS.g:231:1: ruleOperationCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSRule()); 
@@ -483,23 +754,23 @@
 
 
     // $ANTLR start "ruleOperationCS"
-    // InternalMiniOCLCS.g:163:1: ruleOperationCS : ( ( rule__OperationCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:238:1: ruleOperationCS : ( ( rule__OperationCS__Group__0 ) ) ;
     public final void ruleOperationCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:167:2: ( ( ( rule__OperationCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:168:2: ( ( rule__OperationCS__Group__0 ) )
+            // InternalMiniOCLCS.g:242:2: ( ( ( rule__OperationCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:243:2: ( ( rule__OperationCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:168:2: ( ( rule__OperationCS__Group__0 ) )
-            // InternalMiniOCLCS.g:169:3: ( rule__OperationCS__Group__0 )
+            // InternalMiniOCLCS.g:243:2: ( ( rule__OperationCS__Group__0 ) )
+            // InternalMiniOCLCS.g:244:3: ( rule__OperationCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:170:3: ( rule__OperationCS__Group__0 )
-            // InternalMiniOCLCS.g:170:4: rule__OperationCS__Group__0
+            // InternalMiniOCLCS.g:245:3: ( rule__OperationCS__Group__0 )
+            // InternalMiniOCLCS.g:245:4: rule__OperationCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__Group__0();
@@ -534,11 +805,11 @@
 
 
     // $ANTLR start "entryRuleParameterCS"
-    // InternalMiniOCLCS.g:179:1: entryRuleParameterCS : ruleParameterCS EOF ;
+    // InternalMiniOCLCS.g:254:1: entryRuleParameterCS : ruleParameterCS EOF ;
     public final void entryRuleParameterCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:180:1: ( ruleParameterCS EOF )
-            // InternalMiniOCLCS.g:181:1: ruleParameterCS EOF
+            // InternalMiniOCLCS.g:255:1: ( ruleParameterCS EOF )
+            // InternalMiniOCLCS.g:256:1: ruleParameterCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSRule()); 
@@ -568,23 +839,23 @@
 
 
     // $ANTLR start "ruleParameterCS"
-    // InternalMiniOCLCS.g:188:1: ruleParameterCS : ( ( rule__ParameterCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:263:1: ruleParameterCS : ( ( rule__ParameterCS__Group__0 ) ) ;
     public final void ruleParameterCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:192:2: ( ( ( rule__ParameterCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:193:2: ( ( rule__ParameterCS__Group__0 ) )
+            // InternalMiniOCLCS.g:267:2: ( ( ( rule__ParameterCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:268:2: ( ( rule__ParameterCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:193:2: ( ( rule__ParameterCS__Group__0 ) )
-            // InternalMiniOCLCS.g:194:3: ( rule__ParameterCS__Group__0 )
+            // InternalMiniOCLCS.g:268:2: ( ( rule__ParameterCS__Group__0 ) )
+            // InternalMiniOCLCS.g:269:3: ( rule__ParameterCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:195:3: ( rule__ParameterCS__Group__0 )
-            // InternalMiniOCLCS.g:195:4: rule__ParameterCS__Group__0
+            // InternalMiniOCLCS.g:270:3: ( rule__ParameterCS__Group__0 )
+            // InternalMiniOCLCS.g:270:4: rule__ParameterCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__ParameterCS__Group__0();
@@ -619,11 +890,11 @@
 
 
     // $ANTLR start "entryRuleConstraintsDefCS"
-    // InternalMiniOCLCS.g:204:1: entryRuleConstraintsDefCS : ruleConstraintsDefCS EOF ;
+    // InternalMiniOCLCS.g:279:1: entryRuleConstraintsDefCS : ruleConstraintsDefCS EOF ;
     public final void entryRuleConstraintsDefCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:205:1: ( ruleConstraintsDefCS EOF )
-            // InternalMiniOCLCS.g:206:1: ruleConstraintsDefCS EOF
+            // InternalMiniOCLCS.g:280:1: ( ruleConstraintsDefCS EOF )
+            // InternalMiniOCLCS.g:281:1: ruleConstraintsDefCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSRule()); 
@@ -653,23 +924,23 @@
 
 
     // $ANTLR start "ruleConstraintsDefCS"
-    // InternalMiniOCLCS.g:213:1: ruleConstraintsDefCS : ( ( rule__ConstraintsDefCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:288:1: ruleConstraintsDefCS : ( ( rule__ConstraintsDefCS__Group__0 ) ) ;
     public final void ruleConstraintsDefCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:217:2: ( ( ( rule__ConstraintsDefCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:218:2: ( ( rule__ConstraintsDefCS__Group__0 ) )
+            // InternalMiniOCLCS.g:292:2: ( ( ( rule__ConstraintsDefCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:293:2: ( ( rule__ConstraintsDefCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:218:2: ( ( rule__ConstraintsDefCS__Group__0 ) )
-            // InternalMiniOCLCS.g:219:3: ( rule__ConstraintsDefCS__Group__0 )
+            // InternalMiniOCLCS.g:293:2: ( ( rule__ConstraintsDefCS__Group__0 ) )
+            // InternalMiniOCLCS.g:294:3: ( rule__ConstraintsDefCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:220:3: ( rule__ConstraintsDefCS__Group__0 )
-            // InternalMiniOCLCS.g:220:4: rule__ConstraintsDefCS__Group__0
+            // InternalMiniOCLCS.g:295:3: ( rule__ConstraintsDefCS__Group__0 )
+            // InternalMiniOCLCS.g:295:4: rule__ConstraintsDefCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__ConstraintsDefCS__Group__0();
@@ -704,11 +975,11 @@
 
 
     // $ANTLR start "entryRuleInvariantCS"
-    // InternalMiniOCLCS.g:229:1: entryRuleInvariantCS : ruleInvariantCS EOF ;
+    // InternalMiniOCLCS.g:304:1: entryRuleInvariantCS : ruleInvariantCS EOF ;
     public final void entryRuleInvariantCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:230:1: ( ruleInvariantCS EOF )
-            // InternalMiniOCLCS.g:231:1: ruleInvariantCS EOF
+            // InternalMiniOCLCS.g:305:1: ( ruleInvariantCS EOF )
+            // InternalMiniOCLCS.g:306:1: ruleInvariantCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSRule()); 
@@ -738,23 +1009,23 @@
 
 
     // $ANTLR start "ruleInvariantCS"
-    // InternalMiniOCLCS.g:238:1: ruleInvariantCS : ( ( rule__InvariantCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:313:1: ruleInvariantCS : ( ( rule__InvariantCS__Group__0 ) ) ;
     public final void ruleInvariantCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:242:2: ( ( ( rule__InvariantCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:243:2: ( ( rule__InvariantCS__Group__0 ) )
+            // InternalMiniOCLCS.g:317:2: ( ( ( rule__InvariantCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:318:2: ( ( rule__InvariantCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:243:2: ( ( rule__InvariantCS__Group__0 ) )
-            // InternalMiniOCLCS.g:244:3: ( rule__InvariantCS__Group__0 )
+            // InternalMiniOCLCS.g:318:2: ( ( rule__InvariantCS__Group__0 ) )
+            // InternalMiniOCLCS.g:319:3: ( rule__InvariantCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:245:3: ( rule__InvariantCS__Group__0 )
-            // InternalMiniOCLCS.g:245:4: rule__InvariantCS__Group__0
+            // InternalMiniOCLCS.g:320:3: ( rule__InvariantCS__Group__0 )
+            // InternalMiniOCLCS.g:320:4: rule__InvariantCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__InvariantCS__Group__0();
@@ -789,11 +1060,11 @@
 
 
     // $ANTLR start "entryRuleExpCS"
-    // InternalMiniOCLCS.g:254:1: entryRuleExpCS : ruleExpCS EOF ;
+    // InternalMiniOCLCS.g:329:1: entryRuleExpCS : ruleExpCS EOF ;
     public final void entryRuleExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:255:1: ( ruleExpCS EOF )
-            // InternalMiniOCLCS.g:256:1: ruleExpCS EOF
+            // InternalMiniOCLCS.g:330:1: ( ruleExpCS EOF )
+            // InternalMiniOCLCS.g:331:1: ruleExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSRule()); 
@@ -823,17 +1094,17 @@
 
 
     // $ANTLR start "ruleExpCS"
-    // InternalMiniOCLCS.g:263:1: ruleExpCS : ( ruleLogicExpCS ) ;
+    // InternalMiniOCLCS.g:338:1: ruleExpCS : ( ruleLogicExpCS ) ;
     public final void ruleExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:267:2: ( ( ruleLogicExpCS ) )
-            // InternalMiniOCLCS.g:268:2: ( ruleLogicExpCS )
+            // InternalMiniOCLCS.g:342:2: ( ( ruleLogicExpCS ) )
+            // InternalMiniOCLCS.g:343:2: ( ruleLogicExpCS )
             {
-            // InternalMiniOCLCS.g:268:2: ( ruleLogicExpCS )
-            // InternalMiniOCLCS.g:269:3: ruleLogicExpCS
+            // InternalMiniOCLCS.g:343:2: ( ruleLogicExpCS )
+            // InternalMiniOCLCS.g:344:3: ruleLogicExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getExpCSAccess().getLogicExpCSParserRuleCall()); 
@@ -868,11 +1139,11 @@
 
 
     // $ANTLR start "entryRuleLogicExpCS"
-    // InternalMiniOCLCS.g:279:1: entryRuleLogicExpCS : ruleLogicExpCS EOF ;
+    // InternalMiniOCLCS.g:354:1: entryRuleLogicExpCS : ruleLogicExpCS EOF ;
     public final void entryRuleLogicExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:280:1: ( ruleLogicExpCS EOF )
-            // InternalMiniOCLCS.g:281:1: ruleLogicExpCS EOF
+            // InternalMiniOCLCS.g:355:1: ( ruleLogicExpCS EOF )
+            // InternalMiniOCLCS.g:356:1: ruleLogicExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSRule()); 
@@ -902,23 +1173,23 @@
 
 
     // $ANTLR start "ruleLogicExpCS"
-    // InternalMiniOCLCS.g:288:1: ruleLogicExpCS : ( ( rule__LogicExpCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:363:1: ruleLogicExpCS : ( ( rule__LogicExpCS__Group__0 ) ) ;
     public final void ruleLogicExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:292:2: ( ( ( rule__LogicExpCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:293:2: ( ( rule__LogicExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:367:2: ( ( ( rule__LogicExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:368:2: ( ( rule__LogicExpCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:293:2: ( ( rule__LogicExpCS__Group__0 ) )
-            // InternalMiniOCLCS.g:294:3: ( rule__LogicExpCS__Group__0 )
+            // InternalMiniOCLCS.g:368:2: ( ( rule__LogicExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:369:3: ( rule__LogicExpCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:295:3: ( rule__LogicExpCS__Group__0 )
-            // InternalMiniOCLCS.g:295:4: rule__LogicExpCS__Group__0
+            // InternalMiniOCLCS.g:370:3: ( rule__LogicExpCS__Group__0 )
+            // InternalMiniOCLCS.g:370:4: rule__LogicExpCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__Group__0();
@@ -953,11 +1224,11 @@
 
 
     // $ANTLR start "entryRuleCallExpCS"
-    // InternalMiniOCLCS.g:304:1: entryRuleCallExpCS : ruleCallExpCS EOF ;
+    // InternalMiniOCLCS.g:379:1: entryRuleCallExpCS : ruleCallExpCS EOF ;
     public final void entryRuleCallExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:305:1: ( ruleCallExpCS EOF )
-            // InternalMiniOCLCS.g:306:1: ruleCallExpCS EOF
+            // InternalMiniOCLCS.g:380:1: ( ruleCallExpCS EOF )
+            // InternalMiniOCLCS.g:381:1: ruleCallExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSRule()); 
@@ -987,23 +1258,23 @@
 
 
     // $ANTLR start "ruleCallExpCS"
-    // InternalMiniOCLCS.g:313:1: ruleCallExpCS : ( ( rule__CallExpCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:388:1: ruleCallExpCS : ( ( rule__CallExpCS__Group__0 ) ) ;
     public final void ruleCallExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:317:2: ( ( ( rule__CallExpCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:318:2: ( ( rule__CallExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:392:2: ( ( ( rule__CallExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:393:2: ( ( rule__CallExpCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:318:2: ( ( rule__CallExpCS__Group__0 ) )
-            // InternalMiniOCLCS.g:319:3: ( rule__CallExpCS__Group__0 )
+            // InternalMiniOCLCS.g:393:2: ( ( rule__CallExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:394:3: ( rule__CallExpCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:320:3: ( rule__CallExpCS__Group__0 )
-            // InternalMiniOCLCS.g:320:4: rule__CallExpCS__Group__0
+            // InternalMiniOCLCS.g:395:3: ( rule__CallExpCS__Group__0 )
+            // InternalMiniOCLCS.g:395:4: rule__CallExpCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__CallExpCS__Group__0();
@@ -1038,11 +1309,11 @@
 
 
     // $ANTLR start "entryRulePrimaryExpCS"
-    // InternalMiniOCLCS.g:329:1: entryRulePrimaryExpCS : rulePrimaryExpCS EOF ;
+    // InternalMiniOCLCS.g:404:1: entryRulePrimaryExpCS : rulePrimaryExpCS EOF ;
     public final void entryRulePrimaryExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:330:1: ( rulePrimaryExpCS EOF )
-            // InternalMiniOCLCS.g:331:1: rulePrimaryExpCS EOF
+            // InternalMiniOCLCS.g:405:1: ( rulePrimaryExpCS EOF )
+            // InternalMiniOCLCS.g:406:1: rulePrimaryExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrimaryExpCSRule()); 
@@ -1072,23 +1343,23 @@
 
 
     // $ANTLR start "rulePrimaryExpCS"
-    // InternalMiniOCLCS.g:338:1: rulePrimaryExpCS : ( ( rule__PrimaryExpCS__Alternatives ) ) ;
+    // InternalMiniOCLCS.g:413:1: rulePrimaryExpCS : ( ( rule__PrimaryExpCS__Alternatives ) ) ;
     public final void rulePrimaryExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:342:2: ( ( ( rule__PrimaryExpCS__Alternatives ) ) )
-            // InternalMiniOCLCS.g:343:2: ( ( rule__PrimaryExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:417:2: ( ( ( rule__PrimaryExpCS__Alternatives ) ) )
+            // InternalMiniOCLCS.g:418:2: ( ( rule__PrimaryExpCS__Alternatives ) )
             {
-            // InternalMiniOCLCS.g:343:2: ( ( rule__PrimaryExpCS__Alternatives ) )
-            // InternalMiniOCLCS.g:344:3: ( rule__PrimaryExpCS__Alternatives )
+            // InternalMiniOCLCS.g:418:2: ( ( rule__PrimaryExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:419:3: ( rule__PrimaryExpCS__Alternatives )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPrimaryExpCSAccess().getAlternatives()); 
             }
-            // InternalMiniOCLCS.g:345:3: ( rule__PrimaryExpCS__Alternatives )
-            // InternalMiniOCLCS.g:345:4: rule__PrimaryExpCS__Alternatives
+            // InternalMiniOCLCS.g:420:3: ( rule__PrimaryExpCS__Alternatives )
+            // InternalMiniOCLCS.g:420:4: rule__PrimaryExpCS__Alternatives
             {
             pushFollow(FOLLOW_2);
             rule__PrimaryExpCS__Alternatives();
@@ -1122,12 +1393,607 @@
     // $ANTLR end "rulePrimaryExpCS"
 
 
+    // $ANTLR start "entryRuleSelfExpCS"
+    // InternalMiniOCLCS.g:429:1: entryRuleSelfExpCS : ruleSelfExpCS EOF ;
+    public final void entryRuleSelfExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:430:1: ( ruleSelfExpCS EOF )
+            // InternalMiniOCLCS.g:431:1: ruleSelfExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSelfExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleSelfExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSelfExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleSelfExpCS"
+
+
+    // $ANTLR start "ruleSelfExpCS"
+    // InternalMiniOCLCS.g:438:1: ruleSelfExpCS : ( ( rule__SelfExpCS__Group__0 ) ) ;
+    public final void ruleSelfExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:442:2: ( ( ( rule__SelfExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:443:2: ( ( rule__SelfExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:443:2: ( ( rule__SelfExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:444:3: ( rule__SelfExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSelfExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:445:3: ( rule__SelfExpCS__Group__0 )
+            // InternalMiniOCLCS.g:445:4: rule__SelfExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__SelfExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSelfExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleSelfExpCS"
+
+
+    // $ANTLR start "entryRuleNavigationExpCS"
+    // InternalMiniOCLCS.g:454:1: entryRuleNavigationExpCS : ruleNavigationExpCS EOF ;
+    public final void entryRuleNavigationExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:455:1: ( ruleNavigationExpCS EOF )
+            // InternalMiniOCLCS.g:456:1: ruleNavigationExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNavigationExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleNavigationExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNavigationExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleNavigationExpCS"
+
+
+    // $ANTLR start "ruleNavigationExpCS"
+    // InternalMiniOCLCS.g:463:1: ruleNavigationExpCS : ( ( rule__NavigationExpCS__Alternatives ) ) ;
+    public final void ruleNavigationExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:467:2: ( ( ( rule__NavigationExpCS__Alternatives ) ) )
+            // InternalMiniOCLCS.g:468:2: ( ( rule__NavigationExpCS__Alternatives ) )
+            {
+            // InternalMiniOCLCS.g:468:2: ( ( rule__NavigationExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:469:3: ( rule__NavigationExpCS__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNavigationExpCSAccess().getAlternatives()); 
+            }
+            // InternalMiniOCLCS.g:470:3: ( rule__NavigationExpCS__Alternatives )
+            // InternalMiniOCLCS.g:470:4: rule__NavigationExpCS__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__NavigationExpCS__Alternatives();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNavigationExpCSAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleNavigationExpCS"
+
+
+    // $ANTLR start "entryRuleLoopExpCS"
+    // InternalMiniOCLCS.g:479:1: entryRuleLoopExpCS : ruleLoopExpCS EOF ;
+    public final void entryRuleLoopExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:480:1: ( ruleLoopExpCS EOF )
+            // InternalMiniOCLCS.g:481:1: ruleLoopExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLoopExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleLoopExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLoopExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleLoopExpCS"
+
+
+    // $ANTLR start "ruleLoopExpCS"
+    // InternalMiniOCLCS.g:488:1: ruleLoopExpCS : ( ( rule__LoopExpCS__Alternatives ) ) ;
+    public final void ruleLoopExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:492:2: ( ( ( rule__LoopExpCS__Alternatives ) ) )
+            // InternalMiniOCLCS.g:493:2: ( ( rule__LoopExpCS__Alternatives ) )
+            {
+            // InternalMiniOCLCS.g:493:2: ( ( rule__LoopExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:494:3: ( rule__LoopExpCS__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLoopExpCSAccess().getAlternatives()); 
+            }
+            // InternalMiniOCLCS.g:495:3: ( rule__LoopExpCS__Alternatives )
+            // InternalMiniOCLCS.g:495:4: rule__LoopExpCS__Alternatives
+            {
+            pushFollow(FOLLOW_2);
+            rule__LoopExpCS__Alternatives();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLoopExpCSAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleLoopExpCS"
+
+
+    // $ANTLR start "entryRuleCollectExpCS"
+    // InternalMiniOCLCS.g:504:1: entryRuleCollectExpCS : ruleCollectExpCS EOF ;
+    public final void entryRuleCollectExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:505:1: ( ruleCollectExpCS EOF )
+            // InternalMiniOCLCS.g:506:1: ruleCollectExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleCollectExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleCollectExpCS"
+
+
+    // $ANTLR start "ruleCollectExpCS"
+    // InternalMiniOCLCS.g:513:1: ruleCollectExpCS : ( ( rule__CollectExpCS__Group__0 ) ) ;
+    public final void ruleCollectExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:517:2: ( ( ( rule__CollectExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:518:2: ( ( rule__CollectExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:518:2: ( ( rule__CollectExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:519:3: ( rule__CollectExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:520:3: ( rule__CollectExpCS__Group__0 )
+            // InternalMiniOCLCS.g:520:4: rule__CollectExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCollectExpCS"
+
+
+    // $ANTLR start "entryRuleIteratorVarCS"
+    // InternalMiniOCLCS.g:529:1: entryRuleIteratorVarCS : ruleIteratorVarCS EOF ;
+    public final void entryRuleIteratorVarCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:530:1: ( ruleIteratorVarCS EOF )
+            // InternalMiniOCLCS.g:531:1: ruleIteratorVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleIteratorVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleIteratorVarCS"
+
+
+    // $ANTLR start "ruleIteratorVarCS"
+    // InternalMiniOCLCS.g:538:1: ruleIteratorVarCS : ( ( rule__IteratorVarCS__Group__0 ) ) ;
+    public final void ruleIteratorVarCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:542:2: ( ( ( rule__IteratorVarCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:543:2: ( ( rule__IteratorVarCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:543:2: ( ( rule__IteratorVarCS__Group__0 ) )
+            // InternalMiniOCLCS.g:544:3: ( rule__IteratorVarCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:545:3: ( rule__IteratorVarCS__Group__0 )
+            // InternalMiniOCLCS.g:545:4: rule__IteratorVarCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleIteratorVarCS"
+
+
+    // $ANTLR start "entryRuleIterateExpCS"
+    // InternalMiniOCLCS.g:554:1: entryRuleIterateExpCS : ruleIterateExpCS EOF ;
+    public final void entryRuleIterateExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:555:1: ( ruleIterateExpCS EOF )
+            // InternalMiniOCLCS.g:556:1: ruleIterateExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleIterateExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleIterateExpCS"
+
+
+    // $ANTLR start "ruleIterateExpCS"
+    // InternalMiniOCLCS.g:563:1: ruleIterateExpCS : ( ( rule__IterateExpCS__Group__0 ) ) ;
+    public final void ruleIterateExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:567:2: ( ( ( rule__IterateExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:568:2: ( ( rule__IterateExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:568:2: ( ( rule__IterateExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:569:3: ( rule__IterateExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:570:3: ( rule__IterateExpCS__Group__0 )
+            // InternalMiniOCLCS.g:570:4: rule__IterateExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleIterateExpCS"
+
+
+    // $ANTLR start "entryRuleAccVarCS"
+    // InternalMiniOCLCS.g:579:1: entryRuleAccVarCS : ruleAccVarCS EOF ;
+    public final void entryRuleAccVarCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:580:1: ( ruleAccVarCS EOF )
+            // InternalMiniOCLCS.g:581:1: ruleAccVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleAccVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleAccVarCS"
+
+
+    // $ANTLR start "ruleAccVarCS"
+    // InternalMiniOCLCS.g:588:1: ruleAccVarCS : ( ( rule__AccVarCS__Group__0 ) ) ;
+    public final void ruleAccVarCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:592:2: ( ( ( rule__AccVarCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:593:2: ( ( rule__AccVarCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:593:2: ( ( rule__AccVarCS__Group__0 ) )
+            // InternalMiniOCLCS.g:594:3: ( rule__AccVarCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:595:3: ( rule__AccVarCS__Group__0 )
+            // InternalMiniOCLCS.g:595:4: rule__AccVarCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAccVarCS"
+
+
     // $ANTLR start "entryRuleNameExpCS"
-    // InternalMiniOCLCS.g:354:1: entryRuleNameExpCS : ruleNameExpCS EOF ;
+    // InternalMiniOCLCS.g:604:1: entryRuleNameExpCS : ruleNameExpCS EOF ;
     public final void entryRuleNameExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:355:1: ( ruleNameExpCS EOF )
-            // InternalMiniOCLCS.g:356:1: ruleNameExpCS EOF
+            // InternalMiniOCLCS.g:605:1: ( ruleNameExpCS EOF )
+            // InternalMiniOCLCS.g:606:1: ruleNameExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSRule()); 
@@ -1157,23 +2023,23 @@
 
 
     // $ANTLR start "ruleNameExpCS"
-    // InternalMiniOCLCS.g:363:1: ruleNameExpCS : ( ( rule__NameExpCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:613:1: ruleNameExpCS : ( ( rule__NameExpCS__Group__0 ) ) ;
     public final void ruleNameExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:367:2: ( ( ( rule__NameExpCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:368:2: ( ( rule__NameExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:617:2: ( ( ( rule__NameExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:618:2: ( ( rule__NameExpCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:368:2: ( ( rule__NameExpCS__Group__0 ) )
-            // InternalMiniOCLCS.g:369:3: ( rule__NameExpCS__Group__0 )
+            // InternalMiniOCLCS.g:618:2: ( ( rule__NameExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:619:3: ( rule__NameExpCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:370:3: ( rule__NameExpCS__Group__0 )
-            // InternalMiniOCLCS.g:370:4: rule__NameExpCS__Group__0
+            // InternalMiniOCLCS.g:620:3: ( rule__NameExpCS__Group__0 )
+            // InternalMiniOCLCS.g:620:4: rule__NameExpCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__NameExpCS__Group__0();
@@ -1208,11 +2074,11 @@
 
 
     // $ANTLR start "entryRuleRoundedBracketClauseCS"
-    // InternalMiniOCLCS.g:379:1: entryRuleRoundedBracketClauseCS : ruleRoundedBracketClauseCS EOF ;
+    // InternalMiniOCLCS.g:629:1: entryRuleRoundedBracketClauseCS : ruleRoundedBracketClauseCS EOF ;
     public final void entryRuleRoundedBracketClauseCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:380:1: ( ruleRoundedBracketClauseCS EOF )
-            // InternalMiniOCLCS.g:381:1: ruleRoundedBracketClauseCS EOF
+            // InternalMiniOCLCS.g:630:1: ( ruleRoundedBracketClauseCS EOF )
+            // InternalMiniOCLCS.g:631:1: ruleRoundedBracketClauseCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSRule()); 
@@ -1242,23 +2108,23 @@
 
 
     // $ANTLR start "ruleRoundedBracketClauseCS"
-    // InternalMiniOCLCS.g:388:1: ruleRoundedBracketClauseCS : ( ( rule__RoundedBracketClauseCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:638:1: ruleRoundedBracketClauseCS : ( ( rule__RoundedBracketClauseCS__Group__0 ) ) ;
     public final void ruleRoundedBracketClauseCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:392:2: ( ( ( rule__RoundedBracketClauseCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:393:2: ( ( rule__RoundedBracketClauseCS__Group__0 ) )
+            // InternalMiniOCLCS.g:642:2: ( ( ( rule__RoundedBracketClauseCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:643:2: ( ( rule__RoundedBracketClauseCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:393:2: ( ( rule__RoundedBracketClauseCS__Group__0 ) )
-            // InternalMiniOCLCS.g:394:3: ( rule__RoundedBracketClauseCS__Group__0 )
+            // InternalMiniOCLCS.g:643:2: ( ( rule__RoundedBracketClauseCS__Group__0 ) )
+            // InternalMiniOCLCS.g:644:3: ( rule__RoundedBracketClauseCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:395:3: ( rule__RoundedBracketClauseCS__Group__0 )
-            // InternalMiniOCLCS.g:395:4: rule__RoundedBracketClauseCS__Group__0
+            // InternalMiniOCLCS.g:645:3: ( rule__RoundedBracketClauseCS__Group__0 )
+            // InternalMiniOCLCS.g:645:4: rule__RoundedBracketClauseCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__Group__0();
@@ -1293,11 +2159,11 @@
 
 
     // $ANTLR start "entryRuleLiteralExpCS"
-    // InternalMiniOCLCS.g:404:1: entryRuleLiteralExpCS : ruleLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:654:1: entryRuleLiteralExpCS : ruleLiteralExpCS EOF ;
     public final void entryRuleLiteralExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:405:1: ( ruleLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:406:1: ruleLiteralExpCS EOF
+            // InternalMiniOCLCS.g:655:1: ( ruleLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:656:1: ruleLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLiteralExpCSRule()); 
@@ -1327,23 +2193,23 @@
 
 
     // $ANTLR start "ruleLiteralExpCS"
-    // InternalMiniOCLCS.g:413:1: ruleLiteralExpCS : ( ( rule__LiteralExpCS__Alternatives ) ) ;
+    // InternalMiniOCLCS.g:663:1: ruleLiteralExpCS : ( ( rule__LiteralExpCS__Alternatives ) ) ;
     public final void ruleLiteralExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:417:2: ( ( ( rule__LiteralExpCS__Alternatives ) ) )
-            // InternalMiniOCLCS.g:418:2: ( ( rule__LiteralExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:667:2: ( ( ( rule__LiteralExpCS__Alternatives ) ) )
+            // InternalMiniOCLCS.g:668:2: ( ( rule__LiteralExpCS__Alternatives ) )
             {
-            // InternalMiniOCLCS.g:418:2: ( ( rule__LiteralExpCS__Alternatives ) )
-            // InternalMiniOCLCS.g:419:3: ( rule__LiteralExpCS__Alternatives )
+            // InternalMiniOCLCS.g:668:2: ( ( rule__LiteralExpCS__Alternatives ) )
+            // InternalMiniOCLCS.g:669:3: ( rule__LiteralExpCS__Alternatives )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLiteralExpCSAccess().getAlternatives()); 
             }
-            // InternalMiniOCLCS.g:420:3: ( rule__LiteralExpCS__Alternatives )
-            // InternalMiniOCLCS.g:420:4: rule__LiteralExpCS__Alternatives
+            // InternalMiniOCLCS.g:670:3: ( rule__LiteralExpCS__Alternatives )
+            // InternalMiniOCLCS.g:670:4: rule__LiteralExpCS__Alternatives
             {
             pushFollow(FOLLOW_2);
             rule__LiteralExpCS__Alternatives();
@@ -1378,11 +2244,11 @@
 
 
     // $ANTLR start "entryRuleIntLiteralExpCS"
-    // InternalMiniOCLCS.g:429:1: entryRuleIntLiteralExpCS : ruleIntLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:679:1: entryRuleIntLiteralExpCS : ruleIntLiteralExpCS EOF ;
     public final void entryRuleIntLiteralExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:430:1: ( ruleIntLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:431:1: ruleIntLiteralExpCS EOF
+            // InternalMiniOCLCS.g:680:1: ( ruleIntLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:681:1: ruleIntLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIntLiteralExpCSRule()); 
@@ -1412,23 +2278,23 @@
 
 
     // $ANTLR start "ruleIntLiteralExpCS"
-    // InternalMiniOCLCS.g:438:1: ruleIntLiteralExpCS : ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) ) ;
+    // InternalMiniOCLCS.g:688:1: ruleIntLiteralExpCS : ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) ) ;
     public final void ruleIntLiteralExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:442:2: ( ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) ) )
-            // InternalMiniOCLCS.g:443:2: ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) )
+            // InternalMiniOCLCS.g:692:2: ( ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) ) )
+            // InternalMiniOCLCS.g:693:2: ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) )
             {
-            // InternalMiniOCLCS.g:443:2: ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) )
-            // InternalMiniOCLCS.g:444:3: ( rule__IntLiteralExpCS__IntSymbolAssignment )
+            // InternalMiniOCLCS.g:693:2: ( ( rule__IntLiteralExpCS__IntSymbolAssignment ) )
+            // InternalMiniOCLCS.g:694:3: ( rule__IntLiteralExpCS__IntSymbolAssignment )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolAssignment()); 
             }
-            // InternalMiniOCLCS.g:445:3: ( rule__IntLiteralExpCS__IntSymbolAssignment )
-            // InternalMiniOCLCS.g:445:4: rule__IntLiteralExpCS__IntSymbolAssignment
+            // InternalMiniOCLCS.g:695:3: ( rule__IntLiteralExpCS__IntSymbolAssignment )
+            // InternalMiniOCLCS.g:695:4: rule__IntLiteralExpCS__IntSymbolAssignment
             {
             pushFollow(FOLLOW_2);
             rule__IntLiteralExpCS__IntSymbolAssignment();
@@ -1462,97 +2328,12 @@
     // $ANTLR end "ruleIntLiteralExpCS"
 
 
-    // $ANTLR start "entryRuleStringLiteralExpCS"
-    // InternalMiniOCLCS.g:454:1: entryRuleStringLiteralExpCS : ruleStringLiteralExpCS EOF ;
-    public final void entryRuleStringLiteralExpCS() throws RecognitionException {
-        try {
-            // InternalMiniOCLCS.g:455:1: ( ruleStringLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:456:1: ruleStringLiteralExpCS EOF
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getStringLiteralExpCSRule()); 
-            }
-            pushFollow(FOLLOW_1);
-            ruleStringLiteralExpCS();
-
-            state._fsp--;
-            if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getStringLiteralExpCSRule()); 
-            }
-            match(input,EOF,FOLLOW_2); if (state.failed) return ;
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-        }
-        return ;
-    }
-    // $ANTLR end "entryRuleStringLiteralExpCS"
-
-
-    // $ANTLR start "ruleStringLiteralExpCS"
-    // InternalMiniOCLCS.g:463:1: ruleStringLiteralExpCS : ( ( rule__StringLiteralExpCS__StringSymbolAssignment ) ) ;
-    public final void ruleStringLiteralExpCS() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-        	
-        try {
-            // InternalMiniOCLCS.g:467:2: ( ( ( rule__StringLiteralExpCS__StringSymbolAssignment ) ) )
-            // InternalMiniOCLCS.g:468:2: ( ( rule__StringLiteralExpCS__StringSymbolAssignment ) )
-            {
-            // InternalMiniOCLCS.g:468:2: ( ( rule__StringLiteralExpCS__StringSymbolAssignment ) )
-            // InternalMiniOCLCS.g:469:3: ( rule__StringLiteralExpCS__StringSymbolAssignment )
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolAssignment()); 
-            }
-            // InternalMiniOCLCS.g:470:3: ( rule__StringLiteralExpCS__StringSymbolAssignment )
-            // InternalMiniOCLCS.g:470:4: rule__StringLiteralExpCS__StringSymbolAssignment
-            {
-            pushFollow(FOLLOW_2);
-            rule__StringLiteralExpCS__StringSymbolAssignment();
-
-            state._fsp--;
-            if (state.failed) return ;
-
-            }
-
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolAssignment()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "ruleStringLiteralExpCS"
-
-
     // $ANTLR start "entryRuleBooleanLiteralExpCS"
-    // InternalMiniOCLCS.g:479:1: entryRuleBooleanLiteralExpCS : ruleBooleanLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:704:1: entryRuleBooleanLiteralExpCS : ruleBooleanLiteralExpCS EOF ;
     public final void entryRuleBooleanLiteralExpCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:480:1: ( ruleBooleanLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:481:1: ruleBooleanLiteralExpCS EOF
+            // InternalMiniOCLCS.g:705:1: ( ruleBooleanLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:706:1: ruleBooleanLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSRule()); 
@@ -1582,23 +2363,23 @@
 
 
     // $ANTLR start "ruleBooleanLiteralExpCS"
-    // InternalMiniOCLCS.g:488:1: ruleBooleanLiteralExpCS : ( ( rule__BooleanLiteralExpCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:713:1: ruleBooleanLiteralExpCS : ( ( rule__BooleanLiteralExpCS__Group__0 ) ) ;
     public final void ruleBooleanLiteralExpCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:492:2: ( ( ( rule__BooleanLiteralExpCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:493:2: ( ( rule__BooleanLiteralExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:717:2: ( ( ( rule__BooleanLiteralExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:718:2: ( ( rule__BooleanLiteralExpCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:493:2: ( ( rule__BooleanLiteralExpCS__Group__0 ) )
-            // InternalMiniOCLCS.g:494:3: ( rule__BooleanLiteralExpCS__Group__0 )
+            // InternalMiniOCLCS.g:718:2: ( ( rule__BooleanLiteralExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:719:3: ( rule__BooleanLiteralExpCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:495:3: ( rule__BooleanLiteralExpCS__Group__0 )
-            // InternalMiniOCLCS.g:495:4: rule__BooleanLiteralExpCS__Group__0
+            // InternalMiniOCLCS.g:720:3: ( rule__BooleanLiteralExpCS__Group__0 )
+            // InternalMiniOCLCS.g:720:4: rule__BooleanLiteralExpCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__BooleanLiteralExpCS__Group__0();
@@ -1632,12 +2413,437 @@
     // $ANTLR end "ruleBooleanLiteralExpCS"
 
 
+    // $ANTLR start "entryRuleNullLiteralExpCS"
+    // InternalMiniOCLCS.g:729:1: entryRuleNullLiteralExpCS : ruleNullLiteralExpCS EOF ;
+    public final void entryRuleNullLiteralExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:730:1: ( ruleNullLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:731:1: ruleNullLiteralExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNullLiteralExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleNullLiteralExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNullLiteralExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleNullLiteralExpCS"
+
+
+    // $ANTLR start "ruleNullLiteralExpCS"
+    // InternalMiniOCLCS.g:738:1: ruleNullLiteralExpCS : ( ( rule__NullLiteralExpCS__Group__0 ) ) ;
+    public final void ruleNullLiteralExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:742:2: ( ( ( rule__NullLiteralExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:743:2: ( ( rule__NullLiteralExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:743:2: ( ( rule__NullLiteralExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:744:3: ( rule__NullLiteralExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNullLiteralExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:745:3: ( rule__NullLiteralExpCS__Group__0 )
+            // InternalMiniOCLCS.g:745:4: rule__NullLiteralExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__NullLiteralExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNullLiteralExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleNullLiteralExpCS"
+
+
+    // $ANTLR start "entryRuleCollectionLiteralExpCS"
+    // InternalMiniOCLCS.g:754:1: entryRuleCollectionLiteralExpCS : ruleCollectionLiteralExpCS EOF ;
+    public final void entryRuleCollectionLiteralExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:755:1: ( ruleCollectionLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:756:1: ruleCollectionLiteralExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleCollectionLiteralExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleCollectionLiteralExpCS"
+
+
+    // $ANTLR start "ruleCollectionLiteralExpCS"
+    // InternalMiniOCLCS.g:763:1: ruleCollectionLiteralExpCS : ( ( rule__CollectionLiteralExpCS__Group__0 ) ) ;
+    public final void ruleCollectionLiteralExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:767:2: ( ( ( rule__CollectionLiteralExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:768:2: ( ( rule__CollectionLiteralExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:768:2: ( ( rule__CollectionLiteralExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:769:3: ( rule__CollectionLiteralExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:770:3: ( rule__CollectionLiteralExpCS__Group__0 )
+            // InternalMiniOCLCS.g:770:4: rule__CollectionLiteralExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCollectionLiteralExpCS"
+
+
+    // $ANTLR start "entryRuleCollectionLiteralPartCS"
+    // InternalMiniOCLCS.g:779:1: entryRuleCollectionLiteralPartCS : ruleCollectionLiteralPartCS EOF ;
+    public final void entryRuleCollectionLiteralPartCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:780:1: ( ruleCollectionLiteralPartCS EOF )
+            // InternalMiniOCLCS.g:781:1: ruleCollectionLiteralPartCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleCollectionLiteralPartCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleCollectionLiteralPartCS"
+
+
+    // $ANTLR start "ruleCollectionLiteralPartCS"
+    // InternalMiniOCLCS.g:788:1: ruleCollectionLiteralPartCS : ( ( rule__CollectionLiteralPartCS__Group__0 ) ) ;
+    public final void ruleCollectionLiteralPartCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:792:2: ( ( ( rule__CollectionLiteralPartCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:793:2: ( ( rule__CollectionLiteralPartCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:793:2: ( ( rule__CollectionLiteralPartCS__Group__0 ) )
+            // InternalMiniOCLCS.g:794:3: ( rule__CollectionLiteralPartCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:795:3: ( rule__CollectionLiteralPartCS__Group__0 )
+            // InternalMiniOCLCS.g:795:4: rule__CollectionLiteralPartCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCollectionLiteralPartCS"
+
+
+    // $ANTLR start "entryRuleLetExpCS"
+    // InternalMiniOCLCS.g:804:1: entryRuleLetExpCS : ruleLetExpCS EOF ;
+    public final void entryRuleLetExpCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:805:1: ( ruleLetExpCS EOF )
+            // InternalMiniOCLCS.g:806:1: ruleLetExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleLetExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleLetExpCS"
+
+
+    // $ANTLR start "ruleLetExpCS"
+    // InternalMiniOCLCS.g:813:1: ruleLetExpCS : ( ( rule__LetExpCS__Group__0 ) ) ;
+    public final void ruleLetExpCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:817:2: ( ( ( rule__LetExpCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:818:2: ( ( rule__LetExpCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:818:2: ( ( rule__LetExpCS__Group__0 ) )
+            // InternalMiniOCLCS.g:819:3: ( rule__LetExpCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:820:3: ( rule__LetExpCS__Group__0 )
+            // InternalMiniOCLCS.g:820:4: rule__LetExpCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleLetExpCS"
+
+
+    // $ANTLR start "entryRuleLetVarCS"
+    // InternalMiniOCLCS.g:829:1: entryRuleLetVarCS : ruleLetVarCS EOF ;
+    public final void entryRuleLetVarCS() throws RecognitionException {
+        try {
+            // InternalMiniOCLCS.g:830:1: ( ruleLetVarCS EOF )
+            // InternalMiniOCLCS.g:831:1: ruleLetVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            ruleLetVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSRule()); 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleLetVarCS"
+
+
+    // $ANTLR start "ruleLetVarCS"
+    // InternalMiniOCLCS.g:838:1: ruleLetVarCS : ( ( rule__LetVarCS__Group__0 ) ) ;
+    public final void ruleLetVarCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:842:2: ( ( ( rule__LetVarCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:843:2: ( ( rule__LetVarCS__Group__0 ) )
+            {
+            // InternalMiniOCLCS.g:843:2: ( ( rule__LetVarCS__Group__0 ) )
+            // InternalMiniOCLCS.g:844:3: ( rule__LetVarCS__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getGroup()); 
+            }
+            // InternalMiniOCLCS.g:845:3: ( rule__LetVarCS__Group__0 )
+            // InternalMiniOCLCS.g:845:4: rule__LetVarCS__Group__0
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleLetVarCS"
+
+
     // $ANTLR start "entryRulePathNameCS"
-    // InternalMiniOCLCS.g:504:1: entryRulePathNameCS : rulePathNameCS EOF ;
+    // InternalMiniOCLCS.g:854:1: entryRulePathNameCS : rulePathNameCS EOF ;
     public final void entryRulePathNameCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:505:1: ( rulePathNameCS EOF )
-            // InternalMiniOCLCS.g:506:1: rulePathNameCS EOF
+            // InternalMiniOCLCS.g:855:1: ( rulePathNameCS EOF )
+            // InternalMiniOCLCS.g:856:1: rulePathNameCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSRule()); 
@@ -1667,23 +2873,23 @@
 
 
     // $ANTLR start "rulePathNameCS"
-    // InternalMiniOCLCS.g:513:1: rulePathNameCS : ( ( rule__PathNameCS__Group__0 ) ) ;
+    // InternalMiniOCLCS.g:863:1: rulePathNameCS : ( ( rule__PathNameCS__Group__0 ) ) ;
     public final void rulePathNameCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:517:2: ( ( ( rule__PathNameCS__Group__0 ) ) )
-            // InternalMiniOCLCS.g:518:2: ( ( rule__PathNameCS__Group__0 ) )
+            // InternalMiniOCLCS.g:867:2: ( ( ( rule__PathNameCS__Group__0 ) ) )
+            // InternalMiniOCLCS.g:868:2: ( ( rule__PathNameCS__Group__0 ) )
             {
-            // InternalMiniOCLCS.g:518:2: ( ( rule__PathNameCS__Group__0 ) )
-            // InternalMiniOCLCS.g:519:3: ( rule__PathNameCS__Group__0 )
+            // InternalMiniOCLCS.g:868:2: ( ( rule__PathNameCS__Group__0 ) )
+            // InternalMiniOCLCS.g:869:3: ( rule__PathNameCS__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getGroup()); 
             }
-            // InternalMiniOCLCS.g:520:3: ( rule__PathNameCS__Group__0 )
-            // InternalMiniOCLCS.g:520:4: rule__PathNameCS__Group__0
+            // InternalMiniOCLCS.g:870:3: ( rule__PathNameCS__Group__0 )
+            // InternalMiniOCLCS.g:870:4: rule__PathNameCS__Group__0
             {
             pushFollow(FOLLOW_2);
             rule__PathNameCS__Group__0();
@@ -1718,11 +2924,11 @@
 
 
     // $ANTLR start "entryRulePathElementCS"
-    // InternalMiniOCLCS.g:529:1: entryRulePathElementCS : rulePathElementCS EOF ;
+    // InternalMiniOCLCS.g:879:1: entryRulePathElementCS : rulePathElementCS EOF ;
     public final void entryRulePathElementCS() throws RecognitionException {
         try {
-            // InternalMiniOCLCS.g:530:1: ( rulePathElementCS EOF )
-            // InternalMiniOCLCS.g:531:1: rulePathElementCS EOF
+            // InternalMiniOCLCS.g:880:1: ( rulePathElementCS EOF )
+            // InternalMiniOCLCS.g:881:1: rulePathElementCS EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathElementCSRule()); 
@@ -1752,23 +2958,23 @@
 
 
     // $ANTLR start "rulePathElementCS"
-    // InternalMiniOCLCS.g:538:1: rulePathElementCS : ( ( rule__PathElementCS__ElementNameAssignment ) ) ;
+    // InternalMiniOCLCS.g:888:1: rulePathElementCS : ( ( rule__PathElementCS__ElementNameAssignment ) ) ;
     public final void rulePathElementCS() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:542:2: ( ( ( rule__PathElementCS__ElementNameAssignment ) ) )
-            // InternalMiniOCLCS.g:543:2: ( ( rule__PathElementCS__ElementNameAssignment ) )
+            // InternalMiniOCLCS.g:892:2: ( ( ( rule__PathElementCS__ElementNameAssignment ) ) )
+            // InternalMiniOCLCS.g:893:2: ( ( rule__PathElementCS__ElementNameAssignment ) )
             {
-            // InternalMiniOCLCS.g:543:2: ( ( rule__PathElementCS__ElementNameAssignment ) )
-            // InternalMiniOCLCS.g:544:3: ( rule__PathElementCS__ElementNameAssignment )
+            // InternalMiniOCLCS.g:893:2: ( ( rule__PathElementCS__ElementNameAssignment ) )
+            // InternalMiniOCLCS.g:894:3: ( rule__PathElementCS__ElementNameAssignment )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathElementCSAccess().getElementNameAssignment()); 
             }
-            // InternalMiniOCLCS.g:545:3: ( rule__PathElementCS__ElementNameAssignment )
-            // InternalMiniOCLCS.g:545:4: rule__PathElementCS__ElementNameAssignment
+            // InternalMiniOCLCS.g:895:3: ( rule__PathElementCS__ElementNameAssignment )
+            // InternalMiniOCLCS.g:895:4: rule__PathElementCS__ElementNameAssignment
             {
             pushFollow(FOLLOW_2);
             rule__PathElementCS__ElementNameAssignment();
@@ -1802,21 +3008,68 @@
     // $ANTLR end "rulePathElementCS"
 
 
+    // $ANTLR start "ruleCollectionKindCS"
+    // InternalMiniOCLCS.g:904:1: ruleCollectionKindCS : ( ( 'Collection' ) ) ;
+    public final void ruleCollectionKindCS() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:908:1: ( ( ( 'Collection' ) ) )
+            // InternalMiniOCLCS.g:909:2: ( ( 'Collection' ) )
+            {
+            // InternalMiniOCLCS.g:909:2: ( ( 'Collection' ) )
+            // InternalMiniOCLCS.g:910:3: ( 'Collection' )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); 
+            }
+            // InternalMiniOCLCS.g:911:3: ( 'Collection' )
+            // InternalMiniOCLCS.g:911:4: 'Collection'
+            {
+            match(input,11,FOLLOW_2); if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleCollectionKindCS"
+
+
     // $ANTLR start "rule__RootCS__Alternatives"
-    // InternalMiniOCLCS.g:553:1: rule__RootCS__Alternatives : ( ( ( rule__RootCS__PackagesAssignment_0 ) ) | ( ( rule__RootCS__ContraintsAssignment_1 ) ) );
+    // InternalMiniOCLCS.g:919:1: rule__RootCS__Alternatives : ( ( ( rule__RootCS__PackagesAssignment_0 ) ) | ( ( rule__RootCS__ContraintsAssignment_1 ) ) );
     public final void rule__RootCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:557:1: ( ( ( rule__RootCS__PackagesAssignment_0 ) ) | ( ( rule__RootCS__ContraintsAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:923:1: ( ( ( rule__RootCS__PackagesAssignment_0 ) ) | ( ( rule__RootCS__ContraintsAssignment_1 ) ) )
             int alt2=2;
             int LA2_0 = input.LA(1);
 
-            if ( (LA2_0==16) ) {
+            if ( (LA2_0==20) ) {
                 alt2=1;
             }
-            else if ( (LA2_0==28) ) {
+            else if ( (LA2_0==35) ) {
                 alt2=2;
             }
             else {
@@ -1828,16 +3081,16 @@
             }
             switch (alt2) {
                 case 1 :
-                    // InternalMiniOCLCS.g:558:2: ( ( rule__RootCS__PackagesAssignment_0 ) )
+                    // InternalMiniOCLCS.g:924:2: ( ( rule__RootCS__PackagesAssignment_0 ) )
                     {
-                    // InternalMiniOCLCS.g:558:2: ( ( rule__RootCS__PackagesAssignment_0 ) )
-                    // InternalMiniOCLCS.g:559:3: ( rule__RootCS__PackagesAssignment_0 )
+                    // InternalMiniOCLCS.g:924:2: ( ( rule__RootCS__PackagesAssignment_0 ) )
+                    // InternalMiniOCLCS.g:925:3: ( rule__RootCS__PackagesAssignment_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getRootCSAccess().getPackagesAssignment_0()); 
                     }
-                    // InternalMiniOCLCS.g:560:3: ( rule__RootCS__PackagesAssignment_0 )
-                    // InternalMiniOCLCS.g:560:4: rule__RootCS__PackagesAssignment_0
+                    // InternalMiniOCLCS.g:926:3: ( rule__RootCS__PackagesAssignment_0 )
+                    // InternalMiniOCLCS.g:926:4: rule__RootCS__PackagesAssignment_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__RootCS__PackagesAssignment_0();
@@ -1857,16 +3110,16 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:564:2: ( ( rule__RootCS__ContraintsAssignment_1 ) )
+                    // InternalMiniOCLCS.g:930:2: ( ( rule__RootCS__ContraintsAssignment_1 ) )
                     {
-                    // InternalMiniOCLCS.g:564:2: ( ( rule__RootCS__ContraintsAssignment_1 ) )
-                    // InternalMiniOCLCS.g:565:3: ( rule__RootCS__ContraintsAssignment_1 )
+                    // InternalMiniOCLCS.g:930:2: ( ( rule__RootCS__ContraintsAssignment_1 ) )
+                    // InternalMiniOCLCS.g:931:3: ( rule__RootCS__ContraintsAssignment_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getRootCSAccess().getContraintsAssignment_1()); 
                     }
-                    // InternalMiniOCLCS.g:566:3: ( rule__RootCS__ContraintsAssignment_1 )
-                    // InternalMiniOCLCS.g:566:4: rule__RootCS__ContraintsAssignment_1
+                    // InternalMiniOCLCS.g:932:3: ( rule__RootCS__ContraintsAssignment_1 )
+                    // InternalMiniOCLCS.g:932:4: rule__RootCS__ContraintsAssignment_1
                     {
                     pushFollow(FOLLOW_2);
                     rule__RootCS__ContraintsAssignment_1();
@@ -1903,20 +3156,20 @@
 
 
     // $ANTLR start "rule__PackageCS__Alternatives_3"
-    // InternalMiniOCLCS.g:574:1: rule__PackageCS__Alternatives_3 : ( ( ( rule__PackageCS__PackagesAssignment_3_0 ) ) | ( ( rule__PackageCS__ClassesAssignment_3_1 ) ) );
+    // InternalMiniOCLCS.g:940:1: rule__PackageCS__Alternatives_3 : ( ( ( rule__PackageCS__PackagesAssignment_3_0 ) ) | ( ( rule__PackageCS__ClassifiersAssignment_3_1 ) ) );
     public final void rule__PackageCS__Alternatives_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:578:1: ( ( ( rule__PackageCS__PackagesAssignment_3_0 ) ) | ( ( rule__PackageCS__ClassesAssignment_3_1 ) ) )
+            // InternalMiniOCLCS.g:944:1: ( ( ( rule__PackageCS__PackagesAssignment_3_0 ) ) | ( ( rule__PackageCS__ClassifiersAssignment_3_1 ) ) )
             int alt3=2;
             int LA3_0 = input.LA(1);
 
-            if ( (LA3_0==16) ) {
+            if ( (LA3_0==20) ) {
                 alt3=1;
             }
-            else if ( (LA3_0==19) ) {
+            else if ( (LA3_0==23||LA3_0==25) ) {
                 alt3=2;
             }
             else {
@@ -1928,16 +3181,16 @@
             }
             switch (alt3) {
                 case 1 :
-                    // InternalMiniOCLCS.g:579:2: ( ( rule__PackageCS__PackagesAssignment_3_0 ) )
+                    // InternalMiniOCLCS.g:945:2: ( ( rule__PackageCS__PackagesAssignment_3_0 ) )
                     {
-                    // InternalMiniOCLCS.g:579:2: ( ( rule__PackageCS__PackagesAssignment_3_0 ) )
-                    // InternalMiniOCLCS.g:580:3: ( rule__PackageCS__PackagesAssignment_3_0 )
+                    // InternalMiniOCLCS.g:945:2: ( ( rule__PackageCS__PackagesAssignment_3_0 ) )
+                    // InternalMiniOCLCS.g:946:3: ( rule__PackageCS__PackagesAssignment_3_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getPackageCSAccess().getPackagesAssignment_3_0()); 
                     }
-                    // InternalMiniOCLCS.g:581:3: ( rule__PackageCS__PackagesAssignment_3_0 )
-                    // InternalMiniOCLCS.g:581:4: rule__PackageCS__PackagesAssignment_3_0
+                    // InternalMiniOCLCS.g:947:3: ( rule__PackageCS__PackagesAssignment_3_0 )
+                    // InternalMiniOCLCS.g:947:4: rule__PackageCS__PackagesAssignment_3_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__PackageCS__PackagesAssignment_3_0();
@@ -1957,19 +3210,19 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:585:2: ( ( rule__PackageCS__ClassesAssignment_3_1 ) )
+                    // InternalMiniOCLCS.g:951:2: ( ( rule__PackageCS__ClassifiersAssignment_3_1 ) )
                     {
-                    // InternalMiniOCLCS.g:585:2: ( ( rule__PackageCS__ClassesAssignment_3_1 ) )
-                    // InternalMiniOCLCS.g:586:3: ( rule__PackageCS__ClassesAssignment_3_1 )
+                    // InternalMiniOCLCS.g:951:2: ( ( rule__PackageCS__ClassifiersAssignment_3_1 ) )
+                    // InternalMiniOCLCS.g:952:3: ( rule__PackageCS__ClassifiersAssignment_3_1 )
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); 
+                       before(grammarAccess.getPackageCSAccess().getClassifiersAssignment_3_1()); 
                     }
-                    // InternalMiniOCLCS.g:587:3: ( rule__PackageCS__ClassesAssignment_3_1 )
-                    // InternalMiniOCLCS.g:587:4: rule__PackageCS__ClassesAssignment_3_1
+                    // InternalMiniOCLCS.g:953:3: ( rule__PackageCS__ClassifiersAssignment_3_1 )
+                    // InternalMiniOCLCS.g:953:4: rule__PackageCS__ClassifiersAssignment_3_1
                     {
                     pushFollow(FOLLOW_2);
-                    rule__PackageCS__ClassesAssignment_3_1();
+                    rule__PackageCS__ClassifiersAssignment_3_1();
 
                     state._fsp--;
                     if (state.failed) return ;
@@ -1977,7 +3230,7 @@
                     }
 
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getPackageCSAccess().getClassesAssignment_3_1()); 
+                       after(grammarAccess.getPackageCSAccess().getClassifiersAssignment_3_1()); 
                     }
 
                     }
@@ -2002,21 +3255,21 @@
     // $ANTLR end "rule__PackageCS__Alternatives_3"
 
 
-    // $ANTLR start "rule__ClassCS__Alternatives_4"
-    // InternalMiniOCLCS.g:595:1: rule__ClassCS__Alternatives_4 : ( ( ( rule__ClassCS__PropertiesAssignment_4_0 ) ) | ( ( rule__ClassCS__OperationsAssignment_4_1 ) ) );
-    public final void rule__ClassCS__Alternatives_4() throws RecognitionException {
+    // $ANTLR start "rule__ClassifierCS__Alternatives"
+    // InternalMiniOCLCS.g:961:1: rule__ClassifierCS__Alternatives : ( ( ruleClassCS ) | ( ruleDatatypeCS ) );
+    public final void rule__ClassifierCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:599:1: ( ( ( rule__ClassCS__PropertiesAssignment_4_0 ) ) | ( ( rule__ClassCS__OperationsAssignment_4_1 ) ) )
+            // InternalMiniOCLCS.g:965:1: ( ( ruleClassCS ) | ( ruleDatatypeCS ) )
             int alt4=2;
             int LA4_0 = input.LA(1);
 
-            if ( (LA4_0==21) ) {
+            if ( (LA4_0==23) ) {
                 alt4=1;
             }
-            else if ( (LA4_0==24) ) {
+            else if ( (LA4_0==25) ) {
                 alt4=2;
             }
             else {
@@ -2028,16 +3281,104 @@
             }
             switch (alt4) {
                 case 1 :
-                    // InternalMiniOCLCS.g:600:2: ( ( rule__ClassCS__PropertiesAssignment_4_0 ) )
+                    // InternalMiniOCLCS.g:966:2: ( ruleClassCS )
                     {
-                    // InternalMiniOCLCS.g:600:2: ( ( rule__ClassCS__PropertiesAssignment_4_0 ) )
-                    // InternalMiniOCLCS.g:601:3: ( rule__ClassCS__PropertiesAssignment_4_0 )
+                    // InternalMiniOCLCS.g:966:2: ( ruleClassCS )
+                    // InternalMiniOCLCS.g:967:3: ruleClassCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleClassCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:972:2: ( ruleDatatypeCS )
+                    {
+                    // InternalMiniOCLCS.g:972:2: ( ruleDatatypeCS )
+                    // InternalMiniOCLCS.g:973:3: ruleDatatypeCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleDatatypeCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ClassifierCS__Alternatives"
+
+
+    // $ANTLR start "rule__ClassCS__Alternatives_4"
+    // InternalMiniOCLCS.g:982:1: rule__ClassCS__Alternatives_4 : ( ( ( rule__ClassCS__PropertiesAssignment_4_0 ) ) | ( ( rule__ClassCS__OperationsAssignment_4_1 ) ) );
+    public final void rule__ClassCS__Alternatives_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:986:1: ( ( ( rule__ClassCS__PropertiesAssignment_4_0 ) ) | ( ( rule__ClassCS__OperationsAssignment_4_1 ) ) )
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( ((LA5_0>=12 && LA5_0<=14)) ) {
+                alt5=1;
+            }
+            else if ( (LA5_0==31) ) {
+                alt5=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+            }
+            switch (alt5) {
+                case 1 :
+                    // InternalMiniOCLCS.g:987:2: ( ( rule__ClassCS__PropertiesAssignment_4_0 ) )
+                    {
+                    // InternalMiniOCLCS.g:987:2: ( ( rule__ClassCS__PropertiesAssignment_4_0 ) )
+                    // InternalMiniOCLCS.g:988:3: ( rule__ClassCS__PropertiesAssignment_4_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getClassCSAccess().getPropertiesAssignment_4_0()); 
                     }
-                    // InternalMiniOCLCS.g:602:3: ( rule__ClassCS__PropertiesAssignment_4_0 )
-                    // InternalMiniOCLCS.g:602:4: rule__ClassCS__PropertiesAssignment_4_0
+                    // InternalMiniOCLCS.g:989:3: ( rule__ClassCS__PropertiesAssignment_4_0 )
+                    // InternalMiniOCLCS.g:989:4: rule__ClassCS__PropertiesAssignment_4_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__ClassCS__PropertiesAssignment_4_0();
@@ -2057,16 +3398,16 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:606:2: ( ( rule__ClassCS__OperationsAssignment_4_1 ) )
+                    // InternalMiniOCLCS.g:993:2: ( ( rule__ClassCS__OperationsAssignment_4_1 ) )
                     {
-                    // InternalMiniOCLCS.g:606:2: ( ( rule__ClassCS__OperationsAssignment_4_1 ) )
-                    // InternalMiniOCLCS.g:607:3: ( rule__ClassCS__OperationsAssignment_4_1 )
+                    // InternalMiniOCLCS.g:993:2: ( ( rule__ClassCS__OperationsAssignment_4_1 ) )
+                    // InternalMiniOCLCS.g:994:3: ( rule__ClassCS__OperationsAssignment_4_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getClassCSAccess().getOperationsAssignment_4_1()); 
                     }
-                    // InternalMiniOCLCS.g:608:3: ( rule__ClassCS__OperationsAssignment_4_1 )
-                    // InternalMiniOCLCS.g:608:4: rule__ClassCS__OperationsAssignment_4_1
+                    // InternalMiniOCLCS.g:995:3: ( rule__ClassCS__OperationsAssignment_4_1 )
+                    // InternalMiniOCLCS.g:995:4: rule__ClassCS__OperationsAssignment_4_1
                     {
                     pushFollow(FOLLOW_2);
                     rule__ClassCS__OperationsAssignment_4_1();
@@ -2102,41 +3443,387 @@
     // $ANTLR end "rule__ClassCS__Alternatives_4"
 
 
+    // $ANTLR start "rule__PropertyCS__Alternatives_0"
+    // InternalMiniOCLCS.g:1003:1: rule__PropertyCS__Alternatives_0 : ( ( 'attribute' ) | ( 'containment' ) | ( 'cross_reference' ) );
+    public final void rule__PropertyCS__Alternatives_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1007:1: ( ( 'attribute' ) | ( 'containment' ) | ( 'cross_reference' ) )
+            int alt6=3;
+            switch ( input.LA(1) ) {
+            case 12:
+                {
+                alt6=1;
+                }
+                break;
+            case 13:
+                {
+                alt6=2;
+                }
+                break;
+            case 14:
+                {
+                alt6=3;
+                }
+                break;
+            default:
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt6) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1008:2: ( 'attribute' )
+                    {
+                    // InternalMiniOCLCS.g:1008:2: ( 'attribute' )
+                    // InternalMiniOCLCS.g:1009:3: 'attribute'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0()); 
+                    }
+                    match(input,12,FOLLOW_2); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1014:2: ( 'containment' )
+                    {
+                    // InternalMiniOCLCS.g:1014:2: ( 'containment' )
+                    // InternalMiniOCLCS.g:1015:3: 'containment'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1()); 
+                    }
+                    match(input,13,FOLLOW_2); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:1020:2: ( 'cross_reference' )
+                    {
+                    // InternalMiniOCLCS.g:1020:2: ( 'cross_reference' )
+                    // InternalMiniOCLCS.g:1021:3: 'cross_reference'
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2()); 
+                    }
+                    match(input,14,FOLLOW_2); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PropertyCS__Alternatives_0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Alternatives_1"
+    // InternalMiniOCLCS.g:1030:1: rule__MultiplicityCS__Alternatives_1 : ( ( ( rule__MultiplicityCS__OptAssignment_1_0 ) ) | ( ( rule__MultiplicityCS__MultAssignment_1_1 ) ) | ( ( rule__MultiplicityCS__Group_1_2__0 ) ) );
+    public final void rule__MultiplicityCS__Alternatives_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1034:1: ( ( ( rule__MultiplicityCS__OptAssignment_1_0 ) ) | ( ( rule__MultiplicityCS__MultAssignment_1_1 ) ) | ( ( rule__MultiplicityCS__Group_1_2__0 ) ) )
+            int alt7=3;
+            switch ( input.LA(1) ) {
+            case 45:
+                {
+                alt7=1;
+                }
+                break;
+            case 46:
+                {
+                alt7=2;
+                }
+                break;
+            case RULE_INT:
+                {
+                alt7=3;
+                }
+                break;
+            default:
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1035:2: ( ( rule__MultiplicityCS__OptAssignment_1_0 ) )
+                    {
+                    // InternalMiniOCLCS.g:1035:2: ( ( rule__MultiplicityCS__OptAssignment_1_0 ) )
+                    // InternalMiniOCLCS.g:1036:3: ( rule__MultiplicityCS__OptAssignment_1_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); 
+                    }
+                    // InternalMiniOCLCS.g:1037:3: ( rule__MultiplicityCS__OptAssignment_1_0 )
+                    // InternalMiniOCLCS.g:1037:4: rule__MultiplicityCS__OptAssignment_1_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__MultiplicityCS__OptAssignment_1_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMultiplicityCSAccess().getOptAssignment_1_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1041:2: ( ( rule__MultiplicityCS__MultAssignment_1_1 ) )
+                    {
+                    // InternalMiniOCLCS.g:1041:2: ( ( rule__MultiplicityCS__MultAssignment_1_1 ) )
+                    // InternalMiniOCLCS.g:1042:3: ( rule__MultiplicityCS__MultAssignment_1_1 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); 
+                    }
+                    // InternalMiniOCLCS.g:1043:3: ( rule__MultiplicityCS__MultAssignment_1_1 )
+                    // InternalMiniOCLCS.g:1043:4: rule__MultiplicityCS__MultAssignment_1_1
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__MultiplicityCS__MultAssignment_1_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMultiplicityCSAccess().getMultAssignment_1_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:1047:2: ( ( rule__MultiplicityCS__Group_1_2__0 ) )
+                    {
+                    // InternalMiniOCLCS.g:1047:2: ( ( rule__MultiplicityCS__Group_1_2__0 ) )
+                    // InternalMiniOCLCS.g:1048:3: ( rule__MultiplicityCS__Group_1_2__0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMultiplicityCSAccess().getGroup_1_2()); 
+                    }
+                    // InternalMiniOCLCS.g:1049:3: ( rule__MultiplicityCS__Group_1_2__0 )
+                    // InternalMiniOCLCS.g:1049:4: rule__MultiplicityCS__Group_1_2__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__MultiplicityCS__Group_1_2__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMultiplicityCSAccess().getGroup_1_2()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Alternatives_1"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Alternatives_1_2_2"
+    // InternalMiniOCLCS.g:1057:1: rule__MultiplicityCS__Alternatives_1_2_2 : ( ( ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 ) ) | ( ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 ) ) );
+    public final void rule__MultiplicityCS__Alternatives_1_2_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1061:1: ( ( ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 ) ) | ( ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 ) ) )
+            int alt8=2;
+            int LA8_0 = input.LA(1);
+
+            if ( (LA8_0==RULE_INT) ) {
+                alt8=1;
+            }
+            else if ( (LA8_0==46) ) {
+                alt8=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+            switch (alt8) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1062:2: ( ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 ) )
+                    {
+                    // InternalMiniOCLCS.g:1062:2: ( ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 ) )
+                    // InternalMiniOCLCS.g:1063:3: ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_2_2_0()); 
+                    }
+                    // InternalMiniOCLCS.g:1064:3: ( rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 )
+                    // InternalMiniOCLCS.g:1064:4: rule__MultiplicityCS__UpperIntAssignment_1_2_2_0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__MultiplicityCS__UpperIntAssignment_1_2_2_0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMultiplicityCSAccess().getUpperIntAssignment_1_2_2_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1068:2: ( ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 ) )
+                    {
+                    // InternalMiniOCLCS.g:1068:2: ( ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 ) )
+                    // InternalMiniOCLCS.g:1069:3: ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 )
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_2_2_1()); 
+                    }
+                    // InternalMiniOCLCS.g:1070:3: ( rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 )
+                    // InternalMiniOCLCS.g:1070:4: rule__MultiplicityCS__UpperMultAssignment_1_2_2_1
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__MultiplicityCS__UpperMultAssignment_1_2_2_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMultiplicityCSAccess().getUpperMultAssignment_1_2_2_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Alternatives_1_2_2"
+
+
     // $ANTLR start "rule__LogicExpCS__OpAlternatives_1_1_0"
-    // InternalMiniOCLCS.g:616:1: rule__LogicExpCS__OpAlternatives_1_1_0 : ( ( '=' ) | ( '<>' ) );
+    // InternalMiniOCLCS.g:1078:1: rule__LogicExpCS__OpAlternatives_1_1_0 : ( ( '=' ) | ( '<>' ) );
     public final void rule__LogicExpCS__OpAlternatives_1_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:620:1: ( ( '=' ) | ( '<>' ) )
-            int alt5=2;
-            int LA5_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1082:1: ( ( '=' ) | ( '<>' ) )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
 
-            if ( (LA5_0==11) ) {
-                alt5=1;
+            if ( (LA9_0==15) ) {
+                alt9=1;
             }
-            else if ( (LA5_0==12) ) {
-                alt5=2;
+            else if ( (LA9_0==16) ) {
+                alt9=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 5, 0, input);
+                    new NoViableAltException("", 9, 0, input);
 
                 throw nvae;
             }
-            switch (alt5) {
+            switch (alt9) {
                 case 1 :
-                    // InternalMiniOCLCS.g:621:2: ( '=' )
+                    // InternalMiniOCLCS.g:1083:2: ( '=' )
                     {
-                    // InternalMiniOCLCS.g:621:2: ( '=' )
-                    // InternalMiniOCLCS.g:622:3: '='
+                    // InternalMiniOCLCS.g:1083:2: ( '=' )
+                    // InternalMiniOCLCS.g:1084:3: '='
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLogicExpCSAccess().getOpEqualsSignKeyword_1_1_0_0()); 
                     }
-                    match(input,11,FOLLOW_2); if (state.failed) return ;
+                    match(input,15,FOLLOW_2); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getLogicExpCSAccess().getOpEqualsSignKeyword_1_1_0_0()); 
                     }
@@ -2147,15 +3834,15 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:627:2: ( '<>' )
+                    // InternalMiniOCLCS.g:1089:2: ( '<>' )
                     {
-                    // InternalMiniOCLCS.g:627:2: ( '<>' )
-                    // InternalMiniOCLCS.g:628:3: '<>'
+                    // InternalMiniOCLCS.g:1089:2: ( '<>' )
+                    // InternalMiniOCLCS.g:1090:3: '<>'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLogicExpCSAccess().getOpLessThanSignGreaterThanSignKeyword_1_1_0_1()); 
                     }
-                    match(input,12,FOLLOW_2); if (state.failed) return ;
+                    match(input,16,FOLLOW_2); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getLogicExpCSAccess().getOpLessThanSignGreaterThanSignKeyword_1_1_0_1()); 
                     }
@@ -2183,40 +3870,40 @@
 
 
     // $ANTLR start "rule__CallExpCS__OpAlternatives_1_1_0"
-    // InternalMiniOCLCS.g:637:1: rule__CallExpCS__OpAlternatives_1_1_0 : ( ( '.' ) | ( '->' ) );
+    // InternalMiniOCLCS.g:1099:1: rule__CallExpCS__OpAlternatives_1_1_0 : ( ( '.' ) | ( '->' ) );
     public final void rule__CallExpCS__OpAlternatives_1_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:641:1: ( ( '.' ) | ( '->' ) )
-            int alt6=2;
-            int LA6_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1103:1: ( ( '.' ) | ( '->' ) )
+            int alt10=2;
+            int LA10_0 = input.LA(1);
 
-            if ( (LA6_0==13) ) {
-                alt6=1;
+            if ( (LA10_0==17) ) {
+                alt10=1;
             }
-            else if ( (LA6_0==14) ) {
-                alt6=2;
+            else if ( (LA10_0==18) ) {
+                alt10=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 6, 0, input);
+                    new NoViableAltException("", 10, 0, input);
 
                 throw nvae;
             }
-            switch (alt6) {
+            switch (alt10) {
                 case 1 :
-                    // InternalMiniOCLCS.g:642:2: ( '.' )
+                    // InternalMiniOCLCS.g:1104:2: ( '.' )
                     {
-                    // InternalMiniOCLCS.g:642:2: ( '.' )
-                    // InternalMiniOCLCS.g:643:3: '.'
+                    // InternalMiniOCLCS.g:1104:2: ( '.' )
+                    // InternalMiniOCLCS.g:1105:3: '.'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCallExpCSAccess().getOpFullStopKeyword_1_1_0_0()); 
                     }
-                    match(input,13,FOLLOW_2); if (state.failed) return ;
+                    match(input,17,FOLLOW_2); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCallExpCSAccess().getOpFullStopKeyword_1_1_0_0()); 
                     }
@@ -2227,15 +3914,15 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:648:2: ( '->' )
+                    // InternalMiniOCLCS.g:1110:2: ( '->' )
                     {
-                    // InternalMiniOCLCS.g:648:2: ( '->' )
-                    // InternalMiniOCLCS.g:649:3: '->'
+                    // InternalMiniOCLCS.g:1110:2: ( '->' )
+                    // InternalMiniOCLCS.g:1111:3: '->'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getCallExpCSAccess().getOpHyphenMinusGreaterThanSignKeyword_1_1_0_1()); 
                     }
-                    match(input,14,FOLLOW_2); if (state.failed) return ;
+                    match(input,18,FOLLOW_2); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getCallExpCSAccess().getOpHyphenMinusGreaterThanSignKeyword_1_1_0_1()); 
                     }
@@ -2263,46 +3950,64 @@
 
 
     // $ANTLR start "rule__PrimaryExpCS__Alternatives"
-    // InternalMiniOCLCS.g:658:1: rule__PrimaryExpCS__Alternatives : ( ( ruleNameExpCS ) | ( ruleLiteralExpCS ) );
+    // InternalMiniOCLCS.g:1120:1: rule__PrimaryExpCS__Alternatives : ( ( ruleSelfExpCS ) | ( ruleNameExpCS ) | ( ruleLiteralExpCS ) | ( ruleLetExpCS ) );
     public final void rule__PrimaryExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:662:1: ( ( ruleNameExpCS ) | ( ruleLiteralExpCS ) )
-            int alt7=2;
-            int LA7_0 = input.LA(1);
-
-            if ( (LA7_0==RULE_ID) ) {
-                alt7=1;
-            }
-            else if ( ((LA7_0>=RULE_INT && LA7_0<=RULE_STRING)||LA7_0==15||LA7_0==31) ) {
-                alt7=2;
-            }
-            else {
+            // InternalMiniOCLCS.g:1124:1: ( ( ruleSelfExpCS ) | ( ruleNameExpCS ) | ( ruleLiteralExpCS ) | ( ruleLetExpCS ) )
+            int alt11=4;
+            switch ( input.LA(1) ) {
+            case 37:
+                {
+                alt11=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt11=2;
+                }
+                break;
+            case RULE_INT:
+            case 11:
+            case 19:
+            case 41:
+            case 47:
+                {
+                alt11=3;
+                }
+                break;
+            case 42:
+                {
+                alt11=4;
+                }
+                break;
+            default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 7, 0, input);
+                    new NoViableAltException("", 11, 0, input);
 
                 throw nvae;
             }
-            switch (alt7) {
+
+            switch (alt11) {
                 case 1 :
-                    // InternalMiniOCLCS.g:663:2: ( ruleNameExpCS )
+                    // InternalMiniOCLCS.g:1125:2: ( ruleSelfExpCS )
                     {
-                    // InternalMiniOCLCS.g:663:2: ( ruleNameExpCS )
-                    // InternalMiniOCLCS.g:664:3: ruleNameExpCS
+                    // InternalMiniOCLCS.g:1125:2: ( ruleSelfExpCS )
+                    // InternalMiniOCLCS.g:1126:3: ruleSelfExpCS
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0()); 
+                       before(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); 
                     }
                     pushFollow(FOLLOW_2);
-                    ruleNameExpCS();
+                    ruleSelfExpCS();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0()); 
+                       after(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0()); 
                     }
 
                     }
@@ -2311,13 +4016,36 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:669:2: ( ruleLiteralExpCS )
+                    // InternalMiniOCLCS.g:1131:2: ( ruleNameExpCS )
                     {
-                    // InternalMiniOCLCS.g:669:2: ( ruleLiteralExpCS )
-                    // InternalMiniOCLCS.g:670:3: ruleLiteralExpCS
+                    // InternalMiniOCLCS.g:1131:2: ( ruleNameExpCS )
+                    // InternalMiniOCLCS.g:1132:3: ruleNameExpCS
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1()); 
+                       before(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleNameExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:1137:2: ( ruleLiteralExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1137:2: ( ruleLiteralExpCS )
+                    // InternalMiniOCLCS.g:1138:3: ruleLiteralExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); 
                     }
                     pushFollow(FOLLOW_2);
                     ruleLiteralExpCS();
@@ -2325,7 +4053,30 @@
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1()); 
+                       after(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalMiniOCLCS.g:1143:2: ( ruleLetExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1143:2: ( ruleLetExpCS )
+                    // InternalMiniOCLCS.g:1144:3: ruleLetExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleLetExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3()); 
                     }
 
                     }
@@ -2350,46 +4101,227 @@
     // $ANTLR end "rule__PrimaryExpCS__Alternatives"
 
 
+    // $ANTLR start "rule__NavigationExpCS__Alternatives"
+    // InternalMiniOCLCS.g:1153:1: rule__NavigationExpCS__Alternatives : ( ( ruleLoopExpCS ) | ( ruleNameExpCS ) );
+    public final void rule__NavigationExpCS__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1157:1: ( ( ruleLoopExpCS ) | ( ruleNameExpCS ) )
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==38||LA12_0==40) ) {
+                alt12=1;
+            }
+            else if ( (LA12_0==RULE_ID) ) {
+                alt12=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1158:2: ( ruleLoopExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1158:2: ( ruleLoopExpCS )
+                    // InternalMiniOCLCS.g:1159:3: ruleLoopExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleLoopExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1164:2: ( ruleNameExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1164:2: ( ruleNameExpCS )
+                    // InternalMiniOCLCS.g:1165:3: ruleNameExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleNameExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NavigationExpCS__Alternatives"
+
+
+    // $ANTLR start "rule__LoopExpCS__Alternatives"
+    // InternalMiniOCLCS.g:1174:1: rule__LoopExpCS__Alternatives : ( ( ruleCollectExpCS ) | ( ruleIterateExpCS ) );
+    public final void rule__LoopExpCS__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1178:1: ( ( ruleCollectExpCS ) | ( ruleIterateExpCS ) )
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==38) ) {
+                alt13=1;
+            }
+            else if ( (LA13_0==40) ) {
+                alt13=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return ;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 13, 0, input);
+
+                throw nvae;
+            }
+            switch (alt13) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1179:2: ( ruleCollectExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1179:2: ( ruleCollectExpCS )
+                    // InternalMiniOCLCS.g:1180:3: ruleCollectExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleCollectExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1185:2: ( ruleIterateExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1185:2: ( ruleIterateExpCS )
+                    // InternalMiniOCLCS.g:1186:3: ruleIterateExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleIterateExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LoopExpCS__Alternatives"
+
+
     // $ANTLR start "rule__LiteralExpCS__Alternatives"
-    // InternalMiniOCLCS.g:679:1: rule__LiteralExpCS__Alternatives : ( ( ruleIntLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) );
+    // InternalMiniOCLCS.g:1195:1: rule__LiteralExpCS__Alternatives : ( ( ruleIntLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleNullLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) );
     public final void rule__LiteralExpCS__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:683:1: ( ( ruleIntLiteralExpCS ) | ( ruleStringLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) )
-            int alt8=3;
+            // InternalMiniOCLCS.g:1199:1: ( ( ruleIntLiteralExpCS ) | ( ruleBooleanLiteralExpCS ) | ( ruleNullLiteralExpCS ) | ( ruleCollectionLiteralExpCS ) )
+            int alt14=4;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                alt8=1;
+                alt14=1;
                 }
                 break;
-            case RULE_STRING:
+            case 19:
+            case 47:
                 {
-                alt8=2;
+                alt14=2;
                 }
                 break;
-            case 15:
-            case 31:
+            case 41:
                 {
-                alt8=3;
+                alt14=3;
+                }
+                break;
+            case 11:
+                {
+                alt14=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 8, 0, input);
+                    new NoViableAltException("", 14, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt8) {
+            switch (alt14) {
                 case 1 :
-                    // InternalMiniOCLCS.g:684:2: ( ruleIntLiteralExpCS )
+                    // InternalMiniOCLCS.g:1200:2: ( ruleIntLiteralExpCS )
                     {
-                    // InternalMiniOCLCS.g:684:2: ( ruleIntLiteralExpCS )
-                    // InternalMiniOCLCS.g:685:3: ruleIntLiteralExpCS
+                    // InternalMiniOCLCS.g:1200:2: ( ruleIntLiteralExpCS )
+                    // InternalMiniOCLCS.g:1201:3: ruleIntLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLiteralExpCSAccess().getIntLiteralExpCSParserRuleCall_0()); 
@@ -2409,21 +4341,21 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:690:2: ( ruleStringLiteralExpCS )
+                    // InternalMiniOCLCS.g:1206:2: ( ruleBooleanLiteralExpCS )
                     {
-                    // InternalMiniOCLCS.g:690:2: ( ruleStringLiteralExpCS )
-                    // InternalMiniOCLCS.g:691:3: ruleStringLiteralExpCS
+                    // InternalMiniOCLCS.g:1206:2: ( ruleBooleanLiteralExpCS )
+                    // InternalMiniOCLCS.g:1207:3: ruleBooleanLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); 
+                       before(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); 
                     }
                     pushFollow(FOLLOW_2);
-                    ruleStringLiteralExpCS();
+                    ruleBooleanLiteralExpCS();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1()); 
+                       after(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1()); 
                     }
 
                     }
@@ -2432,21 +4364,44 @@
                     }
                     break;
                 case 3 :
-                    // InternalMiniOCLCS.g:696:2: ( ruleBooleanLiteralExpCS )
+                    // InternalMiniOCLCS.g:1212:2: ( ruleNullLiteralExpCS )
                     {
-                    // InternalMiniOCLCS.g:696:2: ( ruleBooleanLiteralExpCS )
-                    // InternalMiniOCLCS.g:697:3: ruleBooleanLiteralExpCS
+                    // InternalMiniOCLCS.g:1212:2: ( ruleNullLiteralExpCS )
+                    // InternalMiniOCLCS.g:1213:3: ruleNullLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); 
+                       before(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); 
                     }
                     pushFollow(FOLLOW_2);
-                    ruleBooleanLiteralExpCS();
+                    ruleNullLiteralExpCS();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2()); 
+                       after(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // InternalMiniOCLCS.g:1218:2: ( ruleCollectionLiteralExpCS )
+                    {
+                    // InternalMiniOCLCS.g:1218:2: ( ruleCollectionLiteralExpCS )
+                    // InternalMiniOCLCS.g:1219:3: ruleCollectionLiteralExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); 
+                    }
+                    pushFollow(FOLLOW_2);
+                    ruleCollectionLiteralExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3()); 
                     }
 
                     }
@@ -2472,41 +4427,41 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Alternatives_1"
-    // InternalMiniOCLCS.g:706:1: rule__BooleanLiteralExpCS__Alternatives_1 : ( ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) ) | ( 'false' ) );
+    // InternalMiniOCLCS.g:1228:1: rule__BooleanLiteralExpCS__Alternatives_1 : ( ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) ) | ( 'false' ) );
     public final void rule__BooleanLiteralExpCS__Alternatives_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:710:1: ( ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) ) | ( 'false' ) )
-            int alt9=2;
-            int LA9_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1232:1: ( ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) ) | ( 'false' ) )
+            int alt15=2;
+            int LA15_0 = input.LA(1);
 
-            if ( (LA9_0==31) ) {
-                alt9=1;
+            if ( (LA15_0==47) ) {
+                alt15=1;
             }
-            else if ( (LA9_0==15) ) {
-                alt9=2;
+            else if ( (LA15_0==19) ) {
+                alt15=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 9, 0, input);
+                    new NoViableAltException("", 15, 0, input);
 
                 throw nvae;
             }
-            switch (alt9) {
+            switch (alt15) {
                 case 1 :
-                    // InternalMiniOCLCS.g:711:2: ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) )
+                    // InternalMiniOCLCS.g:1233:2: ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) )
                     {
-                    // InternalMiniOCLCS.g:711:2: ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) )
-                    // InternalMiniOCLCS.g:712:3: ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 )
+                    // InternalMiniOCLCS.g:1233:2: ( ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 ) )
+                    // InternalMiniOCLCS.g:1234:3: ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolAssignment_1_0()); 
                     }
-                    // InternalMiniOCLCS.g:713:3: ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 )
-                    // InternalMiniOCLCS.g:713:4: rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0
+                    // InternalMiniOCLCS.g:1235:3: ( rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 )
+                    // InternalMiniOCLCS.g:1235:4: rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0
                     {
                     pushFollow(FOLLOW_2);
                     rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0();
@@ -2526,15 +4481,15 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:717:2: ( 'false' )
+                    // InternalMiniOCLCS.g:1239:2: ( 'false' )
                     {
-                    // InternalMiniOCLCS.g:717:2: ( 'false' )
-                    // InternalMiniOCLCS.g:718:3: 'false'
+                    // InternalMiniOCLCS.g:1239:2: ( 'false' )
+                    // InternalMiniOCLCS.g:1240:3: 'false'
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getBooleanLiteralExpCSAccess().getFalseKeyword_1_1()); 
                     }
-                    match(input,15,FOLLOW_2); if (state.failed) return ;
+                    match(input,19,FOLLOW_2); if (state.failed) return ;
                     if ( state.backtracking==0 ) {
                        after(grammarAccess.getBooleanLiteralExpCSAccess().getFalseKeyword_1_1()); 
                     }
@@ -2562,14 +4517,14 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__0"
-    // InternalMiniOCLCS.g:727:1: rule__PackageCS__Group__0 : rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 ;
+    // InternalMiniOCLCS.g:1249: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 {
-            // InternalMiniOCLCS.g:731:1: ( rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 )
-            // InternalMiniOCLCS.g:732:2: rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1
+            // InternalMiniOCLCS.g:1253:1: ( rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1 )
+            // InternalMiniOCLCS.g:1254:2: rule__PackageCS__Group__0__Impl rule__PackageCS__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__PackageCS__Group__0__Impl();
@@ -2600,22 +4555,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:739:1: rule__PackageCS__Group__0__Impl : ( 'package' ) ;
+    // InternalMiniOCLCS.g:1261:1: rule__PackageCS__Group__0__Impl : ( 'package' ) ;
     public final void rule__PackageCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:743:1: ( ( 'package' ) )
-            // InternalMiniOCLCS.g:744:1: ( 'package' )
+            // InternalMiniOCLCS.g:1265:1: ( ( 'package' ) )
+            // InternalMiniOCLCS.g:1266:1: ( 'package' )
             {
-            // InternalMiniOCLCS.g:744:1: ( 'package' )
-            // InternalMiniOCLCS.g:745:2: 'package'
+            // InternalMiniOCLCS.g:1266:1: ( 'package' )
+            // InternalMiniOCLCS.g:1267:2: 'package'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); 
             }
-            match(input,16,FOLLOW_2); if (state.failed) return ;
+            match(input,20,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getPackageKeyword_0()); 
             }
@@ -2641,14 +4596,14 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__1"
-    // InternalMiniOCLCS.g:754:1: rule__PackageCS__Group__1 : rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 ;
+    // InternalMiniOCLCS.g:1276: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 {
-            // InternalMiniOCLCS.g:758:1: ( rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 )
-            // InternalMiniOCLCS.g:759:2: rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2
+            // InternalMiniOCLCS.g:1280:1: ( rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2 )
+            // InternalMiniOCLCS.g:1281:2: rule__PackageCS__Group__1__Impl rule__PackageCS__Group__2
             {
             pushFollow(FOLLOW_5);
             rule__PackageCS__Group__1__Impl();
@@ -2679,23 +4634,23 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:766:1: rule__PackageCS__Group__1__Impl : ( ( rule__PackageCS__NameAssignment_1 ) ) ;
+    // InternalMiniOCLCS.g:1288:1: rule__PackageCS__Group__1__Impl : ( ( rule__PackageCS__NameAssignment_1 ) ) ;
     public final void rule__PackageCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:770:1: ( ( ( rule__PackageCS__NameAssignment_1 ) ) )
-            // InternalMiniOCLCS.g:771:1: ( ( rule__PackageCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1292:1: ( ( ( rule__PackageCS__NameAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:1293:1: ( ( rule__PackageCS__NameAssignment_1 ) )
             {
-            // InternalMiniOCLCS.g:771:1: ( ( rule__PackageCS__NameAssignment_1 ) )
-            // InternalMiniOCLCS.g:772:2: ( rule__PackageCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1293:1: ( ( rule__PackageCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1294:2: ( rule__PackageCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNameAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:773:2: ( rule__PackageCS__NameAssignment_1 )
-            // InternalMiniOCLCS.g:773:3: rule__PackageCS__NameAssignment_1
+            // InternalMiniOCLCS.g:1295:2: ( rule__PackageCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1295:3: rule__PackageCS__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__PackageCS__NameAssignment_1();
@@ -2730,14 +4685,14 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__2"
-    // InternalMiniOCLCS.g:781:1: rule__PackageCS__Group__2 : rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 ;
+    // InternalMiniOCLCS.g:1303: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 {
-            // InternalMiniOCLCS.g:785:1: ( rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 )
-            // InternalMiniOCLCS.g:786:2: rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3
+            // InternalMiniOCLCS.g:1307:1: ( rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3 )
+            // InternalMiniOCLCS.g:1308:2: rule__PackageCS__Group__2__Impl rule__PackageCS__Group__3
             {
             pushFollow(FOLLOW_6);
             rule__PackageCS__Group__2__Impl();
@@ -2768,22 +4723,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:793:1: rule__PackageCS__Group__2__Impl : ( '{' ) ;
+    // InternalMiniOCLCS.g:1315:1: rule__PackageCS__Group__2__Impl : ( '{' ) ;
     public final void rule__PackageCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:797:1: ( ( '{' ) )
-            // InternalMiniOCLCS.g:798:1: ( '{' )
+            // InternalMiniOCLCS.g:1319:1: ( ( '{' ) )
+            // InternalMiniOCLCS.g:1320:1: ( '{' )
             {
-            // InternalMiniOCLCS.g:798:1: ( '{' )
-            // InternalMiniOCLCS.g:799:2: '{'
+            // InternalMiniOCLCS.g:1320:1: ( '{' )
+            // InternalMiniOCLCS.g:1321:2: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_2()); 
             }
-            match(input,17,FOLLOW_2); if (state.failed) return ;
+            match(input,21,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_2()); 
             }
@@ -2809,14 +4764,14 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__3"
-    // InternalMiniOCLCS.g:808:1: rule__PackageCS__Group__3 : rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 ;
+    // InternalMiniOCLCS.g:1330: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 {
-            // InternalMiniOCLCS.g:812:1: ( rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 )
-            // InternalMiniOCLCS.g:813:2: rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4
+            // InternalMiniOCLCS.g:1334:1: ( rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4 )
+            // InternalMiniOCLCS.g:1335:2: rule__PackageCS__Group__3__Impl rule__PackageCS__Group__4
             {
             pushFollow(FOLLOW_6);
             rule__PackageCS__Group__3__Impl();
@@ -2847,35 +4802,35 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:820:1: rule__PackageCS__Group__3__Impl : ( ( rule__PackageCS__Alternatives_3 )* ) ;
+    // InternalMiniOCLCS.g:1342:1: rule__PackageCS__Group__3__Impl : ( ( rule__PackageCS__Alternatives_3 )* ) ;
     public final void rule__PackageCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:824:1: ( ( ( rule__PackageCS__Alternatives_3 )* ) )
-            // InternalMiniOCLCS.g:825:1: ( ( rule__PackageCS__Alternatives_3 )* )
+            // InternalMiniOCLCS.g:1346:1: ( ( ( rule__PackageCS__Alternatives_3 )* ) )
+            // InternalMiniOCLCS.g:1347:1: ( ( rule__PackageCS__Alternatives_3 )* )
             {
-            // InternalMiniOCLCS.g:825:1: ( ( rule__PackageCS__Alternatives_3 )* )
-            // InternalMiniOCLCS.g:826:2: ( rule__PackageCS__Alternatives_3 )*
+            // InternalMiniOCLCS.g:1347:1: ( ( rule__PackageCS__Alternatives_3 )* )
+            // InternalMiniOCLCS.g:1348:2: ( rule__PackageCS__Alternatives_3 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getAlternatives_3()); 
             }
-            // InternalMiniOCLCS.g:827:2: ( rule__PackageCS__Alternatives_3 )*
-            loop10:
+            // InternalMiniOCLCS.g:1349:2: ( rule__PackageCS__Alternatives_3 )*
+            loop16:
             do {
-                int alt10=2;
-                int LA10_0 = input.LA(1);
+                int alt16=2;
+                int LA16_0 = input.LA(1);
 
-                if ( (LA10_0==16||LA10_0==19) ) {
-                    alt10=1;
+                if ( (LA16_0==20||LA16_0==23||LA16_0==25) ) {
+                    alt16=1;
                 }
 
 
-                switch (alt10) {
+                switch (alt16) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:827:3: rule__PackageCS__Alternatives_3
+            	    // InternalMiniOCLCS.g:1349:3: rule__PackageCS__Alternatives_3
             	    {
             	    pushFollow(FOLLOW_7);
             	    rule__PackageCS__Alternatives_3();
@@ -2887,7 +4842,7 @@
             	    break;
 
             	default :
-            	    break loop10;
+            	    break loop16;
                 }
             } while (true);
 
@@ -2916,14 +4871,14 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__4"
-    // InternalMiniOCLCS.g:835:1: rule__PackageCS__Group__4 : rule__PackageCS__Group__4__Impl ;
+    // InternalMiniOCLCS.g:1357:1: rule__PackageCS__Group__4 : rule__PackageCS__Group__4__Impl ;
     public final void rule__PackageCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:839:1: ( rule__PackageCS__Group__4__Impl )
-            // InternalMiniOCLCS.g:840:2: rule__PackageCS__Group__4__Impl
+            // InternalMiniOCLCS.g:1361:1: ( rule__PackageCS__Group__4__Impl )
+            // InternalMiniOCLCS.g:1362:2: rule__PackageCS__Group__4__Impl
             {
             pushFollow(FOLLOW_2);
             rule__PackageCS__Group__4__Impl();
@@ -2949,22 +4904,22 @@
 
 
     // $ANTLR start "rule__PackageCS__Group__4__Impl"
-    // InternalMiniOCLCS.g:846:1: rule__PackageCS__Group__4__Impl : ( '}' ) ;
+    // InternalMiniOCLCS.g:1368:1: rule__PackageCS__Group__4__Impl : ( '}' ) ;
     public final void rule__PackageCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:850:1: ( ( '}' ) )
-            // InternalMiniOCLCS.g:851:1: ( '}' )
+            // InternalMiniOCLCS.g:1372:1: ( ( '}' ) )
+            // InternalMiniOCLCS.g:1373:1: ( '}' )
             {
-            // InternalMiniOCLCS.g:851:1: ( '}' )
-            // InternalMiniOCLCS.g:852:2: '}'
+            // InternalMiniOCLCS.g:1373:1: ( '}' )
+            // InternalMiniOCLCS.g:1374:2: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4()); 
             }
-            match(input,18,FOLLOW_2); if (state.failed) return ;
+            match(input,22,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPackageCSAccess().getRightCurlyBracketKeyword_4()); 
             }
@@ -2990,14 +4945,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__0"
-    // InternalMiniOCLCS.g:862:1: rule__ClassCS__Group__0 : rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1 ;
+    // InternalMiniOCLCS.g:1384:1: rule__ClassCS__Group__0 : rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1 ;
     public final void rule__ClassCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:866:1: ( rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1 )
-            // InternalMiniOCLCS.g:867:2: rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1
+            // InternalMiniOCLCS.g:1388:1: ( rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1 )
+            // InternalMiniOCLCS.g:1389:2: rule__ClassCS__Group__0__Impl rule__ClassCS__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__ClassCS__Group__0__Impl();
@@ -3028,22 +4983,22 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:874:1: rule__ClassCS__Group__0__Impl : ( 'class' ) ;
+    // InternalMiniOCLCS.g:1396:1: rule__ClassCS__Group__0__Impl : ( 'class' ) ;
     public final void rule__ClassCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:878:1: ( ( 'class' ) )
-            // InternalMiniOCLCS.g:879:1: ( 'class' )
+            // InternalMiniOCLCS.g:1400:1: ( ( 'class' ) )
+            // InternalMiniOCLCS.g:1401:1: ( 'class' )
             {
-            // InternalMiniOCLCS.g:879:1: ( 'class' )
-            // InternalMiniOCLCS.g:880:2: 'class'
+            // InternalMiniOCLCS.g:1401:1: ( 'class' )
+            // InternalMiniOCLCS.g:1402:2: 'class'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getClassKeyword_0()); 
             }
-            match(input,19,FOLLOW_2); if (state.failed) return ;
+            match(input,23,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getClassCSAccess().getClassKeyword_0()); 
             }
@@ -3069,14 +5024,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__1"
-    // InternalMiniOCLCS.g:889:1: rule__ClassCS__Group__1 : rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2 ;
+    // InternalMiniOCLCS.g:1411:1: rule__ClassCS__Group__1 : rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2 ;
     public final void rule__ClassCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:893:1: ( rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2 )
-            // InternalMiniOCLCS.g:894:2: rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2
+            // InternalMiniOCLCS.g:1415:1: ( rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2 )
+            // InternalMiniOCLCS.g:1416:2: rule__ClassCS__Group__1__Impl rule__ClassCS__Group__2
             {
             pushFollow(FOLLOW_8);
             rule__ClassCS__Group__1__Impl();
@@ -3107,23 +5062,23 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:901:1: rule__ClassCS__Group__1__Impl : ( ( rule__ClassCS__NameAssignment_1 ) ) ;
+    // InternalMiniOCLCS.g:1423:1: rule__ClassCS__Group__1__Impl : ( ( rule__ClassCS__NameAssignment_1 ) ) ;
     public final void rule__ClassCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:905:1: ( ( ( rule__ClassCS__NameAssignment_1 ) ) )
-            // InternalMiniOCLCS.g:906:1: ( ( rule__ClassCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1427:1: ( ( ( rule__ClassCS__NameAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:1428:1: ( ( rule__ClassCS__NameAssignment_1 ) )
             {
-            // InternalMiniOCLCS.g:906:1: ( ( rule__ClassCS__NameAssignment_1 ) )
-            // InternalMiniOCLCS.g:907:2: ( rule__ClassCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1428:1: ( ( rule__ClassCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1429:2: ( rule__ClassCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getNameAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:908:2: ( rule__ClassCS__NameAssignment_1 )
-            // InternalMiniOCLCS.g:908:3: rule__ClassCS__NameAssignment_1
+            // InternalMiniOCLCS.g:1430:2: ( rule__ClassCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1430:3: rule__ClassCS__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__ClassCS__NameAssignment_1();
@@ -3158,14 +5113,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__2"
-    // InternalMiniOCLCS.g:916:1: rule__ClassCS__Group__2 : rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3 ;
+    // InternalMiniOCLCS.g:1438:1: rule__ClassCS__Group__2 : rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3 ;
     public final void rule__ClassCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:920:1: ( rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3 )
-            // InternalMiniOCLCS.g:921:2: rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3
+            // InternalMiniOCLCS.g:1442:1: ( rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3 )
+            // InternalMiniOCLCS.g:1443:2: rule__ClassCS__Group__2__Impl rule__ClassCS__Group__3
             {
             pushFollow(FOLLOW_8);
             rule__ClassCS__Group__2__Impl();
@@ -3196,31 +5151,31 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:928:1: rule__ClassCS__Group__2__Impl : ( ( rule__ClassCS__Group_2__0 )? ) ;
+    // InternalMiniOCLCS.g:1450:1: rule__ClassCS__Group__2__Impl : ( ( rule__ClassCS__Group_2__0 )? ) ;
     public final void rule__ClassCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:932:1: ( ( ( rule__ClassCS__Group_2__0 )? ) )
-            // InternalMiniOCLCS.g:933:1: ( ( rule__ClassCS__Group_2__0 )? )
+            // InternalMiniOCLCS.g:1454:1: ( ( ( rule__ClassCS__Group_2__0 )? ) )
+            // InternalMiniOCLCS.g:1455:1: ( ( rule__ClassCS__Group_2__0 )? )
             {
-            // InternalMiniOCLCS.g:933:1: ( ( rule__ClassCS__Group_2__0 )? )
-            // InternalMiniOCLCS.g:934:2: ( rule__ClassCS__Group_2__0 )?
+            // InternalMiniOCLCS.g:1455:1: ( ( rule__ClassCS__Group_2__0 )? )
+            // InternalMiniOCLCS.g:1456:2: ( rule__ClassCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getGroup_2()); 
             }
-            // InternalMiniOCLCS.g:935:2: ( rule__ClassCS__Group_2__0 )?
-            int alt11=2;
-            int LA11_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1457:2: ( rule__ClassCS__Group_2__0 )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
 
-            if ( (LA11_0==20) ) {
-                alt11=1;
+            if ( (LA17_0==24) ) {
+                alt17=1;
             }
-            switch (alt11) {
+            switch (alt17) {
                 case 1 :
-                    // InternalMiniOCLCS.g:935:3: rule__ClassCS__Group_2__0
+                    // InternalMiniOCLCS.g:1457:3: rule__ClassCS__Group_2__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__ClassCS__Group_2__0();
@@ -3258,14 +5213,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__3"
-    // InternalMiniOCLCS.g:943:1: rule__ClassCS__Group__3 : rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4 ;
+    // InternalMiniOCLCS.g:1465:1: rule__ClassCS__Group__3 : rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4 ;
     public final void rule__ClassCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:947:1: ( rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4 )
-            // InternalMiniOCLCS.g:948:2: rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4
+            // InternalMiniOCLCS.g:1469:1: ( rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4 )
+            // InternalMiniOCLCS.g:1470:2: rule__ClassCS__Group__3__Impl rule__ClassCS__Group__4
             {
             pushFollow(FOLLOW_9);
             rule__ClassCS__Group__3__Impl();
@@ -3296,22 +5251,22 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:955:1: rule__ClassCS__Group__3__Impl : ( '{' ) ;
+    // InternalMiniOCLCS.g:1477:1: rule__ClassCS__Group__3__Impl : ( '{' ) ;
     public final void rule__ClassCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:959:1: ( ( '{' ) )
-            // InternalMiniOCLCS.g:960:1: ( '{' )
+            // InternalMiniOCLCS.g:1481:1: ( ( '{' ) )
+            // InternalMiniOCLCS.g:1482:1: ( '{' )
             {
-            // InternalMiniOCLCS.g:960:1: ( '{' )
-            // InternalMiniOCLCS.g:961:2: '{'
+            // InternalMiniOCLCS.g:1482:1: ( '{' )
+            // InternalMiniOCLCS.g:1483:2: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getLeftCurlyBracketKeyword_3()); 
             }
-            match(input,17,FOLLOW_2); if (state.failed) return ;
+            match(input,21,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getClassCSAccess().getLeftCurlyBracketKeyword_3()); 
             }
@@ -3337,14 +5292,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__4"
-    // InternalMiniOCLCS.g:970:1: rule__ClassCS__Group__4 : rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5 ;
+    // InternalMiniOCLCS.g:1492:1: rule__ClassCS__Group__4 : rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5 ;
     public final void rule__ClassCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:974:1: ( rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5 )
-            // InternalMiniOCLCS.g:975:2: rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5
+            // InternalMiniOCLCS.g:1496:1: ( rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5 )
+            // InternalMiniOCLCS.g:1497:2: rule__ClassCS__Group__4__Impl rule__ClassCS__Group__5
             {
             pushFollow(FOLLOW_9);
             rule__ClassCS__Group__4__Impl();
@@ -3375,35 +5330,35 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__4__Impl"
-    // InternalMiniOCLCS.g:982:1: rule__ClassCS__Group__4__Impl : ( ( rule__ClassCS__Alternatives_4 )* ) ;
+    // InternalMiniOCLCS.g:1504:1: rule__ClassCS__Group__4__Impl : ( ( rule__ClassCS__Alternatives_4 )* ) ;
     public final void rule__ClassCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:986:1: ( ( ( rule__ClassCS__Alternatives_4 )* ) )
-            // InternalMiniOCLCS.g:987:1: ( ( rule__ClassCS__Alternatives_4 )* )
+            // InternalMiniOCLCS.g:1508:1: ( ( ( rule__ClassCS__Alternatives_4 )* ) )
+            // InternalMiniOCLCS.g:1509:1: ( ( rule__ClassCS__Alternatives_4 )* )
             {
-            // InternalMiniOCLCS.g:987:1: ( ( rule__ClassCS__Alternatives_4 )* )
-            // InternalMiniOCLCS.g:988:2: ( rule__ClassCS__Alternatives_4 )*
+            // InternalMiniOCLCS.g:1509:1: ( ( rule__ClassCS__Alternatives_4 )* )
+            // InternalMiniOCLCS.g:1510:2: ( rule__ClassCS__Alternatives_4 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getAlternatives_4()); 
             }
-            // InternalMiniOCLCS.g:989:2: ( rule__ClassCS__Alternatives_4 )*
-            loop12:
+            // InternalMiniOCLCS.g:1511:2: ( rule__ClassCS__Alternatives_4 )*
+            loop18:
             do {
-                int alt12=2;
-                int LA12_0 = input.LA(1);
+                int alt18=2;
+                int LA18_0 = input.LA(1);
 
-                if ( (LA12_0==21||LA12_0==24) ) {
-                    alt12=1;
+                if ( ((LA18_0>=12 && LA18_0<=14)||LA18_0==31) ) {
+                    alt18=1;
                 }
 
 
-                switch (alt12) {
+                switch (alt18) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:989:3: rule__ClassCS__Alternatives_4
+            	    // InternalMiniOCLCS.g:1511:3: rule__ClassCS__Alternatives_4
             	    {
             	    pushFollow(FOLLOW_10);
             	    rule__ClassCS__Alternatives_4();
@@ -3415,7 +5370,7 @@
             	    break;
 
             	default :
-            	    break loop12;
+            	    break loop18;
                 }
             } while (true);
 
@@ -3444,14 +5399,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__5"
-    // InternalMiniOCLCS.g:997:1: rule__ClassCS__Group__5 : rule__ClassCS__Group__5__Impl ;
+    // InternalMiniOCLCS.g:1519:1: rule__ClassCS__Group__5 : rule__ClassCS__Group__5__Impl ;
     public final void rule__ClassCS__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1001:1: ( rule__ClassCS__Group__5__Impl )
-            // InternalMiniOCLCS.g:1002:2: rule__ClassCS__Group__5__Impl
+            // InternalMiniOCLCS.g:1523:1: ( rule__ClassCS__Group__5__Impl )
+            // InternalMiniOCLCS.g:1524:2: rule__ClassCS__Group__5__Impl
             {
             pushFollow(FOLLOW_2);
             rule__ClassCS__Group__5__Impl();
@@ -3477,22 +5432,22 @@
 
 
     // $ANTLR start "rule__ClassCS__Group__5__Impl"
-    // InternalMiniOCLCS.g:1008:1: rule__ClassCS__Group__5__Impl : ( '}' ) ;
+    // InternalMiniOCLCS.g:1530:1: rule__ClassCS__Group__5__Impl : ( '}' ) ;
     public final void rule__ClassCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1012:1: ( ( '}' ) )
-            // InternalMiniOCLCS.g:1013:1: ( '}' )
+            // InternalMiniOCLCS.g:1534:1: ( ( '}' ) )
+            // InternalMiniOCLCS.g:1535:1: ( '}' )
             {
-            // InternalMiniOCLCS.g:1013:1: ( '}' )
-            // InternalMiniOCLCS.g:1014:2: '}'
+            // InternalMiniOCLCS.g:1535:1: ( '}' )
+            // InternalMiniOCLCS.g:1536:2: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getRightCurlyBracketKeyword_5()); 
             }
-            match(input,18,FOLLOW_2); if (state.failed) return ;
+            match(input,22,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getClassCSAccess().getRightCurlyBracketKeyword_5()); 
             }
@@ -3518,14 +5473,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group_2__0"
-    // InternalMiniOCLCS.g:1024:1: rule__ClassCS__Group_2__0 : rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1 ;
+    // InternalMiniOCLCS.g:1546:1: rule__ClassCS__Group_2__0 : rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1 ;
     public final void rule__ClassCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1028:1: ( rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1 )
-            // InternalMiniOCLCS.g:1029:2: rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1
+            // InternalMiniOCLCS.g:1550:1: ( rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1 )
+            // InternalMiniOCLCS.g:1551:2: rule__ClassCS__Group_2__0__Impl rule__ClassCS__Group_2__1
             {
             pushFollow(FOLLOW_4);
             rule__ClassCS__Group_2__0__Impl();
@@ -3556,22 +5511,22 @@
 
 
     // $ANTLR start "rule__ClassCS__Group_2__0__Impl"
-    // InternalMiniOCLCS.g:1036:1: rule__ClassCS__Group_2__0__Impl : ( 'extends' ) ;
+    // InternalMiniOCLCS.g:1558:1: rule__ClassCS__Group_2__0__Impl : ( 'extends' ) ;
     public final void rule__ClassCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1040:1: ( ( 'extends' ) )
-            // InternalMiniOCLCS.g:1041:1: ( 'extends' )
+            // InternalMiniOCLCS.g:1562:1: ( ( 'extends' ) )
+            // InternalMiniOCLCS.g:1563:1: ( 'extends' )
             {
-            // InternalMiniOCLCS.g:1041:1: ( 'extends' )
-            // InternalMiniOCLCS.g:1042:2: 'extends'
+            // InternalMiniOCLCS.g:1563:1: ( 'extends' )
+            // InternalMiniOCLCS.g:1564:2: 'extends'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getExtendsKeyword_2_0()); 
             }
-            match(input,20,FOLLOW_2); if (state.failed) return ;
+            match(input,24,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getClassCSAccess().getExtendsKeyword_2_0()); 
             }
@@ -3597,14 +5552,14 @@
 
 
     // $ANTLR start "rule__ClassCS__Group_2__1"
-    // InternalMiniOCLCS.g:1051:1: rule__ClassCS__Group_2__1 : rule__ClassCS__Group_2__1__Impl ;
+    // InternalMiniOCLCS.g:1573:1: rule__ClassCS__Group_2__1 : rule__ClassCS__Group_2__1__Impl ;
     public final void rule__ClassCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1055:1: ( rule__ClassCS__Group_2__1__Impl )
-            // InternalMiniOCLCS.g:1056:2: rule__ClassCS__Group_2__1__Impl
+            // InternalMiniOCLCS.g:1577:1: ( rule__ClassCS__Group_2__1__Impl )
+            // InternalMiniOCLCS.g:1578:2: rule__ClassCS__Group_2__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__ClassCS__Group_2__1__Impl();
@@ -3630,23 +5585,23 @@
 
 
     // $ANTLR start "rule__ClassCS__Group_2__1__Impl"
-    // InternalMiniOCLCS.g:1062:1: rule__ClassCS__Group_2__1__Impl : ( ( rule__ClassCS__ExtendsAssignment_2_1 ) ) ;
+    // InternalMiniOCLCS.g:1584:1: rule__ClassCS__Group_2__1__Impl : ( ( rule__ClassCS__ExtendsAssignment_2_1 ) ) ;
     public final void rule__ClassCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1066:1: ( ( ( rule__ClassCS__ExtendsAssignment_2_1 ) ) )
-            // InternalMiniOCLCS.g:1067:1: ( ( rule__ClassCS__ExtendsAssignment_2_1 ) )
+            // InternalMiniOCLCS.g:1588:1: ( ( ( rule__ClassCS__ExtendsAssignment_2_1 ) ) )
+            // InternalMiniOCLCS.g:1589:1: ( ( rule__ClassCS__ExtendsAssignment_2_1 ) )
             {
-            // InternalMiniOCLCS.g:1067:1: ( ( rule__ClassCS__ExtendsAssignment_2_1 ) )
-            // InternalMiniOCLCS.g:1068:2: ( rule__ClassCS__ExtendsAssignment_2_1 )
+            // InternalMiniOCLCS.g:1589:1: ( ( rule__ClassCS__ExtendsAssignment_2_1 ) )
+            // InternalMiniOCLCS.g:1590:2: ( rule__ClassCS__ExtendsAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getExtendsAssignment_2_1()); 
             }
-            // InternalMiniOCLCS.g:1069:2: ( rule__ClassCS__ExtendsAssignment_2_1 )
-            // InternalMiniOCLCS.g:1069:3: rule__ClassCS__ExtendsAssignment_2_1
+            // InternalMiniOCLCS.g:1591:2: ( rule__ClassCS__ExtendsAssignment_2_1 )
+            // InternalMiniOCLCS.g:1591:3: rule__ClassCS__ExtendsAssignment_2_1
             {
             pushFollow(FOLLOW_2);
             rule__ClassCS__ExtendsAssignment_2_1();
@@ -3680,15 +5635,425 @@
     // $ANTLR end "rule__ClassCS__Group_2__1__Impl"
 
 
+    // $ANTLR start "rule__DatatypeCS__Group__0"
+    // InternalMiniOCLCS.g:1600: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 {
+            // InternalMiniOCLCS.g:1604:1: ( rule__DatatypeCS__Group__0__Impl rule__DatatypeCS__Group__1 )
+            // InternalMiniOCLCS.g:1605:2: rule__DatatypeCS__Group__0__Impl rule__DatatypeCS__Group__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__DatatypeCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__0"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:1612:1: rule__DatatypeCS__Group__0__Impl : ( 'datatype' ) ;
+    public final void rule__DatatypeCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1616:1: ( ( 'datatype' ) )
+            // InternalMiniOCLCS.g:1617:1: ( 'datatype' )
+            {
+            // InternalMiniOCLCS.g:1617:1: ( 'datatype' )
+            // InternalMiniOCLCS.g:1618:2: 'datatype'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0()); 
+            }
+            match(input,25,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__1"
+    // InternalMiniOCLCS.g:1627: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 {
+            // InternalMiniOCLCS.g:1631:1: ( rule__DatatypeCS__Group__1__Impl rule__DatatypeCS__Group__2 )
+            // InternalMiniOCLCS.g:1632:2: rule__DatatypeCS__Group__1__Impl rule__DatatypeCS__Group__2
+            {
+            pushFollow(FOLLOW_11);
+            rule__DatatypeCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__1"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:1639:1: rule__DatatypeCS__Group__1__Impl : ( ( rule__DatatypeCS__NameAssignment_1 ) ) ;
+    public final void rule__DatatypeCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1643:1: ( ( ( rule__DatatypeCS__NameAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:1644:1: ( ( rule__DatatypeCS__NameAssignment_1 ) )
+            {
+            // InternalMiniOCLCS.g:1644:1: ( ( rule__DatatypeCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1645:2: ( rule__DatatypeCS__NameAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getNameAssignment_1()); 
+            }
+            // InternalMiniOCLCS.g:1646:2: ( rule__DatatypeCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1646:3: rule__DatatypeCS__NameAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__NameAssignment_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getNameAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__2"
+    // InternalMiniOCLCS.g:1654: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 {
+            // InternalMiniOCLCS.g:1658:1: ( rule__DatatypeCS__Group__2__Impl rule__DatatypeCS__Group__3 )
+            // InternalMiniOCLCS.g:1659:2: rule__DatatypeCS__Group__2__Impl rule__DatatypeCS__Group__3
+            {
+            pushFollow(FOLLOW_12);
+            rule__DatatypeCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__2"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:1666:1: rule__DatatypeCS__Group__2__Impl : ( ':' ) ;
+    public final void rule__DatatypeCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1670:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:1671:1: ( ':' )
+            {
+            // InternalMiniOCLCS.g:1671:1: ( ':' )
+            // InternalMiniOCLCS.g:1672:2: ':'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getColonKeyword_2()); 
+            }
+            match(input,26,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getColonKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__3"
+    // InternalMiniOCLCS.g:1681: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 {
+            // InternalMiniOCLCS.g:1685:1: ( rule__DatatypeCS__Group__3__Impl rule__DatatypeCS__Group__4 )
+            // InternalMiniOCLCS.g:1686:2: rule__DatatypeCS__Group__3__Impl rule__DatatypeCS__Group__4
+            {
+            pushFollow(FOLLOW_13);
+            rule__DatatypeCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__3"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:1693:1: rule__DatatypeCS__Group__3__Impl : ( ( rule__DatatypeCS__TypeNameAssignment_3 ) ) ;
+    public final void rule__DatatypeCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1697:1: ( ( ( rule__DatatypeCS__TypeNameAssignment_3 ) ) )
+            // InternalMiniOCLCS.g:1698:1: ( ( rule__DatatypeCS__TypeNameAssignment_3 ) )
+            {
+            // InternalMiniOCLCS.g:1698:1: ( ( rule__DatatypeCS__TypeNameAssignment_3 ) )
+            // InternalMiniOCLCS.g:1699:2: ( rule__DatatypeCS__TypeNameAssignment_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getTypeNameAssignment_3()); 
+            }
+            // InternalMiniOCLCS.g:1700:2: ( rule__DatatypeCS__TypeNameAssignment_3 )
+            // InternalMiniOCLCS.g:1700:3: rule__DatatypeCS__TypeNameAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__TypeNameAssignment_3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getTypeNameAssignment_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__4"
+    // InternalMiniOCLCS.g:1708:1: rule__DatatypeCS__Group__4 : rule__DatatypeCS__Group__4__Impl ;
+    public final void rule__DatatypeCS__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1712:1: ( rule__DatatypeCS__Group__4__Impl )
+            // InternalMiniOCLCS.g:1713:2: rule__DatatypeCS__Group__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__DatatypeCS__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__4"
+
+
+    // $ANTLR start "rule__DatatypeCS__Group__4__Impl"
+    // InternalMiniOCLCS.g:1719:1: rule__DatatypeCS__Group__4__Impl : ( ';' ) ;
+    public final void rule__DatatypeCS__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1723:1: ( ( ';' ) )
+            // InternalMiniOCLCS.g:1724:1: ( ';' )
+            {
+            // InternalMiniOCLCS.g:1724:1: ( ';' )
+            // InternalMiniOCLCS.g:1725:2: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4()); 
+            }
+            match(input,27,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__Group__4__Impl"
+
+
     // $ANTLR start "rule__PropertyCS__Group__0"
-    // InternalMiniOCLCS.g:1078:1: rule__PropertyCS__Group__0 : rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1 ;
+    // InternalMiniOCLCS.g:1735:1: rule__PropertyCS__Group__0 : rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1 ;
     public final void rule__PropertyCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1082:1: ( rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1 )
-            // InternalMiniOCLCS.g:1083:2: rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1
+            // InternalMiniOCLCS.g:1739:1: ( rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1 )
+            // InternalMiniOCLCS.g:1740:2: rule__PropertyCS__Group__0__Impl rule__PropertyCS__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__PropertyCS__Group__0__Impl();
@@ -3719,24 +6084,34 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1090:1: rule__PropertyCS__Group__0__Impl : ( 'prop' ) ;
+    // InternalMiniOCLCS.g:1747:1: rule__PropertyCS__Group__0__Impl : ( ( rule__PropertyCS__Alternatives_0 ) ) ;
     public final void rule__PropertyCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1094:1: ( ( 'prop' ) )
-            // InternalMiniOCLCS.g:1095:1: ( 'prop' )
+            // InternalMiniOCLCS.g:1751:1: ( ( ( rule__PropertyCS__Alternatives_0 ) ) )
+            // InternalMiniOCLCS.g:1752:1: ( ( rule__PropertyCS__Alternatives_0 ) )
             {
-            // InternalMiniOCLCS.g:1095:1: ( 'prop' )
-            // InternalMiniOCLCS.g:1096:2: 'prop'
+            // InternalMiniOCLCS.g:1752:1: ( ( rule__PropertyCS__Alternatives_0 ) )
+            // InternalMiniOCLCS.g:1753:2: ( rule__PropertyCS__Alternatives_0 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); 
+               before(grammarAccess.getPropertyCSAccess().getAlternatives_0()); 
             }
-            match(input,21,FOLLOW_2); if (state.failed) return ;
+            // InternalMiniOCLCS.g:1754:2: ( rule__PropertyCS__Alternatives_0 )
+            // InternalMiniOCLCS.g:1754:3: rule__PropertyCS__Alternatives_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__PropertyCS__Alternatives_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getPropertyCSAccess().getPropKeyword_0()); 
+               after(grammarAccess.getPropertyCSAccess().getAlternatives_0()); 
             }
 
             }
@@ -3760,14 +6135,14 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__1"
-    // InternalMiniOCLCS.g:1105:1: rule__PropertyCS__Group__1 : rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2 ;
+    // InternalMiniOCLCS.g:1762:1: rule__PropertyCS__Group__1 : rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2 ;
     public final void rule__PropertyCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1109:1: ( rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2 )
-            // InternalMiniOCLCS.g:1110:2: rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2
+            // InternalMiniOCLCS.g:1766:1: ( rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2 )
+            // InternalMiniOCLCS.g:1767:2: rule__PropertyCS__Group__1__Impl rule__PropertyCS__Group__2
             {
             pushFollow(FOLLOW_11);
             rule__PropertyCS__Group__1__Impl();
@@ -3798,23 +6173,23 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1117:1: rule__PropertyCS__Group__1__Impl : ( ( rule__PropertyCS__NameAssignment_1 ) ) ;
+    // InternalMiniOCLCS.g:1774:1: rule__PropertyCS__Group__1__Impl : ( ( rule__PropertyCS__NameAssignment_1 ) ) ;
     public final void rule__PropertyCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1121:1: ( ( ( rule__PropertyCS__NameAssignment_1 ) ) )
-            // InternalMiniOCLCS.g:1122:1: ( ( rule__PropertyCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1778:1: ( ( ( rule__PropertyCS__NameAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:1779:1: ( ( rule__PropertyCS__NameAssignment_1 ) )
             {
-            // InternalMiniOCLCS.g:1122:1: ( ( rule__PropertyCS__NameAssignment_1 ) )
-            // InternalMiniOCLCS.g:1123:2: ( rule__PropertyCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1779:1: ( ( rule__PropertyCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:1780:2: ( rule__PropertyCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getNameAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:1124:2: ( rule__PropertyCS__NameAssignment_1 )
-            // InternalMiniOCLCS.g:1124:3: rule__PropertyCS__NameAssignment_1
+            // InternalMiniOCLCS.g:1781:2: ( rule__PropertyCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:1781:3: rule__PropertyCS__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__PropertyCS__NameAssignment_1();
@@ -3849,14 +6224,14 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__2"
-    // InternalMiniOCLCS.g:1132:1: rule__PropertyCS__Group__2 : rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3 ;
+    // InternalMiniOCLCS.g:1789:1: rule__PropertyCS__Group__2 : rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3 ;
     public final void rule__PropertyCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1136:1: ( rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3 )
-            // InternalMiniOCLCS.g:1137:2: rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3
+            // InternalMiniOCLCS.g:1793:1: ( rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3 )
+            // InternalMiniOCLCS.g:1794:2: rule__PropertyCS__Group__2__Impl rule__PropertyCS__Group__3
             {
             pushFollow(FOLLOW_4);
             rule__PropertyCS__Group__2__Impl();
@@ -3887,22 +6262,22 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:1144:1: rule__PropertyCS__Group__2__Impl : ( ':' ) ;
+    // InternalMiniOCLCS.g:1801:1: rule__PropertyCS__Group__2__Impl : ( ':' ) ;
     public final void rule__PropertyCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1148:1: ( ( ':' ) )
-            // InternalMiniOCLCS.g:1149:1: ( ':' )
+            // InternalMiniOCLCS.g:1805:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:1806:1: ( ':' )
             {
-            // InternalMiniOCLCS.g:1149:1: ( ':' )
-            // InternalMiniOCLCS.g:1150:2: ':'
+            // InternalMiniOCLCS.g:1806:1: ( ':' )
+            // InternalMiniOCLCS.g:1807:2: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getColonKeyword_2()); 
             }
-            match(input,22,FOLLOW_2); if (state.failed) return ;
+            match(input,26,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPropertyCSAccess().getColonKeyword_2()); 
             }
@@ -3928,16 +6303,16 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__3"
-    // InternalMiniOCLCS.g:1159:1: rule__PropertyCS__Group__3 : rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4 ;
+    // InternalMiniOCLCS.g:1816:1: rule__PropertyCS__Group__3 : rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4 ;
     public final void rule__PropertyCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1163:1: ( rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4 )
-            // InternalMiniOCLCS.g:1164:2: rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4
+            // InternalMiniOCLCS.g:1820:1: ( rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4 )
+            // InternalMiniOCLCS.g:1821:2: rule__PropertyCS__Group__3__Impl rule__PropertyCS__Group__4
             {
-            pushFollow(FOLLOW_12);
+            pushFollow(FOLLOW_14);
             rule__PropertyCS__Group__3__Impl();
 
             state._fsp--;
@@ -3966,23 +6341,23 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:1171:1: rule__PropertyCS__Group__3__Impl : ( ( rule__PropertyCS__TypeRefAssignment_3 ) ) ;
+    // InternalMiniOCLCS.g:1828:1: rule__PropertyCS__Group__3__Impl : ( ( rule__PropertyCS__TypeRefAssignment_3 ) ) ;
     public final void rule__PropertyCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1175:1: ( ( ( rule__PropertyCS__TypeRefAssignment_3 ) ) )
-            // InternalMiniOCLCS.g:1176:1: ( ( rule__PropertyCS__TypeRefAssignment_3 ) )
+            // InternalMiniOCLCS.g:1832:1: ( ( ( rule__PropertyCS__TypeRefAssignment_3 ) ) )
+            // InternalMiniOCLCS.g:1833:1: ( ( rule__PropertyCS__TypeRefAssignment_3 ) )
             {
-            // InternalMiniOCLCS.g:1176:1: ( ( rule__PropertyCS__TypeRefAssignment_3 ) )
-            // InternalMiniOCLCS.g:1177:2: ( rule__PropertyCS__TypeRefAssignment_3 )
+            // InternalMiniOCLCS.g:1833:1: ( ( rule__PropertyCS__TypeRefAssignment_3 ) )
+            // InternalMiniOCLCS.g:1834:2: ( rule__PropertyCS__TypeRefAssignment_3 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getTypeRefAssignment_3()); 
             }
-            // InternalMiniOCLCS.g:1178:2: ( rule__PropertyCS__TypeRefAssignment_3 )
-            // InternalMiniOCLCS.g:1178:3: rule__PropertyCS__TypeRefAssignment_3
+            // InternalMiniOCLCS.g:1835:2: ( rule__PropertyCS__TypeRefAssignment_3 )
+            // InternalMiniOCLCS.g:1835:3: rule__PropertyCS__TypeRefAssignment_3
             {
             pushFollow(FOLLOW_2);
             rule__PropertyCS__TypeRefAssignment_3();
@@ -4017,20 +6392,25 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__4"
-    // InternalMiniOCLCS.g:1186:1: rule__PropertyCS__Group__4 : rule__PropertyCS__Group__4__Impl ;
+    // InternalMiniOCLCS.g:1843:1: rule__PropertyCS__Group__4 : rule__PropertyCS__Group__4__Impl rule__PropertyCS__Group__5 ;
     public final void rule__PropertyCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1190:1: ( rule__PropertyCS__Group__4__Impl )
-            // InternalMiniOCLCS.g:1191:2: rule__PropertyCS__Group__4__Impl
+            // InternalMiniOCLCS.g:1847:1: ( rule__PropertyCS__Group__4__Impl rule__PropertyCS__Group__5 )
+            // InternalMiniOCLCS.g:1848:2: rule__PropertyCS__Group__4__Impl rule__PropertyCS__Group__5
             {
-            pushFollow(FOLLOW_2);
+            pushFollow(FOLLOW_14);
             rule__PropertyCS__Group__4__Impl();
 
             state._fsp--;
             if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__PropertyCS__Group__5();
+
+            state._fsp--;
+            if (state.failed) return ;
 
             }
 
@@ -4050,24 +6430,45 @@
 
 
     // $ANTLR start "rule__PropertyCS__Group__4__Impl"
-    // InternalMiniOCLCS.g:1197:1: rule__PropertyCS__Group__4__Impl : ( ';' ) ;
+    // InternalMiniOCLCS.g:1855:1: rule__PropertyCS__Group__4__Impl : ( ( rule__PropertyCS__MultiplicityAssignment_4 )? ) ;
     public final void rule__PropertyCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1201:1: ( ( ';' ) )
-            // InternalMiniOCLCS.g:1202:1: ( ';' )
+            // InternalMiniOCLCS.g:1859:1: ( ( ( rule__PropertyCS__MultiplicityAssignment_4 )? ) )
+            // InternalMiniOCLCS.g:1860:1: ( ( rule__PropertyCS__MultiplicityAssignment_4 )? )
             {
-            // InternalMiniOCLCS.g:1202:1: ( ';' )
-            // InternalMiniOCLCS.g:1203:2: ';'
+            // InternalMiniOCLCS.g:1860:1: ( ( rule__PropertyCS__MultiplicityAssignment_4 )? )
+            // InternalMiniOCLCS.g:1861:2: ( rule__PropertyCS__MultiplicityAssignment_4 )?
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4()); 
+               before(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); 
             }
-            match(input,23,FOLLOW_2); if (state.failed) return ;
+            // InternalMiniOCLCS.g:1862:2: ( rule__PropertyCS__MultiplicityAssignment_4 )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==28) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1862:3: rule__PropertyCS__MultiplicityAssignment_4
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__PropertyCS__MultiplicityAssignment_4();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4()); 
+               after(grammarAccess.getPropertyCSAccess().getMultiplicityAssignment_4()); 
             }
 
             }
@@ -4090,15 +6491,583 @@
     // $ANTLR end "rule__PropertyCS__Group__4__Impl"
 
 
+    // $ANTLR start "rule__PropertyCS__Group__5"
+    // InternalMiniOCLCS.g:1870:1: rule__PropertyCS__Group__5 : rule__PropertyCS__Group__5__Impl ;
+    public final void rule__PropertyCS__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1874:1: ( rule__PropertyCS__Group__5__Impl )
+            // InternalMiniOCLCS.g:1875:2: rule__PropertyCS__Group__5__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__PropertyCS__Group__5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PropertyCS__Group__5"
+
+
+    // $ANTLR start "rule__PropertyCS__Group__5__Impl"
+    // InternalMiniOCLCS.g:1881:1: rule__PropertyCS__Group__5__Impl : ( ';' ) ;
+    public final void rule__PropertyCS__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1885:1: ( ( ';' ) )
+            // InternalMiniOCLCS.g:1886:1: ( ';' )
+            {
+            // InternalMiniOCLCS.g:1886:1: ( ';' )
+            // InternalMiniOCLCS.g:1887:2: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); 
+            }
+            match(input,27,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PropertyCS__Group__5__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__0"
+    // InternalMiniOCLCS.g:1897: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 {
+            // InternalMiniOCLCS.g:1901:1: ( rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1 )
+            // InternalMiniOCLCS.g:1902:2: rule__MultiplicityCS__Group__0__Impl rule__MultiplicityCS__Group__1
+            {
+            pushFollow(FOLLOW_15);
+            rule__MultiplicityCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:1909:1: rule__MultiplicityCS__Group__0__Impl : ( '[' ) ;
+    public final void rule__MultiplicityCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1913:1: ( ( '[' ) )
+            // InternalMiniOCLCS.g:1914:1: ( '[' )
+            {
+            // InternalMiniOCLCS.g:1914:1: ( '[' )
+            // InternalMiniOCLCS.g:1915:2: '['
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); 
+            }
+            match(input,28,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__1"
+    // InternalMiniOCLCS.g:1924: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 {
+            // InternalMiniOCLCS.g:1928:1: ( rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2 )
+            // InternalMiniOCLCS.g:1929:2: rule__MultiplicityCS__Group__1__Impl rule__MultiplicityCS__Group__2
+            {
+            pushFollow(FOLLOW_16);
+            rule__MultiplicityCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__1"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:1936:1: rule__MultiplicityCS__Group__1__Impl : ( ( rule__MultiplicityCS__Alternatives_1 ) ) ;
+    public final void rule__MultiplicityCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1940:1: ( ( ( rule__MultiplicityCS__Alternatives_1 ) ) )
+            // InternalMiniOCLCS.g:1941:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
+            {
+            // InternalMiniOCLCS.g:1941:1: ( ( rule__MultiplicityCS__Alternatives_1 ) )
+            // InternalMiniOCLCS.g:1942:2: ( rule__MultiplicityCS__Alternatives_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); 
+            }
+            // InternalMiniOCLCS.g:1943:2: ( rule__MultiplicityCS__Alternatives_1 )
+            // InternalMiniOCLCS.g:1943:3: rule__MultiplicityCS__Alternatives_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Alternatives_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__2"
+    // InternalMiniOCLCS.g:1951:1: rule__MultiplicityCS__Group__2 : rule__MultiplicityCS__Group__2__Impl ;
+    public final void rule__MultiplicityCS__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1955:1: ( rule__MultiplicityCS__Group__2__Impl )
+            // InternalMiniOCLCS.g:1956:2: rule__MultiplicityCS__Group__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__2"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:1962:1: rule__MultiplicityCS__Group__2__Impl : ( ']' ) ;
+    public final void rule__MultiplicityCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1966:1: ( ( ']' ) )
+            // InternalMiniOCLCS.g:1967:1: ( ']' )
+            {
+            // InternalMiniOCLCS.g:1967:1: ( ']' )
+            // InternalMiniOCLCS.g:1968:2: ']'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); 
+            }
+            match(input,29,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__0"
+    // InternalMiniOCLCS.g:1978:1: rule__MultiplicityCS__Group_1_2__0 : rule__MultiplicityCS__Group_1_2__0__Impl rule__MultiplicityCS__Group_1_2__1 ;
+    public final void rule__MultiplicityCS__Group_1_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1982:1: ( rule__MultiplicityCS__Group_1_2__0__Impl rule__MultiplicityCS__Group_1_2__1 )
+            // InternalMiniOCLCS.g:1983:2: rule__MultiplicityCS__Group_1_2__0__Impl rule__MultiplicityCS__Group_1_2__1
+            {
+            pushFollow(FOLLOW_17);
+            rule__MultiplicityCS__Group_1_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group_1_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__0__Impl"
+    // InternalMiniOCLCS.g:1990:1: rule__MultiplicityCS__Group_1_2__0__Impl : ( ( rule__MultiplicityCS__LowerAssignment_1_2_0 ) ) ;
+    public final void rule__MultiplicityCS__Group_1_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:1994:1: ( ( ( rule__MultiplicityCS__LowerAssignment_1_2_0 ) ) )
+            // InternalMiniOCLCS.g:1995:1: ( ( rule__MultiplicityCS__LowerAssignment_1_2_0 ) )
+            {
+            // InternalMiniOCLCS.g:1995:1: ( ( rule__MultiplicityCS__LowerAssignment_1_2_0 ) )
+            // InternalMiniOCLCS.g:1996:2: ( rule__MultiplicityCS__LowerAssignment_1_2_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getLowerAssignment_1_2_0()); 
+            }
+            // InternalMiniOCLCS.g:1997:2: ( rule__MultiplicityCS__LowerAssignment_1_2_0 )
+            // InternalMiniOCLCS.g:1997:3: rule__MultiplicityCS__LowerAssignment_1_2_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__LowerAssignment_1_2_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getLowerAssignment_1_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__0__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__1"
+    // InternalMiniOCLCS.g:2005:1: rule__MultiplicityCS__Group_1_2__1 : rule__MultiplicityCS__Group_1_2__1__Impl rule__MultiplicityCS__Group_1_2__2 ;
+    public final void rule__MultiplicityCS__Group_1_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:2009:1: ( rule__MultiplicityCS__Group_1_2__1__Impl rule__MultiplicityCS__Group_1_2__2 )
+            // InternalMiniOCLCS.g:2010:2: rule__MultiplicityCS__Group_1_2__1__Impl rule__MultiplicityCS__Group_1_2__2
+            {
+            pushFollow(FOLLOW_18);
+            rule__MultiplicityCS__Group_1_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group_1_2__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__1"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__1__Impl"
+    // InternalMiniOCLCS.g:2017:1: rule__MultiplicityCS__Group_1_2__1__Impl : ( '..' ) ;
+    public final void rule__MultiplicityCS__Group_1_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:2021:1: ( ( '..' ) )
+            // InternalMiniOCLCS.g:2022:1: ( '..' )
+            {
+            // InternalMiniOCLCS.g:2022:1: ( '..' )
+            // InternalMiniOCLCS.g:2023:2: '..'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1()); 
+            }
+            match(input,30,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__1__Impl"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__2"
+    // InternalMiniOCLCS.g:2032:1: rule__MultiplicityCS__Group_1_2__2 : rule__MultiplicityCS__Group_1_2__2__Impl ;
+    public final void rule__MultiplicityCS__Group_1_2__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:2036:1: ( rule__MultiplicityCS__Group_1_2__2__Impl )
+            // InternalMiniOCLCS.g:2037:2: rule__MultiplicityCS__Group_1_2__2__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Group_1_2__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__2"
+
+
+    // $ANTLR start "rule__MultiplicityCS__Group_1_2__2__Impl"
+    // InternalMiniOCLCS.g:2043:1: rule__MultiplicityCS__Group_1_2__2__Impl : ( ( rule__MultiplicityCS__Alternatives_1_2_2 ) ) ;
+    public final void rule__MultiplicityCS__Group_1_2__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:2047:1: ( ( ( rule__MultiplicityCS__Alternatives_1_2_2 ) ) )
+            // InternalMiniOCLCS.g:2048:1: ( ( rule__MultiplicityCS__Alternatives_1_2_2 ) )
+            {
+            // InternalMiniOCLCS.g:2048:1: ( ( rule__MultiplicityCS__Alternatives_1_2_2 ) )
+            // InternalMiniOCLCS.g:2049:2: ( rule__MultiplicityCS__Alternatives_1_2_2 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_2_2()); 
+            }
+            // InternalMiniOCLCS.g:2050:2: ( rule__MultiplicityCS__Alternatives_1_2_2 )
+            // InternalMiniOCLCS.g:2050:3: rule__MultiplicityCS__Alternatives_1_2_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__MultiplicityCS__Alternatives_1_2_2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getAlternatives_1_2_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__Group_1_2__2__Impl"
+
+
     // $ANTLR start "rule__OperationCS__Group__0"
-    // InternalMiniOCLCS.g:1213:1: rule__OperationCS__Group__0 : rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 ;
+    // InternalMiniOCLCS.g:2059: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 {
-            // InternalMiniOCLCS.g:1217:1: ( rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 )
-            // InternalMiniOCLCS.g:1218:2: rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1
+            // InternalMiniOCLCS.g:2063:1: ( rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1 )
+            // InternalMiniOCLCS.g:2064:2: rule__OperationCS__Group__0__Impl rule__OperationCS__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__OperationCS__Group__0__Impl();
@@ -4129,22 +7098,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1225:1: rule__OperationCS__Group__0__Impl : ( 'op' ) ;
+    // InternalMiniOCLCS.g:2071:1: rule__OperationCS__Group__0__Impl : ( 'op' ) ;
     public final void rule__OperationCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1229:1: ( ( 'op' ) )
-            // InternalMiniOCLCS.g:1230:1: ( 'op' )
+            // InternalMiniOCLCS.g:2075:1: ( ( 'op' ) )
+            // InternalMiniOCLCS.g:2076:1: ( 'op' )
             {
-            // InternalMiniOCLCS.g:1230:1: ( 'op' )
-            // InternalMiniOCLCS.g:1231:2: 'op'
+            // InternalMiniOCLCS.g:2076:1: ( 'op' )
+            // InternalMiniOCLCS.g:2077:2: 'op'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getOpKeyword_0()); 
             }
-            match(input,24,FOLLOW_2); if (state.failed) return ;
+            match(input,31,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getOpKeyword_0()); 
             }
@@ -4170,16 +7139,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__1"
-    // InternalMiniOCLCS.g:1240:1: rule__OperationCS__Group__1 : rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 ;
+    // InternalMiniOCLCS.g:2086: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 {
-            // InternalMiniOCLCS.g:1244:1: ( rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 )
-            // InternalMiniOCLCS.g:1245:2: rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2
+            // InternalMiniOCLCS.g:2090:1: ( rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2 )
+            // InternalMiniOCLCS.g:2091:2: rule__OperationCS__Group__1__Impl rule__OperationCS__Group__2
             {
-            pushFollow(FOLLOW_13);
+            pushFollow(FOLLOW_19);
             rule__OperationCS__Group__1__Impl();
 
             state._fsp--;
@@ -4208,23 +7177,23 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1252:1: rule__OperationCS__Group__1__Impl : ( ( rule__OperationCS__NameAssignment_1 ) ) ;
+    // InternalMiniOCLCS.g:2098:1: rule__OperationCS__Group__1__Impl : ( ( rule__OperationCS__NameAssignment_1 ) ) ;
     public final void rule__OperationCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1256:1: ( ( ( rule__OperationCS__NameAssignment_1 ) ) )
-            // InternalMiniOCLCS.g:1257:1: ( ( rule__OperationCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:2102:1: ( ( ( rule__OperationCS__NameAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:2103:1: ( ( rule__OperationCS__NameAssignment_1 ) )
             {
-            // InternalMiniOCLCS.g:1257:1: ( ( rule__OperationCS__NameAssignment_1 ) )
-            // InternalMiniOCLCS.g:1258:2: ( rule__OperationCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:2103:1: ( ( rule__OperationCS__NameAssignment_1 ) )
+            // InternalMiniOCLCS.g:2104:2: ( rule__OperationCS__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getNameAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:1259:2: ( rule__OperationCS__NameAssignment_1 )
-            // InternalMiniOCLCS.g:1259:3: rule__OperationCS__NameAssignment_1
+            // InternalMiniOCLCS.g:2105:2: ( rule__OperationCS__NameAssignment_1 )
+            // InternalMiniOCLCS.g:2105:3: rule__OperationCS__NameAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__NameAssignment_1();
@@ -4259,16 +7228,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__2"
-    // InternalMiniOCLCS.g:1267:1: rule__OperationCS__Group__2 : rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 ;
+    // InternalMiniOCLCS.g:2113: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 {
-            // InternalMiniOCLCS.g:1271:1: ( rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 )
-            // InternalMiniOCLCS.g:1272:2: rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3
+            // InternalMiniOCLCS.g:2117:1: ( rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3 )
+            // InternalMiniOCLCS.g:2118:2: rule__OperationCS__Group__2__Impl rule__OperationCS__Group__3
             {
-            pushFollow(FOLLOW_14);
+            pushFollow(FOLLOW_20);
             rule__OperationCS__Group__2__Impl();
 
             state._fsp--;
@@ -4297,22 +7266,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:1279:1: rule__OperationCS__Group__2__Impl : ( '(' ) ;
+    // InternalMiniOCLCS.g:2125:1: rule__OperationCS__Group__2__Impl : ( '(' ) ;
     public final void rule__OperationCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1283:1: ( ( '(' ) )
-            // InternalMiniOCLCS.g:1284:1: ( '(' )
+            // InternalMiniOCLCS.g:2129:1: ( ( '(' ) )
+            // InternalMiniOCLCS.g:2130:1: ( '(' )
             {
-            // InternalMiniOCLCS.g:1284:1: ( '(' )
-            // InternalMiniOCLCS.g:1285:2: '('
+            // InternalMiniOCLCS.g:2130:1: ( '(' )
+            // InternalMiniOCLCS.g:2131:2: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_2()); 
             }
-            match(input,25,FOLLOW_2); if (state.failed) return ;
+            match(input,32,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_2()); 
             }
@@ -4338,16 +7307,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__3"
-    // InternalMiniOCLCS.g:1294:1: rule__OperationCS__Group__3 : rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 ;
+    // InternalMiniOCLCS.g:2140: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 {
-            // InternalMiniOCLCS.g:1298:1: ( rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 )
-            // InternalMiniOCLCS.g:1299:2: rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4
+            // InternalMiniOCLCS.g:2144:1: ( rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4 )
+            // InternalMiniOCLCS.g:2145:2: rule__OperationCS__Group__3__Impl rule__OperationCS__Group__4
             {
-            pushFollow(FOLLOW_14);
+            pushFollow(FOLLOW_20);
             rule__OperationCS__Group__3__Impl();
 
             state._fsp--;
@@ -4376,31 +7345,31 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:1306:1: rule__OperationCS__Group__3__Impl : ( ( rule__OperationCS__Group_3__0 )? ) ;
+    // InternalMiniOCLCS.g:2152:1: rule__OperationCS__Group__3__Impl : ( ( rule__OperationCS__Group_3__0 )? ) ;
     public final void rule__OperationCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1310:1: ( ( ( rule__OperationCS__Group_3__0 )? ) )
-            // InternalMiniOCLCS.g:1311:1: ( ( rule__OperationCS__Group_3__0 )? )
+            // InternalMiniOCLCS.g:2156:1: ( ( ( rule__OperationCS__Group_3__0 )? ) )
+            // InternalMiniOCLCS.g:2157:1: ( ( rule__OperationCS__Group_3__0 )? )
             {
-            // InternalMiniOCLCS.g:1311:1: ( ( rule__OperationCS__Group_3__0 )? )
-            // InternalMiniOCLCS.g:1312:2: ( rule__OperationCS__Group_3__0 )?
+            // InternalMiniOCLCS.g:2157:1: ( ( rule__OperationCS__Group_3__0 )? )
+            // InternalMiniOCLCS.g:2158:2: ( rule__OperationCS__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_3()); 
             }
-            // InternalMiniOCLCS.g:1313:2: ( rule__OperationCS__Group_3__0 )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            // InternalMiniOCLCS.g:2159:2: ( rule__OperationCS__Group_3__0 )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
 
-            if ( (LA13_0==RULE_ID) ) {
-                alt13=1;
+            if ( (LA20_0==RULE_ID) ) {
+                alt20=1;
             }
-            switch (alt13) {
+            switch (alt20) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1313:3: rule__OperationCS__Group_3__0
+                    // InternalMiniOCLCS.g:2159:3: rule__OperationCS__Group_3__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__OperationCS__Group_3__0();
@@ -4438,14 +7407,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__4"
-    // InternalMiniOCLCS.g:1321:1: rule__OperationCS__Group__4 : rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 ;
+    // InternalMiniOCLCS.g:2167: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 {
-            // InternalMiniOCLCS.g:1325:1: ( rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 )
-            // InternalMiniOCLCS.g:1326:2: rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5
+            // InternalMiniOCLCS.g:2171:1: ( rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5 )
+            // InternalMiniOCLCS.g:2172:2: rule__OperationCS__Group__4__Impl rule__OperationCS__Group__5
             {
             pushFollow(FOLLOW_11);
             rule__OperationCS__Group__4__Impl();
@@ -4476,22 +7445,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__4__Impl"
-    // InternalMiniOCLCS.g:1333:1: rule__OperationCS__Group__4__Impl : ( ')' ) ;
+    // InternalMiniOCLCS.g:2179:1: rule__OperationCS__Group__4__Impl : ( ')' ) ;
     public final void rule__OperationCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1337:1: ( ( ')' ) )
-            // InternalMiniOCLCS.g:1338:1: ( ')' )
+            // InternalMiniOCLCS.g:2183:1: ( ( ')' ) )
+            // InternalMiniOCLCS.g:2184:1: ( ')' )
             {
-            // InternalMiniOCLCS.g:1338:1: ( ')' )
-            // InternalMiniOCLCS.g:1339:2: ')'
+            // InternalMiniOCLCS.g:2184:1: ( ')' )
+            // InternalMiniOCLCS.g:2185:2: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_4()); 
             }
-            match(input,26,FOLLOW_2); if (state.failed) return ;
+            match(input,33,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_4()); 
             }
@@ -4517,14 +7486,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__5"
-    // InternalMiniOCLCS.g:1348:1: rule__OperationCS__Group__5 : rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 ;
+    // InternalMiniOCLCS.g:2194: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 {
-            // InternalMiniOCLCS.g:1352:1: ( rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 )
-            // InternalMiniOCLCS.g:1353:2: rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6
+            // InternalMiniOCLCS.g:2198:1: ( rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6 )
+            // InternalMiniOCLCS.g:2199:2: rule__OperationCS__Group__5__Impl rule__OperationCS__Group__6
             {
             pushFollow(FOLLOW_4);
             rule__OperationCS__Group__5__Impl();
@@ -4555,22 +7524,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__5__Impl"
-    // InternalMiniOCLCS.g:1360:1: rule__OperationCS__Group__5__Impl : ( ':' ) ;
+    // InternalMiniOCLCS.g:2206:1: rule__OperationCS__Group__5__Impl : ( ':' ) ;
     public final void rule__OperationCS__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1364:1: ( ( ':' ) )
-            // InternalMiniOCLCS.g:1365:1: ( ':' )
+            // InternalMiniOCLCS.g:2210:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:2211:1: ( ':' )
             {
-            // InternalMiniOCLCS.g:1365:1: ( ':' )
-            // InternalMiniOCLCS.g:1366:2: ':'
+            // InternalMiniOCLCS.g:2211:1: ( ':' )
+            // InternalMiniOCLCS.g:2212:2: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getColonKeyword_5()); 
             }
-            match(input,22,FOLLOW_2); if (state.failed) return ;
+            match(input,26,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getColonKeyword_5()); 
             }
@@ -4596,16 +7565,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__6"
-    // InternalMiniOCLCS.g:1375:1: rule__OperationCS__Group__6 : rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 ;
+    // InternalMiniOCLCS.g:2221: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 {
-            // InternalMiniOCLCS.g:1379:1: ( rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 )
-            // InternalMiniOCLCS.g:1380:2: rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7
+            // InternalMiniOCLCS.g:2225:1: ( rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7 )
+            // InternalMiniOCLCS.g:2226:2: rule__OperationCS__Group__6__Impl rule__OperationCS__Group__7
             {
-            pushFollow(FOLLOW_15);
+            pushFollow(FOLLOW_21);
             rule__OperationCS__Group__6__Impl();
 
             state._fsp--;
@@ -4634,23 +7603,23 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__6__Impl"
-    // InternalMiniOCLCS.g:1387:1: rule__OperationCS__Group__6__Impl : ( ( rule__OperationCS__ResultRefAssignment_6 ) ) ;
+    // InternalMiniOCLCS.g:2233:1: rule__OperationCS__Group__6__Impl : ( ( rule__OperationCS__ResultRefAssignment_6 ) ) ;
     public final void rule__OperationCS__Group__6__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1391:1: ( ( ( rule__OperationCS__ResultRefAssignment_6 ) ) )
-            // InternalMiniOCLCS.g:1392:1: ( ( rule__OperationCS__ResultRefAssignment_6 ) )
+            // InternalMiniOCLCS.g:2237:1: ( ( ( rule__OperationCS__ResultRefAssignment_6 ) ) )
+            // InternalMiniOCLCS.g:2238:1: ( ( rule__OperationCS__ResultRefAssignment_6 ) )
             {
-            // InternalMiniOCLCS.g:1392:1: ( ( rule__OperationCS__ResultRefAssignment_6 ) )
-            // InternalMiniOCLCS.g:1393:2: ( rule__OperationCS__ResultRefAssignment_6 )
+            // InternalMiniOCLCS.g:2238:1: ( ( rule__OperationCS__ResultRefAssignment_6 ) )
+            // InternalMiniOCLCS.g:2239:2: ( rule__OperationCS__ResultRefAssignment_6 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getResultRefAssignment_6()); 
             }
-            // InternalMiniOCLCS.g:1394:2: ( rule__OperationCS__ResultRefAssignment_6 )
-            // InternalMiniOCLCS.g:1394:3: rule__OperationCS__ResultRefAssignment_6
+            // InternalMiniOCLCS.g:2240:2: ( rule__OperationCS__ResultRefAssignment_6 )
+            // InternalMiniOCLCS.g:2240:3: rule__OperationCS__ResultRefAssignment_6
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__ResultRefAssignment_6();
@@ -4685,16 +7654,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__7"
-    // InternalMiniOCLCS.g:1402:1: rule__OperationCS__Group__7 : rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 ;
+    // InternalMiniOCLCS.g:2248: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 {
-            // InternalMiniOCLCS.g:1406:1: ( rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 )
-            // InternalMiniOCLCS.g:1407:2: rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8
+            // InternalMiniOCLCS.g:2252:1: ( rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8 )
+            // InternalMiniOCLCS.g:2253:2: rule__OperationCS__Group__7__Impl rule__OperationCS__Group__8
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_22);
             rule__OperationCS__Group__7__Impl();
 
             state._fsp--;
@@ -4723,22 +7692,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__7__Impl"
-    // InternalMiniOCLCS.g:1414:1: rule__OperationCS__Group__7__Impl : ( '=' ) ;
+    // InternalMiniOCLCS.g:2260:1: rule__OperationCS__Group__7__Impl : ( '=' ) ;
     public final void rule__OperationCS__Group__7__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1418:1: ( ( '=' ) )
-            // InternalMiniOCLCS.g:1419:1: ( '=' )
+            // InternalMiniOCLCS.g:2264:1: ( ( '=' ) )
+            // InternalMiniOCLCS.g:2265:1: ( '=' )
             {
-            // InternalMiniOCLCS.g:1419:1: ( '=' )
-            // InternalMiniOCLCS.g:1420:2: '='
+            // InternalMiniOCLCS.g:2265:1: ( '=' )
+            // InternalMiniOCLCS.g:2266:2: '='
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getEqualsSignKeyword_7()); 
             }
-            match(input,11,FOLLOW_2); if (state.failed) return ;
+            match(input,15,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getEqualsSignKeyword_7()); 
             }
@@ -4764,16 +7733,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__8"
-    // InternalMiniOCLCS.g:1429:1: rule__OperationCS__Group__8 : rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 ;
+    // InternalMiniOCLCS.g:2275: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 {
-            // InternalMiniOCLCS.g:1433:1: ( rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 )
-            // InternalMiniOCLCS.g:1434:2: rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9
+            // InternalMiniOCLCS.g:2279:1: ( rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9 )
+            // InternalMiniOCLCS.g:2280:2: rule__OperationCS__Group__8__Impl rule__OperationCS__Group__9
             {
-            pushFollow(FOLLOW_12);
+            pushFollow(FOLLOW_13);
             rule__OperationCS__Group__8__Impl();
 
             state._fsp--;
@@ -4802,23 +7771,23 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__8__Impl"
-    // InternalMiniOCLCS.g:1441:1: rule__OperationCS__Group__8__Impl : ( ( rule__OperationCS__BodyAssignment_8 ) ) ;
+    // InternalMiniOCLCS.g:2287:1: rule__OperationCS__Group__8__Impl : ( ( rule__OperationCS__BodyAssignment_8 ) ) ;
     public final void rule__OperationCS__Group__8__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1445:1: ( ( ( rule__OperationCS__BodyAssignment_8 ) ) )
-            // InternalMiniOCLCS.g:1446:1: ( ( rule__OperationCS__BodyAssignment_8 ) )
+            // InternalMiniOCLCS.g:2291:1: ( ( ( rule__OperationCS__BodyAssignment_8 ) ) )
+            // InternalMiniOCLCS.g:2292:1: ( ( rule__OperationCS__BodyAssignment_8 ) )
             {
-            // InternalMiniOCLCS.g:1446:1: ( ( rule__OperationCS__BodyAssignment_8 ) )
-            // InternalMiniOCLCS.g:1447:2: ( rule__OperationCS__BodyAssignment_8 )
+            // InternalMiniOCLCS.g:2292:1: ( ( rule__OperationCS__BodyAssignment_8 ) )
+            // InternalMiniOCLCS.g:2293:2: ( rule__OperationCS__BodyAssignment_8 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getBodyAssignment_8()); 
             }
-            // InternalMiniOCLCS.g:1448:2: ( rule__OperationCS__BodyAssignment_8 )
-            // InternalMiniOCLCS.g:1448:3: rule__OperationCS__BodyAssignment_8
+            // InternalMiniOCLCS.g:2294:2: ( rule__OperationCS__BodyAssignment_8 )
+            // InternalMiniOCLCS.g:2294:3: rule__OperationCS__BodyAssignment_8
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__BodyAssignment_8();
@@ -4853,14 +7822,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__9"
-    // InternalMiniOCLCS.g:1456:1: rule__OperationCS__Group__9 : rule__OperationCS__Group__9__Impl ;
+    // InternalMiniOCLCS.g:2302:1: rule__OperationCS__Group__9 : rule__OperationCS__Group__9__Impl ;
     public final void rule__OperationCS__Group__9() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1460:1: ( rule__OperationCS__Group__9__Impl )
-            // InternalMiniOCLCS.g:1461:2: rule__OperationCS__Group__9__Impl
+            // InternalMiniOCLCS.g:2306:1: ( rule__OperationCS__Group__9__Impl )
+            // InternalMiniOCLCS.g:2307:2: rule__OperationCS__Group__9__Impl
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__Group__9__Impl();
@@ -4886,22 +7855,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group__9__Impl"
-    // InternalMiniOCLCS.g:1467:1: rule__OperationCS__Group__9__Impl : ( ';' ) ;
+    // InternalMiniOCLCS.g:2313:1: rule__OperationCS__Group__9__Impl : ( ';' ) ;
     public final void rule__OperationCS__Group__9__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1471:1: ( ( ';' ) )
-            // InternalMiniOCLCS.g:1472:1: ( ';' )
+            // InternalMiniOCLCS.g:2317:1: ( ( ';' ) )
+            // InternalMiniOCLCS.g:2318:1: ( ';' )
             {
-            // InternalMiniOCLCS.g:1472:1: ( ';' )
-            // InternalMiniOCLCS.g:1473:2: ';'
+            // InternalMiniOCLCS.g:2318:1: ( ';' )
+            // InternalMiniOCLCS.g:2319:2: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getSemicolonKeyword_9()); 
             }
-            match(input,23,FOLLOW_2); if (state.failed) return ;
+            match(input,27,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getSemicolonKeyword_9()); 
             }
@@ -4927,16 +7896,16 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3__0"
-    // InternalMiniOCLCS.g:1483:1: rule__OperationCS__Group_3__0 : rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1 ;
+    // InternalMiniOCLCS.g:2329:1: rule__OperationCS__Group_3__0 : rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1 ;
     public final void rule__OperationCS__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1487:1: ( rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1 )
-            // InternalMiniOCLCS.g:1488:2: rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1
+            // InternalMiniOCLCS.g:2333:1: ( rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1 )
+            // InternalMiniOCLCS.g:2334:2: rule__OperationCS__Group_3__0__Impl rule__OperationCS__Group_3__1
             {
-            pushFollow(FOLLOW_17);
+            pushFollow(FOLLOW_23);
             rule__OperationCS__Group_3__0__Impl();
 
             state._fsp--;
@@ -4965,23 +7934,23 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3__0__Impl"
-    // InternalMiniOCLCS.g:1495:1: rule__OperationCS__Group_3__0__Impl : ( ( rule__OperationCS__ParamsAssignment_3_0 ) ) ;
+    // InternalMiniOCLCS.g:2341:1: rule__OperationCS__Group_3__0__Impl : ( ( rule__OperationCS__ParamsAssignment_3_0 ) ) ;
     public final void rule__OperationCS__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1499:1: ( ( ( rule__OperationCS__ParamsAssignment_3_0 ) ) )
-            // InternalMiniOCLCS.g:1500:1: ( ( rule__OperationCS__ParamsAssignment_3_0 ) )
+            // InternalMiniOCLCS.g:2345:1: ( ( ( rule__OperationCS__ParamsAssignment_3_0 ) ) )
+            // InternalMiniOCLCS.g:2346:1: ( ( rule__OperationCS__ParamsAssignment_3_0 ) )
             {
-            // InternalMiniOCLCS.g:1500:1: ( ( rule__OperationCS__ParamsAssignment_3_0 ) )
-            // InternalMiniOCLCS.g:1501:2: ( rule__OperationCS__ParamsAssignment_3_0 )
+            // InternalMiniOCLCS.g:2346:1: ( ( rule__OperationCS__ParamsAssignment_3_0 ) )
+            // InternalMiniOCLCS.g:2347:2: ( rule__OperationCS__ParamsAssignment_3_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getParamsAssignment_3_0()); 
             }
-            // InternalMiniOCLCS.g:1502:2: ( rule__OperationCS__ParamsAssignment_3_0 )
-            // InternalMiniOCLCS.g:1502:3: rule__OperationCS__ParamsAssignment_3_0
+            // InternalMiniOCLCS.g:2348:2: ( rule__OperationCS__ParamsAssignment_3_0 )
+            // InternalMiniOCLCS.g:2348:3: rule__OperationCS__ParamsAssignment_3_0
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__ParamsAssignment_3_0();
@@ -5016,14 +7985,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3__1"
-    // InternalMiniOCLCS.g:1510:1: rule__OperationCS__Group_3__1 : rule__OperationCS__Group_3__1__Impl ;
+    // InternalMiniOCLCS.g:2356:1: rule__OperationCS__Group_3__1 : rule__OperationCS__Group_3__1__Impl ;
     public final void rule__OperationCS__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1514:1: ( rule__OperationCS__Group_3__1__Impl )
-            // InternalMiniOCLCS.g:1515:2: rule__OperationCS__Group_3__1__Impl
+            // InternalMiniOCLCS.g:2360:1: ( rule__OperationCS__Group_3__1__Impl )
+            // InternalMiniOCLCS.g:2361:2: rule__OperationCS__Group_3__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__Group_3__1__Impl();
@@ -5049,37 +8018,37 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3__1__Impl"
-    // InternalMiniOCLCS.g:1521:1: rule__OperationCS__Group_3__1__Impl : ( ( rule__OperationCS__Group_3_1__0 )* ) ;
+    // InternalMiniOCLCS.g:2367:1: rule__OperationCS__Group_3__1__Impl : ( ( rule__OperationCS__Group_3_1__0 )* ) ;
     public final void rule__OperationCS__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1525:1: ( ( ( rule__OperationCS__Group_3_1__0 )* ) )
-            // InternalMiniOCLCS.g:1526:1: ( ( rule__OperationCS__Group_3_1__0 )* )
+            // InternalMiniOCLCS.g:2371:1: ( ( ( rule__OperationCS__Group_3_1__0 )* ) )
+            // InternalMiniOCLCS.g:2372:1: ( ( rule__OperationCS__Group_3_1__0 )* )
             {
-            // InternalMiniOCLCS.g:1526:1: ( ( rule__OperationCS__Group_3_1__0 )* )
-            // InternalMiniOCLCS.g:1527:2: ( rule__OperationCS__Group_3_1__0 )*
+            // InternalMiniOCLCS.g:2372:1: ( ( rule__OperationCS__Group_3_1__0 )* )
+            // InternalMiniOCLCS.g:2373:2: ( rule__OperationCS__Group_3_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getGroup_3_1()); 
             }
-            // InternalMiniOCLCS.g:1528:2: ( rule__OperationCS__Group_3_1__0 )*
-            loop14:
+            // InternalMiniOCLCS.g:2374:2: ( rule__OperationCS__Group_3_1__0 )*
+            loop21:
             do {
-                int alt14=2;
-                int LA14_0 = input.LA(1);
+                int alt21=2;
+                int LA21_0 = input.LA(1);
 
-                if ( (LA14_0==27) ) {
-                    alt14=1;
+                if ( (LA21_0==34) ) {
+                    alt21=1;
                 }
 
 
-                switch (alt14) {
+                switch (alt21) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1528:3: rule__OperationCS__Group_3_1__0
+            	    // InternalMiniOCLCS.g:2374:3: rule__OperationCS__Group_3_1__0
             	    {
-            	    pushFollow(FOLLOW_18);
+            	    pushFollow(FOLLOW_24);
             	    rule__OperationCS__Group_3_1__0();
 
             	    state._fsp--;
@@ -5089,7 +8058,7 @@
             	    break;
 
             	default :
-            	    break loop14;
+            	    break loop21;
                 }
             } while (true);
 
@@ -5118,14 +8087,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3_1__0"
-    // InternalMiniOCLCS.g:1537:1: rule__OperationCS__Group_3_1__0 : rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1 ;
+    // InternalMiniOCLCS.g:2383:1: rule__OperationCS__Group_3_1__0 : rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1 ;
     public final void rule__OperationCS__Group_3_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1541:1: ( rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1 )
-            // InternalMiniOCLCS.g:1542:2: rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1
+            // InternalMiniOCLCS.g:2387:1: ( rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1 )
+            // InternalMiniOCLCS.g:2388:2: rule__OperationCS__Group_3_1__0__Impl rule__OperationCS__Group_3_1__1
             {
             pushFollow(FOLLOW_4);
             rule__OperationCS__Group_3_1__0__Impl();
@@ -5156,22 +8125,22 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3_1__0__Impl"
-    // InternalMiniOCLCS.g:1549:1: rule__OperationCS__Group_3_1__0__Impl : ( ',' ) ;
+    // InternalMiniOCLCS.g:2395:1: rule__OperationCS__Group_3_1__0__Impl : ( ',' ) ;
     public final void rule__OperationCS__Group_3_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1553:1: ( ( ',' ) )
-            // InternalMiniOCLCS.g:1554:1: ( ',' )
+            // InternalMiniOCLCS.g:2399:1: ( ( ',' ) )
+            // InternalMiniOCLCS.g:2400:1: ( ',' )
             {
-            // InternalMiniOCLCS.g:1554:1: ( ',' )
-            // InternalMiniOCLCS.g:1555:2: ','
+            // InternalMiniOCLCS.g:2400:1: ( ',' )
+            // InternalMiniOCLCS.g:2401:2: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getCommaKeyword_3_1_0()); 
             }
-            match(input,27,FOLLOW_2); if (state.failed) return ;
+            match(input,34,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getOperationCSAccess().getCommaKeyword_3_1_0()); 
             }
@@ -5197,14 +8166,14 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3_1__1"
-    // InternalMiniOCLCS.g:1564:1: rule__OperationCS__Group_3_1__1 : rule__OperationCS__Group_3_1__1__Impl ;
+    // InternalMiniOCLCS.g:2410:1: rule__OperationCS__Group_3_1__1 : rule__OperationCS__Group_3_1__1__Impl ;
     public final void rule__OperationCS__Group_3_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1568:1: ( rule__OperationCS__Group_3_1__1__Impl )
-            // InternalMiniOCLCS.g:1569:2: rule__OperationCS__Group_3_1__1__Impl
+            // InternalMiniOCLCS.g:2414:1: ( rule__OperationCS__Group_3_1__1__Impl )
+            // InternalMiniOCLCS.g:2415:2: rule__OperationCS__Group_3_1__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__Group_3_1__1__Impl();
@@ -5230,23 +8199,23 @@
 
 
     // $ANTLR start "rule__OperationCS__Group_3_1__1__Impl"
-    // InternalMiniOCLCS.g:1575:1: rule__OperationCS__Group_3_1__1__Impl : ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) ) ;
+    // InternalMiniOCLCS.g:2421:1: rule__OperationCS__Group_3_1__1__Impl : ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) ) ;
     public final void rule__OperationCS__Group_3_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1579:1: ( ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) ) )
-            // InternalMiniOCLCS.g:1580:1: ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) )
+            // InternalMiniOCLCS.g:2425:1: ( ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) ) )
+            // InternalMiniOCLCS.g:2426:1: ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) )
             {
-            // InternalMiniOCLCS.g:1580:1: ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) )
-            // InternalMiniOCLCS.g:1581:2: ( rule__OperationCS__ParamsAssignment_3_1_1 )
+            // InternalMiniOCLCS.g:2426:1: ( ( rule__OperationCS__ParamsAssignment_3_1_1 ) )
+            // InternalMiniOCLCS.g:2427:2: ( rule__OperationCS__ParamsAssignment_3_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getParamsAssignment_3_1_1()); 
             }
-            // InternalMiniOCLCS.g:1582:2: ( rule__OperationCS__ParamsAssignment_3_1_1 )
-            // InternalMiniOCLCS.g:1582:3: rule__OperationCS__ParamsAssignment_3_1_1
+            // InternalMiniOCLCS.g:2428:2: ( rule__OperationCS__ParamsAssignment_3_1_1 )
+            // InternalMiniOCLCS.g:2428:3: rule__OperationCS__ParamsAssignment_3_1_1
             {
             pushFollow(FOLLOW_2);
             rule__OperationCS__ParamsAssignment_3_1_1();
@@ -5281,14 +8250,14 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__0"
-    // InternalMiniOCLCS.g:1591:1: rule__ParameterCS__Group__0 : rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 ;
+    // InternalMiniOCLCS.g:2437: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 {
-            // InternalMiniOCLCS.g:1595:1: ( rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 )
-            // InternalMiniOCLCS.g:1596:2: rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1
+            // InternalMiniOCLCS.g:2441:1: ( rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1 )
+            // InternalMiniOCLCS.g:2442:2: rule__ParameterCS__Group__0__Impl rule__ParameterCS__Group__1
             {
             pushFollow(FOLLOW_11);
             rule__ParameterCS__Group__0__Impl();
@@ -5319,23 +8288,23 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1603:1: rule__ParameterCS__Group__0__Impl : ( ( rule__ParameterCS__NameAssignment_0 ) ) ;
+    // InternalMiniOCLCS.g:2449:1: rule__ParameterCS__Group__0__Impl : ( ( rule__ParameterCS__NameAssignment_0 ) ) ;
     public final void rule__ParameterCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1607:1: ( ( ( rule__ParameterCS__NameAssignment_0 ) ) )
-            // InternalMiniOCLCS.g:1608:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
+            // InternalMiniOCLCS.g:2453:1: ( ( ( rule__ParameterCS__NameAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:2454:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
             {
-            // InternalMiniOCLCS.g:1608:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
-            // InternalMiniOCLCS.g:1609:2: ( rule__ParameterCS__NameAssignment_0 )
+            // InternalMiniOCLCS.g:2454:1: ( ( rule__ParameterCS__NameAssignment_0 ) )
+            // InternalMiniOCLCS.g:2455:2: ( rule__ParameterCS__NameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getNameAssignment_0()); 
             }
-            // InternalMiniOCLCS.g:1610:2: ( rule__ParameterCS__NameAssignment_0 )
-            // InternalMiniOCLCS.g:1610:3: rule__ParameterCS__NameAssignment_0
+            // InternalMiniOCLCS.g:2456:2: ( rule__ParameterCS__NameAssignment_0 )
+            // InternalMiniOCLCS.g:2456:3: rule__ParameterCS__NameAssignment_0
             {
             pushFollow(FOLLOW_2);
             rule__ParameterCS__NameAssignment_0();
@@ -5370,14 +8339,14 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__1"
-    // InternalMiniOCLCS.g:1618:1: rule__ParameterCS__Group__1 : rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 ;
+    // InternalMiniOCLCS.g:2464: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 {
-            // InternalMiniOCLCS.g:1622:1: ( rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 )
-            // InternalMiniOCLCS.g:1623:2: rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2
+            // InternalMiniOCLCS.g:2468:1: ( rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2 )
+            // InternalMiniOCLCS.g:2469:2: rule__ParameterCS__Group__1__Impl rule__ParameterCS__Group__2
             {
             pushFollow(FOLLOW_4);
             rule__ParameterCS__Group__1__Impl();
@@ -5408,22 +8377,22 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1630:1: rule__ParameterCS__Group__1__Impl : ( ':' ) ;
+    // InternalMiniOCLCS.g:2476:1: rule__ParameterCS__Group__1__Impl : ( ':' ) ;
     public final void rule__ParameterCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1634:1: ( ( ':' ) )
-            // InternalMiniOCLCS.g:1635:1: ( ':' )
+            // InternalMiniOCLCS.g:2480:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:2481:1: ( ':' )
             {
-            // InternalMiniOCLCS.g:1635:1: ( ':' )
-            // InternalMiniOCLCS.g:1636:2: ':'
+            // InternalMiniOCLCS.g:2481:1: ( ':' )
+            // InternalMiniOCLCS.g:2482:2: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getColonKeyword_1()); 
             }
-            match(input,22,FOLLOW_2); if (state.failed) return ;
+            match(input,26,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getParameterCSAccess().getColonKeyword_1()); 
             }
@@ -5449,14 +8418,14 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__2"
-    // InternalMiniOCLCS.g:1645:1: rule__ParameterCS__Group__2 : rule__ParameterCS__Group__2__Impl ;
+    // InternalMiniOCLCS.g:2491:1: rule__ParameterCS__Group__2 : rule__ParameterCS__Group__2__Impl ;
     public final void rule__ParameterCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1649:1: ( rule__ParameterCS__Group__2__Impl )
-            // InternalMiniOCLCS.g:1650:2: rule__ParameterCS__Group__2__Impl
+            // InternalMiniOCLCS.g:2495:1: ( rule__ParameterCS__Group__2__Impl )
+            // InternalMiniOCLCS.g:2496:2: rule__ParameterCS__Group__2__Impl
             {
             pushFollow(FOLLOW_2);
             rule__ParameterCS__Group__2__Impl();
@@ -5482,23 +8451,23 @@
 
 
     // $ANTLR start "rule__ParameterCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:1656:1: rule__ParameterCS__Group__2__Impl : ( ( rule__ParameterCS__TypeRefAssignment_2 ) ) ;
+    // InternalMiniOCLCS.g:2502:1: rule__ParameterCS__Group__2__Impl : ( ( rule__ParameterCS__TypeRefAssignment_2 ) ) ;
     public final void rule__ParameterCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1660:1: ( ( ( rule__ParameterCS__TypeRefAssignment_2 ) ) )
-            // InternalMiniOCLCS.g:1661:1: ( ( rule__ParameterCS__TypeRefAssignment_2 ) )
+            // InternalMiniOCLCS.g:2506:1: ( ( ( rule__ParameterCS__TypeRefAssignment_2 ) ) )
+            // InternalMiniOCLCS.g:2507:1: ( ( rule__ParameterCS__TypeRefAssignment_2 ) )
             {
-            // InternalMiniOCLCS.g:1661:1: ( ( rule__ParameterCS__TypeRefAssignment_2 ) )
-            // InternalMiniOCLCS.g:1662:2: ( rule__ParameterCS__TypeRefAssignment_2 )
+            // InternalMiniOCLCS.g:2507:1: ( ( rule__ParameterCS__TypeRefAssignment_2 ) )
+            // InternalMiniOCLCS.g:2508:2: ( rule__ParameterCS__TypeRefAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getTypeRefAssignment_2()); 
             }
-            // InternalMiniOCLCS.g:1663:2: ( rule__ParameterCS__TypeRefAssignment_2 )
-            // InternalMiniOCLCS.g:1663:3: rule__ParameterCS__TypeRefAssignment_2
+            // InternalMiniOCLCS.g:2509:2: ( rule__ParameterCS__TypeRefAssignment_2 )
+            // InternalMiniOCLCS.g:2509:3: rule__ParameterCS__TypeRefAssignment_2
             {
             pushFollow(FOLLOW_2);
             rule__ParameterCS__TypeRefAssignment_2();
@@ -5533,14 +8502,14 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__0"
-    // InternalMiniOCLCS.g:1672:1: rule__ConstraintsDefCS__Group__0 : rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1 ;
+    // InternalMiniOCLCS.g:2518:1: rule__ConstraintsDefCS__Group__0 : rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1 ;
     public final void rule__ConstraintsDefCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1676:1: ( rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1 )
-            // InternalMiniOCLCS.g:1677:2: rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1
+            // InternalMiniOCLCS.g:2522:1: ( rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1 )
+            // InternalMiniOCLCS.g:2523:2: rule__ConstraintsDefCS__Group__0__Impl rule__ConstraintsDefCS__Group__1
             {
             pushFollow(FOLLOW_4);
             rule__ConstraintsDefCS__Group__0__Impl();
@@ -5571,22 +8540,22 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1684:1: rule__ConstraintsDefCS__Group__0__Impl : ( 'context' ) ;
+    // InternalMiniOCLCS.g:2530:1: rule__ConstraintsDefCS__Group__0__Impl : ( 'context' ) ;
     public final void rule__ConstraintsDefCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1688:1: ( ( 'context' ) )
-            // InternalMiniOCLCS.g:1689:1: ( 'context' )
+            // InternalMiniOCLCS.g:2534:1: ( ( 'context' ) )
+            // InternalMiniOCLCS.g:2535:1: ( 'context' )
             {
-            // InternalMiniOCLCS.g:1689:1: ( 'context' )
-            // InternalMiniOCLCS.g:1690:2: 'context'
+            // InternalMiniOCLCS.g:2535:1: ( 'context' )
+            // InternalMiniOCLCS.g:2536:2: 'context'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getContextKeyword_0()); 
             }
-            match(input,28,FOLLOW_2); if (state.failed) return ;
+            match(input,35,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getConstraintsDefCSAccess().getContextKeyword_0()); 
             }
@@ -5612,14 +8581,14 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__1"
-    // InternalMiniOCLCS.g:1699:1: rule__ConstraintsDefCS__Group__1 : rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2 ;
+    // InternalMiniOCLCS.g:2545:1: rule__ConstraintsDefCS__Group__1 : rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2 ;
     public final void rule__ConstraintsDefCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1703:1: ( rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2 )
-            // InternalMiniOCLCS.g:1704:2: rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2
+            // InternalMiniOCLCS.g:2549:1: ( rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2 )
+            // InternalMiniOCLCS.g:2550:2: rule__ConstraintsDefCS__Group__1__Impl rule__ConstraintsDefCS__Group__2
             {
             pushFollow(FOLLOW_5);
             rule__ConstraintsDefCS__Group__1__Impl();
@@ -5650,23 +8619,23 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1711:1: rule__ConstraintsDefCS__Group__1__Impl : ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) ) ;
+    // InternalMiniOCLCS.g:2557:1: rule__ConstraintsDefCS__Group__1__Impl : ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) ) ;
     public final void rule__ConstraintsDefCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1715:1: ( ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) ) )
-            // InternalMiniOCLCS.g:1716:1: ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) )
+            // InternalMiniOCLCS.g:2561:1: ( ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:2562:1: ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) )
             {
-            // InternalMiniOCLCS.g:1716:1: ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) )
-            // InternalMiniOCLCS.g:1717:2: ( rule__ConstraintsDefCS__TypeRefAssignment_1 )
+            // InternalMiniOCLCS.g:2562:1: ( ( rule__ConstraintsDefCS__TypeRefAssignment_1 ) )
+            // InternalMiniOCLCS.g:2563:2: ( rule__ConstraintsDefCS__TypeRefAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getTypeRefAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:1718:2: ( rule__ConstraintsDefCS__TypeRefAssignment_1 )
-            // InternalMiniOCLCS.g:1718:3: rule__ConstraintsDefCS__TypeRefAssignment_1
+            // InternalMiniOCLCS.g:2564:2: ( rule__ConstraintsDefCS__TypeRefAssignment_1 )
+            // InternalMiniOCLCS.g:2564:3: rule__ConstraintsDefCS__TypeRefAssignment_1
             {
             pushFollow(FOLLOW_2);
             rule__ConstraintsDefCS__TypeRefAssignment_1();
@@ -5701,16 +8670,16 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__2"
-    // InternalMiniOCLCS.g:1726:1: rule__ConstraintsDefCS__Group__2 : rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3 ;
+    // InternalMiniOCLCS.g:2572:1: rule__ConstraintsDefCS__Group__2 : rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3 ;
     public final void rule__ConstraintsDefCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1730:1: ( rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3 )
-            // InternalMiniOCLCS.g:1731:2: rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3
+            // InternalMiniOCLCS.g:2576:1: ( rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3 )
+            // InternalMiniOCLCS.g:2577:2: rule__ConstraintsDefCS__Group__2__Impl rule__ConstraintsDefCS__Group__3
             {
-            pushFollow(FOLLOW_19);
+            pushFollow(FOLLOW_25);
             rule__ConstraintsDefCS__Group__2__Impl();
 
             state._fsp--;
@@ -5739,22 +8708,22 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:1738:1: rule__ConstraintsDefCS__Group__2__Impl : ( '{' ) ;
+    // InternalMiniOCLCS.g:2584:1: rule__ConstraintsDefCS__Group__2__Impl : ( '{' ) ;
     public final void rule__ConstraintsDefCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1742:1: ( ( '{' ) )
-            // InternalMiniOCLCS.g:1743:1: ( '{' )
+            // InternalMiniOCLCS.g:2588:1: ( ( '{' ) )
+            // InternalMiniOCLCS.g:2589:1: ( '{' )
             {
-            // InternalMiniOCLCS.g:1743:1: ( '{' )
-            // InternalMiniOCLCS.g:1744:2: '{'
+            // InternalMiniOCLCS.g:2589:1: ( '{' )
+            // InternalMiniOCLCS.g:2590:2: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getLeftCurlyBracketKeyword_2()); 
             }
-            match(input,17,FOLLOW_2); if (state.failed) return ;
+            match(input,21,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getConstraintsDefCSAccess().getLeftCurlyBracketKeyword_2()); 
             }
@@ -5780,16 +8749,16 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__3"
-    // InternalMiniOCLCS.g:1753:1: rule__ConstraintsDefCS__Group__3 : rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4 ;
+    // InternalMiniOCLCS.g:2599:1: rule__ConstraintsDefCS__Group__3 : rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4 ;
     public final void rule__ConstraintsDefCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1757:1: ( rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4 )
-            // InternalMiniOCLCS.g:1758:2: rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4
+            // InternalMiniOCLCS.g:2603:1: ( rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4 )
+            // InternalMiniOCLCS.g:2604:2: rule__ConstraintsDefCS__Group__3__Impl rule__ConstraintsDefCS__Group__4
             {
-            pushFollow(FOLLOW_19);
+            pushFollow(FOLLOW_25);
             rule__ConstraintsDefCS__Group__3__Impl();
 
             state._fsp--;
@@ -5818,37 +8787,37 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:1765:1: rule__ConstraintsDefCS__Group__3__Impl : ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* ) ;
+    // InternalMiniOCLCS.g:2611:1: rule__ConstraintsDefCS__Group__3__Impl : ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* ) ;
     public final void rule__ConstraintsDefCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1769:1: ( ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* ) )
-            // InternalMiniOCLCS.g:1770:1: ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* )
+            // InternalMiniOCLCS.g:2615:1: ( ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* ) )
+            // InternalMiniOCLCS.g:2616:1: ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* )
             {
-            // InternalMiniOCLCS.g:1770:1: ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* )
-            // InternalMiniOCLCS.g:1771:2: ( rule__ConstraintsDefCS__InvariantsAssignment_3 )*
+            // InternalMiniOCLCS.g:2616:1: ( ( rule__ConstraintsDefCS__InvariantsAssignment_3 )* )
+            // InternalMiniOCLCS.g:2617:2: ( rule__ConstraintsDefCS__InvariantsAssignment_3 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getInvariantsAssignment_3()); 
             }
-            // InternalMiniOCLCS.g:1772:2: ( rule__ConstraintsDefCS__InvariantsAssignment_3 )*
-            loop15:
+            // InternalMiniOCLCS.g:2618:2: ( rule__ConstraintsDefCS__InvariantsAssignment_3 )*
+            loop22:
             do {
-                int alt15=2;
-                int LA15_0 = input.LA(1);
+                int alt22=2;
+                int LA22_0 = input.LA(1);
 
-                if ( (LA15_0==29) ) {
-                    alt15=1;
+                if ( (LA22_0==36) ) {
+                    alt22=1;
                 }
 
 
-                switch (alt15) {
+                switch (alt22) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1772:3: rule__ConstraintsDefCS__InvariantsAssignment_3
+            	    // InternalMiniOCLCS.g:2618:3: rule__ConstraintsDefCS__InvariantsAssignment_3
             	    {
-            	    pushFollow(FOLLOW_20);
+            	    pushFollow(FOLLOW_26);
             	    rule__ConstraintsDefCS__InvariantsAssignment_3();
 
             	    state._fsp--;
@@ -5858,7 +8827,7 @@
             	    break;
 
             	default :
-            	    break loop15;
+            	    break loop22;
                 }
             } while (true);
 
@@ -5887,14 +8856,14 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__4"
-    // InternalMiniOCLCS.g:1780:1: rule__ConstraintsDefCS__Group__4 : rule__ConstraintsDefCS__Group__4__Impl ;
+    // InternalMiniOCLCS.g:2626:1: rule__ConstraintsDefCS__Group__4 : rule__ConstraintsDefCS__Group__4__Impl ;
     public final void rule__ConstraintsDefCS__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1784:1: ( rule__ConstraintsDefCS__Group__4__Impl )
-            // InternalMiniOCLCS.g:1785:2: rule__ConstraintsDefCS__Group__4__Impl
+            // InternalMiniOCLCS.g:2630:1: ( rule__ConstraintsDefCS__Group__4__Impl )
+            // InternalMiniOCLCS.g:2631:2: rule__ConstraintsDefCS__Group__4__Impl
             {
             pushFollow(FOLLOW_2);
             rule__ConstraintsDefCS__Group__4__Impl();
@@ -5920,22 +8889,22 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__Group__4__Impl"
-    // InternalMiniOCLCS.g:1791:1: rule__ConstraintsDefCS__Group__4__Impl : ( '}' ) ;
+    // InternalMiniOCLCS.g:2637:1: rule__ConstraintsDefCS__Group__4__Impl : ( '}' ) ;
     public final void rule__ConstraintsDefCS__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1795:1: ( ( '}' ) )
-            // InternalMiniOCLCS.g:1796:1: ( '}' )
+            // InternalMiniOCLCS.g:2641:1: ( ( '}' ) )
+            // InternalMiniOCLCS.g:2642:1: ( '}' )
             {
-            // InternalMiniOCLCS.g:1796:1: ( '}' )
-            // InternalMiniOCLCS.g:1797:2: '}'
+            // InternalMiniOCLCS.g:2642:1: ( '}' )
+            // InternalMiniOCLCS.g:2643:2: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getRightCurlyBracketKeyword_4()); 
             }
-            match(input,18,FOLLOW_2); if (state.failed) return ;
+            match(input,22,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getConstraintsDefCSAccess().getRightCurlyBracketKeyword_4()); 
             }
@@ -5961,14 +8930,14 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__0"
-    // InternalMiniOCLCS.g:1807:1: rule__InvariantCS__Group__0 : rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1 ;
+    // InternalMiniOCLCS.g:2653:1: rule__InvariantCS__Group__0 : rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1 ;
     public final void rule__InvariantCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1811:1: ( rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1 )
-            // InternalMiniOCLCS.g:1812:2: rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1
+            // InternalMiniOCLCS.g:2657:1: ( rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1 )
+            // InternalMiniOCLCS.g:2658:2: rule__InvariantCS__Group__0__Impl rule__InvariantCS__Group__1
             {
             pushFollow(FOLLOW_11);
             rule__InvariantCS__Group__0__Impl();
@@ -5999,22 +8968,22 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1819:1: rule__InvariantCS__Group__0__Impl : ( 'inv' ) ;
+    // InternalMiniOCLCS.g:2665:1: rule__InvariantCS__Group__0__Impl : ( 'inv' ) ;
     public final void rule__InvariantCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1823:1: ( ( 'inv' ) )
-            // InternalMiniOCLCS.g:1824:1: ( 'inv' )
+            // InternalMiniOCLCS.g:2669:1: ( ( 'inv' ) )
+            // InternalMiniOCLCS.g:2670:1: ( 'inv' )
             {
-            // InternalMiniOCLCS.g:1824:1: ( 'inv' )
-            // InternalMiniOCLCS.g:1825:2: 'inv'
+            // InternalMiniOCLCS.g:2670:1: ( 'inv' )
+            // InternalMiniOCLCS.g:2671:2: 'inv'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getInvKeyword_0()); 
             }
-            match(input,29,FOLLOW_2); if (state.failed) return ;
+            match(input,36,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantCSAccess().getInvKeyword_0()); 
             }
@@ -6040,16 +9009,16 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__1"
-    // InternalMiniOCLCS.g:1834:1: rule__InvariantCS__Group__1 : rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2 ;
+    // InternalMiniOCLCS.g:2680:1: rule__InvariantCS__Group__1 : rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2 ;
     public final void rule__InvariantCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1838:1: ( rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2 )
-            // InternalMiniOCLCS.g:1839:2: rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2
+            // InternalMiniOCLCS.g:2684:1: ( rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2 )
+            // InternalMiniOCLCS.g:2685:2: rule__InvariantCS__Group__1__Impl rule__InvariantCS__Group__2
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_22);
             rule__InvariantCS__Group__1__Impl();
 
             state._fsp--;
@@ -6078,22 +9047,22 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1846:1: rule__InvariantCS__Group__1__Impl : ( ':' ) ;
+    // InternalMiniOCLCS.g:2692:1: rule__InvariantCS__Group__1__Impl : ( ':' ) ;
     public final void rule__InvariantCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1850:1: ( ( ':' ) )
-            // InternalMiniOCLCS.g:1851:1: ( ':' )
+            // InternalMiniOCLCS.g:2696:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:2697:1: ( ':' )
             {
-            // InternalMiniOCLCS.g:1851:1: ( ':' )
-            // InternalMiniOCLCS.g:1852:2: ':'
+            // InternalMiniOCLCS.g:2697:1: ( ':' )
+            // InternalMiniOCLCS.g:2698:2: ':'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getColonKeyword_1()); 
             }
-            match(input,22,FOLLOW_2); if (state.failed) return ;
+            match(input,26,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantCSAccess().getColonKeyword_1()); 
             }
@@ -6119,16 +9088,16 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__2"
-    // InternalMiniOCLCS.g:1861:1: rule__InvariantCS__Group__2 : rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3 ;
+    // InternalMiniOCLCS.g:2707:1: rule__InvariantCS__Group__2 : rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3 ;
     public final void rule__InvariantCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1865:1: ( rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3 )
-            // InternalMiniOCLCS.g:1866:2: rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3
+            // InternalMiniOCLCS.g:2711:1: ( rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3 )
+            // InternalMiniOCLCS.g:2712:2: rule__InvariantCS__Group__2__Impl rule__InvariantCS__Group__3
             {
-            pushFollow(FOLLOW_12);
+            pushFollow(FOLLOW_13);
             rule__InvariantCS__Group__2__Impl();
 
             state._fsp--;
@@ -6157,23 +9126,23 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:1873:1: rule__InvariantCS__Group__2__Impl : ( ( rule__InvariantCS__ExpAssignment_2 ) ) ;
+    // InternalMiniOCLCS.g:2719:1: rule__InvariantCS__Group__2__Impl : ( ( rule__InvariantCS__ExpAssignment_2 ) ) ;
     public final void rule__InvariantCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1877:1: ( ( ( rule__InvariantCS__ExpAssignment_2 ) ) )
-            // InternalMiniOCLCS.g:1878:1: ( ( rule__InvariantCS__ExpAssignment_2 ) )
+            // InternalMiniOCLCS.g:2723:1: ( ( ( rule__InvariantCS__ExpAssignment_2 ) ) )
+            // InternalMiniOCLCS.g:2724:1: ( ( rule__InvariantCS__ExpAssignment_2 ) )
             {
-            // InternalMiniOCLCS.g:1878:1: ( ( rule__InvariantCS__ExpAssignment_2 ) )
-            // InternalMiniOCLCS.g:1879:2: ( rule__InvariantCS__ExpAssignment_2 )
+            // InternalMiniOCLCS.g:2724:1: ( ( rule__InvariantCS__ExpAssignment_2 ) )
+            // InternalMiniOCLCS.g:2725:2: ( rule__InvariantCS__ExpAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getExpAssignment_2()); 
             }
-            // InternalMiniOCLCS.g:1880:2: ( rule__InvariantCS__ExpAssignment_2 )
-            // InternalMiniOCLCS.g:1880:3: rule__InvariantCS__ExpAssignment_2
+            // InternalMiniOCLCS.g:2726:2: ( rule__InvariantCS__ExpAssignment_2 )
+            // InternalMiniOCLCS.g:2726:3: rule__InvariantCS__ExpAssignment_2
             {
             pushFollow(FOLLOW_2);
             rule__InvariantCS__ExpAssignment_2();
@@ -6208,14 +9177,14 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__3"
-    // InternalMiniOCLCS.g:1888:1: rule__InvariantCS__Group__3 : rule__InvariantCS__Group__3__Impl ;
+    // InternalMiniOCLCS.g:2734:1: rule__InvariantCS__Group__3 : rule__InvariantCS__Group__3__Impl ;
     public final void rule__InvariantCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1892:1: ( rule__InvariantCS__Group__3__Impl )
-            // InternalMiniOCLCS.g:1893:2: rule__InvariantCS__Group__3__Impl
+            // InternalMiniOCLCS.g:2738:1: ( rule__InvariantCS__Group__3__Impl )
+            // InternalMiniOCLCS.g:2739:2: rule__InvariantCS__Group__3__Impl
             {
             pushFollow(FOLLOW_2);
             rule__InvariantCS__Group__3__Impl();
@@ -6241,22 +9210,22 @@
 
 
     // $ANTLR start "rule__InvariantCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:1899:1: rule__InvariantCS__Group__3__Impl : ( ';' ) ;
+    // InternalMiniOCLCS.g:2745:1: rule__InvariantCS__Group__3__Impl : ( ';' ) ;
     public final void rule__InvariantCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1903:1: ( ( ';' ) )
-            // InternalMiniOCLCS.g:1904:1: ( ';' )
+            // InternalMiniOCLCS.g:2749:1: ( ( ';' ) )
+            // InternalMiniOCLCS.g:2750:1: ( ';' )
             {
-            // InternalMiniOCLCS.g:1904:1: ( ';' )
-            // InternalMiniOCLCS.g:1905:2: ';'
+            // InternalMiniOCLCS.g:2750:1: ( ';' )
+            // InternalMiniOCLCS.g:2751:2: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getSemicolonKeyword_3()); 
             }
-            match(input,23,FOLLOW_2); if (state.failed) return ;
+            match(input,27,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getInvariantCSAccess().getSemicolonKeyword_3()); 
             }
@@ -6282,16 +9251,16 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group__0"
-    // InternalMiniOCLCS.g:1915:1: rule__LogicExpCS__Group__0 : rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1 ;
+    // InternalMiniOCLCS.g:2761:1: rule__LogicExpCS__Group__0 : rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1 ;
     public final void rule__LogicExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1919:1: ( rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1 )
-            // InternalMiniOCLCS.g:1920:2: rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1
+            // InternalMiniOCLCS.g:2765:1: ( rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1 )
+            // InternalMiniOCLCS.g:2766:2: rule__LogicExpCS__Group__0__Impl rule__LogicExpCS__Group__1
             {
-            pushFollow(FOLLOW_21);
+            pushFollow(FOLLOW_27);
             rule__LogicExpCS__Group__0__Impl();
 
             state._fsp--;
@@ -6320,17 +9289,17 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:1927:1: rule__LogicExpCS__Group__0__Impl : ( ruleCallExpCS ) ;
+    // InternalMiniOCLCS.g:2773:1: rule__LogicExpCS__Group__0__Impl : ( ruleCallExpCS ) ;
     public final void rule__LogicExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1931:1: ( ( ruleCallExpCS ) )
-            // InternalMiniOCLCS.g:1932:1: ( ruleCallExpCS )
+            // InternalMiniOCLCS.g:2777:1: ( ( ruleCallExpCS ) )
+            // InternalMiniOCLCS.g:2778:1: ( ruleCallExpCS )
             {
-            // InternalMiniOCLCS.g:1932:1: ( ruleCallExpCS )
-            // InternalMiniOCLCS.g:1933:2: ruleCallExpCS
+            // InternalMiniOCLCS.g:2778:1: ( ruleCallExpCS )
+            // InternalMiniOCLCS.g:2779:2: ruleCallExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getCallExpCSParserRuleCall_0()); 
@@ -6365,14 +9334,14 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group__1"
-    // InternalMiniOCLCS.g:1942:1: rule__LogicExpCS__Group__1 : rule__LogicExpCS__Group__1__Impl ;
+    // InternalMiniOCLCS.g:2788:1: rule__LogicExpCS__Group__1 : rule__LogicExpCS__Group__1__Impl ;
     public final void rule__LogicExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1946:1: ( rule__LogicExpCS__Group__1__Impl )
-            // InternalMiniOCLCS.g:1947:2: rule__LogicExpCS__Group__1__Impl
+            // InternalMiniOCLCS.g:2792:1: ( rule__LogicExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:2793:2: rule__LogicExpCS__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__Group__1__Impl();
@@ -6398,37 +9367,52 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:1953:1: rule__LogicExpCS__Group__1__Impl : ( ( rule__LogicExpCS__Group_1__0 )* ) ;
+    // InternalMiniOCLCS.g:2799:1: rule__LogicExpCS__Group__1__Impl : ( ( rule__LogicExpCS__Group_1__0 )* ) ;
     public final void rule__LogicExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1957:1: ( ( ( rule__LogicExpCS__Group_1__0 )* ) )
-            // InternalMiniOCLCS.g:1958:1: ( ( rule__LogicExpCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:2803:1: ( ( ( rule__LogicExpCS__Group_1__0 )* ) )
+            // InternalMiniOCLCS.g:2804:1: ( ( rule__LogicExpCS__Group_1__0 )* )
             {
-            // InternalMiniOCLCS.g:1958:1: ( ( rule__LogicExpCS__Group_1__0 )* )
-            // InternalMiniOCLCS.g:1959:2: ( rule__LogicExpCS__Group_1__0 )*
+            // InternalMiniOCLCS.g:2804:1: ( ( rule__LogicExpCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:2805:2: ( rule__LogicExpCS__Group_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getGroup_1()); 
             }
-            // InternalMiniOCLCS.g:1960:2: ( rule__LogicExpCS__Group_1__0 )*
-            loop16:
+            // InternalMiniOCLCS.g:2806:2: ( rule__LogicExpCS__Group_1__0 )*
+            loop23:
             do {
-                int alt16=2;
-                int LA16_0 = input.LA(1);
+                int alt23=2;
+                int LA23_0 = input.LA(1);
 
-                if ( ((LA16_0>=11 && LA16_0<=12)) ) {
-                    alt16=1;
+                if ( (LA23_0==15) ) {
+                    int LA23_2 = input.LA(2);
+
+                    if ( (synpred29_InternalMiniOCLCS()) ) {
+                        alt23=1;
+                    }
+
+
+                }
+                else if ( (LA23_0==16) ) {
+                    int LA23_3 = input.LA(2);
+
+                    if ( (synpred29_InternalMiniOCLCS()) ) {
+                        alt23=1;
+                    }
+
+
                 }
 
 
-                switch (alt16) {
+                switch (alt23) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1960:3: rule__LogicExpCS__Group_1__0
+            	    // InternalMiniOCLCS.g:2806:3: rule__LogicExpCS__Group_1__0
             	    {
-            	    pushFollow(FOLLOW_22);
+            	    pushFollow(FOLLOW_28);
             	    rule__LogicExpCS__Group_1__0();
 
             	    state._fsp--;
@@ -6438,7 +9422,7 @@
             	    break;
 
             	default :
-            	    break loop16;
+            	    break loop23;
                 }
             } while (true);
 
@@ -6467,16 +9451,16 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__0"
-    // InternalMiniOCLCS.g:1969:1: rule__LogicExpCS__Group_1__0 : rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1 ;
+    // InternalMiniOCLCS.g:2815:1: rule__LogicExpCS__Group_1__0 : rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1 ;
     public final void rule__LogicExpCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1973:1: ( rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1 )
-            // InternalMiniOCLCS.g:1974:2: rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1
+            // InternalMiniOCLCS.g:2819:1: ( rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1 )
+            // InternalMiniOCLCS.g:2820:2: rule__LogicExpCS__Group_1__0__Impl rule__LogicExpCS__Group_1__1
             {
-            pushFollow(FOLLOW_21);
+            pushFollow(FOLLOW_27);
             rule__LogicExpCS__Group_1__0__Impl();
 
             state._fsp--;
@@ -6505,23 +9489,23 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__0__Impl"
-    // InternalMiniOCLCS.g:1981:1: rule__LogicExpCS__Group_1__0__Impl : ( () ) ;
+    // InternalMiniOCLCS.g:2827:1: rule__LogicExpCS__Group_1__0__Impl : ( () ) ;
     public final void rule__LogicExpCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:1985:1: ( ( () ) )
-            // InternalMiniOCLCS.g:1986:1: ( () )
+            // InternalMiniOCLCS.g:2831:1: ( ( () ) )
+            // InternalMiniOCLCS.g:2832:1: ( () )
             {
-            // InternalMiniOCLCS.g:1986:1: ( () )
-            // InternalMiniOCLCS.g:1987:2: ()
+            // InternalMiniOCLCS.g:2832:1: ( () )
+            // InternalMiniOCLCS.g:2833:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getLogicExpCSLeftAction_1_0()); 
             }
-            // InternalMiniOCLCS.g:1988:2: ()
-            // InternalMiniOCLCS.g:1988:3: 
+            // InternalMiniOCLCS.g:2834:2: ()
+            // InternalMiniOCLCS.g:2834:3: 
             {
             }
 
@@ -6546,16 +9530,16 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__1"
-    // InternalMiniOCLCS.g:1996:1: rule__LogicExpCS__Group_1__1 : rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2 ;
+    // InternalMiniOCLCS.g:2842:1: rule__LogicExpCS__Group_1__1 : rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2 ;
     public final void rule__LogicExpCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2000:1: ( rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2 )
-            // InternalMiniOCLCS.g:2001:2: rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2
+            // InternalMiniOCLCS.g:2846:1: ( rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2 )
+            // InternalMiniOCLCS.g:2847:2: rule__LogicExpCS__Group_1__1__Impl rule__LogicExpCS__Group_1__2
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_22);
             rule__LogicExpCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -6584,23 +9568,23 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__1__Impl"
-    // InternalMiniOCLCS.g:2008:1: rule__LogicExpCS__Group_1__1__Impl : ( ( rule__LogicExpCS__OpAssignment_1_1 ) ) ;
+    // InternalMiniOCLCS.g:2854:1: rule__LogicExpCS__Group_1__1__Impl : ( ( rule__LogicExpCS__OpAssignment_1_1 ) ) ;
     public final void rule__LogicExpCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2012:1: ( ( ( rule__LogicExpCS__OpAssignment_1_1 ) ) )
-            // InternalMiniOCLCS.g:2013:1: ( ( rule__LogicExpCS__OpAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:2858:1: ( ( ( rule__LogicExpCS__OpAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:2859:1: ( ( rule__LogicExpCS__OpAssignment_1_1 ) )
             {
-            // InternalMiniOCLCS.g:2013:1: ( ( rule__LogicExpCS__OpAssignment_1_1 ) )
-            // InternalMiniOCLCS.g:2014:2: ( rule__LogicExpCS__OpAssignment_1_1 )
+            // InternalMiniOCLCS.g:2859:1: ( ( rule__LogicExpCS__OpAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:2860:2: ( rule__LogicExpCS__OpAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getOpAssignment_1_1()); 
             }
-            // InternalMiniOCLCS.g:2015:2: ( rule__LogicExpCS__OpAssignment_1_1 )
-            // InternalMiniOCLCS.g:2015:3: rule__LogicExpCS__OpAssignment_1_1
+            // InternalMiniOCLCS.g:2861:2: ( rule__LogicExpCS__OpAssignment_1_1 )
+            // InternalMiniOCLCS.g:2861:3: rule__LogicExpCS__OpAssignment_1_1
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__OpAssignment_1_1();
@@ -6635,14 +9619,14 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__2"
-    // InternalMiniOCLCS.g:2023:1: rule__LogicExpCS__Group_1__2 : rule__LogicExpCS__Group_1__2__Impl ;
+    // InternalMiniOCLCS.g:2869:1: rule__LogicExpCS__Group_1__2 : rule__LogicExpCS__Group_1__2__Impl ;
     public final void rule__LogicExpCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2027:1: ( rule__LogicExpCS__Group_1__2__Impl )
-            // InternalMiniOCLCS.g:2028:2: rule__LogicExpCS__Group_1__2__Impl
+            // InternalMiniOCLCS.g:2873:1: ( rule__LogicExpCS__Group_1__2__Impl )
+            // InternalMiniOCLCS.g:2874:2: rule__LogicExpCS__Group_1__2__Impl
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__Group_1__2__Impl();
@@ -6668,23 +9652,23 @@
 
 
     // $ANTLR start "rule__LogicExpCS__Group_1__2__Impl"
-    // InternalMiniOCLCS.g:2034:1: rule__LogicExpCS__Group_1__2__Impl : ( ( rule__LogicExpCS__RightAssignment_1_2 ) ) ;
+    // InternalMiniOCLCS.g:2880:1: rule__LogicExpCS__Group_1__2__Impl : ( ( rule__LogicExpCS__RightAssignment_1_2 ) ) ;
     public final void rule__LogicExpCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2038:1: ( ( ( rule__LogicExpCS__RightAssignment_1_2 ) ) )
-            // InternalMiniOCLCS.g:2039:1: ( ( rule__LogicExpCS__RightAssignment_1_2 ) )
+            // InternalMiniOCLCS.g:2884:1: ( ( ( rule__LogicExpCS__RightAssignment_1_2 ) ) )
+            // InternalMiniOCLCS.g:2885:1: ( ( rule__LogicExpCS__RightAssignment_1_2 ) )
             {
-            // InternalMiniOCLCS.g:2039:1: ( ( rule__LogicExpCS__RightAssignment_1_2 ) )
-            // InternalMiniOCLCS.g:2040:2: ( rule__LogicExpCS__RightAssignment_1_2 )
+            // InternalMiniOCLCS.g:2885:1: ( ( rule__LogicExpCS__RightAssignment_1_2 ) )
+            // InternalMiniOCLCS.g:2886:2: ( rule__LogicExpCS__RightAssignment_1_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getRightAssignment_1_2()); 
             }
-            // InternalMiniOCLCS.g:2041:2: ( rule__LogicExpCS__RightAssignment_1_2 )
-            // InternalMiniOCLCS.g:2041:3: rule__LogicExpCS__RightAssignment_1_2
+            // InternalMiniOCLCS.g:2887:2: ( rule__LogicExpCS__RightAssignment_1_2 )
+            // InternalMiniOCLCS.g:2887:3: rule__LogicExpCS__RightAssignment_1_2
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__RightAssignment_1_2();
@@ -6719,16 +9703,16 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group__0"
-    // InternalMiniOCLCS.g:2050:1: rule__CallExpCS__Group__0 : rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1 ;
+    // InternalMiniOCLCS.g:2896:1: rule__CallExpCS__Group__0 : rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1 ;
     public final void rule__CallExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2054:1: ( rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1 )
-            // InternalMiniOCLCS.g:2055:2: rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1
+            // InternalMiniOCLCS.g:2900:1: ( rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1 )
+            // InternalMiniOCLCS.g:2901:2: rule__CallExpCS__Group__0__Impl rule__CallExpCS__Group__1
             {
-            pushFollow(FOLLOW_23);
+            pushFollow(FOLLOW_29);
             rule__CallExpCS__Group__0__Impl();
 
             state._fsp--;
@@ -6757,17 +9741,17 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:2062:1: rule__CallExpCS__Group__0__Impl : ( rulePrimaryExpCS ) ;
+    // InternalMiniOCLCS.g:2908:1: rule__CallExpCS__Group__0__Impl : ( rulePrimaryExpCS ) ;
     public final void rule__CallExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2066:1: ( ( rulePrimaryExpCS ) )
-            // InternalMiniOCLCS.g:2067:1: ( rulePrimaryExpCS )
+            // InternalMiniOCLCS.g:2912:1: ( ( rulePrimaryExpCS ) )
+            // InternalMiniOCLCS.g:2913:1: ( rulePrimaryExpCS )
             {
-            // InternalMiniOCLCS.g:2067:1: ( rulePrimaryExpCS )
-            // InternalMiniOCLCS.g:2068:2: rulePrimaryExpCS
+            // InternalMiniOCLCS.g:2913:1: ( rulePrimaryExpCS )
+            // InternalMiniOCLCS.g:2914:2: rulePrimaryExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getPrimaryExpCSParserRuleCall_0()); 
@@ -6802,14 +9786,14 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group__1"
-    // InternalMiniOCLCS.g:2077:1: rule__CallExpCS__Group__1 : rule__CallExpCS__Group__1__Impl ;
+    // InternalMiniOCLCS.g:2923:1: rule__CallExpCS__Group__1 : rule__CallExpCS__Group__1__Impl ;
     public final void rule__CallExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2081:1: ( rule__CallExpCS__Group__1__Impl )
-            // InternalMiniOCLCS.g:2082:2: rule__CallExpCS__Group__1__Impl
+            // InternalMiniOCLCS.g:2927:1: ( rule__CallExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:2928:2: rule__CallExpCS__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__CallExpCS__Group__1__Impl();
@@ -6835,37 +9819,52 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:2088:1: rule__CallExpCS__Group__1__Impl : ( ( rule__CallExpCS__Group_1__0 )* ) ;
+    // InternalMiniOCLCS.g:2934:1: rule__CallExpCS__Group__1__Impl : ( ( rule__CallExpCS__Group_1__0 )* ) ;
     public final void rule__CallExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2092:1: ( ( ( rule__CallExpCS__Group_1__0 )* ) )
-            // InternalMiniOCLCS.g:2093:1: ( ( rule__CallExpCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:2938:1: ( ( ( rule__CallExpCS__Group_1__0 )* ) )
+            // InternalMiniOCLCS.g:2939:1: ( ( rule__CallExpCS__Group_1__0 )* )
             {
-            // InternalMiniOCLCS.g:2093:1: ( ( rule__CallExpCS__Group_1__0 )* )
-            // InternalMiniOCLCS.g:2094:2: ( rule__CallExpCS__Group_1__0 )*
+            // InternalMiniOCLCS.g:2939:1: ( ( rule__CallExpCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:2940:2: ( rule__CallExpCS__Group_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getGroup_1()); 
             }
-            // InternalMiniOCLCS.g:2095:2: ( rule__CallExpCS__Group_1__0 )*
-            loop17:
+            // InternalMiniOCLCS.g:2941:2: ( rule__CallExpCS__Group_1__0 )*
+            loop24:
             do {
-                int alt17=2;
-                int LA17_0 = input.LA(1);
+                int alt24=2;
+                int LA24_0 = input.LA(1);
 
-                if ( ((LA17_0>=13 && LA17_0<=14)) ) {
-                    alt17=1;
+                if ( (LA24_0==17) ) {
+                    int LA24_2 = input.LA(2);
+
+                    if ( (synpred30_InternalMiniOCLCS()) ) {
+                        alt24=1;
+                    }
+
+
+                }
+                else if ( (LA24_0==18) ) {
+                    int LA24_3 = input.LA(2);
+
+                    if ( (synpred30_InternalMiniOCLCS()) ) {
+                        alt24=1;
+                    }
+
+
                 }
 
 
-                switch (alt17) {
+                switch (alt24) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:2095:3: rule__CallExpCS__Group_1__0
+            	    // InternalMiniOCLCS.g:2941:3: rule__CallExpCS__Group_1__0
             	    {
-            	    pushFollow(FOLLOW_24);
+            	    pushFollow(FOLLOW_30);
             	    rule__CallExpCS__Group_1__0();
 
             	    state._fsp--;
@@ -6875,7 +9874,7 @@
             	    break;
 
             	default :
-            	    break loop17;
+            	    break loop24;
                 }
             } while (true);
 
@@ -6904,16 +9903,16 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__0"
-    // InternalMiniOCLCS.g:2104:1: rule__CallExpCS__Group_1__0 : rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1 ;
+    // InternalMiniOCLCS.g:2950:1: rule__CallExpCS__Group_1__0 : rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1 ;
     public final void rule__CallExpCS__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2108:1: ( rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1 )
-            // InternalMiniOCLCS.g:2109:2: rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1
+            // InternalMiniOCLCS.g:2954:1: ( rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1 )
+            // InternalMiniOCLCS.g:2955:2: rule__CallExpCS__Group_1__0__Impl rule__CallExpCS__Group_1__1
             {
-            pushFollow(FOLLOW_23);
+            pushFollow(FOLLOW_29);
             rule__CallExpCS__Group_1__0__Impl();
 
             state._fsp--;
@@ -6942,23 +9941,23 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__0__Impl"
-    // InternalMiniOCLCS.g:2116:1: rule__CallExpCS__Group_1__0__Impl : ( () ) ;
+    // InternalMiniOCLCS.g:2962:1: rule__CallExpCS__Group_1__0__Impl : ( () ) ;
     public final void rule__CallExpCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2120:1: ( ( () ) )
-            // InternalMiniOCLCS.g:2121:1: ( () )
+            // InternalMiniOCLCS.g:2966:1: ( ( () ) )
+            // InternalMiniOCLCS.g:2967:1: ( () )
             {
-            // InternalMiniOCLCS.g:2121:1: ( () )
-            // InternalMiniOCLCS.g:2122:2: ()
+            // InternalMiniOCLCS.g:2967:1: ( () )
+            // InternalMiniOCLCS.g:2968:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getCallExpCSSourceAction_1_0()); 
             }
-            // InternalMiniOCLCS.g:2123:2: ()
-            // InternalMiniOCLCS.g:2123:3: 
+            // InternalMiniOCLCS.g:2969:2: ()
+            // InternalMiniOCLCS.g:2969:3: 
             {
             }
 
@@ -6983,16 +9982,16 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__1"
-    // InternalMiniOCLCS.g:2131:1: rule__CallExpCS__Group_1__1 : rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2 ;
+    // InternalMiniOCLCS.g:2977:1: rule__CallExpCS__Group_1__1 : rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2 ;
     public final void rule__CallExpCS__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2135:1: ( rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2 )
-            // InternalMiniOCLCS.g:2136:2: rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2
+            // InternalMiniOCLCS.g:2981:1: ( rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2 )
+            // InternalMiniOCLCS.g:2982:2: rule__CallExpCS__Group_1__1__Impl rule__CallExpCS__Group_1__2
             {
-            pushFollow(FOLLOW_4);
+            pushFollow(FOLLOW_31);
             rule__CallExpCS__Group_1__1__Impl();
 
             state._fsp--;
@@ -7021,23 +10020,23 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__1__Impl"
-    // InternalMiniOCLCS.g:2143:1: rule__CallExpCS__Group_1__1__Impl : ( ( rule__CallExpCS__OpAssignment_1_1 ) ) ;
+    // InternalMiniOCLCS.g:2989:1: rule__CallExpCS__Group_1__1__Impl : ( ( rule__CallExpCS__OpAssignment_1_1 ) ) ;
     public final void rule__CallExpCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2147:1: ( ( ( rule__CallExpCS__OpAssignment_1_1 ) ) )
-            // InternalMiniOCLCS.g:2148:1: ( ( rule__CallExpCS__OpAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:2993:1: ( ( ( rule__CallExpCS__OpAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:2994:1: ( ( rule__CallExpCS__OpAssignment_1_1 ) )
             {
-            // InternalMiniOCLCS.g:2148:1: ( ( rule__CallExpCS__OpAssignment_1_1 ) )
-            // InternalMiniOCLCS.g:2149:2: ( rule__CallExpCS__OpAssignment_1_1 )
+            // InternalMiniOCLCS.g:2994:1: ( ( rule__CallExpCS__OpAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:2995:2: ( rule__CallExpCS__OpAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getOpAssignment_1_1()); 
             }
-            // InternalMiniOCLCS.g:2150:2: ( rule__CallExpCS__OpAssignment_1_1 )
-            // InternalMiniOCLCS.g:2150:3: rule__CallExpCS__OpAssignment_1_1
+            // InternalMiniOCLCS.g:2996:2: ( rule__CallExpCS__OpAssignment_1_1 )
+            // InternalMiniOCLCS.g:2996:3: rule__CallExpCS__OpAssignment_1_1
             {
             pushFollow(FOLLOW_2);
             rule__CallExpCS__OpAssignment_1_1();
@@ -7072,14 +10071,14 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__2"
-    // InternalMiniOCLCS.g:2158:1: rule__CallExpCS__Group_1__2 : rule__CallExpCS__Group_1__2__Impl ;
+    // InternalMiniOCLCS.g:3004:1: rule__CallExpCS__Group_1__2 : rule__CallExpCS__Group_1__2__Impl ;
     public final void rule__CallExpCS__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2162:1: ( rule__CallExpCS__Group_1__2__Impl )
-            // InternalMiniOCLCS.g:2163:2: rule__CallExpCS__Group_1__2__Impl
+            // InternalMiniOCLCS.g:3008:1: ( rule__CallExpCS__Group_1__2__Impl )
+            // InternalMiniOCLCS.g:3009:2: rule__CallExpCS__Group_1__2__Impl
             {
             pushFollow(FOLLOW_2);
             rule__CallExpCS__Group_1__2__Impl();
@@ -7105,26 +10104,26 @@
 
 
     // $ANTLR start "rule__CallExpCS__Group_1__2__Impl"
-    // InternalMiniOCLCS.g:2169:1: rule__CallExpCS__Group_1__2__Impl : ( ( rule__CallExpCS__NameExpAssignment_1_2 ) ) ;
+    // InternalMiniOCLCS.g:3015:1: rule__CallExpCS__Group_1__2__Impl : ( ( rule__CallExpCS__NavExpAssignment_1_2 ) ) ;
     public final void rule__CallExpCS__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2173:1: ( ( ( rule__CallExpCS__NameExpAssignment_1_2 ) ) )
-            // InternalMiniOCLCS.g:2174:1: ( ( rule__CallExpCS__NameExpAssignment_1_2 ) )
+            // InternalMiniOCLCS.g:3019:1: ( ( ( rule__CallExpCS__NavExpAssignment_1_2 ) ) )
+            // InternalMiniOCLCS.g:3020:1: ( ( rule__CallExpCS__NavExpAssignment_1_2 ) )
             {
-            // InternalMiniOCLCS.g:2174:1: ( ( rule__CallExpCS__NameExpAssignment_1_2 ) )
-            // InternalMiniOCLCS.g:2175:2: ( rule__CallExpCS__NameExpAssignment_1_2 )
+            // InternalMiniOCLCS.g:3020:1: ( ( rule__CallExpCS__NavExpAssignment_1_2 ) )
+            // InternalMiniOCLCS.g:3021:2: ( rule__CallExpCS__NavExpAssignment_1_2 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getCallExpCSAccess().getNameExpAssignment_1_2()); 
+               before(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); 
             }
-            // InternalMiniOCLCS.g:2176:2: ( rule__CallExpCS__NameExpAssignment_1_2 )
-            // InternalMiniOCLCS.g:2176:3: rule__CallExpCS__NameExpAssignment_1_2
+            // InternalMiniOCLCS.g:3022:2: ( rule__CallExpCS__NavExpAssignment_1_2 )
+            // InternalMiniOCLCS.g:3022:3: rule__CallExpCS__NavExpAssignment_1_2
             {
             pushFollow(FOLLOW_2);
-            rule__CallExpCS__NameExpAssignment_1_2();
+            rule__CallExpCS__NavExpAssignment_1_2();
 
             state._fsp--;
             if (state.failed) return ;
@@ -7132,7 +10131,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getCallExpCSAccess().getNameExpAssignment_1_2()); 
+               after(grammarAccess.getCallExpCSAccess().getNavExpAssignment_1_2()); 
             }
 
             }
@@ -7155,17 +10154,2277 @@
     // $ANTLR end "rule__CallExpCS__Group_1__2__Impl"
 
 
+    // $ANTLR start "rule__SelfExpCS__Group__0"
+    // InternalMiniOCLCS.g:3031: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 {
+            // InternalMiniOCLCS.g:3035:1: ( rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1 )
+            // InternalMiniOCLCS.g:3036:2: rule__SelfExpCS__Group__0__Impl rule__SelfExpCS__Group__1
+            {
+            pushFollow(FOLLOW_32);
+            rule__SelfExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__SelfExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SelfExpCS__Group__0"
+
+
+    // $ANTLR start "rule__SelfExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:3043:1: rule__SelfExpCS__Group__0__Impl : ( () ) ;
+    public final void rule__SelfExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3047:1: ( ( () ) )
+            // InternalMiniOCLCS.g:3048:1: ( () )
+            {
+            // InternalMiniOCLCS.g:3048:1: ( () )
+            // InternalMiniOCLCS.g:3049:2: ()
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); 
+            }
+            // InternalMiniOCLCS.g:3050:2: ()
+            // InternalMiniOCLCS.g:3050:3: 
+            {
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SelfExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__SelfExpCS__Group__1"
+    // InternalMiniOCLCS.g:3058:1: rule__SelfExpCS__Group__1 : rule__SelfExpCS__Group__1__Impl ;
+    public final void rule__SelfExpCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3062:1: ( rule__SelfExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:3063:2: rule__SelfExpCS__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__SelfExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SelfExpCS__Group__1"
+
+
+    // $ANTLR start "rule__SelfExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:3069:1: rule__SelfExpCS__Group__1__Impl : ( 'self' ) ;
+    public final void rule__SelfExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3073:1: ( ( 'self' ) )
+            // InternalMiniOCLCS.g:3074:1: ( 'self' )
+            {
+            // InternalMiniOCLCS.g:3074:1: ( 'self' )
+            // InternalMiniOCLCS.g:3075:2: 'self'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); 
+            }
+            match(input,37,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSelfExpCSAccess().getSelfKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SelfExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__0"
+    // InternalMiniOCLCS.g:3085:1: rule__CollectExpCS__Group__0 : rule__CollectExpCS__Group__0__Impl rule__CollectExpCS__Group__1 ;
+    public final void rule__CollectExpCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3089:1: ( rule__CollectExpCS__Group__0__Impl rule__CollectExpCS__Group__1 )
+            // InternalMiniOCLCS.g:3090:2: rule__CollectExpCS__Group__0__Impl rule__CollectExpCS__Group__1
+            {
+            pushFollow(FOLLOW_19);
+            rule__CollectExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__0"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:3097:1: rule__CollectExpCS__Group__0__Impl : ( 'collect' ) ;
+    public final void rule__CollectExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3101:1: ( ( 'collect' ) )
+            // InternalMiniOCLCS.g:3102:1: ( 'collect' )
+            {
+            // InternalMiniOCLCS.g:3102:1: ( 'collect' )
+            // InternalMiniOCLCS.g:3103:2: 'collect'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); 
+            }
+            match(input,38,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getCollectKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__1"
+    // InternalMiniOCLCS.g:3112:1: rule__CollectExpCS__Group__1 : rule__CollectExpCS__Group__1__Impl rule__CollectExpCS__Group__2 ;
+    public final void rule__CollectExpCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3116:1: ( rule__CollectExpCS__Group__1__Impl rule__CollectExpCS__Group__2 )
+            // InternalMiniOCLCS.g:3117:2: rule__CollectExpCS__Group__1__Impl rule__CollectExpCS__Group__2
+            {
+            pushFollow(FOLLOW_22);
+            rule__CollectExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__1"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:3124:1: rule__CollectExpCS__Group__1__Impl : ( '(' ) ;
+    public final void rule__CollectExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3128:1: ( ( '(' ) )
+            // InternalMiniOCLCS.g:3129:1: ( '(' )
+            {
+            // InternalMiniOCLCS.g:3129:1: ( '(' )
+            // InternalMiniOCLCS.g:3130:2: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); 
+            }
+            match(input,32,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__2"
+    // InternalMiniOCLCS.g:3139:1: rule__CollectExpCS__Group__2 : rule__CollectExpCS__Group__2__Impl rule__CollectExpCS__Group__3 ;
+    public final void rule__CollectExpCS__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3143:1: ( rule__CollectExpCS__Group__2__Impl rule__CollectExpCS__Group__3 )
+            // InternalMiniOCLCS.g:3144:2: rule__CollectExpCS__Group__2__Impl rule__CollectExpCS__Group__3
+            {
+            pushFollow(FOLLOW_22);
+            rule__CollectExpCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__2"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:3151:1: rule__CollectExpCS__Group__2__Impl : ( ( rule__CollectExpCS__Group_2__0 )? ) ;
+    public final void rule__CollectExpCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3155:1: ( ( ( rule__CollectExpCS__Group_2__0 )? ) )
+            // InternalMiniOCLCS.g:3156:1: ( ( rule__CollectExpCS__Group_2__0 )? )
+            {
+            // InternalMiniOCLCS.g:3156:1: ( ( rule__CollectExpCS__Group_2__0 )? )
+            // InternalMiniOCLCS.g:3157:2: ( rule__CollectExpCS__Group_2__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getGroup_2()); 
+            }
+            // InternalMiniOCLCS.g:3158:2: ( rule__CollectExpCS__Group_2__0 )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==RULE_ID) ) {
+                int LA25_1 = input.LA(2);
+
+                if ( (LA25_1==26||LA25_1==39) ) {
+                    alt25=1;
+                }
+            }
+            switch (alt25) {
+                case 1 :
+                    // InternalMiniOCLCS.g:3158:3: rule__CollectExpCS__Group_2__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__CollectExpCS__Group_2__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getGroup_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__3"
+    // InternalMiniOCLCS.g:3166:1: rule__CollectExpCS__Group__3 : rule__CollectExpCS__Group__3__Impl rule__CollectExpCS__Group__4 ;
+    public final void rule__CollectExpCS__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3170:1: ( rule__CollectExpCS__Group__3__Impl rule__CollectExpCS__Group__4 )
+            // InternalMiniOCLCS.g:3171:2: rule__CollectExpCS__Group__3__Impl rule__CollectExpCS__Group__4
+            {
+            pushFollow(FOLLOW_33);
+            rule__CollectExpCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__3"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:3178:1: rule__CollectExpCS__Group__3__Impl : ( ( rule__CollectExpCS__ExpAssignment_3 ) ) ;
+    public final void rule__CollectExpCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3182:1: ( ( ( rule__CollectExpCS__ExpAssignment_3 ) ) )
+            // InternalMiniOCLCS.g:3183:1: ( ( rule__CollectExpCS__ExpAssignment_3 ) )
+            {
+            // InternalMiniOCLCS.g:3183:1: ( ( rule__CollectExpCS__ExpAssignment_3 ) )
+            // InternalMiniOCLCS.g:3184:2: ( rule__CollectExpCS__ExpAssignment_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); 
+            }
+            // InternalMiniOCLCS.g:3185:2: ( rule__CollectExpCS__ExpAssignment_3 )
+            // InternalMiniOCLCS.g:3185:3: rule__CollectExpCS__ExpAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__ExpAssignment_3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getExpAssignment_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__4"
+    // InternalMiniOCLCS.g:3193:1: rule__CollectExpCS__Group__4 : rule__CollectExpCS__Group__4__Impl ;
+    public final void rule__CollectExpCS__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3197:1: ( rule__CollectExpCS__Group__4__Impl )
+            // InternalMiniOCLCS.g:3198:2: rule__CollectExpCS__Group__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__4"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group__4__Impl"
+    // InternalMiniOCLCS.g:3204:1: rule__CollectExpCS__Group__4__Impl : ( ')' ) ;
+    public final void rule__CollectExpCS__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3208:1: ( ( ')' ) )
+            // InternalMiniOCLCS.g:3209:1: ( ')' )
+            {
+            // InternalMiniOCLCS.g:3209:1: ( ')' )
+            // InternalMiniOCLCS.g:3210:2: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); 
+            }
+            match(input,33,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group__4__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group_2__0"
+    // InternalMiniOCLCS.g:3220:1: rule__CollectExpCS__Group_2__0 : rule__CollectExpCS__Group_2__0__Impl rule__CollectExpCS__Group_2__1 ;
+    public final void rule__CollectExpCS__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3224:1: ( rule__CollectExpCS__Group_2__0__Impl rule__CollectExpCS__Group_2__1 )
+            // InternalMiniOCLCS.g:3225:2: rule__CollectExpCS__Group_2__0__Impl rule__CollectExpCS__Group_2__1
+            {
+            pushFollow(FOLLOW_34);
+            rule__CollectExpCS__Group_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group_2__0"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group_2__0__Impl"
+    // InternalMiniOCLCS.g:3232:1: rule__CollectExpCS__Group_2__0__Impl : ( ( rule__CollectExpCS__ItVarAssignment_2_0 ) ) ;
+    public final void rule__CollectExpCS__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3236:1: ( ( ( rule__CollectExpCS__ItVarAssignment_2_0 ) ) )
+            // InternalMiniOCLCS.g:3237:1: ( ( rule__CollectExpCS__ItVarAssignment_2_0 ) )
+            {
+            // InternalMiniOCLCS.g:3237:1: ( ( rule__CollectExpCS__ItVarAssignment_2_0 ) )
+            // InternalMiniOCLCS.g:3238:2: ( rule__CollectExpCS__ItVarAssignment_2_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); 
+            }
+            // InternalMiniOCLCS.g:3239:2: ( rule__CollectExpCS__ItVarAssignment_2_0 )
+            // InternalMiniOCLCS.g:3239:3: rule__CollectExpCS__ItVarAssignment_2_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__ItVarAssignment_2_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getItVarAssignment_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group_2__1"
+    // InternalMiniOCLCS.g:3247:1: rule__CollectExpCS__Group_2__1 : rule__CollectExpCS__Group_2__1__Impl ;
+    public final void rule__CollectExpCS__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3251:1: ( rule__CollectExpCS__Group_2__1__Impl )
+            // InternalMiniOCLCS.g:3252:2: rule__CollectExpCS__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectExpCS__Group_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group_2__1"
+
+
+    // $ANTLR start "rule__CollectExpCS__Group_2__1__Impl"
+    // InternalMiniOCLCS.g:3258:1: rule__CollectExpCS__Group_2__1__Impl : ( '|' ) ;
+    public final void rule__CollectExpCS__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3262:1: ( ( '|' ) )
+            // InternalMiniOCLCS.g:3263:1: ( '|' )
+            {
+            // InternalMiniOCLCS.g:3263:1: ( '|' )
+            // InternalMiniOCLCS.g:3264:2: '|'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); 
+            }
+            match(input,39,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group__0"
+    // InternalMiniOCLCS.g:3274:1: rule__IteratorVarCS__Group__0 : rule__IteratorVarCS__Group__0__Impl rule__IteratorVarCS__Group__1 ;
+    public final void rule__IteratorVarCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3278:1: ( rule__IteratorVarCS__Group__0__Impl rule__IteratorVarCS__Group__1 )
+            // InternalMiniOCLCS.g:3279:2: rule__IteratorVarCS__Group__0__Impl rule__IteratorVarCS__Group__1
+            {
+            pushFollow(FOLLOW_11);
+            rule__IteratorVarCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group__0"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:3286:1: rule__IteratorVarCS__Group__0__Impl : ( ( rule__IteratorVarCS__ItNameAssignment_0 ) ) ;
+    public final void rule__IteratorVarCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3290:1: ( ( ( rule__IteratorVarCS__ItNameAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:3291:1: ( ( rule__IteratorVarCS__ItNameAssignment_0 ) )
+            {
+            // InternalMiniOCLCS.g:3291:1: ( ( rule__IteratorVarCS__ItNameAssignment_0 ) )
+            // InternalMiniOCLCS.g:3292:2: ( rule__IteratorVarCS__ItNameAssignment_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); 
+            }
+            // InternalMiniOCLCS.g:3293:2: ( rule__IteratorVarCS__ItNameAssignment_0 )
+            // InternalMiniOCLCS.g:3293:3: rule__IteratorVarCS__ItNameAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__ItNameAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getItNameAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group__1"
+    // InternalMiniOCLCS.g:3301:1: rule__IteratorVarCS__Group__1 : rule__IteratorVarCS__Group__1__Impl ;
+    public final void rule__IteratorVarCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3305:1: ( rule__IteratorVarCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:3306:2: rule__IteratorVarCS__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group__1"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:3312:1: rule__IteratorVarCS__Group__1__Impl : ( ( rule__IteratorVarCS__Group_1__0 )? ) ;
+    public final void rule__IteratorVarCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3316:1: ( ( ( rule__IteratorVarCS__Group_1__0 )? ) )
+            // InternalMiniOCLCS.g:3317:1: ( ( rule__IteratorVarCS__Group_1__0 )? )
+            {
+            // InternalMiniOCLCS.g:3317:1: ( ( rule__IteratorVarCS__Group_1__0 )? )
+            // InternalMiniOCLCS.g:3318:2: ( rule__IteratorVarCS__Group_1__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getGroup_1()); 
+            }
+            // InternalMiniOCLCS.g:3319:2: ( rule__IteratorVarCS__Group_1__0 )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( (LA26_0==26) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // InternalMiniOCLCS.g:3319:3: rule__IteratorVarCS__Group_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__IteratorVarCS__Group_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getGroup_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group_1__0"
+    // InternalMiniOCLCS.g:3328:1: rule__IteratorVarCS__Group_1__0 : rule__IteratorVarCS__Group_1__0__Impl rule__IteratorVarCS__Group_1__1 ;
+    public final void rule__IteratorVarCS__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3332:1: ( rule__IteratorVarCS__Group_1__0__Impl rule__IteratorVarCS__Group_1__1 )
+            // InternalMiniOCLCS.g:3333:2: rule__IteratorVarCS__Group_1__0__Impl rule__IteratorVarCS__Group_1__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__IteratorVarCS__Group_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__Group_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group_1__0"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group_1__0__Impl"
+    // InternalMiniOCLCS.g:3340:1: rule__IteratorVarCS__Group_1__0__Impl : ( ':' ) ;
+    public final void rule__IteratorVarCS__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3344:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:3345:1: ( ':' )
+            {
+            // InternalMiniOCLCS.g:3345:1: ( ':' )
+            // InternalMiniOCLCS.g:3346:2: ':'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); 
+            }
+            match(input,26,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group_1__1"
+    // InternalMiniOCLCS.g:3355:1: rule__IteratorVarCS__Group_1__1 : rule__IteratorVarCS__Group_1__1__Impl ;
+    public final void rule__IteratorVarCS__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3359:1: ( rule__IteratorVarCS__Group_1__1__Impl )
+            // InternalMiniOCLCS.g:3360:2: rule__IteratorVarCS__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__Group_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group_1__1"
+
+
+    // $ANTLR start "rule__IteratorVarCS__Group_1__1__Impl"
+    // InternalMiniOCLCS.g:3366:1: rule__IteratorVarCS__Group_1__1__Impl : ( ( rule__IteratorVarCS__ItTypeAssignment_1_1 ) ) ;
+    public final void rule__IteratorVarCS__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3370:1: ( ( ( rule__IteratorVarCS__ItTypeAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:3371:1: ( ( rule__IteratorVarCS__ItTypeAssignment_1_1 ) )
+            {
+            // InternalMiniOCLCS.g:3371:1: ( ( rule__IteratorVarCS__ItTypeAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:3372:2: ( rule__IteratorVarCS__ItTypeAssignment_1_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); 
+            }
+            // InternalMiniOCLCS.g:3373:2: ( rule__IteratorVarCS__ItTypeAssignment_1_1 )
+            // InternalMiniOCLCS.g:3373:3: rule__IteratorVarCS__ItTypeAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__IteratorVarCS__ItTypeAssignment_1_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getItTypeAssignment_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__0"
+    // InternalMiniOCLCS.g:3382:1: rule__IterateExpCS__Group__0 : rule__IterateExpCS__Group__0__Impl rule__IterateExpCS__Group__1 ;
+    public final void rule__IterateExpCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3386:1: ( rule__IterateExpCS__Group__0__Impl rule__IterateExpCS__Group__1 )
+            // InternalMiniOCLCS.g:3387:2: rule__IterateExpCS__Group__0__Impl rule__IterateExpCS__Group__1
+            {
+            pushFollow(FOLLOW_19);
+            rule__IterateExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__0"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:3394:1: rule__IterateExpCS__Group__0__Impl : ( 'iterate' ) ;
+    public final void rule__IterateExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3398:1: ( ( 'iterate' ) )
+            // InternalMiniOCLCS.g:3399:1: ( 'iterate' )
+            {
+            // InternalMiniOCLCS.g:3399:1: ( 'iterate' )
+            // InternalMiniOCLCS.g:3400:2: 'iterate'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); 
+            }
+            match(input,40,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getIterateKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__1"
+    // InternalMiniOCLCS.g:3409:1: rule__IterateExpCS__Group__1 : rule__IterateExpCS__Group__1__Impl rule__IterateExpCS__Group__2 ;
+    public final void rule__IterateExpCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3413:1: ( rule__IterateExpCS__Group__1__Impl rule__IterateExpCS__Group__2 )
+            // InternalMiniOCLCS.g:3414:2: rule__IterateExpCS__Group__1__Impl rule__IterateExpCS__Group__2
+            {
+            pushFollow(FOLLOW_4);
+            rule__IterateExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__1"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:3421:1: rule__IterateExpCS__Group__1__Impl : ( '(' ) ;
+    public final void rule__IterateExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3425:1: ( ( '(' ) )
+            // InternalMiniOCLCS.g:3426:1: ( '(' )
+            {
+            // InternalMiniOCLCS.g:3426:1: ( '(' )
+            // InternalMiniOCLCS.g:3427:2: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); 
+            }
+            match(input,32,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__2"
+    // InternalMiniOCLCS.g:3436:1: rule__IterateExpCS__Group__2 : rule__IterateExpCS__Group__2__Impl rule__IterateExpCS__Group__3 ;
+    public final void rule__IterateExpCS__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3440:1: ( rule__IterateExpCS__Group__2__Impl rule__IterateExpCS__Group__3 )
+            // InternalMiniOCLCS.g:3441:2: rule__IterateExpCS__Group__2__Impl rule__IterateExpCS__Group__3
+            {
+            pushFollow(FOLLOW_13);
+            rule__IterateExpCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__2"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:3448:1: rule__IterateExpCS__Group__2__Impl : ( ( rule__IterateExpCS__ItVarAssignment_2 ) ) ;
+    public final void rule__IterateExpCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3452:1: ( ( ( rule__IterateExpCS__ItVarAssignment_2 ) ) )
+            // InternalMiniOCLCS.g:3453:1: ( ( rule__IterateExpCS__ItVarAssignment_2 ) )
+            {
+            // InternalMiniOCLCS.g:3453:1: ( ( rule__IterateExpCS__ItVarAssignment_2 ) )
+            // InternalMiniOCLCS.g:3454:2: ( rule__IterateExpCS__ItVarAssignment_2 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); 
+            }
+            // InternalMiniOCLCS.g:3455:2: ( rule__IterateExpCS__ItVarAssignment_2 )
+            // InternalMiniOCLCS.g:3455:3: rule__IterateExpCS__ItVarAssignment_2
+            {
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__ItVarAssignment_2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getItVarAssignment_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__3"
+    // InternalMiniOCLCS.g:3463:1: rule__IterateExpCS__Group__3 : rule__IterateExpCS__Group__3__Impl rule__IterateExpCS__Group__4 ;
+    public final void rule__IterateExpCS__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3467:1: ( rule__IterateExpCS__Group__3__Impl rule__IterateExpCS__Group__4 )
+            // InternalMiniOCLCS.g:3468:2: rule__IterateExpCS__Group__3__Impl rule__IterateExpCS__Group__4
+            {
+            pushFollow(FOLLOW_4);
+            rule__IterateExpCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__3"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:3475:1: rule__IterateExpCS__Group__3__Impl : ( ';' ) ;
+    public final void rule__IterateExpCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3479:1: ( ( ';' ) )
+            // InternalMiniOCLCS.g:3480:1: ( ';' )
+            {
+            // InternalMiniOCLCS.g:3480:1: ( ';' )
+            // InternalMiniOCLCS.g:3481:2: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); 
+            }
+            match(input,27,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__4"
+    // InternalMiniOCLCS.g:3490:1: rule__IterateExpCS__Group__4 : rule__IterateExpCS__Group__4__Impl rule__IterateExpCS__Group__5 ;
+    public final void rule__IterateExpCS__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3494:1: ( rule__IterateExpCS__Group__4__Impl rule__IterateExpCS__Group__5 )
+            // InternalMiniOCLCS.g:3495:2: rule__IterateExpCS__Group__4__Impl rule__IterateExpCS__Group__5
+            {
+            pushFollow(FOLLOW_34);
+            rule__IterateExpCS__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__5();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__4"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__4__Impl"
+    // InternalMiniOCLCS.g:3502:1: rule__IterateExpCS__Group__4__Impl : ( ( rule__IterateExpCS__AccVarAssignment_4 ) ) ;
+    public final void rule__IterateExpCS__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3506:1: ( ( ( rule__IterateExpCS__AccVarAssignment_4 ) ) )
+            // InternalMiniOCLCS.g:3507:1: ( ( rule__IterateExpCS__AccVarAssignment_4 ) )
+            {
+            // InternalMiniOCLCS.g:3507:1: ( ( rule__IterateExpCS__AccVarAssignment_4 ) )
+            // InternalMiniOCLCS.g:3508:2: ( rule__IterateExpCS__AccVarAssignment_4 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); 
+            }
+            // InternalMiniOCLCS.g:3509:2: ( rule__IterateExpCS__AccVarAssignment_4 )
+            // InternalMiniOCLCS.g:3509:3: rule__IterateExpCS__AccVarAssignment_4
+            {
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__AccVarAssignment_4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getAccVarAssignment_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__4__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__5"
+    // InternalMiniOCLCS.g:3517:1: rule__IterateExpCS__Group__5 : rule__IterateExpCS__Group__5__Impl rule__IterateExpCS__Group__6 ;
+    public final void rule__IterateExpCS__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3521:1: ( rule__IterateExpCS__Group__5__Impl rule__IterateExpCS__Group__6 )
+            // InternalMiniOCLCS.g:3522:2: rule__IterateExpCS__Group__5__Impl rule__IterateExpCS__Group__6
+            {
+            pushFollow(FOLLOW_22);
+            rule__IterateExpCS__Group__5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__6();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__5"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__5__Impl"
+    // InternalMiniOCLCS.g:3529:1: rule__IterateExpCS__Group__5__Impl : ( '|' ) ;
+    public final void rule__IterateExpCS__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3533:1: ( ( '|' ) )
+            // InternalMiniOCLCS.g:3534:1: ( '|' )
+            {
+            // InternalMiniOCLCS.g:3534:1: ( '|' )
+            // InternalMiniOCLCS.g:3535:2: '|'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); 
+            }
+            match(input,39,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__5__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__6"
+    // InternalMiniOCLCS.g:3544:1: rule__IterateExpCS__Group__6 : rule__IterateExpCS__Group__6__Impl rule__IterateExpCS__Group__7 ;
+    public final void rule__IterateExpCS__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3548:1: ( rule__IterateExpCS__Group__6__Impl rule__IterateExpCS__Group__7 )
+            // InternalMiniOCLCS.g:3549:2: rule__IterateExpCS__Group__6__Impl rule__IterateExpCS__Group__7
+            {
+            pushFollow(FOLLOW_33);
+            rule__IterateExpCS__Group__6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__7();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__6"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__6__Impl"
+    // InternalMiniOCLCS.g:3556:1: rule__IterateExpCS__Group__6__Impl : ( ( rule__IterateExpCS__ExpAssignment_6 ) ) ;
+    public final void rule__IterateExpCS__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3560:1: ( ( ( rule__IterateExpCS__ExpAssignment_6 ) ) )
+            // InternalMiniOCLCS.g:3561:1: ( ( rule__IterateExpCS__ExpAssignment_6 ) )
+            {
+            // InternalMiniOCLCS.g:3561:1: ( ( rule__IterateExpCS__ExpAssignment_6 ) )
+            // InternalMiniOCLCS.g:3562:2: ( rule__IterateExpCS__ExpAssignment_6 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); 
+            }
+            // InternalMiniOCLCS.g:3563:2: ( rule__IterateExpCS__ExpAssignment_6 )
+            // InternalMiniOCLCS.g:3563:3: rule__IterateExpCS__ExpAssignment_6
+            {
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__ExpAssignment_6();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getExpAssignment_6()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__6__Impl"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__7"
+    // InternalMiniOCLCS.g:3571:1: rule__IterateExpCS__Group__7 : rule__IterateExpCS__Group__7__Impl ;
+    public final void rule__IterateExpCS__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3575:1: ( rule__IterateExpCS__Group__7__Impl )
+            // InternalMiniOCLCS.g:3576:2: rule__IterateExpCS__Group__7__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__IterateExpCS__Group__7__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__7"
+
+
+    // $ANTLR start "rule__IterateExpCS__Group__7__Impl"
+    // InternalMiniOCLCS.g:3582:1: rule__IterateExpCS__Group__7__Impl : ( ')' ) ;
+    public final void rule__IterateExpCS__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3586:1: ( ( ')' ) )
+            // InternalMiniOCLCS.g:3587:1: ( ')' )
+            {
+            // InternalMiniOCLCS.g:3587:1: ( ')' )
+            // InternalMiniOCLCS.g:3588:2: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); 
+            }
+            match(input,33,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__Group__7__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__0"
+    // InternalMiniOCLCS.g:3598:1: rule__AccVarCS__Group__0 : rule__AccVarCS__Group__0__Impl rule__AccVarCS__Group__1 ;
+    public final void rule__AccVarCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3602:1: ( rule__AccVarCS__Group__0__Impl rule__AccVarCS__Group__1 )
+            // InternalMiniOCLCS.g:3603:2: rule__AccVarCS__Group__0__Impl rule__AccVarCS__Group__1
+            {
+            pushFollow(FOLLOW_35);
+            rule__AccVarCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__0"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:3610:1: rule__AccVarCS__Group__0__Impl : ( ( rule__AccVarCS__AccNameAssignment_0 ) ) ;
+    public final void rule__AccVarCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3614:1: ( ( ( rule__AccVarCS__AccNameAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:3615:1: ( ( rule__AccVarCS__AccNameAssignment_0 ) )
+            {
+            // InternalMiniOCLCS.g:3615:1: ( ( rule__AccVarCS__AccNameAssignment_0 ) )
+            // InternalMiniOCLCS.g:3616:2: ( rule__AccVarCS__AccNameAssignment_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); 
+            }
+            // InternalMiniOCLCS.g:3617:2: ( rule__AccVarCS__AccNameAssignment_0 )
+            // InternalMiniOCLCS.g:3617:3: rule__AccVarCS__AccNameAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__AccNameAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccNameAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__1"
+    // InternalMiniOCLCS.g:3625:1: rule__AccVarCS__Group__1 : rule__AccVarCS__Group__1__Impl rule__AccVarCS__Group__2 ;
+    public final void rule__AccVarCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3629:1: ( rule__AccVarCS__Group__1__Impl rule__AccVarCS__Group__2 )
+            // InternalMiniOCLCS.g:3630:2: rule__AccVarCS__Group__1__Impl rule__AccVarCS__Group__2
+            {
+            pushFollow(FOLLOW_35);
+            rule__AccVarCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__1"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:3637:1: rule__AccVarCS__Group__1__Impl : ( ( rule__AccVarCS__Group_1__0 )? ) ;
+    public final void rule__AccVarCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3641:1: ( ( ( rule__AccVarCS__Group_1__0 )? ) )
+            // InternalMiniOCLCS.g:3642:1: ( ( rule__AccVarCS__Group_1__0 )? )
+            {
+            // InternalMiniOCLCS.g:3642:1: ( ( rule__AccVarCS__Group_1__0 )? )
+            // InternalMiniOCLCS.g:3643:2: ( rule__AccVarCS__Group_1__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getGroup_1()); 
+            }
+            // InternalMiniOCLCS.g:3644:2: ( rule__AccVarCS__Group_1__0 )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==26) ) {
+                alt27=1;
+            }
+            switch (alt27) {
+                case 1 :
+                    // InternalMiniOCLCS.g:3644:3: rule__AccVarCS__Group_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__AccVarCS__Group_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getGroup_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__2"
+    // InternalMiniOCLCS.g:3652:1: rule__AccVarCS__Group__2 : rule__AccVarCS__Group__2__Impl rule__AccVarCS__Group__3 ;
+    public final void rule__AccVarCS__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3656:1: ( rule__AccVarCS__Group__2__Impl rule__AccVarCS__Group__3 )
+            // InternalMiniOCLCS.g:3657:2: rule__AccVarCS__Group__2__Impl rule__AccVarCS__Group__3
+            {
+            pushFollow(FOLLOW_22);
+            rule__AccVarCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__2"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:3664:1: rule__AccVarCS__Group__2__Impl : ( '=' ) ;
+    public final void rule__AccVarCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3668:1: ( ( '=' ) )
+            // InternalMiniOCLCS.g:3669:1: ( '=' )
+            {
+            // InternalMiniOCLCS.g:3669:1: ( '=' )
+            // InternalMiniOCLCS.g:3670:2: '='
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); 
+            }
+            match(input,15,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__3"
+    // InternalMiniOCLCS.g:3679:1: rule__AccVarCS__Group__3 : rule__AccVarCS__Group__3__Impl ;
+    public final void rule__AccVarCS__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3683:1: ( rule__AccVarCS__Group__3__Impl )
+            // InternalMiniOCLCS.g:3684:2: rule__AccVarCS__Group__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__3"
+
+
+    // $ANTLR start "rule__AccVarCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:3690:1: rule__AccVarCS__Group__3__Impl : ( ( rule__AccVarCS__AccInitExpAssignment_3 ) ) ;
+    public final void rule__AccVarCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3694:1: ( ( ( rule__AccVarCS__AccInitExpAssignment_3 ) ) )
+            // InternalMiniOCLCS.g:3695:1: ( ( rule__AccVarCS__AccInitExpAssignment_3 ) )
+            {
+            // InternalMiniOCLCS.g:3695:1: ( ( rule__AccVarCS__AccInitExpAssignment_3 ) )
+            // InternalMiniOCLCS.g:3696:2: ( rule__AccVarCS__AccInitExpAssignment_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); 
+            }
+            // InternalMiniOCLCS.g:3697:2: ( rule__AccVarCS__AccInitExpAssignment_3 )
+            // InternalMiniOCLCS.g:3697:3: rule__AccVarCS__AccInitExpAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__AccInitExpAssignment_3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccInitExpAssignment_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group_1__0"
+    // InternalMiniOCLCS.g:3706:1: rule__AccVarCS__Group_1__0 : rule__AccVarCS__Group_1__0__Impl rule__AccVarCS__Group_1__1 ;
+    public final void rule__AccVarCS__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3710:1: ( rule__AccVarCS__Group_1__0__Impl rule__AccVarCS__Group_1__1 )
+            // InternalMiniOCLCS.g:3711:2: rule__AccVarCS__Group_1__0__Impl rule__AccVarCS__Group_1__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__AccVarCS__Group_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group_1__0"
+
+
+    // $ANTLR start "rule__AccVarCS__Group_1__0__Impl"
+    // InternalMiniOCLCS.g:3718:1: rule__AccVarCS__Group_1__0__Impl : ( ':' ) ;
+    public final void rule__AccVarCS__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3722:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:3723:1: ( ':' )
+            {
+            // InternalMiniOCLCS.g:3723:1: ( ':' )
+            // InternalMiniOCLCS.g:3724:2: ':'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); 
+            }
+            match(input,26,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getColonKeyword_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__AccVarCS__Group_1__1"
+    // InternalMiniOCLCS.g:3733:1: rule__AccVarCS__Group_1__1 : rule__AccVarCS__Group_1__1__Impl ;
+    public final void rule__AccVarCS__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3737:1: ( rule__AccVarCS__Group_1__1__Impl )
+            // InternalMiniOCLCS.g:3738:2: rule__AccVarCS__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__Group_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group_1__1"
+
+
+    // $ANTLR start "rule__AccVarCS__Group_1__1__Impl"
+    // InternalMiniOCLCS.g:3744:1: rule__AccVarCS__Group_1__1__Impl : ( ( rule__AccVarCS__AccTypeAssignment_1_1 ) ) ;
+    public final void rule__AccVarCS__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:3748:1: ( ( ( rule__AccVarCS__AccTypeAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:3749:1: ( ( rule__AccVarCS__AccTypeAssignment_1_1 ) )
+            {
+            // InternalMiniOCLCS.g:3749:1: ( ( rule__AccVarCS__AccTypeAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:3750:2: ( rule__AccVarCS__AccTypeAssignment_1_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); 
+            }
+            // InternalMiniOCLCS.g:3751:2: ( rule__AccVarCS__AccTypeAssignment_1_1 )
+            // InternalMiniOCLCS.g:3751:3: rule__AccVarCS__AccTypeAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__AccVarCS__AccTypeAssignment_1_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccTypeAssignment_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__Group_1__1__Impl"
+
+
     // $ANTLR start "rule__NameExpCS__Group__0"
-    // InternalMiniOCLCS.g:2185:1: rule__NameExpCS__Group__0 : rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 ;
+    // InternalMiniOCLCS.g:3760: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 {
-            // InternalMiniOCLCS.g:2189:1: ( rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 )
-            // InternalMiniOCLCS.g:2190:2: rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1
+            // InternalMiniOCLCS.g:3764:1: ( rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1 )
+            // InternalMiniOCLCS.g:3765:2: rule__NameExpCS__Group__0__Impl rule__NameExpCS__Group__1
             {
-            pushFollow(FOLLOW_13);
+            pushFollow(FOLLOW_19);
             rule__NameExpCS__Group__0__Impl();
 
             state._fsp--;
@@ -7194,23 +12453,23 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:2197:1: rule__NameExpCS__Group__0__Impl : ( ( rule__NameExpCS__ExpNameAssignment_0 ) ) ;
+    // InternalMiniOCLCS.g:3772:1: rule__NameExpCS__Group__0__Impl : ( ( rule__NameExpCS__ExpNameAssignment_0 ) ) ;
     public final void rule__NameExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2201:1: ( ( ( rule__NameExpCS__ExpNameAssignment_0 ) ) )
-            // InternalMiniOCLCS.g:2202:1: ( ( rule__NameExpCS__ExpNameAssignment_0 ) )
+            // InternalMiniOCLCS.g:3776:1: ( ( ( rule__NameExpCS__ExpNameAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:3777:1: ( ( rule__NameExpCS__ExpNameAssignment_0 ) )
             {
-            // InternalMiniOCLCS.g:2202:1: ( ( rule__NameExpCS__ExpNameAssignment_0 ) )
-            // InternalMiniOCLCS.g:2203:2: ( rule__NameExpCS__ExpNameAssignment_0 )
+            // InternalMiniOCLCS.g:3777:1: ( ( rule__NameExpCS__ExpNameAssignment_0 ) )
+            // InternalMiniOCLCS.g:3778:2: ( rule__NameExpCS__ExpNameAssignment_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getExpNameAssignment_0()); 
             }
-            // InternalMiniOCLCS.g:2204:2: ( rule__NameExpCS__ExpNameAssignment_0 )
-            // InternalMiniOCLCS.g:2204:3: rule__NameExpCS__ExpNameAssignment_0
+            // InternalMiniOCLCS.g:3779:2: ( rule__NameExpCS__ExpNameAssignment_0 )
+            // InternalMiniOCLCS.g:3779:3: rule__NameExpCS__ExpNameAssignment_0
             {
             pushFollow(FOLLOW_2);
             rule__NameExpCS__ExpNameAssignment_0();
@@ -7245,14 +12504,14 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__1"
-    // InternalMiniOCLCS.g:2212:1: rule__NameExpCS__Group__1 : rule__NameExpCS__Group__1__Impl ;
+    // InternalMiniOCLCS.g:3787:1: rule__NameExpCS__Group__1 : rule__NameExpCS__Group__1__Impl ;
     public final void rule__NameExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2216:1: ( rule__NameExpCS__Group__1__Impl )
-            // InternalMiniOCLCS.g:2217:2: rule__NameExpCS__Group__1__Impl
+            // InternalMiniOCLCS.g:3791:1: ( rule__NameExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:3792:2: rule__NameExpCS__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__NameExpCS__Group__1__Impl();
@@ -7278,31 +12537,31 @@
 
 
     // $ANTLR start "rule__NameExpCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:2223:1: rule__NameExpCS__Group__1__Impl : ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? ) ;
+    // InternalMiniOCLCS.g:3798:1: rule__NameExpCS__Group__1__Impl : ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? ) ;
     public final void rule__NameExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2227:1: ( ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? ) )
-            // InternalMiniOCLCS.g:2228:1: ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? )
+            // InternalMiniOCLCS.g:3802:1: ( ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? ) )
+            // InternalMiniOCLCS.g:3803:1: ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? )
             {
-            // InternalMiniOCLCS.g:2228:1: ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? )
-            // InternalMiniOCLCS.g:2229:2: ( rule__NameExpCS__RoundedBracketsAssignment_1 )?
+            // InternalMiniOCLCS.g:3803:1: ( ( rule__NameExpCS__RoundedBracketsAssignment_1 )? )
+            // InternalMiniOCLCS.g:3804:2: ( rule__NameExpCS__RoundedBracketsAssignment_1 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getRoundedBracketsAssignment_1()); 
             }
-            // InternalMiniOCLCS.g:2230:2: ( rule__NameExpCS__RoundedBracketsAssignment_1 )?
-            int alt18=2;
-            int LA18_0 = input.LA(1);
+            // InternalMiniOCLCS.g:3805:2: ( rule__NameExpCS__RoundedBracketsAssignment_1 )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
 
-            if ( (LA18_0==25) ) {
-                alt18=1;
+            if ( (LA28_0==32) ) {
+                alt28=1;
             }
-            switch (alt18) {
+            switch (alt28) {
                 case 1 :
-                    // InternalMiniOCLCS.g:2230:3: rule__NameExpCS__RoundedBracketsAssignment_1
+                    // InternalMiniOCLCS.g:3805:3: rule__NameExpCS__RoundedBracketsAssignment_1
                     {
                     pushFollow(FOLLOW_2);
                     rule__NameExpCS__RoundedBracketsAssignment_1();
@@ -7340,16 +12599,16 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__0"
-    // InternalMiniOCLCS.g:2239:1: rule__RoundedBracketClauseCS__Group__0 : rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1 ;
+    // InternalMiniOCLCS.g:3814:1: rule__RoundedBracketClauseCS__Group__0 : rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1 ;
     public final void rule__RoundedBracketClauseCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2243:1: ( rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1 )
-            // InternalMiniOCLCS.g:2244:2: rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1
+            // InternalMiniOCLCS.g:3818:1: ( rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1 )
+            // InternalMiniOCLCS.g:3819:2: rule__RoundedBracketClauseCS__Group__0__Impl rule__RoundedBracketClauseCS__Group__1
             {
-            pushFollow(FOLLOW_13);
+            pushFollow(FOLLOW_19);
             rule__RoundedBracketClauseCS__Group__0__Impl();
 
             state._fsp--;
@@ -7378,23 +12637,23 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:2251:1: rule__RoundedBracketClauseCS__Group__0__Impl : ( () ) ;
+    // InternalMiniOCLCS.g:3826:1: rule__RoundedBracketClauseCS__Group__0__Impl : ( () ) ;
     public final void rule__RoundedBracketClauseCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2255:1: ( ( () ) )
-            // InternalMiniOCLCS.g:2256:1: ( () )
+            // InternalMiniOCLCS.g:3830:1: ( ( () ) )
+            // InternalMiniOCLCS.g:3831:1: ( () )
             {
-            // InternalMiniOCLCS.g:2256:1: ( () )
-            // InternalMiniOCLCS.g:2257:2: ()
+            // InternalMiniOCLCS.g:3831:1: ( () )
+            // InternalMiniOCLCS.g:3832:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getRoundedBracketClauseCSAction_0()); 
             }
-            // InternalMiniOCLCS.g:2258:2: ()
-            // InternalMiniOCLCS.g:2258:3: 
+            // InternalMiniOCLCS.g:3833:2: ()
+            // InternalMiniOCLCS.g:3833:3: 
             {
             }
 
@@ -7419,16 +12678,16 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__1"
-    // InternalMiniOCLCS.g:2266:1: rule__RoundedBracketClauseCS__Group__1 : rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2 ;
+    // InternalMiniOCLCS.g:3841:1: rule__RoundedBracketClauseCS__Group__1 : rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2 ;
     public final void rule__RoundedBracketClauseCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2270:1: ( rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2 )
-            // InternalMiniOCLCS.g:2271:2: rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2
+            // InternalMiniOCLCS.g:3845:1: ( rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2 )
+            // InternalMiniOCLCS.g:3846:2: rule__RoundedBracketClauseCS__Group__1__Impl rule__RoundedBracketClauseCS__Group__2
             {
-            pushFollow(FOLLOW_25);
+            pushFollow(FOLLOW_36);
             rule__RoundedBracketClauseCS__Group__1__Impl();
 
             state._fsp--;
@@ -7457,22 +12716,22 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:2278:1: rule__RoundedBracketClauseCS__Group__1__Impl : ( '(' ) ;
+    // InternalMiniOCLCS.g:3853:1: rule__RoundedBracketClauseCS__Group__1__Impl : ( '(' ) ;
     public final void rule__RoundedBracketClauseCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2282:1: ( ( '(' ) )
-            // InternalMiniOCLCS.g:2283:1: ( '(' )
+            // InternalMiniOCLCS.g:3857:1: ( ( '(' ) )
+            // InternalMiniOCLCS.g:3858:1: ( '(' )
             {
-            // InternalMiniOCLCS.g:2283:1: ( '(' )
-            // InternalMiniOCLCS.g:2284:2: '('
+            // InternalMiniOCLCS.g:3858:1: ( '(' )
+            // InternalMiniOCLCS.g:3859:2: '('
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getLeftParenthesisKeyword_1()); 
             }
-            match(input,25,FOLLOW_2); if (state.failed) return ;
+            match(input,32,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getRoundedBracketClauseCSAccess().getLeftParenthesisKeyword_1()); 
             }
@@ -7498,16 +12757,16 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__2"
-    // InternalMiniOCLCS.g:2293:1: rule__RoundedBracketClauseCS__Group__2 : rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3 ;
+    // InternalMiniOCLCS.g:3868:1: rule__RoundedBracketClauseCS__Group__2 : rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3 ;
     public final void rule__RoundedBracketClauseCS__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2297:1: ( rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3 )
-            // InternalMiniOCLCS.g:2298:2: rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3
+            // InternalMiniOCLCS.g:3872:1: ( rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3 )
+            // InternalMiniOCLCS.g:3873:2: rule__RoundedBracketClauseCS__Group__2__Impl rule__RoundedBracketClauseCS__Group__3
             {
-            pushFollow(FOLLOW_25);
+            pushFollow(FOLLOW_36);
             rule__RoundedBracketClauseCS__Group__2__Impl();
 
             state._fsp--;
@@ -7536,31 +12795,31 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__2__Impl"
-    // InternalMiniOCLCS.g:2305:1: rule__RoundedBracketClauseCS__Group__2__Impl : ( ( rule__RoundedBracketClauseCS__Group_2__0 )? ) ;
+    // InternalMiniOCLCS.g:3880:1: rule__RoundedBracketClauseCS__Group__2__Impl : ( ( rule__RoundedBracketClauseCS__Group_2__0 )? ) ;
     public final void rule__RoundedBracketClauseCS__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2309:1: ( ( ( rule__RoundedBracketClauseCS__Group_2__0 )? ) )
-            // InternalMiniOCLCS.g:2310:1: ( ( rule__RoundedBracketClauseCS__Group_2__0 )? )
+            // InternalMiniOCLCS.g:3884:1: ( ( ( rule__RoundedBracketClauseCS__Group_2__0 )? ) )
+            // InternalMiniOCLCS.g:3885:1: ( ( rule__RoundedBracketClauseCS__Group_2__0 )? )
             {
-            // InternalMiniOCLCS.g:2310:1: ( ( rule__RoundedBracketClauseCS__Group_2__0 )? )
-            // InternalMiniOCLCS.g:2311:2: ( rule__RoundedBracketClauseCS__Group_2__0 )?
+            // InternalMiniOCLCS.g:3885:1: ( ( rule__RoundedBracketClauseCS__Group_2__0 )? )
+            // InternalMiniOCLCS.g:3886:2: ( rule__RoundedBracketClauseCS__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2()); 
             }
-            // InternalMiniOCLCS.g:2312:2: ( rule__RoundedBracketClauseCS__Group_2__0 )?
-            int alt19=2;
-            int LA19_0 = input.LA(1);
+            // InternalMiniOCLCS.g:3887:2: ( rule__RoundedBracketClauseCS__Group_2__0 )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
 
-            if ( ((LA19_0>=RULE_ID && LA19_0<=RULE_STRING)||LA19_0==15||LA19_0==31) ) {
-                alt19=1;
+            if ( (LA29_0==RULE_ID||LA29_0==RULE_INT||LA29_0==11||LA29_0==19||LA29_0==37||(LA29_0>=41 && LA29_0<=42)||LA29_0==47) ) {
+                alt29=1;
             }
-            switch (alt19) {
+            switch (alt29) {
                 case 1 :
-                    // InternalMiniOCLCS.g:2312:3: rule__RoundedBracketClauseCS__Group_2__0
+                    // InternalMiniOCLCS.g:3887:3: rule__RoundedBracketClauseCS__Group_2__0
                     {
                     pushFollow(FOLLOW_2);
                     rule__RoundedBracketClauseCS__Group_2__0();
@@ -7598,14 +12857,14 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__3"
-    // InternalMiniOCLCS.g:2320:1: rule__RoundedBracketClauseCS__Group__3 : rule__RoundedBracketClauseCS__Group__3__Impl ;
+    // InternalMiniOCLCS.g:3895:1: rule__RoundedBracketClauseCS__Group__3 : rule__RoundedBracketClauseCS__Group__3__Impl ;
     public final void rule__RoundedBracketClauseCS__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2324:1: ( rule__RoundedBracketClauseCS__Group__3__Impl )
-            // InternalMiniOCLCS.g:2325:2: rule__RoundedBracketClauseCS__Group__3__Impl
+            // InternalMiniOCLCS.g:3899:1: ( rule__RoundedBracketClauseCS__Group__3__Impl )
+            // InternalMiniOCLCS.g:3900:2: rule__RoundedBracketClauseCS__Group__3__Impl
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__Group__3__Impl();
@@ -7631,22 +12890,22 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group__3__Impl"
-    // InternalMiniOCLCS.g:2331:1: rule__RoundedBracketClauseCS__Group__3__Impl : ( ')' ) ;
+    // InternalMiniOCLCS.g:3906:1: rule__RoundedBracketClauseCS__Group__3__Impl : ( ')' ) ;
     public final void rule__RoundedBracketClauseCS__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2335:1: ( ( ')' ) )
-            // InternalMiniOCLCS.g:2336:1: ( ')' )
+            // InternalMiniOCLCS.g:3910:1: ( ( ')' ) )
+            // InternalMiniOCLCS.g:3911:1: ( ')' )
             {
-            // InternalMiniOCLCS.g:2336:1: ( ')' )
-            // InternalMiniOCLCS.g:2337:2: ')'
+            // InternalMiniOCLCS.g:3911:1: ( ')' )
+            // InternalMiniOCLCS.g:3912:2: ')'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getRightParenthesisKeyword_3()); 
             }
-            match(input,26,FOLLOW_2); if (state.failed) return ;
+            match(input,33,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getRoundedBracketClauseCSAccess().getRightParenthesisKeyword_3()); 
             }
@@ -7672,16 +12931,16 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2__0"
-    // InternalMiniOCLCS.g:2347:1: rule__RoundedBracketClauseCS__Group_2__0 : rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1 ;
+    // InternalMiniOCLCS.g:3922:1: rule__RoundedBracketClauseCS__Group_2__0 : rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1 ;
     public final void rule__RoundedBracketClauseCS__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2351:1: ( rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1 )
-            // InternalMiniOCLCS.g:2352:2: rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1
+            // InternalMiniOCLCS.g:3926:1: ( rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1 )
+            // InternalMiniOCLCS.g:3927:2: rule__RoundedBracketClauseCS__Group_2__0__Impl rule__RoundedBracketClauseCS__Group_2__1
             {
-            pushFollow(FOLLOW_17);
+            pushFollow(FOLLOW_23);
             rule__RoundedBracketClauseCS__Group_2__0__Impl();
 
             state._fsp--;
@@ -7710,23 +12969,23 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2__0__Impl"
-    // InternalMiniOCLCS.g:2359:1: rule__RoundedBracketClauseCS__Group_2__0__Impl : ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) ) ;
+    // InternalMiniOCLCS.g:3934:1: rule__RoundedBracketClauseCS__Group_2__0__Impl : ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) ) ;
     public final void rule__RoundedBracketClauseCS__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2363:1: ( ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) ) )
-            // InternalMiniOCLCS.g:2364:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) )
+            // InternalMiniOCLCS.g:3938:1: ( ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) ) )
+            // InternalMiniOCLCS.g:3939:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) )
             {
-            // InternalMiniOCLCS.g:2364:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) )
-            // InternalMiniOCLCS.g:2365:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 )
+            // InternalMiniOCLCS.g:3939:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 ) )
+            // InternalMiniOCLCS.g:3940:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_0()); 
             }
-            // InternalMiniOCLCS.g:2366:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 )
-            // InternalMiniOCLCS.g:2366:3: rule__RoundedBracketClauseCS__ArgsAssignment_2_0
+            // InternalMiniOCLCS.g:3941:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_0 )
+            // InternalMiniOCLCS.g:3941:3: rule__RoundedBracketClauseCS__ArgsAssignment_2_0
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__ArgsAssignment_2_0();
@@ -7761,14 +13020,14 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2__1"
-    // InternalMiniOCLCS.g:2374:1: rule__RoundedBracketClauseCS__Group_2__1 : rule__RoundedBracketClauseCS__Group_2__1__Impl ;
+    // InternalMiniOCLCS.g:3949:1: rule__RoundedBracketClauseCS__Group_2__1 : rule__RoundedBracketClauseCS__Group_2__1__Impl ;
     public final void rule__RoundedBracketClauseCS__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2378:1: ( rule__RoundedBracketClauseCS__Group_2__1__Impl )
-            // InternalMiniOCLCS.g:2379:2: rule__RoundedBracketClauseCS__Group_2__1__Impl
+            // InternalMiniOCLCS.g:3953:1: ( rule__RoundedBracketClauseCS__Group_2__1__Impl )
+            // InternalMiniOCLCS.g:3954:2: rule__RoundedBracketClauseCS__Group_2__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__Group_2__1__Impl();
@@ -7794,37 +13053,37 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2__1__Impl"
-    // InternalMiniOCLCS.g:2385:1: rule__RoundedBracketClauseCS__Group_2__1__Impl : ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* ) ;
+    // InternalMiniOCLCS.g:3960:1: rule__RoundedBracketClauseCS__Group_2__1__Impl : ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* ) ;
     public final void rule__RoundedBracketClauseCS__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2389:1: ( ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* ) )
-            // InternalMiniOCLCS.g:2390:1: ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* )
+            // InternalMiniOCLCS.g:3964:1: ( ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* ) )
+            // InternalMiniOCLCS.g:3965:1: ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* )
             {
-            // InternalMiniOCLCS.g:2390:1: ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* )
-            // InternalMiniOCLCS.g:2391:2: ( rule__RoundedBracketClauseCS__Group_2_1__0 )*
+            // InternalMiniOCLCS.g:3965:1: ( ( rule__RoundedBracketClauseCS__Group_2_1__0 )* )
+            // InternalMiniOCLCS.g:3966:2: ( rule__RoundedBracketClauseCS__Group_2_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getGroup_2_1()); 
             }
-            // InternalMiniOCLCS.g:2392:2: ( rule__RoundedBracketClauseCS__Group_2_1__0 )*
-            loop20:
+            // InternalMiniOCLCS.g:3967:2: ( rule__RoundedBracketClauseCS__Group_2_1__0 )*
+            loop30:
             do {
-                int alt20=2;
-                int LA20_0 = input.LA(1);
+                int alt30=2;
+                int LA30_0 = input.LA(1);
 
-                if ( (LA20_0==27) ) {
-                    alt20=1;
+                if ( (LA30_0==34) ) {
+                    alt30=1;
                 }
 
 
-                switch (alt20) {
+                switch (alt30) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:2392:3: rule__RoundedBracketClauseCS__Group_2_1__0
+            	    // InternalMiniOCLCS.g:3967:3: rule__RoundedBracketClauseCS__Group_2_1__0
             	    {
-            	    pushFollow(FOLLOW_18);
+            	    pushFollow(FOLLOW_24);
             	    rule__RoundedBracketClauseCS__Group_2_1__0();
 
             	    state._fsp--;
@@ -7834,7 +13093,7 @@
             	    break;
 
             	default :
-            	    break loop20;
+            	    break loop30;
                 }
             } while (true);
 
@@ -7863,16 +13122,16 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2_1__0"
-    // InternalMiniOCLCS.g:2401:1: rule__RoundedBracketClauseCS__Group_2_1__0 : rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1 ;
+    // InternalMiniOCLCS.g:3976:1: rule__RoundedBracketClauseCS__Group_2_1__0 : rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1 ;
     public final void rule__RoundedBracketClauseCS__Group_2_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2405:1: ( rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1 )
-            // InternalMiniOCLCS.g:2406:2: rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1
+            // InternalMiniOCLCS.g:3980:1: ( rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1 )
+            // InternalMiniOCLCS.g:3981:2: rule__RoundedBracketClauseCS__Group_2_1__0__Impl rule__RoundedBracketClauseCS__Group_2_1__1
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_22);
             rule__RoundedBracketClauseCS__Group_2_1__0__Impl();
 
             state._fsp--;
@@ -7901,22 +13160,22 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2_1__0__Impl"
-    // InternalMiniOCLCS.g:2413:1: rule__RoundedBracketClauseCS__Group_2_1__0__Impl : ( ',' ) ;
+    // InternalMiniOCLCS.g:3988:1: rule__RoundedBracketClauseCS__Group_2_1__0__Impl : ( ',' ) ;
     public final void rule__RoundedBracketClauseCS__Group_2_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2417:1: ( ( ',' ) )
-            // InternalMiniOCLCS.g:2418:1: ( ',' )
+            // InternalMiniOCLCS.g:3992:1: ( ( ',' ) )
+            // InternalMiniOCLCS.g:3993:1: ( ',' )
             {
-            // InternalMiniOCLCS.g:2418:1: ( ',' )
-            // InternalMiniOCLCS.g:2419:2: ','
+            // InternalMiniOCLCS.g:3993:1: ( ',' )
+            // InternalMiniOCLCS.g:3994:2: ','
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getCommaKeyword_2_1_0()); 
             }
-            match(input,27,FOLLOW_2); if (state.failed) return ;
+            match(input,34,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getRoundedBracketClauseCSAccess().getCommaKeyword_2_1_0()); 
             }
@@ -7942,14 +13201,14 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2_1__1"
-    // InternalMiniOCLCS.g:2428:1: rule__RoundedBracketClauseCS__Group_2_1__1 : rule__RoundedBracketClauseCS__Group_2_1__1__Impl ;
+    // InternalMiniOCLCS.g:4003:1: rule__RoundedBracketClauseCS__Group_2_1__1 : rule__RoundedBracketClauseCS__Group_2_1__1__Impl ;
     public final void rule__RoundedBracketClauseCS__Group_2_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2432:1: ( rule__RoundedBracketClauseCS__Group_2_1__1__Impl )
-            // InternalMiniOCLCS.g:2433:2: rule__RoundedBracketClauseCS__Group_2_1__1__Impl
+            // InternalMiniOCLCS.g:4007:1: ( rule__RoundedBracketClauseCS__Group_2_1__1__Impl )
+            // InternalMiniOCLCS.g:4008:2: rule__RoundedBracketClauseCS__Group_2_1__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__Group_2_1__1__Impl();
@@ -7975,23 +13234,23 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__Group_2_1__1__Impl"
-    // InternalMiniOCLCS.g:2439:1: rule__RoundedBracketClauseCS__Group_2_1__1__Impl : ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) ) ;
+    // InternalMiniOCLCS.g:4014:1: rule__RoundedBracketClauseCS__Group_2_1__1__Impl : ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) ) ;
     public final void rule__RoundedBracketClauseCS__Group_2_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2443:1: ( ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) ) )
-            // InternalMiniOCLCS.g:2444:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) )
+            // InternalMiniOCLCS.g:4018:1: ( ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) ) )
+            // InternalMiniOCLCS.g:4019:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) )
             {
-            // InternalMiniOCLCS.g:2444:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) )
-            // InternalMiniOCLCS.g:2445:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 )
+            // InternalMiniOCLCS.g:4019:1: ( ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 ) )
+            // InternalMiniOCLCS.g:4020:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsAssignment_2_1_1()); 
             }
-            // InternalMiniOCLCS.g:2446:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 )
-            // InternalMiniOCLCS.g:2446:3: rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1
+            // InternalMiniOCLCS.g:4021:2: ( rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 )
+            // InternalMiniOCLCS.g:4021:3: rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1
             {
             pushFollow(FOLLOW_2);
             rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1();
@@ -8026,16 +13285,16 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Group__0"
-    // InternalMiniOCLCS.g:2455:1: rule__BooleanLiteralExpCS__Group__0 : rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1 ;
+    // InternalMiniOCLCS.g:4030:1: rule__BooleanLiteralExpCS__Group__0 : rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1 ;
     public final void rule__BooleanLiteralExpCS__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2459:1: ( rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1 )
-            // InternalMiniOCLCS.g:2460:2: rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1
+            // InternalMiniOCLCS.g:4034:1: ( rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1 )
+            // InternalMiniOCLCS.g:4035:2: rule__BooleanLiteralExpCS__Group__0__Impl rule__BooleanLiteralExpCS__Group__1
             {
-            pushFollow(FOLLOW_16);
+            pushFollow(FOLLOW_37);
             rule__BooleanLiteralExpCS__Group__0__Impl();
 
             state._fsp--;
@@ -8064,23 +13323,23 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:2467:1: rule__BooleanLiteralExpCS__Group__0__Impl : ( () ) ;
+    // InternalMiniOCLCS.g:4042:1: rule__BooleanLiteralExpCS__Group__0__Impl : ( () ) ;
     public final void rule__BooleanLiteralExpCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2471:1: ( ( () ) )
-            // InternalMiniOCLCS.g:2472:1: ( () )
+            // InternalMiniOCLCS.g:4046:1: ( ( () ) )
+            // InternalMiniOCLCS.g:4047:1: ( () )
             {
-            // InternalMiniOCLCS.g:2472:1: ( () )
-            // InternalMiniOCLCS.g:2473:2: ()
+            // InternalMiniOCLCS.g:4047:1: ( () )
+            // InternalMiniOCLCS.g:4048:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getBooleanExpCSAction_0()); 
             }
-            // InternalMiniOCLCS.g:2474:2: ()
-            // InternalMiniOCLCS.g:2474:3: 
+            // InternalMiniOCLCS.g:4049:2: ()
+            // InternalMiniOCLCS.g:4049:3: 
             {
             }
 
@@ -8105,14 +13364,14 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Group__1"
-    // InternalMiniOCLCS.g:2482:1: rule__BooleanLiteralExpCS__Group__1 : rule__BooleanLiteralExpCS__Group__1__Impl ;
+    // InternalMiniOCLCS.g:4057:1: rule__BooleanLiteralExpCS__Group__1 : rule__BooleanLiteralExpCS__Group__1__Impl ;
     public final void rule__BooleanLiteralExpCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2486:1: ( rule__BooleanLiteralExpCS__Group__1__Impl )
-            // InternalMiniOCLCS.g:2487:2: rule__BooleanLiteralExpCS__Group__1__Impl
+            // InternalMiniOCLCS.g:4061:1: ( rule__BooleanLiteralExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:4062:2: rule__BooleanLiteralExpCS__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__BooleanLiteralExpCS__Group__1__Impl();
@@ -8138,23 +13397,23 @@
 
 
     // $ANTLR start "rule__BooleanLiteralExpCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:2493:1: rule__BooleanLiteralExpCS__Group__1__Impl : ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) ) ;
+    // InternalMiniOCLCS.g:4068:1: rule__BooleanLiteralExpCS__Group__1__Impl : ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) ) ;
     public final void rule__BooleanLiteralExpCS__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2497:1: ( ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) ) )
-            // InternalMiniOCLCS.g:2498:1: ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) )
+            // InternalMiniOCLCS.g:4072:1: ( ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) ) )
+            // InternalMiniOCLCS.g:4073:1: ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) )
             {
-            // InternalMiniOCLCS.g:2498:1: ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) )
-            // InternalMiniOCLCS.g:2499:2: ( rule__BooleanLiteralExpCS__Alternatives_1 )
+            // InternalMiniOCLCS.g:4073:1: ( ( rule__BooleanLiteralExpCS__Alternatives_1 ) )
+            // InternalMiniOCLCS.g:4074:2: ( rule__BooleanLiteralExpCS__Alternatives_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getAlternatives_1()); 
             }
-            // InternalMiniOCLCS.g:2500:2: ( rule__BooleanLiteralExpCS__Alternatives_1 )
-            // InternalMiniOCLCS.g:2500:3: rule__BooleanLiteralExpCS__Alternatives_1
+            // InternalMiniOCLCS.g:4075:2: ( rule__BooleanLiteralExpCS__Alternatives_1 )
+            // InternalMiniOCLCS.g:4075:3: rule__BooleanLiteralExpCS__Alternatives_1
             {
             pushFollow(FOLLOW_2);
             rule__BooleanLiteralExpCS__Alternatives_1();
@@ -8188,17 +13447,1982 @@
     // $ANTLR end "rule__BooleanLiteralExpCS__Group__1__Impl"
 
 
+    // $ANTLR start "rule__NullLiteralExpCS__Group__0"
+    // InternalMiniOCLCS.g:4084: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 {
+            // InternalMiniOCLCS.g:4088:1: ( rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1 )
+            // InternalMiniOCLCS.g:4089:2: rule__NullLiteralExpCS__Group__0__Impl rule__NullLiteralExpCS__Group__1
+            {
+            pushFollow(FOLLOW_38);
+            rule__NullLiteralExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__NullLiteralExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NullLiteralExpCS__Group__0"
+
+
+    // $ANTLR start "rule__NullLiteralExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:4096:1: rule__NullLiteralExpCS__Group__0__Impl : ( () ) ;
+    public final void rule__NullLiteralExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4100:1: ( ( () ) )
+            // InternalMiniOCLCS.g:4101:1: ( () )
+            {
+            // InternalMiniOCLCS.g:4101:1: ( () )
+            // InternalMiniOCLCS.g:4102:2: ()
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); 
+            }
+            // InternalMiniOCLCS.g:4103:2: ()
+            // InternalMiniOCLCS.g:4103:3: 
+            {
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NullLiteralExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__NullLiteralExpCS__Group__1"
+    // InternalMiniOCLCS.g:4111:1: rule__NullLiteralExpCS__Group__1 : rule__NullLiteralExpCS__Group__1__Impl ;
+    public final void rule__NullLiteralExpCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4115:1: ( rule__NullLiteralExpCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:4116:2: rule__NullLiteralExpCS__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__NullLiteralExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NullLiteralExpCS__Group__1"
+
+
+    // $ANTLR start "rule__NullLiteralExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:4122:1: rule__NullLiteralExpCS__Group__1__Impl : ( 'null' ) ;
+    public final void rule__NullLiteralExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4126:1: ( ( 'null' ) )
+            // InternalMiniOCLCS.g:4127:1: ( 'null' )
+            {
+            // InternalMiniOCLCS.g:4127:1: ( 'null' )
+            // InternalMiniOCLCS.g:4128:2: 'null'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); 
+            }
+            match(input,41,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__NullLiteralExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__0"
+    // InternalMiniOCLCS.g:4138: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 {
+            // InternalMiniOCLCS.g:4142:1: ( rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1 )
+            // InternalMiniOCLCS.g:4143:2: rule__CollectionLiteralExpCS__Group__0__Impl rule__CollectionLiteralExpCS__Group__1
+            {
+            pushFollow(FOLLOW_5);
+            rule__CollectionLiteralExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__0"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:4150:1: rule__CollectionLiteralExpCS__Group__0__Impl : ( ( rule__CollectionLiteralExpCS__KindAssignment_0 ) ) ;
+    public final void rule__CollectionLiteralExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4154:1: ( ( ( rule__CollectionLiteralExpCS__KindAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:4155:1: ( ( rule__CollectionLiteralExpCS__KindAssignment_0 ) )
+            {
+            // InternalMiniOCLCS.g:4155:1: ( ( rule__CollectionLiteralExpCS__KindAssignment_0 ) )
+            // InternalMiniOCLCS.g:4156:2: ( rule__CollectionLiteralExpCS__KindAssignment_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); 
+            }
+            // InternalMiniOCLCS.g:4157:2: ( rule__CollectionLiteralExpCS__KindAssignment_0 )
+            // InternalMiniOCLCS.g:4157:3: rule__CollectionLiteralExpCS__KindAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__KindAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getKindAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__1"
+    // InternalMiniOCLCS.g:4165: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 {
+            // InternalMiniOCLCS.g:4169:1: ( rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2 )
+            // InternalMiniOCLCS.g:4170:2: rule__CollectionLiteralExpCS__Group__1__Impl rule__CollectionLiteralExpCS__Group__2
+            {
+            pushFollow(FOLLOW_39);
+            rule__CollectionLiteralExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__1"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:4177:1: rule__CollectionLiteralExpCS__Group__1__Impl : ( '{' ) ;
+    public final void rule__CollectionLiteralExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4181:1: ( ( '{' ) )
+            // InternalMiniOCLCS.g:4182:1: ( '{' )
+            {
+            // InternalMiniOCLCS.g:4182:1: ( '{' )
+            // InternalMiniOCLCS.g:4183:2: '{'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
+            }
+            match(input,21,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__2"
+    // InternalMiniOCLCS.g:4192: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 {
+            // InternalMiniOCLCS.g:4196:1: ( rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3 )
+            // InternalMiniOCLCS.g:4197:2: rule__CollectionLiteralExpCS__Group__2__Impl rule__CollectionLiteralExpCS__Group__3
+            {
+            pushFollow(FOLLOW_39);
+            rule__CollectionLiteralExpCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__2"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:4204:1: rule__CollectionLiteralExpCS__Group__2__Impl : ( ( rule__CollectionLiteralExpCS__PartsAssignment_2 )* ) ;
+    public final void rule__CollectionLiteralExpCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4208:1: ( ( ( rule__CollectionLiteralExpCS__PartsAssignment_2 )* ) )
+            // InternalMiniOCLCS.g:4209:1: ( ( rule__CollectionLiteralExpCS__PartsAssignment_2 )* )
+            {
+            // InternalMiniOCLCS.g:4209:1: ( ( rule__CollectionLiteralExpCS__PartsAssignment_2 )* )
+            // InternalMiniOCLCS.g:4210:2: ( rule__CollectionLiteralExpCS__PartsAssignment_2 )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); 
+            }
+            // InternalMiniOCLCS.g:4211:2: ( rule__CollectionLiteralExpCS__PartsAssignment_2 )*
+            loop31:
+            do {
+                int alt31=2;
+                int LA31_0 = input.LA(1);
+
+                if ( (LA31_0==RULE_ID||LA31_0==RULE_INT||LA31_0==11||LA31_0==19||LA31_0==37||(LA31_0>=41 && LA31_0<=42)||LA31_0==47) ) {
+                    alt31=1;
+                }
+
+
+                switch (alt31) {
+            	case 1 :
+            	    // InternalMiniOCLCS.g:4211:3: rule__CollectionLiteralExpCS__PartsAssignment_2
+            	    {
+            	    pushFollow(FOLLOW_40);
+            	    rule__CollectionLiteralExpCS__PartsAssignment_2();
+
+            	    state._fsp--;
+            	    if (state.failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop31;
+                }
+            } while (true);
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsAssignment_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__3"
+    // InternalMiniOCLCS.g:4219:1: rule__CollectionLiteralExpCS__Group__3 : rule__CollectionLiteralExpCS__Group__3__Impl ;
+    public final void rule__CollectionLiteralExpCS__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4223:1: ( rule__CollectionLiteralExpCS__Group__3__Impl )
+            // InternalMiniOCLCS.g:4224:2: rule__CollectionLiteralExpCS__Group__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralExpCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__3"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:4230:1: rule__CollectionLiteralExpCS__Group__3__Impl : ( '}' ) ;
+    public final void rule__CollectionLiteralExpCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4234:1: ( ( '}' ) )
+            // InternalMiniOCLCS.g:4235:1: ( '}' )
+            {
+            // InternalMiniOCLCS.g:4235:1: ( '}' )
+            // InternalMiniOCLCS.g:4236:2: '}'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
+            }
+            match(input,22,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group__0"
+    // InternalMiniOCLCS.g:4246:1: rule__CollectionLiteralPartCS__Group__0 : rule__CollectionLiteralPartCS__Group__0__Impl rule__CollectionLiteralPartCS__Group__1 ;
+    public final void rule__CollectionLiteralPartCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4250:1: ( rule__CollectionLiteralPartCS__Group__0__Impl rule__CollectionLiteralPartCS__Group__1 )
+            // InternalMiniOCLCS.g:4251:2: rule__CollectionLiteralPartCS__Group__0__Impl rule__CollectionLiteralPartCS__Group__1
+            {
+            pushFollow(FOLLOW_17);
+            rule__CollectionLiteralPartCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group__0"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:4258:1: rule__CollectionLiteralPartCS__Group__0__Impl : ( ( rule__CollectionLiteralPartCS__FirstAssignment_0 ) ) ;
+    public final void rule__CollectionLiteralPartCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4262:1: ( ( ( rule__CollectionLiteralPartCS__FirstAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:4263:1: ( ( rule__CollectionLiteralPartCS__FirstAssignment_0 ) )
+            {
+            // InternalMiniOCLCS.g:4263:1: ( ( rule__CollectionLiteralPartCS__FirstAssignment_0 ) )
+            // InternalMiniOCLCS.g:4264:2: ( rule__CollectionLiteralPartCS__FirstAssignment_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); 
+            }
+            // InternalMiniOCLCS.g:4265:2: ( rule__CollectionLiteralPartCS__FirstAssignment_0 )
+            // InternalMiniOCLCS.g:4265:3: rule__CollectionLiteralPartCS__FirstAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__FirstAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group__1"
+    // InternalMiniOCLCS.g:4273:1: rule__CollectionLiteralPartCS__Group__1 : rule__CollectionLiteralPartCS__Group__1__Impl ;
+    public final void rule__CollectionLiteralPartCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4277:1: ( rule__CollectionLiteralPartCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:4278:2: rule__CollectionLiteralPartCS__Group__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group__1"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:4284:1: rule__CollectionLiteralPartCS__Group__1__Impl : ( ( rule__CollectionLiteralPartCS__Group_1__0 )? ) ;
+    public final void rule__CollectionLiteralPartCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4288:1: ( ( ( rule__CollectionLiteralPartCS__Group_1__0 )? ) )
+            // InternalMiniOCLCS.g:4289:1: ( ( rule__CollectionLiteralPartCS__Group_1__0 )? )
+            {
+            // InternalMiniOCLCS.g:4289:1: ( ( rule__CollectionLiteralPartCS__Group_1__0 )? )
+            // InternalMiniOCLCS.g:4290:2: ( rule__CollectionLiteralPartCS__Group_1__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); 
+            }
+            // InternalMiniOCLCS.g:4291:2: ( rule__CollectionLiteralPartCS__Group_1__0 )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==30) ) {
+                alt32=1;
+            }
+            switch (alt32) {
+                case 1 :
+                    // InternalMiniOCLCS.g:4291:3: rule__CollectionLiteralPartCS__Group_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__CollectionLiteralPartCS__Group_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getGroup_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group_1__0"
+    // InternalMiniOCLCS.g:4300:1: rule__CollectionLiteralPartCS__Group_1__0 : rule__CollectionLiteralPartCS__Group_1__0__Impl rule__CollectionLiteralPartCS__Group_1__1 ;
+    public final void rule__CollectionLiteralPartCS__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4304:1: ( rule__CollectionLiteralPartCS__Group_1__0__Impl rule__CollectionLiteralPartCS__Group_1__1 )
+            // InternalMiniOCLCS.g:4305:2: rule__CollectionLiteralPartCS__Group_1__0__Impl rule__CollectionLiteralPartCS__Group_1__1
+            {
+            pushFollow(FOLLOW_22);
+            rule__CollectionLiteralPartCS__Group_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__Group_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group_1__0"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group_1__0__Impl"
+    // InternalMiniOCLCS.g:4312:1: rule__CollectionLiteralPartCS__Group_1__0__Impl : ( '..' ) ;
+    public final void rule__CollectionLiteralPartCS__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4316:1: ( ( '..' ) )
+            // InternalMiniOCLCS.g:4317:1: ( '..' )
+            {
+            // InternalMiniOCLCS.g:4317:1: ( '..' )
+            // InternalMiniOCLCS.g:4318:2: '..'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); 
+            }
+            match(input,30,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group_1__1"
+    // InternalMiniOCLCS.g:4327:1: rule__CollectionLiteralPartCS__Group_1__1 : rule__CollectionLiteralPartCS__Group_1__1__Impl ;
+    public final void rule__CollectionLiteralPartCS__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4331:1: ( rule__CollectionLiteralPartCS__Group_1__1__Impl )
+            // InternalMiniOCLCS.g:4332:2: rule__CollectionLiteralPartCS__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__Group_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group_1__1"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__Group_1__1__Impl"
+    // InternalMiniOCLCS.g:4338:1: rule__CollectionLiteralPartCS__Group_1__1__Impl : ( ( rule__CollectionLiteralPartCS__LastAssignment_1_1 ) ) ;
+    public final void rule__CollectionLiteralPartCS__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4342:1: ( ( ( rule__CollectionLiteralPartCS__LastAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:4343:1: ( ( rule__CollectionLiteralPartCS__LastAssignment_1_1 ) )
+            {
+            // InternalMiniOCLCS.g:4343:1: ( ( rule__CollectionLiteralPartCS__LastAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:4344:2: ( rule__CollectionLiteralPartCS__LastAssignment_1_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); 
+            }
+            // InternalMiniOCLCS.g:4345:2: ( rule__CollectionLiteralPartCS__LastAssignment_1_1 )
+            // InternalMiniOCLCS.g:4345:3: rule__CollectionLiteralPartCS__LastAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__CollectionLiteralPartCS__LastAssignment_1_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getLastAssignment_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__0"
+    // InternalMiniOCLCS.g:4354: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 {
+            // InternalMiniOCLCS.g:4358:1: ( rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1 )
+            // InternalMiniOCLCS.g:4359:2: rule__LetExpCS__Group__0__Impl rule__LetExpCS__Group__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__LetExpCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__0"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:4366:1: rule__LetExpCS__Group__0__Impl : ( 'let' ) ;
+    public final void rule__LetExpCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4370:1: ( ( 'let' ) )
+            // InternalMiniOCLCS.g:4371:1: ( 'let' )
+            {
+            // InternalMiniOCLCS.g:4371:1: ( 'let' )
+            // InternalMiniOCLCS.g:4372:2: 'let'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); 
+            }
+            match(input,42,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getLetKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__1"
+    // InternalMiniOCLCS.g:4381: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 {
+            // InternalMiniOCLCS.g:4385:1: ( rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2 )
+            // InternalMiniOCLCS.g:4386:2: rule__LetExpCS__Group__1__Impl rule__LetExpCS__Group__2
+            {
+            pushFollow(FOLLOW_41);
+            rule__LetExpCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__1"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:4393:1: rule__LetExpCS__Group__1__Impl : ( ( rule__LetExpCS__LetVarsAssignment_1 ) ) ;
+    public final void rule__LetExpCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4397:1: ( ( ( rule__LetExpCS__LetVarsAssignment_1 ) ) )
+            // InternalMiniOCLCS.g:4398:1: ( ( rule__LetExpCS__LetVarsAssignment_1 ) )
+            {
+            // InternalMiniOCLCS.g:4398:1: ( ( rule__LetExpCS__LetVarsAssignment_1 ) )
+            // InternalMiniOCLCS.g:4399:2: ( rule__LetExpCS__LetVarsAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); 
+            }
+            // InternalMiniOCLCS.g:4400:2: ( rule__LetExpCS__LetVarsAssignment_1 )
+            // InternalMiniOCLCS.g:4400:3: rule__LetExpCS__LetVarsAssignment_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__LetVarsAssignment_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__2"
+    // InternalMiniOCLCS.g:4408: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 {
+            // InternalMiniOCLCS.g:4412:1: ( rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3 )
+            // InternalMiniOCLCS.g:4413:2: rule__LetExpCS__Group__2__Impl rule__LetExpCS__Group__3
+            {
+            pushFollow(FOLLOW_41);
+            rule__LetExpCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__2"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:4420: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 {
+            // InternalMiniOCLCS.g:4424:1: ( ( ( rule__LetExpCS__Group_2__0 )* ) )
+            // InternalMiniOCLCS.g:4425:1: ( ( rule__LetExpCS__Group_2__0 )* )
+            {
+            // InternalMiniOCLCS.g:4425:1: ( ( rule__LetExpCS__Group_2__0 )* )
+            // InternalMiniOCLCS.g:4426:2: ( rule__LetExpCS__Group_2__0 )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getGroup_2()); 
+            }
+            // InternalMiniOCLCS.g:4427:2: ( rule__LetExpCS__Group_2__0 )*
+            loop33:
+            do {
+                int alt33=2;
+                int LA33_0 = input.LA(1);
+
+                if ( (LA33_0==34) ) {
+                    alt33=1;
+                }
+
+
+                switch (alt33) {
+            	case 1 :
+            	    // InternalMiniOCLCS.g:4427:3: rule__LetExpCS__Group_2__0
+            	    {
+            	    pushFollow(FOLLOW_24);
+            	    rule__LetExpCS__Group_2__0();
+
+            	    state._fsp--;
+            	    if (state.failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop33;
+                }
+            } while (true);
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getGroup_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__3"
+    // InternalMiniOCLCS.g:4435: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 {
+            // InternalMiniOCLCS.g:4439:1: ( rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4 )
+            // InternalMiniOCLCS.g:4440:2: rule__LetExpCS__Group__3__Impl rule__LetExpCS__Group__4
+            {
+            pushFollow(FOLLOW_22);
+            rule__LetExpCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__3"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:4447:1: rule__LetExpCS__Group__3__Impl : ( 'in' ) ;
+    public final void rule__LetExpCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4451:1: ( ( 'in' ) )
+            // InternalMiniOCLCS.g:4452:1: ( 'in' )
+            {
+            // InternalMiniOCLCS.g:4452:1: ( 'in' )
+            // InternalMiniOCLCS.g:4453:2: 'in'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getInKeyword_3()); 
+            }
+            match(input,43,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getInKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__4"
+    // InternalMiniOCLCS.g:4462:1: rule__LetExpCS__Group__4 : rule__LetExpCS__Group__4__Impl ;
+    public final void rule__LetExpCS__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4466:1: ( rule__LetExpCS__Group__4__Impl )
+            // InternalMiniOCLCS.g:4467:2: rule__LetExpCS__Group__4__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__4"
+
+
+    // $ANTLR start "rule__LetExpCS__Group__4__Impl"
+    // InternalMiniOCLCS.g:4473:1: rule__LetExpCS__Group__4__Impl : ( ( rule__LetExpCS__InExpAssignment_4 ) ) ;
+    public final void rule__LetExpCS__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4477:1: ( ( ( rule__LetExpCS__InExpAssignment_4 ) ) )
+            // InternalMiniOCLCS.g:4478:1: ( ( rule__LetExpCS__InExpAssignment_4 ) )
+            {
+            // InternalMiniOCLCS.g:4478:1: ( ( rule__LetExpCS__InExpAssignment_4 ) )
+            // InternalMiniOCLCS.g:4479:2: ( rule__LetExpCS__InExpAssignment_4 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); 
+            }
+            // InternalMiniOCLCS.g:4480:2: ( rule__LetExpCS__InExpAssignment_4 )
+            // InternalMiniOCLCS.g:4480:3: rule__LetExpCS__InExpAssignment_4
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__InExpAssignment_4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getInExpAssignment_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group__4__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group_2__0"
+    // InternalMiniOCLCS.g:4489: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 {
+            // InternalMiniOCLCS.g:4493:1: ( rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1 )
+            // InternalMiniOCLCS.g:4494:2: rule__LetExpCS__Group_2__0__Impl rule__LetExpCS__Group_2__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__LetExpCS__Group_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group_2__0"
+
+
+    // $ANTLR start "rule__LetExpCS__Group_2__0__Impl"
+    // InternalMiniOCLCS.g:4501:1: rule__LetExpCS__Group_2__0__Impl : ( ',' ) ;
+    public final void rule__LetExpCS__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4505:1: ( ( ',' ) )
+            // InternalMiniOCLCS.g:4506:1: ( ',' )
+            {
+            // InternalMiniOCLCS.g:4506:1: ( ',' )
+            // InternalMiniOCLCS.g:4507:2: ','
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); 
+            }
+            match(input,34,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__LetExpCS__Group_2__1"
+    // InternalMiniOCLCS.g:4516: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 {
+            // InternalMiniOCLCS.g:4520:1: ( rule__LetExpCS__Group_2__1__Impl )
+            // InternalMiniOCLCS.g:4521:2: rule__LetExpCS__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__Group_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group_2__1"
+
+
+    // $ANTLR start "rule__LetExpCS__Group_2__1__Impl"
+    // InternalMiniOCLCS.g:4527:1: rule__LetExpCS__Group_2__1__Impl : ( ( rule__LetExpCS__LetVarsAssignment_2_1 ) ) ;
+    public final void rule__LetExpCS__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4531:1: ( ( ( rule__LetExpCS__LetVarsAssignment_2_1 ) ) )
+            // InternalMiniOCLCS.g:4532:1: ( ( rule__LetExpCS__LetVarsAssignment_2_1 ) )
+            {
+            // InternalMiniOCLCS.g:4532:1: ( ( rule__LetExpCS__LetVarsAssignment_2_1 ) )
+            // InternalMiniOCLCS.g:4533:2: ( rule__LetExpCS__LetVarsAssignment_2_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); 
+            }
+            // InternalMiniOCLCS.g:4534:2: ( rule__LetExpCS__LetVarsAssignment_2_1 )
+            // InternalMiniOCLCS.g:4534:3: rule__LetExpCS__LetVarsAssignment_2_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetExpCS__LetVarsAssignment_2_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getLetVarsAssignment_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__0"
+    // InternalMiniOCLCS.g:4543:1: rule__LetVarCS__Group__0 : rule__LetVarCS__Group__0__Impl rule__LetVarCS__Group__1 ;
+    public final void rule__LetVarCS__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4547:1: ( rule__LetVarCS__Group__0__Impl rule__LetVarCS__Group__1 )
+            // InternalMiniOCLCS.g:4548:2: rule__LetVarCS__Group__0__Impl rule__LetVarCS__Group__1
+            {
+            pushFollow(FOLLOW_35);
+            rule__LetVarCS__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__0"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__0__Impl"
+    // InternalMiniOCLCS.g:4555:1: rule__LetVarCS__Group__0__Impl : ( ( rule__LetVarCS__NameAssignment_0 ) ) ;
+    public final void rule__LetVarCS__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4559:1: ( ( ( rule__LetVarCS__NameAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:4560:1: ( ( rule__LetVarCS__NameAssignment_0 ) )
+            {
+            // InternalMiniOCLCS.g:4560:1: ( ( rule__LetVarCS__NameAssignment_0 ) )
+            // InternalMiniOCLCS.g:4561:2: ( rule__LetVarCS__NameAssignment_0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); 
+            }
+            // InternalMiniOCLCS.g:4562:2: ( rule__LetVarCS__NameAssignment_0 )
+            // InternalMiniOCLCS.g:4562:3: rule__LetVarCS__NameAssignment_0
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__NameAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getNameAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__0__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__1"
+    // InternalMiniOCLCS.g:4570:1: rule__LetVarCS__Group__1 : rule__LetVarCS__Group__1__Impl rule__LetVarCS__Group__2 ;
+    public final void rule__LetVarCS__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4574:1: ( rule__LetVarCS__Group__1__Impl rule__LetVarCS__Group__2 )
+            // InternalMiniOCLCS.g:4575:2: rule__LetVarCS__Group__1__Impl rule__LetVarCS__Group__2
+            {
+            pushFollow(FOLLOW_35);
+            rule__LetVarCS__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__1"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__1__Impl"
+    // InternalMiniOCLCS.g:4582:1: rule__LetVarCS__Group__1__Impl : ( ( rule__LetVarCS__Group_1__0 )? ) ;
+    public final void rule__LetVarCS__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4586:1: ( ( ( rule__LetVarCS__Group_1__0 )? ) )
+            // InternalMiniOCLCS.g:4587:1: ( ( rule__LetVarCS__Group_1__0 )? )
+            {
+            // InternalMiniOCLCS.g:4587:1: ( ( rule__LetVarCS__Group_1__0 )? )
+            // InternalMiniOCLCS.g:4588:2: ( rule__LetVarCS__Group_1__0 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getGroup_1()); 
+            }
+            // InternalMiniOCLCS.g:4589:2: ( rule__LetVarCS__Group_1__0 )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0==26) ) {
+                alt34=1;
+            }
+            switch (alt34) {
+                case 1 :
+                    // InternalMiniOCLCS.g:4589:3: rule__LetVarCS__Group_1__0
+                    {
+                    pushFollow(FOLLOW_2);
+                    rule__LetVarCS__Group_1__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getGroup_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__1__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__2"
+    // InternalMiniOCLCS.g:4597:1: rule__LetVarCS__Group__2 : rule__LetVarCS__Group__2__Impl rule__LetVarCS__Group__3 ;
+    public final void rule__LetVarCS__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4601:1: ( rule__LetVarCS__Group__2__Impl rule__LetVarCS__Group__3 )
+            // InternalMiniOCLCS.g:4602:2: rule__LetVarCS__Group__2__Impl rule__LetVarCS__Group__3
+            {
+            pushFollow(FOLLOW_22);
+            rule__LetVarCS__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__2"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__2__Impl"
+    // InternalMiniOCLCS.g:4609:1: rule__LetVarCS__Group__2__Impl : ( '=' ) ;
+    public final void rule__LetVarCS__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4613:1: ( ( '=' ) )
+            // InternalMiniOCLCS.g:4614:1: ( '=' )
+            {
+            // InternalMiniOCLCS.g:4614:1: ( '=' )
+            // InternalMiniOCLCS.g:4615:2: '='
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); 
+            }
+            match(input,15,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__2__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__3"
+    // InternalMiniOCLCS.g:4624:1: rule__LetVarCS__Group__3 : rule__LetVarCS__Group__3__Impl ;
+    public final void rule__LetVarCS__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4628:1: ( rule__LetVarCS__Group__3__Impl )
+            // InternalMiniOCLCS.g:4629:2: rule__LetVarCS__Group__3__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__3"
+
+
+    // $ANTLR start "rule__LetVarCS__Group__3__Impl"
+    // InternalMiniOCLCS.g:4635:1: rule__LetVarCS__Group__3__Impl : ( ( rule__LetVarCS__InitExpAssignment_3 ) ) ;
+    public final void rule__LetVarCS__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4639:1: ( ( ( rule__LetVarCS__InitExpAssignment_3 ) ) )
+            // InternalMiniOCLCS.g:4640:1: ( ( rule__LetVarCS__InitExpAssignment_3 ) )
+            {
+            // InternalMiniOCLCS.g:4640:1: ( ( rule__LetVarCS__InitExpAssignment_3 ) )
+            // InternalMiniOCLCS.g:4641:2: ( rule__LetVarCS__InitExpAssignment_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); 
+            }
+            // InternalMiniOCLCS.g:4642:2: ( rule__LetVarCS__InitExpAssignment_3 )
+            // InternalMiniOCLCS.g:4642:3: rule__LetVarCS__InitExpAssignment_3
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__InitExpAssignment_3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getInitExpAssignment_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group__3__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group_1__0"
+    // InternalMiniOCLCS.g:4651:1: rule__LetVarCS__Group_1__0 : rule__LetVarCS__Group_1__0__Impl rule__LetVarCS__Group_1__1 ;
+    public final void rule__LetVarCS__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4655:1: ( rule__LetVarCS__Group_1__0__Impl rule__LetVarCS__Group_1__1 )
+            // InternalMiniOCLCS.g:4656:2: rule__LetVarCS__Group_1__0__Impl rule__LetVarCS__Group_1__1
+            {
+            pushFollow(FOLLOW_4);
+            rule__LetVarCS__Group_1__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group_1__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group_1__0"
+
+
+    // $ANTLR start "rule__LetVarCS__Group_1__0__Impl"
+    // InternalMiniOCLCS.g:4663:1: rule__LetVarCS__Group_1__0__Impl : ( ':' ) ;
+    public final void rule__LetVarCS__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4667:1: ( ( ':' ) )
+            // InternalMiniOCLCS.g:4668:1: ( ':' )
+            {
+            // InternalMiniOCLCS.g:4668:1: ( ':' )
+            // InternalMiniOCLCS.g:4669:2: ':'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); 
+            }
+            match(input,26,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getColonKeyword_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__LetVarCS__Group_1__1"
+    // InternalMiniOCLCS.g:4678:1: rule__LetVarCS__Group_1__1 : rule__LetVarCS__Group_1__1__Impl ;
+    public final void rule__LetVarCS__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4682:1: ( rule__LetVarCS__Group_1__1__Impl )
+            // InternalMiniOCLCS.g:4683:2: rule__LetVarCS__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__Group_1__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group_1__1"
+
+
+    // $ANTLR start "rule__LetVarCS__Group_1__1__Impl"
+    // InternalMiniOCLCS.g:4689:1: rule__LetVarCS__Group_1__1__Impl : ( ( rule__LetVarCS__TypeRefAssignment_1_1 ) ) ;
+    public final void rule__LetVarCS__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4693:1: ( ( ( rule__LetVarCS__TypeRefAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:4694:1: ( ( rule__LetVarCS__TypeRefAssignment_1_1 ) )
+            {
+            // InternalMiniOCLCS.g:4694:1: ( ( rule__LetVarCS__TypeRefAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:4695:2: ( rule__LetVarCS__TypeRefAssignment_1_1 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); 
+            }
+            // InternalMiniOCLCS.g:4696:2: ( rule__LetVarCS__TypeRefAssignment_1_1 )
+            // InternalMiniOCLCS.g:4696:3: rule__LetVarCS__TypeRefAssignment_1_1
+            {
+            pushFollow(FOLLOW_2);
+            rule__LetVarCS__TypeRefAssignment_1_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getTypeRefAssignment_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__Group_1__1__Impl"
+
+
     // $ANTLR start "rule__PathNameCS__Group__0"
-    // InternalMiniOCLCS.g:2509:1: rule__PathNameCS__Group__0 : rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 ;
+    // InternalMiniOCLCS.g:4705: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 {
-            // InternalMiniOCLCS.g:2513:1: ( rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 )
-            // InternalMiniOCLCS.g:2514:2: rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1
+            // InternalMiniOCLCS.g:4709:1: ( rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1 )
+            // InternalMiniOCLCS.g:4710:2: rule__PathNameCS__Group__0__Impl rule__PathNameCS__Group__1
             {
-            pushFollow(FOLLOW_26);
+            pushFollow(FOLLOW_42);
             rule__PathNameCS__Group__0__Impl();
 
             state._fsp--;
@@ -8227,26 +15451,26 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__0__Impl"
-    // InternalMiniOCLCS.g:2521:1: rule__PathNameCS__Group__0__Impl : ( ( rule__PathNameCS__PathAssignment_0 ) ) ;
+    // InternalMiniOCLCS.g:4717:1: rule__PathNameCS__Group__0__Impl : ( ( rule__PathNameCS__PathElementsAssignment_0 ) ) ;
     public final void rule__PathNameCS__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2525:1: ( ( ( rule__PathNameCS__PathAssignment_0 ) ) )
-            // InternalMiniOCLCS.g:2526:1: ( ( rule__PathNameCS__PathAssignment_0 ) )
+            // InternalMiniOCLCS.g:4721:1: ( ( ( rule__PathNameCS__PathElementsAssignment_0 ) ) )
+            // InternalMiniOCLCS.g:4722:1: ( ( rule__PathNameCS__PathElementsAssignment_0 ) )
             {
-            // InternalMiniOCLCS.g:2526:1: ( ( rule__PathNameCS__PathAssignment_0 ) )
-            // InternalMiniOCLCS.g:2527:2: ( rule__PathNameCS__PathAssignment_0 )
+            // InternalMiniOCLCS.g:4722:1: ( ( rule__PathNameCS__PathElementsAssignment_0 ) )
+            // InternalMiniOCLCS.g:4723:2: ( rule__PathNameCS__PathElementsAssignment_0 )
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getPathNameCSAccess().getPathAssignment_0()); 
+               before(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); 
             }
-            // InternalMiniOCLCS.g:2528:2: ( rule__PathNameCS__PathAssignment_0 )
-            // InternalMiniOCLCS.g:2528:3: rule__PathNameCS__PathAssignment_0
+            // InternalMiniOCLCS.g:4724:2: ( rule__PathNameCS__PathElementsAssignment_0 )
+            // InternalMiniOCLCS.g:4724:3: rule__PathNameCS__PathElementsAssignment_0
             {
             pushFollow(FOLLOW_2);
-            rule__PathNameCS__PathAssignment_0();
+            rule__PathNameCS__PathElementsAssignment_0();
 
             state._fsp--;
             if (state.failed) return ;
@@ -8254,7 +15478,7 @@
             }
 
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getPathNameCSAccess().getPathAssignment_0()); 
+               after(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_0()); 
             }
 
             }
@@ -8278,14 +15502,14 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__1"
-    // InternalMiniOCLCS.g:2536:1: rule__PathNameCS__Group__1 : rule__PathNameCS__Group__1__Impl ;
+    // InternalMiniOCLCS.g:4732:1: rule__PathNameCS__Group__1 : rule__PathNameCS__Group__1__Impl ;
     public final void rule__PathNameCS__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2540:1: ( rule__PathNameCS__Group__1__Impl )
-            // InternalMiniOCLCS.g:2541:2: rule__PathNameCS__Group__1__Impl
+            // InternalMiniOCLCS.g:4736:1: ( rule__PathNameCS__Group__1__Impl )
+            // InternalMiniOCLCS.g:4737:2: rule__PathNameCS__Group__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__PathNameCS__Group__1__Impl();
@@ -8311,37 +15535,37 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group__1__Impl"
-    // InternalMiniOCLCS.g:2547:1: rule__PathNameCS__Group__1__Impl : ( ( rule__PathNameCS__Group_1__0 )* ) ;
+    // InternalMiniOCLCS.g:4743: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 {
-            // InternalMiniOCLCS.g:2551:1: ( ( ( rule__PathNameCS__Group_1__0 )* ) )
-            // InternalMiniOCLCS.g:2552:1: ( ( rule__PathNameCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:4747:1: ( ( ( rule__PathNameCS__Group_1__0 )* ) )
+            // InternalMiniOCLCS.g:4748:1: ( ( rule__PathNameCS__Group_1__0 )* )
             {
-            // InternalMiniOCLCS.g:2552:1: ( ( rule__PathNameCS__Group_1__0 )* )
-            // InternalMiniOCLCS.g:2553:2: ( rule__PathNameCS__Group_1__0 )*
+            // InternalMiniOCLCS.g:4748:1: ( ( rule__PathNameCS__Group_1__0 )* )
+            // InternalMiniOCLCS.g:4749:2: ( rule__PathNameCS__Group_1__0 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getGroup_1()); 
             }
-            // InternalMiniOCLCS.g:2554:2: ( rule__PathNameCS__Group_1__0 )*
-            loop21:
+            // InternalMiniOCLCS.g:4750:2: ( rule__PathNameCS__Group_1__0 )*
+            loop35:
             do {
-                int alt21=2;
-                int LA21_0 = input.LA(1);
+                int alt35=2;
+                int LA35_0 = input.LA(1);
 
-                if ( (LA21_0==30) ) {
-                    alt21=1;
+                if ( (LA35_0==44) ) {
+                    alt35=1;
                 }
 
 
-                switch (alt21) {
+                switch (alt35) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:2554:3: rule__PathNameCS__Group_1__0
+            	    // InternalMiniOCLCS.g:4750:3: rule__PathNameCS__Group_1__0
             	    {
-            	    pushFollow(FOLLOW_27);
+            	    pushFollow(FOLLOW_43);
             	    rule__PathNameCS__Group_1__0();
 
             	    state._fsp--;
@@ -8351,7 +15575,7 @@
             	    break;
 
             	default :
-            	    break loop21;
+            	    break loop35;
                 }
             } while (true);
 
@@ -8380,14 +15604,14 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__0"
-    // InternalMiniOCLCS.g:2563:1: rule__PathNameCS__Group_1__0 : rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 ;
+    // InternalMiniOCLCS.g:4759: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 {
-            // InternalMiniOCLCS.g:2567:1: ( rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 )
-            // InternalMiniOCLCS.g:2568:2: rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1
+            // InternalMiniOCLCS.g:4763:1: ( rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1 )
+            // InternalMiniOCLCS.g:4764:2: rule__PathNameCS__Group_1__0__Impl rule__PathNameCS__Group_1__1
             {
             pushFollow(FOLLOW_4);
             rule__PathNameCS__Group_1__0__Impl();
@@ -8418,22 +15642,22 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__0__Impl"
-    // InternalMiniOCLCS.g:2575:1: rule__PathNameCS__Group_1__0__Impl : ( '::' ) ;
+    // InternalMiniOCLCS.g:4771:1: rule__PathNameCS__Group_1__0__Impl : ( '::' ) ;
     public final void rule__PathNameCS__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2579:1: ( ( '::' ) )
-            // InternalMiniOCLCS.g:2580:1: ( '::' )
+            // InternalMiniOCLCS.g:4775:1: ( ( '::' ) )
+            // InternalMiniOCLCS.g:4776:1: ( '::' )
             {
-            // InternalMiniOCLCS.g:2580:1: ( '::' )
-            // InternalMiniOCLCS.g:2581:2: '::'
+            // InternalMiniOCLCS.g:4776:1: ( '::' )
+            // InternalMiniOCLCS.g:4777:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
-            match(input,30,FOLLOW_2); if (state.failed) return ;
+            match(input,44,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0()); 
             }
@@ -8459,14 +15683,14 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__1"
-    // InternalMiniOCLCS.g:2590:1: rule__PathNameCS__Group_1__1 : rule__PathNameCS__Group_1__1__Impl ;
+    // InternalMiniOCLCS.g:4786: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 {
-            // InternalMiniOCLCS.g:2594:1: ( rule__PathNameCS__Group_1__1__Impl )
-            // InternalMiniOCLCS.g:2595:2: rule__PathNameCS__Group_1__1__Impl
+            // InternalMiniOCLCS.g:4790:1: ( rule__PathNameCS__Group_1__1__Impl )
+            // InternalMiniOCLCS.g:4791:2: rule__PathNameCS__Group_1__1__Impl
             {
             pushFollow(FOLLOW_2);
             rule__PathNameCS__Group_1__1__Impl();
@@ -8492,23 +15716,23 @@
 
 
     // $ANTLR start "rule__PathNameCS__Group_1__1__Impl"
-    // InternalMiniOCLCS.g:2601:1: rule__PathNameCS__Group_1__1__Impl : ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) ) ;
+    // InternalMiniOCLCS.g:4797:1: rule__PathNameCS__Group_1__1__Impl : ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) ) ;
     public final void rule__PathNameCS__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2605:1: ( ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) ) )
-            // InternalMiniOCLCS.g:2606:1: ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:4801:1: ( ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) ) )
+            // InternalMiniOCLCS.g:4802:1: ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) )
             {
-            // InternalMiniOCLCS.g:2606:1: ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) )
-            // InternalMiniOCLCS.g:2607:2: ( rule__PathNameCS__PathElementsAssignment_1_1 )
+            // InternalMiniOCLCS.g:4802:1: ( ( rule__PathNameCS__PathElementsAssignment_1_1 ) )
+            // InternalMiniOCLCS.g:4803:2: ( rule__PathNameCS__PathElementsAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getPathElementsAssignment_1_1()); 
             }
-            // InternalMiniOCLCS.g:2608:2: ( rule__PathNameCS__PathElementsAssignment_1_1 )
-            // InternalMiniOCLCS.g:2608:3: rule__PathNameCS__PathElementsAssignment_1_1
+            // InternalMiniOCLCS.g:4804:2: ( rule__PathNameCS__PathElementsAssignment_1_1 )
+            // InternalMiniOCLCS.g:4804:3: rule__PathNameCS__PathElementsAssignment_1_1
             {
             pushFollow(FOLLOW_2);
             rule__PathNameCS__PathElementsAssignment_1_1();
@@ -8543,17 +15767,17 @@
 
 
     // $ANTLR start "rule__RootCS__PackagesAssignment_0"
-    // InternalMiniOCLCS.g:2617:1: rule__RootCS__PackagesAssignment_0 : ( rulePackageCS ) ;
+    // InternalMiniOCLCS.g:4813:1: rule__RootCS__PackagesAssignment_0 : ( rulePackageCS ) ;
     public final void rule__RootCS__PackagesAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2621:1: ( ( rulePackageCS ) )
-            // InternalMiniOCLCS.g:2622:2: ( rulePackageCS )
+            // InternalMiniOCLCS.g:4817:1: ( ( rulePackageCS ) )
+            // InternalMiniOCLCS.g:4818:2: ( rulePackageCS )
             {
-            // InternalMiniOCLCS.g:2622:2: ( rulePackageCS )
-            // InternalMiniOCLCS.g:2623:3: rulePackageCS
+            // InternalMiniOCLCS.g:4818:2: ( rulePackageCS )
+            // InternalMiniOCLCS.g:4819:3: rulePackageCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRootCSAccess().getPackagesPackageCSParserRuleCall_0_0()); 
@@ -8588,17 +15812,17 @@
 
 
     // $ANTLR start "rule__RootCS__ContraintsAssignment_1"
-    // InternalMiniOCLCS.g:2632:1: rule__RootCS__ContraintsAssignment_1 : ( ruleConstraintsDefCS ) ;
+    // InternalMiniOCLCS.g:4828:1: rule__RootCS__ContraintsAssignment_1 : ( ruleConstraintsDefCS ) ;
     public final void rule__RootCS__ContraintsAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2636:1: ( ( ruleConstraintsDefCS ) )
-            // InternalMiniOCLCS.g:2637:2: ( ruleConstraintsDefCS )
+            // InternalMiniOCLCS.g:4832:1: ( ( ruleConstraintsDefCS ) )
+            // InternalMiniOCLCS.g:4833:2: ( ruleConstraintsDefCS )
             {
-            // InternalMiniOCLCS.g:2637:2: ( ruleConstraintsDefCS )
-            // InternalMiniOCLCS.g:2638:3: ruleConstraintsDefCS
+            // InternalMiniOCLCS.g:4833:2: ( ruleConstraintsDefCS )
+            // InternalMiniOCLCS.g:4834:3: ruleConstraintsDefCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRootCSAccess().getContraintsConstraintsDefCSParserRuleCall_1_0()); 
@@ -8633,17 +15857,17 @@
 
 
     // $ANTLR start "rule__PackageCS__NameAssignment_1"
-    // InternalMiniOCLCS.g:2647:1: rule__PackageCS__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:4843:1: rule__PackageCS__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__PackageCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2651:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:2652:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4847:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:4848:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:2652:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:2653:3: RULE_ID
+            // InternalMiniOCLCS.g:4848:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4849:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getNameIDTerminalRuleCall_1_0()); 
@@ -8674,17 +15898,17 @@
 
 
     // $ANTLR start "rule__PackageCS__PackagesAssignment_3_0"
-    // InternalMiniOCLCS.g:2662:1: rule__PackageCS__PackagesAssignment_3_0 : ( rulePackageCS ) ;
+    // InternalMiniOCLCS.g:4858:1: rule__PackageCS__PackagesAssignment_3_0 : ( rulePackageCS ) ;
     public final void rule__PackageCS__PackagesAssignment_3_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2666:1: ( ( rulePackageCS ) )
-            // InternalMiniOCLCS.g:2667:2: ( rulePackageCS )
+            // InternalMiniOCLCS.g:4862:1: ( ( rulePackageCS ) )
+            // InternalMiniOCLCS.g:4863:2: ( rulePackageCS )
             {
-            // InternalMiniOCLCS.g:2667:2: ( rulePackageCS )
-            // InternalMiniOCLCS.g:2668:3: rulePackageCS
+            // InternalMiniOCLCS.g:4863:2: ( rulePackageCS )
+            // InternalMiniOCLCS.g:4864:3: rulePackageCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPackageCSAccess().getPackagesPackageCSParserRuleCall_3_0_0()); 
@@ -8718,29 +15942,29 @@
     // $ANTLR end "rule__PackageCS__PackagesAssignment_3_0"
 
 
-    // $ANTLR start "rule__PackageCS__ClassesAssignment_3_1"
-    // InternalMiniOCLCS.g:2677:1: rule__PackageCS__ClassesAssignment_3_1 : ( ruleClassCS ) ;
-    public final void rule__PackageCS__ClassesAssignment_3_1() throws RecognitionException {
+    // $ANTLR start "rule__PackageCS__ClassifiersAssignment_3_1"
+    // InternalMiniOCLCS.g:4873:1: rule__PackageCS__ClassifiersAssignment_3_1 : ( ruleClassifierCS ) ;
+    public final void rule__PackageCS__ClassifiersAssignment_3_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2681:1: ( ( ruleClassCS ) )
-            // InternalMiniOCLCS.g:2682:2: ( ruleClassCS )
+            // InternalMiniOCLCS.g:4877:1: ( ( ruleClassifierCS ) )
+            // InternalMiniOCLCS.g:4878:2: ( ruleClassifierCS )
             {
-            // InternalMiniOCLCS.g:2682:2: ( ruleClassCS )
-            // InternalMiniOCLCS.g:2683:3: ruleClassCS
+            // InternalMiniOCLCS.g:4878:2: ( ruleClassifierCS )
+            // InternalMiniOCLCS.g:4879:3: ruleClassifierCS
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); 
+               before(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0()); 
             }
             pushFollow(FOLLOW_2);
-            ruleClassCS();
+            ruleClassifierCS();
 
             state._fsp--;
             if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0()); 
+               after(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0()); 
             }
 
             }
@@ -8760,21 +15984,21 @@
         }
         return ;
     }
-    // $ANTLR end "rule__PackageCS__ClassesAssignment_3_1"
+    // $ANTLR end "rule__PackageCS__ClassifiersAssignment_3_1"
 
 
     // $ANTLR start "rule__ClassCS__NameAssignment_1"
-    // InternalMiniOCLCS.g:2692:1: rule__ClassCS__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:4888:1: rule__ClassCS__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__ClassCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2696:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:2697:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4892:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:4893:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:2697:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:2698:3: RULE_ID
+            // InternalMiniOCLCS.g:4893:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4894:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getNameIDTerminalRuleCall_1_0()); 
@@ -8805,17 +16029,17 @@
 
 
     // $ANTLR start "rule__ClassCS__ExtendsAssignment_2_1"
-    // InternalMiniOCLCS.g:2707:1: rule__ClassCS__ExtendsAssignment_2_1 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:4903:1: rule__ClassCS__ExtendsAssignment_2_1 : ( rulePathNameCS ) ;
     public final void rule__ClassCS__ExtendsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2711:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2712:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:4907:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:4908:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2712:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2713:3: rulePathNameCS
+            // InternalMiniOCLCS.g:4908:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:4909:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getExtendsPathNameCSParserRuleCall_2_1_0()); 
@@ -8850,17 +16074,17 @@
 
 
     // $ANTLR start "rule__ClassCS__PropertiesAssignment_4_0"
-    // InternalMiniOCLCS.g:2722:1: rule__ClassCS__PropertiesAssignment_4_0 : ( rulePropertyCS ) ;
+    // InternalMiniOCLCS.g:4918:1: rule__ClassCS__PropertiesAssignment_4_0 : ( rulePropertyCS ) ;
     public final void rule__ClassCS__PropertiesAssignment_4_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2726:1: ( ( rulePropertyCS ) )
-            // InternalMiniOCLCS.g:2727:2: ( rulePropertyCS )
+            // InternalMiniOCLCS.g:4922:1: ( ( rulePropertyCS ) )
+            // InternalMiniOCLCS.g:4923:2: ( rulePropertyCS )
             {
-            // InternalMiniOCLCS.g:2727:2: ( rulePropertyCS )
-            // InternalMiniOCLCS.g:2728:3: rulePropertyCS
+            // InternalMiniOCLCS.g:4923:2: ( rulePropertyCS )
+            // InternalMiniOCLCS.g:4924:3: rulePropertyCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getPropertiesPropertyCSParserRuleCall_4_0_0()); 
@@ -8895,17 +16119,17 @@
 
 
     // $ANTLR start "rule__ClassCS__OperationsAssignment_4_1"
-    // InternalMiniOCLCS.g:2737:1: rule__ClassCS__OperationsAssignment_4_1 : ( ruleOperationCS ) ;
+    // InternalMiniOCLCS.g:4933:1: rule__ClassCS__OperationsAssignment_4_1 : ( ruleOperationCS ) ;
     public final void rule__ClassCS__OperationsAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2741:1: ( ( ruleOperationCS ) )
-            // InternalMiniOCLCS.g:2742:2: ( ruleOperationCS )
+            // InternalMiniOCLCS.g:4937:1: ( ( ruleOperationCS ) )
+            // InternalMiniOCLCS.g:4938:2: ( ruleOperationCS )
             {
-            // InternalMiniOCLCS.g:2742:2: ( ruleOperationCS )
-            // InternalMiniOCLCS.g:2743:3: ruleOperationCS
+            // InternalMiniOCLCS.g:4938:2: ( ruleOperationCS )
+            // InternalMiniOCLCS.g:4939:3: ruleOperationCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getClassCSAccess().getOperationsOperationCSParserRuleCall_4_1_0()); 
@@ -8939,18 +16163,100 @@
     // $ANTLR end "rule__ClassCS__OperationsAssignment_4_1"
 
 
+    // $ANTLR start "rule__DatatypeCS__NameAssignment_1"
+    // InternalMiniOCLCS.g:4948:1: rule__DatatypeCS__NameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__DatatypeCS__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4952:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:4953:2: ( RULE_ID )
+            {
+            // InternalMiniOCLCS.g:4953:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4954:3: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__NameAssignment_1"
+
+
+    // $ANTLR start "rule__DatatypeCS__TypeNameAssignment_3"
+    // InternalMiniOCLCS.g:4963:1: rule__DatatypeCS__TypeNameAssignment_3 : ( RULE_STRING ) ;
+    public final void rule__DatatypeCS__TypeNameAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:4967:1: ( ( RULE_STRING ) )
+            // InternalMiniOCLCS.g:4968:2: ( RULE_STRING )
+            {
+            // InternalMiniOCLCS.g:4968:2: ( RULE_STRING )
+            // InternalMiniOCLCS.g:4969:3: RULE_STRING
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0()); 
+            }
+            match(input,RULE_STRING,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DatatypeCS__TypeNameAssignment_3"
+
+
     // $ANTLR start "rule__PropertyCS__NameAssignment_1"
-    // InternalMiniOCLCS.g:2752:1: rule__PropertyCS__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:4978:1: rule__PropertyCS__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__PropertyCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2756:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:2757:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4982:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:4983:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:2757:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:2758:3: RULE_ID
+            // InternalMiniOCLCS.g:4983:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:4984:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0()); 
@@ -8981,17 +16287,17 @@
 
 
     // $ANTLR start "rule__PropertyCS__TypeRefAssignment_3"
-    // InternalMiniOCLCS.g:2767:1: rule__PropertyCS__TypeRefAssignment_3 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:4993:1: rule__PropertyCS__TypeRefAssignment_3 : ( rulePathNameCS ) ;
     public final void rule__PropertyCS__TypeRefAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2771:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2772:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:4997:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:4998:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2772:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2773:3: rulePathNameCS
+            // InternalMiniOCLCS.g:4998:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:4999:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0()); 
@@ -9025,18 +16331,304 @@
     // $ANTLR end "rule__PropertyCS__TypeRefAssignment_3"
 
 
+    // $ANTLR start "rule__PropertyCS__MultiplicityAssignment_4"
+    // InternalMiniOCLCS.g:5008:1: rule__PropertyCS__MultiplicityAssignment_4 : ( ruleMultiplicityCS ) ;
+    public final void rule__PropertyCS__MultiplicityAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5012:1: ( ( ruleMultiplicityCS ) )
+            // InternalMiniOCLCS.g:5013:2: ( ruleMultiplicityCS )
+            {
+            // InternalMiniOCLCS.g:5013:2: ( ruleMultiplicityCS )
+            // InternalMiniOCLCS.g:5014:3: ruleMultiplicityCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleMultiplicityCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PropertyCS__MultiplicityAssignment_4"
+
+
+    // $ANTLR start "rule__MultiplicityCS__OptAssignment_1_0"
+    // InternalMiniOCLCS.g:5023:1: rule__MultiplicityCS__OptAssignment_1_0 : ( ( '?' ) ) ;
+    public final void rule__MultiplicityCS__OptAssignment_1_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5027:1: ( ( ( '?' ) ) )
+            // InternalMiniOCLCS.g:5028:2: ( ( '?' ) )
+            {
+            // InternalMiniOCLCS.g:5028:2: ( ( '?' ) )
+            // InternalMiniOCLCS.g:5029:3: ( '?' )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); 
+            }
+            // InternalMiniOCLCS.g:5030:3: ( '?' )
+            // InternalMiniOCLCS.g:5031:4: '?'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); 
+            }
+            match(input,45,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__OptAssignment_1_0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__MultAssignment_1_1"
+    // InternalMiniOCLCS.g:5042:1: rule__MultiplicityCS__MultAssignment_1_1 : ( ( '*' ) ) ;
+    public final void rule__MultiplicityCS__MultAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5046:1: ( ( ( '*' ) ) )
+            // InternalMiniOCLCS.g:5047:2: ( ( '*' ) )
+            {
+            // InternalMiniOCLCS.g:5047:2: ( ( '*' ) )
+            // InternalMiniOCLCS.g:5048:3: ( '*' )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); 
+            }
+            // InternalMiniOCLCS.g:5049:3: ( '*' )
+            // InternalMiniOCLCS.g:5050:4: '*'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); 
+            }
+            match(input,46,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__MultAssignment_1_1"
+
+
+    // $ANTLR start "rule__MultiplicityCS__LowerAssignment_1_2_0"
+    // InternalMiniOCLCS.g:5061:1: rule__MultiplicityCS__LowerAssignment_1_2_0 : ( RULE_INT ) ;
+    public final void rule__MultiplicityCS__LowerAssignment_1_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5065:1: ( ( RULE_INT ) )
+            // InternalMiniOCLCS.g:5066:2: ( RULE_INT )
+            {
+            // InternalMiniOCLCS.g:5066:2: ( RULE_INT )
+            // InternalMiniOCLCS.g:5067:3: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__LowerAssignment_1_2_0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__UpperIntAssignment_1_2_2_0"
+    // InternalMiniOCLCS.g:5076:1: rule__MultiplicityCS__UpperIntAssignment_1_2_2_0 : ( RULE_INT ) ;
+    public final void rule__MultiplicityCS__UpperIntAssignment_1_2_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5080:1: ( ( RULE_INT ) )
+            // InternalMiniOCLCS.g:5081:2: ( RULE_INT )
+            {
+            // InternalMiniOCLCS.g:5081:2: ( RULE_INT )
+            // InternalMiniOCLCS.g:5082:3: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__UpperIntAssignment_1_2_2_0"
+
+
+    // $ANTLR start "rule__MultiplicityCS__UpperMultAssignment_1_2_2_1"
+    // InternalMiniOCLCS.g:5091:1: rule__MultiplicityCS__UpperMultAssignment_1_2_2_1 : ( ( '*' ) ) ;
+    public final void rule__MultiplicityCS__UpperMultAssignment_1_2_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5095:1: ( ( ( '*' ) ) )
+            // InternalMiniOCLCS.g:5096:2: ( ( '*' ) )
+            {
+            // InternalMiniOCLCS.g:5096:2: ( ( '*' ) )
+            // InternalMiniOCLCS.g:5097:3: ( '*' )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); 
+            }
+            // InternalMiniOCLCS.g:5098:3: ( '*' )
+            // InternalMiniOCLCS.g:5099:4: '*'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); 
+            }
+            match(input,46,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MultiplicityCS__UpperMultAssignment_1_2_2_1"
+
+
     // $ANTLR start "rule__OperationCS__NameAssignment_1"
-    // InternalMiniOCLCS.g:2782:1: rule__OperationCS__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:5110:1: rule__OperationCS__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__OperationCS__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2786:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:2787:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5114:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5115:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:2787:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:2788:3: RULE_ID
+            // InternalMiniOCLCS.g:5115:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5116:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getNameIDTerminalRuleCall_1_0()); 
@@ -9067,17 +16659,17 @@
 
 
     // $ANTLR start "rule__OperationCS__ParamsAssignment_3_0"
-    // InternalMiniOCLCS.g:2797:1: rule__OperationCS__ParamsAssignment_3_0 : ( ruleParameterCS ) ;
+    // InternalMiniOCLCS.g:5125:1: rule__OperationCS__ParamsAssignment_3_0 : ( ruleParameterCS ) ;
     public final void rule__OperationCS__ParamsAssignment_3_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2801:1: ( ( ruleParameterCS ) )
-            // InternalMiniOCLCS.g:2802:2: ( ruleParameterCS )
+            // InternalMiniOCLCS.g:5129:1: ( ( ruleParameterCS ) )
+            // InternalMiniOCLCS.g:5130:2: ( ruleParameterCS )
             {
-            // InternalMiniOCLCS.g:2802:2: ( ruleParameterCS )
-            // InternalMiniOCLCS.g:2803:3: ruleParameterCS
+            // InternalMiniOCLCS.g:5130:2: ( ruleParameterCS )
+            // InternalMiniOCLCS.g:5131:3: ruleParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_0_0()); 
@@ -9112,17 +16704,17 @@
 
 
     // $ANTLR start "rule__OperationCS__ParamsAssignment_3_1_1"
-    // InternalMiniOCLCS.g:2812:1: rule__OperationCS__ParamsAssignment_3_1_1 : ( ruleParameterCS ) ;
+    // InternalMiniOCLCS.g:5140:1: rule__OperationCS__ParamsAssignment_3_1_1 : ( ruleParameterCS ) ;
     public final void rule__OperationCS__ParamsAssignment_3_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2816:1: ( ( ruleParameterCS ) )
-            // InternalMiniOCLCS.g:2817:2: ( ruleParameterCS )
+            // InternalMiniOCLCS.g:5144:1: ( ( ruleParameterCS ) )
+            // InternalMiniOCLCS.g:5145:2: ( ruleParameterCS )
             {
-            // InternalMiniOCLCS.g:2817:2: ( ruleParameterCS )
-            // InternalMiniOCLCS.g:2818:3: ruleParameterCS
+            // InternalMiniOCLCS.g:5145:2: ( ruleParameterCS )
+            // InternalMiniOCLCS.g:5146:3: ruleParameterCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_1_1_0()); 
@@ -9157,17 +16749,17 @@
 
 
     // $ANTLR start "rule__OperationCS__ResultRefAssignment_6"
-    // InternalMiniOCLCS.g:2827:1: rule__OperationCS__ResultRefAssignment_6 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:5155:1: rule__OperationCS__ResultRefAssignment_6 : ( rulePathNameCS ) ;
     public final void rule__OperationCS__ResultRefAssignment_6() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2831:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2832:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5159:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5160:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2832:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2833:3: rulePathNameCS
+            // InternalMiniOCLCS.g:5160:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5161:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getResultRefPathNameCSParserRuleCall_6_0()); 
@@ -9202,17 +16794,17 @@
 
 
     // $ANTLR start "rule__OperationCS__BodyAssignment_8"
-    // InternalMiniOCLCS.g:2842:1: rule__OperationCS__BodyAssignment_8 : ( ruleExpCS ) ;
+    // InternalMiniOCLCS.g:5170:1: rule__OperationCS__BodyAssignment_8 : ( ruleExpCS ) ;
     public final void rule__OperationCS__BodyAssignment_8() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2846:1: ( ( ruleExpCS ) )
-            // InternalMiniOCLCS.g:2847:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5174:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5175:2: ( ruleExpCS )
             {
-            // InternalMiniOCLCS.g:2847:2: ( ruleExpCS )
-            // InternalMiniOCLCS.g:2848:3: ruleExpCS
+            // InternalMiniOCLCS.g:5175:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5176:3: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getOperationCSAccess().getBodyExpCSParserRuleCall_8_0()); 
@@ -9247,17 +16839,17 @@
 
 
     // $ANTLR start "rule__ParameterCS__NameAssignment_0"
-    // InternalMiniOCLCS.g:2857:1: rule__ParameterCS__NameAssignment_0 : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:5185:1: rule__ParameterCS__NameAssignment_0 : ( RULE_ID ) ;
     public final void rule__ParameterCS__NameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2861:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:2862:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5189:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5190:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:2862:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:2863:3: RULE_ID
+            // InternalMiniOCLCS.g:5190:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5191:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getNameIDTerminalRuleCall_0_0()); 
@@ -9288,17 +16880,17 @@
 
 
     // $ANTLR start "rule__ParameterCS__TypeRefAssignment_2"
-    // InternalMiniOCLCS.g:2872:1: rule__ParameterCS__TypeRefAssignment_2 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:5200:1: rule__ParameterCS__TypeRefAssignment_2 : ( rulePathNameCS ) ;
     public final void rule__ParameterCS__TypeRefAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2876:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2877:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5204:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5205:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2877:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2878:3: rulePathNameCS
+            // InternalMiniOCLCS.g:5205:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5206:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getParameterCSAccess().getTypeRefPathNameCSParserRuleCall_2_0()); 
@@ -9333,17 +16925,17 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__TypeRefAssignment_1"
-    // InternalMiniOCLCS.g:2887:1: rule__ConstraintsDefCS__TypeRefAssignment_1 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:5215:1: rule__ConstraintsDefCS__TypeRefAssignment_1 : ( rulePathNameCS ) ;
     public final void rule__ConstraintsDefCS__TypeRefAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2891:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2892:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5219:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5220:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2892:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2893:3: rulePathNameCS
+            // InternalMiniOCLCS.g:5220:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5221:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getTypeRefPathNameCSParserRuleCall_1_0()); 
@@ -9378,17 +16970,17 @@
 
 
     // $ANTLR start "rule__ConstraintsDefCS__InvariantsAssignment_3"
-    // InternalMiniOCLCS.g:2902:1: rule__ConstraintsDefCS__InvariantsAssignment_3 : ( ruleInvariantCS ) ;
+    // InternalMiniOCLCS.g:5230:1: rule__ConstraintsDefCS__InvariantsAssignment_3 : ( ruleInvariantCS ) ;
     public final void rule__ConstraintsDefCS__InvariantsAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2906:1: ( ( ruleInvariantCS ) )
-            // InternalMiniOCLCS.g:2907:2: ( ruleInvariantCS )
+            // InternalMiniOCLCS.g:5234:1: ( ( ruleInvariantCS ) )
+            // InternalMiniOCLCS.g:5235:2: ( ruleInvariantCS )
             {
-            // InternalMiniOCLCS.g:2907:2: ( ruleInvariantCS )
-            // InternalMiniOCLCS.g:2908:3: ruleInvariantCS
+            // InternalMiniOCLCS.g:5235:2: ( ruleInvariantCS )
+            // InternalMiniOCLCS.g:5236:3: ruleInvariantCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getConstraintsDefCSAccess().getInvariantsInvariantCSParserRuleCall_3_0()); 
@@ -9423,17 +17015,17 @@
 
 
     // $ANTLR start "rule__InvariantCS__ExpAssignment_2"
-    // InternalMiniOCLCS.g:2917:1: rule__InvariantCS__ExpAssignment_2 : ( ruleExpCS ) ;
+    // InternalMiniOCLCS.g:5245:1: rule__InvariantCS__ExpAssignment_2 : ( ruleExpCS ) ;
     public final void rule__InvariantCS__ExpAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2921:1: ( ( ruleExpCS ) )
-            // InternalMiniOCLCS.g:2922:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5249:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5250:2: ( ruleExpCS )
             {
-            // InternalMiniOCLCS.g:2922:2: ( ruleExpCS )
-            // InternalMiniOCLCS.g:2923:3: ruleExpCS
+            // InternalMiniOCLCS.g:5250:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5251:3: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getInvariantCSAccess().getExpExpCSParserRuleCall_2_0()); 
@@ -9468,23 +17060,23 @@
 
 
     // $ANTLR start "rule__LogicExpCS__OpAssignment_1_1"
-    // InternalMiniOCLCS.g:2932:1: rule__LogicExpCS__OpAssignment_1_1 : ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) ) ;
+    // InternalMiniOCLCS.g:5260:1: rule__LogicExpCS__OpAssignment_1_1 : ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) ) ;
     public final void rule__LogicExpCS__OpAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2936:1: ( ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) ) )
-            // InternalMiniOCLCS.g:2937:2: ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) )
+            // InternalMiniOCLCS.g:5264:1: ( ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) ) )
+            // InternalMiniOCLCS.g:5265:2: ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) )
             {
-            // InternalMiniOCLCS.g:2937:2: ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) )
-            // InternalMiniOCLCS.g:2938:3: ( rule__LogicExpCS__OpAlternatives_1_1_0 )
+            // InternalMiniOCLCS.g:5265:2: ( ( rule__LogicExpCS__OpAlternatives_1_1_0 ) )
+            // InternalMiniOCLCS.g:5266:3: ( rule__LogicExpCS__OpAlternatives_1_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getOpAlternatives_1_1_0()); 
             }
-            // InternalMiniOCLCS.g:2939:3: ( rule__LogicExpCS__OpAlternatives_1_1_0 )
-            // InternalMiniOCLCS.g:2939:4: rule__LogicExpCS__OpAlternatives_1_1_0
+            // InternalMiniOCLCS.g:5267:3: ( rule__LogicExpCS__OpAlternatives_1_1_0 )
+            // InternalMiniOCLCS.g:5267:4: rule__LogicExpCS__OpAlternatives_1_1_0
             {
             pushFollow(FOLLOW_2);
             rule__LogicExpCS__OpAlternatives_1_1_0();
@@ -9519,17 +17111,17 @@
 
 
     // $ANTLR start "rule__LogicExpCS__RightAssignment_1_2"
-    // InternalMiniOCLCS.g:2947:1: rule__LogicExpCS__RightAssignment_1_2 : ( ruleCallExpCS ) ;
+    // InternalMiniOCLCS.g:5275:1: rule__LogicExpCS__RightAssignment_1_2 : ( ruleCallExpCS ) ;
     public final void rule__LogicExpCS__RightAssignment_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2951:1: ( ( ruleCallExpCS ) )
-            // InternalMiniOCLCS.g:2952:2: ( ruleCallExpCS )
+            // InternalMiniOCLCS.g:5279:1: ( ( ruleCallExpCS ) )
+            // InternalMiniOCLCS.g:5280:2: ( ruleCallExpCS )
             {
-            // InternalMiniOCLCS.g:2952:2: ( ruleCallExpCS )
-            // InternalMiniOCLCS.g:2953:3: ruleCallExpCS
+            // InternalMiniOCLCS.g:5280:2: ( ruleCallExpCS )
+            // InternalMiniOCLCS.g:5281:3: ruleCallExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLogicExpCSAccess().getRightCallExpCSParserRuleCall_1_2_0()); 
@@ -9564,23 +17156,23 @@
 
 
     // $ANTLR start "rule__CallExpCS__OpAssignment_1_1"
-    // InternalMiniOCLCS.g:2962:1: rule__CallExpCS__OpAssignment_1_1 : ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) ) ;
+    // InternalMiniOCLCS.g:5290:1: rule__CallExpCS__OpAssignment_1_1 : ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) ) ;
     public final void rule__CallExpCS__OpAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2966:1: ( ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) ) )
-            // InternalMiniOCLCS.g:2967:2: ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) )
+            // InternalMiniOCLCS.g:5294:1: ( ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) ) )
+            // InternalMiniOCLCS.g:5295:2: ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) )
             {
-            // InternalMiniOCLCS.g:2967:2: ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) )
-            // InternalMiniOCLCS.g:2968:3: ( rule__CallExpCS__OpAlternatives_1_1_0 )
+            // InternalMiniOCLCS.g:5295:2: ( ( rule__CallExpCS__OpAlternatives_1_1_0 ) )
+            // InternalMiniOCLCS.g:5296:3: ( rule__CallExpCS__OpAlternatives_1_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCallExpCSAccess().getOpAlternatives_1_1_0()); 
             }
-            // InternalMiniOCLCS.g:2969:3: ( rule__CallExpCS__OpAlternatives_1_1_0 )
-            // InternalMiniOCLCS.g:2969:4: rule__CallExpCS__OpAlternatives_1_1_0
+            // InternalMiniOCLCS.g:5297:3: ( rule__CallExpCS__OpAlternatives_1_1_0 )
+            // InternalMiniOCLCS.g:5297:4: rule__CallExpCS__OpAlternatives_1_1_0
             {
             pushFollow(FOLLOW_2);
             rule__CallExpCS__OpAlternatives_1_1_0();
@@ -9614,29 +17206,29 @@
     // $ANTLR end "rule__CallExpCS__OpAssignment_1_1"
 
 
-    // $ANTLR start "rule__CallExpCS__NameExpAssignment_1_2"
-    // InternalMiniOCLCS.g:2977:1: rule__CallExpCS__NameExpAssignment_1_2 : ( ruleNameExpCS ) ;
-    public final void rule__CallExpCS__NameExpAssignment_1_2() throws RecognitionException {
+    // $ANTLR start "rule__CallExpCS__NavExpAssignment_1_2"
+    // InternalMiniOCLCS.g:5305:1: rule__CallExpCS__NavExpAssignment_1_2 : ( ruleNavigationExpCS ) ;
+    public final void rule__CallExpCS__NavExpAssignment_1_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2981:1: ( ( ruleNameExpCS ) )
-            // InternalMiniOCLCS.g:2982:2: ( ruleNameExpCS )
+            // InternalMiniOCLCS.g:5309:1: ( ( ruleNavigationExpCS ) )
+            // InternalMiniOCLCS.g:5310:2: ( ruleNavigationExpCS )
             {
-            // InternalMiniOCLCS.g:2982:2: ( ruleNameExpCS )
-            // InternalMiniOCLCS.g:2983:3: ruleNameExpCS
+            // InternalMiniOCLCS.g:5310:2: ( ruleNavigationExpCS )
+            // InternalMiniOCLCS.g:5311:3: ruleNavigationExpCS
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0()); 
+               before(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); 
             }
             pushFollow(FOLLOW_2);
-            ruleNameExpCS();
+            ruleNavigationExpCS();
 
             state._fsp--;
             if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0()); 
+               after(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0()); 
             }
 
             }
@@ -9656,21 +17248,463 @@
         }
         return ;
     }
-    // $ANTLR end "rule__CallExpCS__NameExpAssignment_1_2"
+    // $ANTLR end "rule__CallExpCS__NavExpAssignment_1_2"
+
+
+    // $ANTLR start "rule__CollectExpCS__ItVarAssignment_2_0"
+    // InternalMiniOCLCS.g:5320:1: rule__CollectExpCS__ItVarAssignment_2_0 : ( ruleIteratorVarCS ) ;
+    public final void rule__CollectExpCS__ItVarAssignment_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5324:1: ( ( ruleIteratorVarCS ) )
+            // InternalMiniOCLCS.g:5325:2: ( ruleIteratorVarCS )
+            {
+            // InternalMiniOCLCS.g:5325:2: ( ruleIteratorVarCS )
+            // InternalMiniOCLCS.g:5326:3: ruleIteratorVarCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleIteratorVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__ItVarAssignment_2_0"
+
+
+    // $ANTLR start "rule__CollectExpCS__ExpAssignment_3"
+    // InternalMiniOCLCS.g:5335:1: rule__CollectExpCS__ExpAssignment_3 : ( ruleExpCS ) ;
+    public final void rule__CollectExpCS__ExpAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5339:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5340:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5340:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5341:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectExpCS__ExpAssignment_3"
+
+
+    // $ANTLR start "rule__IteratorVarCS__ItNameAssignment_0"
+    // InternalMiniOCLCS.g:5350:1: rule__IteratorVarCS__ItNameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__IteratorVarCS__ItNameAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5354:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5355:2: ( RULE_ID )
+            {
+            // InternalMiniOCLCS.g:5355:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5356:3: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__ItNameAssignment_0"
+
+
+    // $ANTLR start "rule__IteratorVarCS__ItTypeAssignment_1_1"
+    // InternalMiniOCLCS.g:5365:1: rule__IteratorVarCS__ItTypeAssignment_1_1 : ( rulePathNameCS ) ;
+    public final void rule__IteratorVarCS__ItTypeAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5369:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5370:2: ( rulePathNameCS )
+            {
+            // InternalMiniOCLCS.g:5370:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5371:3: rulePathNameCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            rulePathNameCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IteratorVarCS__ItTypeAssignment_1_1"
+
+
+    // $ANTLR start "rule__IterateExpCS__ItVarAssignment_2"
+    // InternalMiniOCLCS.g:5380:1: rule__IterateExpCS__ItVarAssignment_2 : ( ruleIteratorVarCS ) ;
+    public final void rule__IterateExpCS__ItVarAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5384:1: ( ( ruleIteratorVarCS ) )
+            // InternalMiniOCLCS.g:5385:2: ( ruleIteratorVarCS )
+            {
+            // InternalMiniOCLCS.g:5385:2: ( ruleIteratorVarCS )
+            // InternalMiniOCLCS.g:5386:3: ruleIteratorVarCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleIteratorVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__ItVarAssignment_2"
+
+
+    // $ANTLR start "rule__IterateExpCS__AccVarAssignment_4"
+    // InternalMiniOCLCS.g:5395:1: rule__IterateExpCS__AccVarAssignment_4 : ( ruleAccVarCS ) ;
+    public final void rule__IterateExpCS__AccVarAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5399:1: ( ( ruleAccVarCS ) )
+            // InternalMiniOCLCS.g:5400:2: ( ruleAccVarCS )
+            {
+            // InternalMiniOCLCS.g:5400:2: ( ruleAccVarCS )
+            // InternalMiniOCLCS.g:5401:3: ruleAccVarCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleAccVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__AccVarAssignment_4"
+
+
+    // $ANTLR start "rule__IterateExpCS__ExpAssignment_6"
+    // InternalMiniOCLCS.g:5410:1: rule__IterateExpCS__ExpAssignment_6 : ( ruleExpCS ) ;
+    public final void rule__IterateExpCS__ExpAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5414:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5415:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5415:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5416:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__IterateExpCS__ExpAssignment_6"
+
+
+    // $ANTLR start "rule__AccVarCS__AccNameAssignment_0"
+    // InternalMiniOCLCS.g:5425:1: rule__AccVarCS__AccNameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__AccVarCS__AccNameAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5429:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5430:2: ( RULE_ID )
+            {
+            // InternalMiniOCLCS.g:5430:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5431:3: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__AccNameAssignment_0"
+
+
+    // $ANTLR start "rule__AccVarCS__AccTypeAssignment_1_1"
+    // InternalMiniOCLCS.g:5440:1: rule__AccVarCS__AccTypeAssignment_1_1 : ( rulePathNameCS ) ;
+    public final void rule__AccVarCS__AccTypeAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5444:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5445:2: ( rulePathNameCS )
+            {
+            // InternalMiniOCLCS.g:5445:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5446:3: rulePathNameCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            rulePathNameCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__AccTypeAssignment_1_1"
+
+
+    // $ANTLR start "rule__AccVarCS__AccInitExpAssignment_3"
+    // InternalMiniOCLCS.g:5455:1: rule__AccVarCS__AccInitExpAssignment_3 : ( ruleExpCS ) ;
+    public final void rule__AccVarCS__AccInitExpAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5459:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5460:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5460:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5461:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__AccVarCS__AccInitExpAssignment_3"
 
 
     // $ANTLR start "rule__NameExpCS__ExpNameAssignment_0"
-    // InternalMiniOCLCS.g:2992:1: rule__NameExpCS__ExpNameAssignment_0 : ( rulePathNameCS ) ;
+    // InternalMiniOCLCS.g:5470:1: rule__NameExpCS__ExpNameAssignment_0 : ( rulePathNameCS ) ;
     public final void rule__NameExpCS__ExpNameAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:2996:1: ( ( rulePathNameCS ) )
-            // InternalMiniOCLCS.g:2997:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5474:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5475:2: ( rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:2997:2: ( rulePathNameCS )
-            // InternalMiniOCLCS.g:2998:3: rulePathNameCS
+            // InternalMiniOCLCS.g:5475:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5476:3: rulePathNameCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getExpNamePathNameCSParserRuleCall_0_0()); 
@@ -9705,17 +17739,17 @@
 
 
     // $ANTLR start "rule__NameExpCS__RoundedBracketsAssignment_1"
-    // InternalMiniOCLCS.g:3007:1: rule__NameExpCS__RoundedBracketsAssignment_1 : ( ruleRoundedBracketClauseCS ) ;
+    // InternalMiniOCLCS.g:5485:1: rule__NameExpCS__RoundedBracketsAssignment_1 : ( ruleRoundedBracketClauseCS ) ;
     public final void rule__NameExpCS__RoundedBracketsAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3011:1: ( ( ruleRoundedBracketClauseCS ) )
-            // InternalMiniOCLCS.g:3012:2: ( ruleRoundedBracketClauseCS )
+            // InternalMiniOCLCS.g:5489:1: ( ( ruleRoundedBracketClauseCS ) )
+            // InternalMiniOCLCS.g:5490:2: ( ruleRoundedBracketClauseCS )
             {
-            // InternalMiniOCLCS.g:3012:2: ( ruleRoundedBracketClauseCS )
-            // InternalMiniOCLCS.g:3013:3: ruleRoundedBracketClauseCS
+            // InternalMiniOCLCS.g:5490:2: ( ruleRoundedBracketClauseCS )
+            // InternalMiniOCLCS.g:5491:3: ruleRoundedBracketClauseCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNameExpCSAccess().getRoundedBracketsRoundedBracketClauseCSParserRuleCall_1_0()); 
@@ -9750,17 +17784,17 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__ArgsAssignment_2_0"
-    // InternalMiniOCLCS.g:3022:1: rule__RoundedBracketClauseCS__ArgsAssignment_2_0 : ( ruleExpCS ) ;
+    // InternalMiniOCLCS.g:5500:1: rule__RoundedBracketClauseCS__ArgsAssignment_2_0 : ( ruleExpCS ) ;
     public final void rule__RoundedBracketClauseCS__ArgsAssignment_2_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3026:1: ( ( ruleExpCS ) )
-            // InternalMiniOCLCS.g:3027:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5504:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5505:2: ( ruleExpCS )
             {
-            // InternalMiniOCLCS.g:3027:2: ( ruleExpCS )
-            // InternalMiniOCLCS.g:3028:3: ruleExpCS
+            // InternalMiniOCLCS.g:5505:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5506:3: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_0_0()); 
@@ -9795,17 +17829,17 @@
 
 
     // $ANTLR start "rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1"
-    // InternalMiniOCLCS.g:3037:1: rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 : ( ruleExpCS ) ;
+    // InternalMiniOCLCS.g:5515:1: rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1 : ( ruleExpCS ) ;
     public final void rule__RoundedBracketClauseCS__ArgsAssignment_2_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3041:1: ( ( ruleExpCS ) )
-            // InternalMiniOCLCS.g:3042:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5519:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5520:2: ( ruleExpCS )
             {
-            // InternalMiniOCLCS.g:3042:2: ( ruleExpCS )
-            // InternalMiniOCLCS.g:3043:3: ruleExpCS
+            // InternalMiniOCLCS.g:5520:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5521:3: ruleExpCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_1_1_0()); 
@@ -9840,17 +17874,17 @@
 
 
     // $ANTLR start "rule__IntLiteralExpCS__IntSymbolAssignment"
-    // InternalMiniOCLCS.g:3052:1: rule__IntLiteralExpCS__IntSymbolAssignment : ( RULE_INT ) ;
+    // InternalMiniOCLCS.g:5530:1: rule__IntLiteralExpCS__IntSymbolAssignment : ( RULE_INT ) ;
     public final void rule__IntLiteralExpCS__IntSymbolAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3056:1: ( ( RULE_INT ) )
-            // InternalMiniOCLCS.g:3057:2: ( RULE_INT )
+            // InternalMiniOCLCS.g:5534:1: ( ( RULE_INT ) )
+            // InternalMiniOCLCS.g:5535:2: ( RULE_INT )
             {
-            // InternalMiniOCLCS.g:3057:2: ( RULE_INT )
-            // InternalMiniOCLCS.g:3058:3: RULE_INT
+            // InternalMiniOCLCS.g:5535:2: ( RULE_INT )
+            // InternalMiniOCLCS.g:5536:3: RULE_INT
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIntLiteralExpCSAccess().getIntSymbolINTTerminalRuleCall_0()); 
@@ -9880,70 +17914,29 @@
     // $ANTLR end "rule__IntLiteralExpCS__IntSymbolAssignment"
 
 
-    // $ANTLR start "rule__StringLiteralExpCS__StringSymbolAssignment"
-    // InternalMiniOCLCS.g:3067:1: rule__StringLiteralExpCS__StringSymbolAssignment : ( RULE_STRING ) ;
-    public final void rule__StringLiteralExpCS__StringSymbolAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-        	
-        try {
-            // InternalMiniOCLCS.g:3071:1: ( ( RULE_STRING ) )
-            // InternalMiniOCLCS.g:3072:2: ( RULE_STRING )
-            {
-            // InternalMiniOCLCS.g:3072:2: ( RULE_STRING )
-            // InternalMiniOCLCS.g:3073:3: RULE_STRING
-            {
-            if ( state.backtracking==0 ) {
-               before(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0()); 
-            }
-            match(input,RULE_STRING,FOLLOW_2); if (state.failed) return ;
-            if ( state.backtracking==0 ) {
-               after(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0()); 
-            }
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__StringLiteralExpCS__StringSymbolAssignment"
-
-
     // $ANTLR start "rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0"
-    // InternalMiniOCLCS.g:3082:1: rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 : ( ( 'true' ) ) ;
+    // InternalMiniOCLCS.g:5545:1: rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0 : ( ( 'true' ) ) ;
     public final void rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3086:1: ( ( ( 'true' ) ) )
-            // InternalMiniOCLCS.g:3087:2: ( ( 'true' ) )
+            // InternalMiniOCLCS.g:5549:1: ( ( ( 'true' ) ) )
+            // InternalMiniOCLCS.g:5550:2: ( ( 'true' ) )
             {
-            // InternalMiniOCLCS.g:3087:2: ( ( 'true' ) )
-            // InternalMiniOCLCS.g:3088:3: ( 'true' )
+            // InternalMiniOCLCS.g:5550:2: ( ( 'true' ) )
+            // InternalMiniOCLCS.g:5551:3: ( 'true' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); 
             }
-            // InternalMiniOCLCS.g:3089:3: ( 'true' )
-            // InternalMiniOCLCS.g:3090:4: 'true'
+            // InternalMiniOCLCS.g:5552:3: ( 'true' )
+            // InternalMiniOCLCS.g:5553:4: 'true'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); 
             }
-            match(input,31,FOLLOW_2); if (state.failed) return ;
+            match(input,47,FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0()); 
             }
@@ -9974,29 +17967,29 @@
     // $ANTLR end "rule__BooleanLiteralExpCS__BoolSymbolAssignment_1_0"
 
 
-    // $ANTLR start "rule__PathNameCS__PathAssignment_0"
-    // InternalMiniOCLCS.g:3101:1: rule__PathNameCS__PathAssignment_0 : ( rulePathElementCS ) ;
-    public final void rule__PathNameCS__PathAssignment_0() throws RecognitionException {
+    // $ANTLR start "rule__CollectionLiteralExpCS__KindAssignment_0"
+    // InternalMiniOCLCS.g:5564:1: rule__CollectionLiteralExpCS__KindAssignment_0 : ( ruleCollectionKindCS ) ;
+    public final void rule__CollectionLiteralExpCS__KindAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3105:1: ( ( rulePathElementCS ) )
-            // InternalMiniOCLCS.g:3106:2: ( rulePathElementCS )
+            // InternalMiniOCLCS.g:5568:1: ( ( ruleCollectionKindCS ) )
+            // InternalMiniOCLCS.g:5569:2: ( ruleCollectionKindCS )
             {
-            // InternalMiniOCLCS.g:3106:2: ( rulePathElementCS )
-            // InternalMiniOCLCS.g:3107:3: rulePathElementCS
+            // InternalMiniOCLCS.g:5569:2: ( ruleCollectionKindCS )
+            // InternalMiniOCLCS.g:5570:3: ruleCollectionKindCS
             {
             if ( state.backtracking==0 ) {
-               before(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0()); 
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); 
             }
             pushFollow(FOLLOW_2);
-            rulePathElementCS();
+            ruleCollectionKindCS();
 
             state._fsp--;
             if (state.failed) return ;
             if ( state.backtracking==0 ) {
-               after(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0()); 
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0()); 
             }
 
             }
@@ -10016,21 +18009,467 @@
         }
         return ;
     }
-    // $ANTLR end "rule__PathNameCS__PathAssignment_0"
+    // $ANTLR end "rule__CollectionLiteralExpCS__KindAssignment_0"
+
+
+    // $ANTLR start "rule__CollectionLiteralExpCS__PartsAssignment_2"
+    // InternalMiniOCLCS.g:5579:1: rule__CollectionLiteralExpCS__PartsAssignment_2 : ( ruleCollectionLiteralPartCS ) ;
+    public final void rule__CollectionLiteralExpCS__PartsAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5583:1: ( ( ruleCollectionLiteralPartCS ) )
+            // InternalMiniOCLCS.g:5584:2: ( ruleCollectionLiteralPartCS )
+            {
+            // InternalMiniOCLCS.g:5584:2: ( ruleCollectionLiteralPartCS )
+            // InternalMiniOCLCS.g:5585:3: ruleCollectionLiteralPartCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleCollectionLiteralPartCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralExpCS__PartsAssignment_2"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__FirstAssignment_0"
+    // InternalMiniOCLCS.g:5594:1: rule__CollectionLiteralPartCS__FirstAssignment_0 : ( ruleExpCS ) ;
+    public final void rule__CollectionLiteralPartCS__FirstAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5598:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5599:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5599:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5600:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__FirstAssignment_0"
+
+
+    // $ANTLR start "rule__CollectionLiteralPartCS__LastAssignment_1_1"
+    // InternalMiniOCLCS.g:5609:1: rule__CollectionLiteralPartCS__LastAssignment_1_1 : ( ruleExpCS ) ;
+    public final void rule__CollectionLiteralPartCS__LastAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5613:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5614:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5614:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5615:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__CollectionLiteralPartCS__LastAssignment_1_1"
+
+
+    // $ANTLR start "rule__LetExpCS__LetVarsAssignment_1"
+    // InternalMiniOCLCS.g:5624:1: rule__LetExpCS__LetVarsAssignment_1 : ( ruleLetVarCS ) ;
+    public final void rule__LetExpCS__LetVarsAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5628:1: ( ( ruleLetVarCS ) )
+            // InternalMiniOCLCS.g:5629:2: ( ruleLetVarCS )
+            {
+            // InternalMiniOCLCS.g:5629:2: ( ruleLetVarCS )
+            // InternalMiniOCLCS.g:5630:3: ruleLetVarCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleLetVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__LetVarsAssignment_1"
+
+
+    // $ANTLR start "rule__LetExpCS__LetVarsAssignment_2_1"
+    // InternalMiniOCLCS.g:5639:1: rule__LetExpCS__LetVarsAssignment_2_1 : ( ruleLetVarCS ) ;
+    public final void rule__LetExpCS__LetVarsAssignment_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5643:1: ( ( ruleLetVarCS ) )
+            // InternalMiniOCLCS.g:5644:2: ( ruleLetVarCS )
+            {
+            // InternalMiniOCLCS.g:5644:2: ( ruleLetVarCS )
+            // InternalMiniOCLCS.g:5645:3: ruleLetVarCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleLetVarCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__LetVarsAssignment_2_1"
+
+
+    // $ANTLR start "rule__LetExpCS__InExpAssignment_4"
+    // InternalMiniOCLCS.g:5654:1: rule__LetExpCS__InExpAssignment_4 : ( ruleExpCS ) ;
+    public final void rule__LetExpCS__InExpAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5658:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5659:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5659:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5660:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetExpCS__InExpAssignment_4"
+
+
+    // $ANTLR start "rule__LetVarCS__NameAssignment_0"
+    // InternalMiniOCLCS.g:5669:1: rule__LetVarCS__NameAssignment_0 : ( RULE_ID ) ;
+    public final void rule__LetVarCS__NameAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5673:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5674:2: ( RULE_ID )
+            {
+            // InternalMiniOCLCS.g:5674:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5675:3: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__NameAssignment_0"
+
+
+    // $ANTLR start "rule__LetVarCS__TypeRefAssignment_1_1"
+    // InternalMiniOCLCS.g:5684:1: rule__LetVarCS__TypeRefAssignment_1_1 : ( rulePathNameCS ) ;
+    public final void rule__LetVarCS__TypeRefAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5688:1: ( ( rulePathNameCS ) )
+            // InternalMiniOCLCS.g:5689:2: ( rulePathNameCS )
+            {
+            // InternalMiniOCLCS.g:5689:2: ( rulePathNameCS )
+            // InternalMiniOCLCS.g:5690:3: rulePathNameCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            rulePathNameCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__TypeRefAssignment_1_1"
+
+
+    // $ANTLR start "rule__LetVarCS__InitExpAssignment_3"
+    // InternalMiniOCLCS.g:5699:1: rule__LetVarCS__InitExpAssignment_3 : ( ruleExpCS ) ;
+    public final void rule__LetVarCS__InitExpAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5703:1: ( ( ruleExpCS ) )
+            // InternalMiniOCLCS.g:5704:2: ( ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:5704:2: ( ruleExpCS )
+            // InternalMiniOCLCS.g:5705:3: ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__LetVarCS__InitExpAssignment_3"
+
+
+    // $ANTLR start "rule__PathNameCS__PathElementsAssignment_0"
+    // InternalMiniOCLCS.g:5714:1: rule__PathNameCS__PathElementsAssignment_0 : ( rulePathElementCS ) ;
+    public final void rule__PathNameCS__PathElementsAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+        	
+        try {
+            // InternalMiniOCLCS.g:5718:1: ( ( rulePathElementCS ) )
+            // InternalMiniOCLCS.g:5719:2: ( rulePathElementCS )
+            {
+            // InternalMiniOCLCS.g:5719:2: ( rulePathElementCS )
+            // InternalMiniOCLCS.g:5720:3: rulePathElementCS
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_2);
+            rulePathElementCS();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PathNameCS__PathElementsAssignment_0"
 
 
     // $ANTLR start "rule__PathNameCS__PathElementsAssignment_1_1"
-    // InternalMiniOCLCS.g:3116:1: rule__PathNameCS__PathElementsAssignment_1_1 : ( rulePathElementCS ) ;
+    // InternalMiniOCLCS.g:5729:1: rule__PathNameCS__PathElementsAssignment_1_1 : ( rulePathElementCS ) ;
     public final void rule__PathNameCS__PathElementsAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3120:1: ( ( rulePathElementCS ) )
-            // InternalMiniOCLCS.g:3121:2: ( rulePathElementCS )
+            // InternalMiniOCLCS.g:5733:1: ( ( rulePathElementCS ) )
+            // InternalMiniOCLCS.g:5734:2: ( rulePathElementCS )
             {
-            // InternalMiniOCLCS.g:3121:2: ( rulePathElementCS )
-            // InternalMiniOCLCS.g:3122:3: rulePathElementCS
+            // InternalMiniOCLCS.g:5734:2: ( rulePathElementCS )
+            // InternalMiniOCLCS.g:5735:3: rulePathElementCS
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_1_1_0()); 
@@ -10065,17 +18504,17 @@
 
 
     // $ANTLR start "rule__PathElementCS__ElementNameAssignment"
-    // InternalMiniOCLCS.g:3131:1: rule__PathElementCS__ElementNameAssignment : ( RULE_ID ) ;
+    // InternalMiniOCLCS.g:5744:1: rule__PathElementCS__ElementNameAssignment : ( RULE_ID ) ;
     public final void rule__PathElementCS__ElementNameAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
         	
         try {
-            // InternalMiniOCLCS.g:3135:1: ( ( RULE_ID ) )
-            // InternalMiniOCLCS.g:3136:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5748:1: ( ( RULE_ID ) )
+            // InternalMiniOCLCS.g:5749:2: ( RULE_ID )
             {
-            // InternalMiniOCLCS.g:3136:2: ( RULE_ID )
-            // InternalMiniOCLCS.g:3137:3: RULE_ID
+            // InternalMiniOCLCS.g:5749:2: ( RULE_ID )
+            // InternalMiniOCLCS.g:5750:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPathElementCSAccess().getElementNameIDTerminalRuleCall_0()); 
@@ -10104,37 +18543,112 @@
     }
     // $ANTLR end "rule__PathElementCS__ElementNameAssignment"
 
+    // $ANTLR start synpred29_InternalMiniOCLCS
+    public final void synpred29_InternalMiniOCLCS_fragment() throws RecognitionException {   
+        // InternalMiniOCLCS.g:2806:3: ( rule__LogicExpCS__Group_1__0 )
+        // InternalMiniOCLCS.g:2806:3: rule__LogicExpCS__Group_1__0
+        {
+        pushFollow(FOLLOW_2);
+        rule__LogicExpCS__Group_1__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred29_InternalMiniOCLCS
+
+    // $ANTLR start synpred30_InternalMiniOCLCS
+    public final void synpred30_InternalMiniOCLCS_fragment() throws RecognitionException {   
+        // InternalMiniOCLCS.g:2941:3: ( rule__CallExpCS__Group_1__0 )
+        // InternalMiniOCLCS.g:2941:3: rule__CallExpCS__Group_1__0
+        {
+        pushFollow(FOLLOW_2);
+        rule__CallExpCS__Group_1__0();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+    }
+    // $ANTLR end synpred30_InternalMiniOCLCS
+
     // Delegated rules
 
+    public final boolean synpred30_InternalMiniOCLCS() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred30_InternalMiniOCLCS_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 synpred29_InternalMiniOCLCS() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred29_InternalMiniOCLCS_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 static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
     public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000010010002L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000800100002L});
     public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x00000000000D0000L});
-    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000090002L});
-    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000120000L});
-    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000001240000L});
-    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000001200002L});
-    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000400000L});
-    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000004000010L});
-    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000000800L});
-    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000080008070L});
-    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000008000002L});
-    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000020040000L});
-    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000020000002L});
-    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000000001800L});
-    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000000001802L});
-    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000000006000L});
-    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000000006002L});
-    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000084008070L});
-    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000040000002L});
+    public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000002D00000L});
+    public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000002900002L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000001200000L});
+    public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000080407000L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000080007002L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000018000000L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000600000000040L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000400000000040L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000100000000L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000200000010L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000862000080850L});
+    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000400000000L});
+    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000400000002L});
+    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000001000400000L});
+    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000001000000002L});
+    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000000018000L});
+    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000000018002L});
+    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000000060000L});
+    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000000000060002L});
+    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000014000000010L});
+    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000000200000000L});
+    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000000004008000L});
+    public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000862200080850L});
+    public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000800000080000L});
+    public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x0000862000480850L});
+    public static final BitSet FOLLOW_40 = new BitSet(new long[]{0x0000862000080852L});
+    public static final BitSet FOLLOW_41 = new BitSet(new long[]{0x0000080400000000L});
+    public static final BitSet FOLLOW_42 = new BitSet(new long[]{0x0000100000000000L});
+    public static final BitSet FOLLOW_43 = new BitSet(new long[]{0x0000100000000002L});
 
 }
\ No newline at end of file
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ui/src-gen/org/eclipse/qvtd/doc/ui/contentassist/AbstractMiniOCLCSProposalProvider.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ui/src-gen/org/eclipse/qvtd/doc/ui/contentassist/AbstractMiniOCLCSProposalProvider.java
index c342c38..5dbad55 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ui/src-gen/org/eclipse/qvtd/doc/ui/contentassist/AbstractMiniOCLCSProposalProvider.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext.ui/src-gen/org/eclipse/qvtd/doc/ui/contentassist/AbstractMiniOCLCSProposalProvider.java
@@ -29,7 +29,7 @@
 	public void completePackageCS_Packages(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completePackageCS_Classes(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completePackageCS_Classifiers(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeClassCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -44,12 +44,36 @@
 	public void completeClassCS_Operations(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completeDatatypeCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDatatypeCS_TypeName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
 	public void completePropertyCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completePropertyCS_TypeRef(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
+	public void completePropertyCS_Multiplicity(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeMultiplicityCS_Opt(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeMultiplicityCS_Mult(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeMultiplicityCS_Lower(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeMultiplicityCS_UpperInt(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeMultiplicityCS_UpperMult(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void completeOperationCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
@@ -88,7 +112,37 @@
 		// subclasses may override
 		// subclasses may override
 	}
-	public void completeCallExpCS_NameExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeCallExpCS_NavExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCollectExpCS_ItVar(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCollectExpCS_Exp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIteratorVarCS_ItName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIteratorVarCS_ItType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIterateExpCS_ItVar(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIterateExpCS_AccVar(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeIterateExpCS_Exp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAccVarCS_AccName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAccVarCS_AccType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAccVarCS_AccInitExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completeNameExpCS_ExpName(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -103,13 +157,34 @@
 	public void completeIntLiteralExpCS_IntSymbol(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
-	public void completeStringLiteralExpCS_StringSymbol(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
-		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
-	}
 	public void completeBooleanLiteralExpCS_BoolSymbol(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void completePathNameCS_Path(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void completeCollectionLiteralExpCS_Kind(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCollectionLiteralExpCS_Parts(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCollectionLiteralPartCS_First(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeCollectionLiteralPartCS_Last(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLetExpCS_LetVars(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLetExpCS_InExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLetVarCS_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLetVarCS_TypeRef(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeLetVarCS_InitExp(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
 	}
 	public void completePathNameCS_PathElements(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
@@ -125,12 +200,21 @@
 	public void complete_PackageCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_ClassifierCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_ClassCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_DatatypeCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_PropertyCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_MultiplicityCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_OperationCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
@@ -155,6 +239,27 @@
 	public void complete_PrimaryExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_SelfExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_NavigationExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_LoopExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CollectExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_IteratorVarCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_IterateExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_AccVarCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_NameExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
@@ -167,10 +272,25 @@
 	public void complete_IntLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_StringLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_BooleanLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
-	public void complete_BooleanLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+	public void complete_NullLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CollectionKindCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CollectionLiteralExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_CollectionLiteralPartCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_LetExpCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_LetVarCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
 	public void complete_PathNameCS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/.gitignore b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/.gitignore
index ae3c172..177151f 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/.gitignore
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/.gitignore
@@ -1 +1,2 @@
 /bin/
+/.antlr-generator-3.2.0-patch.jar
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.ecore b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.ecore
index 9098ce4..f354c3b 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.ecore
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.ecore
@@ -12,11 +12,13 @@
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="packages" upperBound="-1"
         eType="#//PackageCS" containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="classes" upperBound="-1"
-        eType="#//ClassCS" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="classifiers" upperBound="-1"
+        eType="#//ClassifierCS" containment="true"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="ClassCS" eSuperTypes="#//CSTrace">
+  <eClassifiers xsi:type="ecore:EClass" name="ClassifierCS" eSuperTypes="#//CSTrace">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ClassCS" eSuperTypes="#//ClassifierCS">
     <eStructuralFeatures xsi:type="ecore:EReference" name="extends" eType="#//PathNameCS"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="properties" upperBound="-1"
@@ -24,10 +26,22 @@
     <eStructuralFeatures xsi:type="ecore:EReference" name="operations" upperBound="-1"
         eType="#//OperationCS" containment="true"/>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DatatypeCS" eSuperTypes="#//ClassifierCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="typeName" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PropertyCS" eSuperTypes="#//CSTrace">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//PathNameCS"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="multiplicity" eType="#//MultiplicityCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MultiplicityCS" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="opt" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="mult" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="lower" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperInt" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="upperMult" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EBoolean"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="OperationCS" eSuperTypes="#//CSTrace">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
@@ -63,11 +77,35 @@
   <eClassifiers xsi:type="ecore:EClass" name="CallExpCS" eSuperTypes="#//LogicExpCS">
     <eStructuralFeatures xsi:type="ecore:EReference" name="source" eType="#//CallExpCS"
         containment="true"/>
-    <eStructuralFeatures xsi:type="ecore:EReference" name="nameExp" eType="#//NameExpCS"
+    <eStructuralFeatures xsi:type="ecore:EReference" name="navExp" eType="#//NavigationExpCS"
         containment="true"/>
   </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="PrimaryExpCS" eSuperTypes="#//CallExpCS"/>
-  <eClassifiers xsi:type="ecore:EClass" name="NameExpCS" eSuperTypes="#//PrimaryExpCS">
+  <eClassifiers xsi:type="ecore:EClass" name="SelfExpCS" eSuperTypes="#//PrimaryExpCS"/>
+  <eClassifiers xsi:type="ecore:EClass" name="NavigationExpCS" eSuperTypes="#//CSTrace"/>
+  <eClassifiers xsi:type="ecore:EClass" name="LoopExpCS" eSuperTypes="#//NavigationExpCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="itVar" eType="#//IteratorVarCS"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="exp" eType="#//ExpCS" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectExpCS" eSuperTypes="#//LoopExpCS"/>
+  <eClassifiers xsi:type="ecore:EClass" name="IteratorVarCS" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="itName" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="itType" eType="#//PathNameCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="IterateExpCS" eSuperTypes="#//LoopExpCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="accVar" eType="#//AccVarCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="AccVarCS" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="accName" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="accType" eType="#//PathNameCS"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="accInitExp" eType="#//ExpCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="NameExpCS" eSuperTypes="#//PrimaryExpCS #//NavigationExpCS">
     <eStructuralFeatures xsi:type="ecore:EReference" name="expName" eType="#//PathNameCS"
         containment="true"/>
     <eStructuralFeatures xsi:type="ecore:EReference" name="roundedBrackets" eType="#//RoundedBracketClauseCS"
@@ -81,13 +119,36 @@
   <eClassifiers xsi:type="ecore:EClass" name="IntLiteralExpCS" eSuperTypes="#//LiteralExpCS">
     <eStructuralFeatures xsi:type="ecore:EAttribute" name="intSymbol" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EInt"/>
   </eClassifiers>
-  <eClassifiers xsi:type="ecore:EClass" name="StringLiteralExpCS" eSuperTypes="#//LiteralExpCS">
-    <eStructuralFeatures xsi:type="ecore:EAttribute" name="stringSymbol" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
-  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="BooleanLiteralExpCS" eSuperTypes="#//LiteralExpCS"/>
-  <eClassifiers xsi:type="ecore:EClass" name="PathNameCS" eSuperTypes="#//CSTrace">
-    <eStructuralFeatures xsi:type="ecore:EReference" name="path" upperBound="-1" eType="#//PathElementCS"
+  <eClassifiers xsi:type="ecore:EClass" name="NullLiteralExpCS" eSuperTypes="#//LiteralExpCS"/>
+  <eClassifiers xsi:type="ecore:EEnum" name="CollectionKindCS">
+    <eLiterals name="Collection" literal="Collection"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralExpCS" eSuperTypes="#//LiteralExpCS">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="kind" eType="#//CollectionKindCS"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="parts" upperBound="-1"
+        eType="#//CollectionLiteralPartCS" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="CollectionLiteralPartCS" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="first" eType="#//ExpCS"
         containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="last" eType="#//ExpCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LetExpCS" eSuperTypes="#//PrimaryExpCS">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="letVars" upperBound="-1"
+        eType="#//LetVarCS" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="inExp" eType="#//ExpCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="LetVarCS" eSuperTypes="#//CSTrace">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType ../../../org.eclipse.emf.ecore/model/Ecore.ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="typeRef" eType="#//PathNameCS"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="initExp" eType="#//ExpCS"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PathNameCS" eSuperTypes="#//CSTrace">
     <eStructuralFeatures xsi:type="ecore:EReference" name="pathElements" upperBound="-1"
         eType="#//PathElementCS" containment="true"/>
   </eClassifiers>
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.genmodel b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.genmodel
index 95eb35d..5c4ef90 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.genmodel
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/model/generated/MiniOCLCS.genmodel
@@ -6,6 +6,9 @@
     complianceLevel="8.0" copyrightFields="false" runtimeVersion="2.12" usedGenPackages="../../../org.eclipse.emf.ecore/model/Ecore.genmodel#//ecore ../../../org.eclipse.qvtd.doc.miniocl/model/MiniOCL.genmodel#//miniocl">
   <genPackages prefix="Minioclcs" basePackage="org.eclipse.qvtd.doc" disposableProviderFactory="true"
       fileExtensions="mocl" ecorePackage="MiniOCLCS.ecore#/">
+    <genEnums typeSafeEnumCompatible="false" ecoreEnum="MiniOCLCS.ecore#//CollectionKindCS">
+      <genEnumLiterals ecoreEnumLiteral="MiniOCLCS.ecore#//CollectionKindCS/Collection"/>
+    </genEnums>
     <genClasses ecoreClass="MiniOCLCS.ecore#//RootCS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//RootCS/packages"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//RootCS/contraints"/>
@@ -13,17 +16,30 @@
     <genClasses ecoreClass="MiniOCLCS.ecore#//PackageCS">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//PackageCS/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PackageCS/packages"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PackageCS/classes"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PackageCS/classifiers"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//ClassifierCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//ClassifierCS/name"/>
     </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//ClassCS">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//ClassCS/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//ClassCS/extends"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//ClassCS/properties"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//ClassCS/operations"/>
     </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//DatatypeCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//DatatypeCS/typeName"/>
+    </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//PropertyCS">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//PropertyCS/name"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PropertyCS/typeRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PropertyCS/multiplicity"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//MultiplicityCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//MultiplicityCS/opt"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//MultiplicityCS/mult"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//MultiplicityCS/lower"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//MultiplicityCS/upperInt"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//MultiplicityCS/upperMult"/>
     </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//OperationCS">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//OperationCS/name"/>
@@ -50,9 +66,28 @@
     </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//CallExpCS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CallExpCS/source"/>
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CallExpCS/nameExp"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CallExpCS/navExp"/>
     </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//PrimaryExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//SelfExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//NavigationExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//LoopExpCS">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LoopExpCS/itVar"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LoopExpCS/exp"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//CollectExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//IteratorVarCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//IteratorVarCS/itName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//IteratorVarCS/itType"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//IterateExpCS">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//IterateExpCS/accVar"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//AccVarCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//AccVarCS/accName"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//AccVarCS/accType"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//AccVarCS/accInitExp"/>
+    </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//NameExpCS">
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//NameExpCS/expName"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//NameExpCS/roundedBrackets"/>
@@ -64,12 +99,26 @@
     <genClasses ecoreClass="MiniOCLCS.ecore#//IntLiteralExpCS">
       <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//IntLiteralExpCS/intSymbol"/>
     </genClasses>
-    <genClasses ecoreClass="MiniOCLCS.ecore#//StringLiteralExpCS">
-      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//StringLiteralExpCS/stringSymbol"/>
-    </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//BooleanLiteralExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//NullLiteralExpCS"/>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//CollectionLiteralExpCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//CollectionLiteralExpCS/kind"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CollectionLiteralExpCS/parts"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//CollectionLiteralPartCS">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CollectionLiteralPartCS/first"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//CollectionLiteralPartCS/last"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//LetExpCS">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LetExpCS/letVars"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LetExpCS/inExp"/>
+    </genClasses>
+    <genClasses ecoreClass="MiniOCLCS.ecore#//LetVarCS">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute MiniOCLCS.ecore#//LetVarCS/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LetVarCS/typeRef"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//LetVarCS/initExp"/>
+    </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//PathNameCS">
-      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PathNameCS/path"/>
       <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference MiniOCLCS.ecore#//PathNameCS/pathElements"/>
     </genClasses>
     <genClasses ecoreClass="MiniOCLCS.ecore#//PathElementCS">
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/AbstractMiniOCLCSRuntimeModule.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/AbstractMiniOCLCSRuntimeModule.java
index a0d8621..a33caec 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/AbstractMiniOCLCSRuntimeModule.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/AbstractMiniOCLCSRuntimeModule.java
@@ -3,10 +3,8 @@
  */
 package org.eclipse.qvtd.doc;
 
-import com.google.inject.Binder;
-import com.google.inject.Provider;
-import com.google.inject.name.Names;
 import java.util.Properties;
+
 import org.eclipse.qvtd.doc.generator.MiniOCLCSGenerator;
 import org.eclipse.qvtd.doc.parser.antlr.MiniOCLCSAntlrTokenFileProvider;
 import org.eclipse.qvtd.doc.parser.antlr.MiniOCLCSParser;
@@ -50,6 +48,10 @@
 import org.eclipse.xtext.service.DefaultRuntimeModule;
 import org.eclipse.xtext.service.SingletonBinding;
 
+import com.google.inject.Binder;
+import com.google.inject.Provider;
+import com.google.inject.name.Names;
+
 /**
  * Manual modifications go to {@link MiniOCLCSRuntimeModule}.
  */
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCS.xtextbin b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCS.xtextbin
index 268878f..ffad2c9 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCS.xtextbin
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCS.xtextbin
Binary files differ
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCSStandaloneSetupGenerated.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCSStandaloneSetupGenerated.java
index de01d21..4197261 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCSStandaloneSetupGenerated.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/MiniOCLCSStandaloneSetupGenerated.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc;
 
-import com.google.inject.Guice;
-import com.google.inject.Injector;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
@@ -13,6 +11,9 @@
 import org.eclipse.xtext.resource.IResourceFactory;
 import org.eclipse.xtext.resource.IResourceServiceProvider;
 
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
 @SuppressWarnings("all")
 public class MiniOCLCSStandaloneSetupGenerated implements ISetup {
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/AccVarCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/AccVarCS.java
new file mode 100644
index 0000000..fb64c8f
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/AccVarCS.java
@@ -0,0 +1,104 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Acc Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccName <em>Acc Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccType <em>Acc Type</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccInitExp <em>Acc Init Exp</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getAccVarCS()
+ * @model
+ * @generated
+ */
+public interface AccVarCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>Acc Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acc Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Acc Name</em>' attribute.
+	 * @see #setAccName(String)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getAccVarCS_AccName()
+	 * @model
+	 * @generated
+	 */
+  String getAccName();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccName <em>Acc Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Acc Name</em>' attribute.
+	 * @see #getAccName()
+	 * @generated
+	 */
+  void setAccName(String value);
+
+  /**
+	 * Returns the value of the '<em><b>Acc Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acc Type</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Acc Type</em>' containment reference.
+	 * @see #setAccType(PathNameCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getAccVarCS_AccType()
+	 * @model containment="true"
+	 * @generated
+	 */
+  PathNameCS getAccType();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccType <em>Acc Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Acc Type</em>' containment reference.
+	 * @see #getAccType()
+	 * @generated
+	 */
+  void setAccType(PathNameCS value);
+
+  /**
+	 * Returns the value of the '<em><b>Acc Init Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acc Init Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Acc Init Exp</em>' containment reference.
+	 * @see #setAccInitExp(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getAccVarCS_AccInitExp()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getAccInitExp();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccInitExp <em>Acc Init Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Acc Init Exp</em>' containment reference.
+	 * @see #getAccInitExp()
+	 * @generated
+	 */
+  void setAccInitExp(ExpCS value);
+
+} // AccVarCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CSTrace.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CSTrace.java
index b1a6de5..2c4fc41 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CSTrace.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CSTrace.java
@@ -4,7 +4,6 @@
 package org.eclipse.qvtd.doc.minioclcs;
 
 import org.eclipse.emf.ecore.EObject;
-
 import org.eclipse.qvtd.doc.miniocl.Element;
 
 /**
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CallExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CallExpCS.java
index 64ccc72..e539240 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CallExpCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CallExpCS.java
@@ -14,7 +14,7 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getSource <em>Source</em>}</li>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNameExp <em>Name Exp</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNavExp <em>Nav Exp</em>}</li>
  * </ul>
  *
  * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCallExpCS()
@@ -50,29 +50,29 @@
   void setSource(CallExpCS value);
 
   /**
-	 * Returns the value of the '<em><b>Name Exp</b></em>' containment reference.
+	 * Returns the value of the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <p>
-   * If the meaning of the '<em>Name Exp</em>' containment reference isn't clear,
+   * If the meaning of the '<em>Nav Exp</em>' containment reference isn't clear,
    * there really should be more of a description here...
    * </p>
    * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name Exp</em>' containment reference.
-	 * @see #setNameExp(NameExpCS)
-	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCallExpCS_NameExp()
+	 * @return the value of the '<em>Nav Exp</em>' containment reference.
+	 * @see #setNavExp(NavigationExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCallExpCS_NavExp()
 	 * @model containment="true"
 	 * @generated
 	 */
-  NameExpCS getNameExp();
+  NavigationExpCS getNavExp();
 
   /**
-	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNameExp <em>Name Exp</em>}' containment reference.
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNavExp <em>Nav Exp</em>}' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name Exp</em>' containment reference.
-	 * @see #getNameExp()
+	 * @param value the new value of the '<em>Nav Exp</em>' containment reference.
+	 * @see #getNavExp()
 	 * @generated
 	 */
-  void setNameExp(NameExpCS value);
+  void setNavExp(NavigationExpCS value);
 
 } // CallExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassCS.java
index e85748a..0a6463c 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Class CS</b></em>'.
@@ -16,7 +14,6 @@
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getExtends <em>Extends</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getOperations <em>Operations</em>}</li>
@@ -26,35 +23,9 @@
  * @model
  * @generated
  */
-public interface ClassCS extends CSTrace
+public interface ClassCS extends ClassifierCS
 {
   /**
-	 * Returns the value of the '<em><b>Name</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Name</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-	 * @return the value of the '<em>Name</em>' attribute.
-	 * @see #setName(String)
-	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getClassCS_Name()
-	 * @model
-	 * @generated
-	 */
-  String getName();
-
-  /**
-	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getName <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>Name</em>' attribute.
-	 * @see #getName()
-	 * @generated
-	 */
-  void setName(String value);
-
-  /**
 	 * Returns the value of the '<em><b>Extends</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <p>
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassifierCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassifierCS.java
new file mode 100644
index 0000000..e2411e8
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ClassifierCS.java
@@ -0,0 +1,50 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Classifier CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getClassifierCS()
+ * @model
+ * @generated
+ */
+public interface ClassifierCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getClassifierCS_Name()
+	 * @model
+	 * @generated
+	 */
+  String getName();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+  void setName(String value);
+
+} // ClassifierCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectExpCS.java
new file mode 100644
index 0000000..7c95ac6
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectExpCS.java
@@ -0,0 +1,19 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Collect Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectExpCS()
+ * @model
+ * @generated
+ */
+public interface CollectExpCS extends LoopExpCS
+{
+} // CollectExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionKindCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionKindCS.java
new file mode 100644
index 0000000..e9d9770
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionKindCS.java
@@ -0,0 +1,197 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.List;
+
+import org.eclipse.emf.common.util.Enumerator;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the literals of the enumeration '<em><b>Collection Kind CS</b></em>',
+ * and utility methods for working with them.
+ * <!-- end-user-doc -->
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionKindCS()
+ * @model
+ * @generated
+ */
+public enum CollectionKindCS implements Enumerator
+{
+  /**
+	 * The '<em><b>Collection</b></em>' literal object.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #COLLECTION_VALUE
+	 * @generated
+	 * @ordered
+	 */
+  COLLECTION(0, "Collection", "Collection");
+
+  /**
+	 * The '<em><b>Collection</b></em>' literal value.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of '<em><b>Collection</b></em>' literal object isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @see #COLLECTION
+	 * @model name="Collection"
+	 * @generated
+	 * @ordered
+	 */
+  public static final int COLLECTION_VALUE = 0;
+
+  /**
+	 * An array of all the '<em><b>Collection Kind CS</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private static final CollectionKindCS[] VALUES_ARRAY =
+    new CollectionKindCS[] {
+			COLLECTION,
+		};
+
+  /**
+	 * A public read-only list of all the '<em><b>Collection Kind CS</b></em>' enumerators.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public static final List<CollectionKindCS> VALUES = Collections.unmodifiableList(Arrays.asList(VALUES_ARRAY));
+
+  /**
+	 * Returns the '<em><b>Collection Kind CS</b></em>' literal with the specified literal value.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param literal the literal.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+  public static CollectionKindCS get(String literal)
+  {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CollectionKindCS result = VALUES_ARRAY[i];
+			if (result.toString().equals(literal)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+  /**
+	 * Returns the '<em><b>Collection Kind CS</b></em>' literal with the specified name.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param name the name.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+  public static CollectionKindCS getByName(String name)
+  {
+		for (int i = 0; i < VALUES_ARRAY.length; ++i) {
+			CollectionKindCS result = VALUES_ARRAY[i];
+			if (result.getName().equals(name)) {
+				return result;
+			}
+		}
+		return null;
+	}
+
+  /**
+	 * Returns the '<em><b>Collection Kind CS</b></em>' literal with the specified integer value.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the integer value.
+	 * @return the matching enumerator or <code>null</code>.
+	 * @generated
+	 */
+  public static CollectionKindCS get(int value)
+  {
+		switch (value) {
+			case COLLECTION_VALUE: return COLLECTION;
+		}
+		return null;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private final int value;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private final String name;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private final String literal;
+
+  /**
+	 * Only this class can construct instances.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private CollectionKindCS(int value, String name, String literal)
+  {
+		this.value = value;
+		this.name = name;
+		this.literal = literal;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public int getValue()
+  {
+	  return value;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getName()
+  {
+	  return name;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getLiteral()
+  {
+	  return literal;
+	}
+
+  /**
+	 * Returns the literal value of the enumerator, which is its string representation.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		return literal;
+	}
+  
+} //CollectionKindCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralExpCS.java
new file mode 100644
index 0000000..4f17ab6
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralExpCS.java
@@ -0,0 +1,72 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Collection Literal Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getKind <em>Kind</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getParts <em>Parts</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralExpCS()
+ * @model
+ * @generated
+ */
+public interface CollectionLiteralExpCS extends LiteralExpCS
+{
+  /**
+	 * Returns the value of the '<em><b>Kind</b></em>' attribute.
+	 * The literals are from the enumeration {@link org.eclipse.qvtd.doc.minioclcs.CollectionKindCS}.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Kind</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Kind</em>' attribute.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionKindCS
+	 * @see #setKind(CollectionKindCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralExpCS_Kind()
+	 * @model
+	 * @generated
+	 */
+  CollectionKindCS getKind();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getKind <em>Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Kind</em>' attribute.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionKindCS
+	 * @see #getKind()
+	 * @generated
+	 */
+  void setKind(CollectionKindCS value);
+
+  /**
+	 * Returns the value of the '<em><b>Parts</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS}.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Parts</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Parts</em>' containment reference list.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralExpCS_Parts()
+	 * @model containment="true"
+	 * @generated
+	 */
+  EList<CollectionLiteralPartCS> getParts();
+
+} // CollectionLiteralExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralPartCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralPartCS.java
new file mode 100644
index 0000000..e37c835
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/CollectionLiteralPartCS.java
@@ -0,0 +1,77 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Collection Literal Part CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getFirst <em>First</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getLast <em>Last</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralPartCS()
+ * @model
+ * @generated
+ */
+public interface CollectionLiteralPartCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>First</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>First</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>First</em>' containment reference.
+	 * @see #setFirst(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralPartCS_First()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getFirst();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getFirst <em>First</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>First</em>' containment reference.
+	 * @see #getFirst()
+	 * @generated
+	 */
+  void setFirst(ExpCS value);
+
+  /**
+	 * Returns the value of the '<em><b>Last</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Last</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Last</em>' containment reference.
+	 * @see #setLast(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getCollectionLiteralPartCS_Last()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getLast();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getLast <em>Last</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Last</em>' containment reference.
+	 * @see #getLast()
+	 * @generated
+	 */
+  void setLast(ExpCS value);
+
+} // CollectionLiteralPartCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ConstraintsDefCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ConstraintsDefCS.java
index 55a5a61..0c0daa4 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ConstraintsDefCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ConstraintsDefCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Constraints Def CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/DatatypeCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/DatatypeCS.java
new file mode 100644
index 0000000..1692d2d
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/DatatypeCS.java
@@ -0,0 +1,51 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Datatype CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.DatatypeCS#getTypeName <em>Type Name</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getDatatypeCS()
+ * @model
+ * @generated
+ */
+public interface DatatypeCS extends ClassifierCS
+{
+  /**
+	 * Returns the value of the '<em><b>Type Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type Name</em>' attribute.
+	 * @see #setTypeName(String)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getDatatypeCS_TypeName()
+	 * @model
+	 * @generated
+	 */
+  String getTypeName();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.DatatypeCS#getTypeName <em>Type Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type Name</em>' attribute.
+	 * @see #getTypeName()
+	 * @generated
+	 */
+  void setTypeName(String value);
+
+} // DatatypeCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ExpCS.java
index 83a9bff..74e0b0c 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ExpCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ExpCS.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc.minioclcs;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Exp CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/InvariantCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/InvariantCS.java
index 61468b8..e696461 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/InvariantCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/InvariantCS.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc.minioclcs;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Invariant CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IterateExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IterateExpCS.java
new file mode 100644
index 0000000..70419ea
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IterateExpCS.java
@@ -0,0 +1,51 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Iterate Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.IterateExpCS#getAccVar <em>Acc Var</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getIterateExpCS()
+ * @model
+ * @generated
+ */
+public interface IterateExpCS extends LoopExpCS
+{
+  /**
+	 * Returns the value of the '<em><b>Acc Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Acc Var</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Acc Var</em>' containment reference.
+	 * @see #setAccVar(AccVarCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getIterateExpCS_AccVar()
+	 * @model containment="true"
+	 * @generated
+	 */
+  AccVarCS getAccVar();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.IterateExpCS#getAccVar <em>Acc Var</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Acc Var</em>' containment reference.
+	 * @see #getAccVar()
+	 * @generated
+	 */
+  void setAccVar(AccVarCS value);
+
+} // IterateExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IteratorVarCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IteratorVarCS.java
new file mode 100644
index 0000000..8e4816b
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/IteratorVarCS.java
@@ -0,0 +1,77 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Iterator Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItName <em>It Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItType <em>It Type</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getIteratorVarCS()
+ * @model
+ * @generated
+ */
+public interface IteratorVarCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>It Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>It Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>It Name</em>' attribute.
+	 * @see #setItName(String)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getIteratorVarCS_ItName()
+	 * @model
+	 * @generated
+	 */
+  String getItName();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItName <em>It Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>It Name</em>' attribute.
+	 * @see #getItName()
+	 * @generated
+	 */
+  void setItName(String value);
+
+  /**
+	 * Returns the value of the '<em><b>It Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>It Type</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>It Type</em>' containment reference.
+	 * @see #setItType(PathNameCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getIteratorVarCS_ItType()
+	 * @model containment="true"
+	 * @generated
+	 */
+  PathNameCS getItType();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItType <em>It Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>It Type</em>' containment reference.
+	 * @see #getItType()
+	 * @generated
+	 */
+  void setItType(PathNameCS value);
+
+} // IteratorVarCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetExpCS.java
new file mode 100644
index 0000000..84529df
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetExpCS.java
@@ -0,0 +1,69 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Let Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS#getLetVars <em>Let Vars</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS#getInExp <em>In Exp</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetExpCS()
+ * @model
+ * @generated
+ */
+public interface LetExpCS extends PrimaryExpCS
+{
+  /**
+	 * Returns the value of the '<em><b>Let Vars</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.LetVarCS}.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Let Vars</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Let Vars</em>' containment reference list.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetExpCS_LetVars()
+	 * @model containment="true"
+	 * @generated
+	 */
+  EList<LetVarCS> getLetVars();
+
+  /**
+	 * Returns the value of the '<em><b>In Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>In Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>In Exp</em>' containment reference.
+	 * @see #setInExp(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetExpCS_InExp()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getInExp();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS#getInExp <em>In Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>In Exp</em>' containment reference.
+	 * @see #getInExp()
+	 * @generated
+	 */
+  void setInExp(ExpCS value);
+
+} // LetExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetVarCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetVarCS.java
new file mode 100644
index 0000000..7181866
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LetVarCS.java
@@ -0,0 +1,104 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Let Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getTypeRef <em>Type Ref</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getInitExp <em>Init Exp</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetVarCS()
+ * @model
+ * @generated
+ */
+public interface LetVarCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Name</em>' attribute.
+	 * @see #setName(String)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetVarCS_Name()
+	 * @model
+	 * @generated
+	 */
+  String getName();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getName <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Name</em>' attribute.
+	 * @see #getName()
+	 * @generated
+	 */
+  void setName(String value);
+
+  /**
+	 * Returns the value of the '<em><b>Type Ref</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type Ref</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Type Ref</em>' containment reference.
+	 * @see #setTypeRef(PathNameCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetVarCS_TypeRef()
+	 * @model containment="true"
+	 * @generated
+	 */
+  PathNameCS getTypeRef();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getTypeRef <em>Type Ref</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Type Ref</em>' containment reference.
+	 * @see #getTypeRef()
+	 * @generated
+	 */
+  void setTypeRef(PathNameCS value);
+
+  /**
+	 * Returns the value of the '<em><b>Init Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Init Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Init Exp</em>' containment reference.
+	 * @see #setInitExp(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLetVarCS_InitExp()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getInitExp();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getInitExp <em>Init Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Init Exp</em>' containment reference.
+	 * @see #getInitExp()
+	 * @generated
+	 */
+  void setInitExp(ExpCS value);
+
+} // LetVarCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LoopExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LoopExpCS.java
new file mode 100644
index 0000000..45f69b4
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/LoopExpCS.java
@@ -0,0 +1,78 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Loop Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getItVar <em>It Var</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getExp <em>Exp</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLoopExpCS()
+ * @model
+ * @generated
+ */
+public interface LoopExpCS extends NavigationExpCS
+{
+  /**
+	 * Returns the value of the '<em><b>It Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>It Var</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>It Var</em>' containment reference.
+	 * @see #setItVar(IteratorVarCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLoopExpCS_ItVar()
+	 * @model containment="true"
+	 * @generated
+	 */
+  IteratorVarCS getItVar();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getItVar <em>It Var</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>It Var</em>' containment reference.
+	 * @see #getItVar()
+	 * @generated
+	 */
+  void setItVar(IteratorVarCS value);
+
+  /**
+	 * Returns the value of the '<em><b>Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Exp</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Exp</em>' containment reference.
+	 * @see #setExp(ExpCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getLoopExpCS_Exp()
+	 * @model containment="true"
+	 * @generated
+	 */
+  ExpCS getExp();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getExp <em>Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Exp</em>' containment reference.
+	 * @see #getExp()
+	 * @generated
+	 */
+  void setExp(ExpCS value);
+
+} // LoopExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsFactory.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsFactory.java
index 7b7c271..52777c8 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsFactory.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsFactory.java
@@ -42,6 +42,15 @@
   PackageCS createPackageCS();
 
   /**
+	 * Returns a new object of class '<em>Classifier CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Classifier CS</em>'.
+	 * @generated
+	 */
+  ClassifierCS createClassifierCS();
+
+  /**
 	 * Returns a new object of class '<em>Class CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -51,6 +60,15 @@
   ClassCS createClassCS();
 
   /**
+	 * Returns a new object of class '<em>Datatype CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Datatype CS</em>'.
+	 * @generated
+	 */
+  DatatypeCS createDatatypeCS();
+
+  /**
 	 * Returns a new object of class '<em>Property CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -60,6 +78,15 @@
   PropertyCS createPropertyCS();
 
   /**
+	 * Returns a new object of class '<em>Multiplicity CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Multiplicity CS</em>'.
+	 * @generated
+	 */
+  MultiplicityCS createMultiplicityCS();
+
+  /**
 	 * Returns a new object of class '<em>Operation CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -132,6 +159,69 @@
   PrimaryExpCS createPrimaryExpCS();
 
   /**
+	 * Returns a new object of class '<em>Self Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Self Exp CS</em>'.
+	 * @generated
+	 */
+  SelfExpCS createSelfExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Navigation Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Navigation Exp CS</em>'.
+	 * @generated
+	 */
+  NavigationExpCS createNavigationExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Loop Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Loop Exp CS</em>'.
+	 * @generated
+	 */
+  LoopExpCS createLoopExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Collect Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Collect Exp CS</em>'.
+	 * @generated
+	 */
+  CollectExpCS createCollectExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Iterator Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Iterator Var CS</em>'.
+	 * @generated
+	 */
+  IteratorVarCS createIteratorVarCS();
+
+  /**
+	 * Returns a new object of class '<em>Iterate Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Iterate Exp CS</em>'.
+	 * @generated
+	 */
+  IterateExpCS createIterateExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Acc Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Acc Var CS</em>'.
+	 * @generated
+	 */
+  AccVarCS createAccVarCS();
+
+  /**
 	 * Returns a new object of class '<em>Name Exp CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -168,15 +258,6 @@
   IntLiteralExpCS createIntLiteralExpCS();
 
   /**
-	 * Returns a new object of class '<em>String Literal Exp CS</em>'.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @return a new object of class '<em>String Literal Exp CS</em>'.
-	 * @generated
-	 */
-  StringLiteralExpCS createStringLiteralExpCS();
-
-  /**
 	 * Returns a new object of class '<em>Boolean Literal Exp CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -186,6 +267,51 @@
   BooleanLiteralExpCS createBooleanLiteralExpCS();
 
   /**
+	 * Returns a new object of class '<em>Null Literal Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Null Literal Exp CS</em>'.
+	 * @generated
+	 */
+  NullLiteralExpCS createNullLiteralExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Collection Literal Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Collection Literal Exp CS</em>'.
+	 * @generated
+	 */
+  CollectionLiteralExpCS createCollectionLiteralExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Collection Literal Part CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Collection Literal Part CS</em>'.
+	 * @generated
+	 */
+  CollectionLiteralPartCS createCollectionLiteralPartCS();
+
+  /**
+	 * Returns a new object of class '<em>Let Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Let Exp CS</em>'.
+	 * @generated
+	 */
+  LetExpCS createLetExpCS();
+
+  /**
+	 * Returns a new object of class '<em>Let Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Let Var CS</em>'.
+	 * @generated
+	 */
+  LetVarCS createLetVarCS();
+
+  /**
 	 * Returns a new object of class '<em>Path Name CS</em>'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsPackage.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsPackage.java
index ba9cfa6..7cabe3b 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsPackage.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MinioclcsPackage.java
@@ -5,6 +5,7 @@
 
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 
@@ -65,7 +66,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCSTrace()
 	 * @generated
 	 */
-	int CS_TRACE = 21;
+	int CS_TRACE = 35;
 
 		/**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -169,13 +170,13 @@
   int PACKAGE_CS__PACKAGES = CS_TRACE_FEATURE_COUNT + 1;
 
   /**
-	 * The feature id for the '<em><b>Classes</b></em>' containment reference list.
+	 * The feature id for the '<em><b>Classifiers</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int PACKAGE_CS__CLASSES = CS_TRACE_FEATURE_COUNT + 2;
+  int PACKAGE_CS__CLASSIFIERS = CS_TRACE_FEATURE_COUNT + 2;
 
   /**
 	 * The number of structural features of the '<em>Package CS</em>' class.
@@ -187,14 +188,14 @@
   int PACKAGE_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 3;
 
   /**
-	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl <em>Class CS</em>}' class.
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassifierCSImpl <em>Classifier CS</em>}' class.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @see org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl
-	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getClassCS()
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.ClassifierCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getClassifierCS()
 	 * @generated
 	 */
-  int CLASS_CS = 2;
+  int CLASSIFIER_CS = 2;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -203,7 +204,7 @@
 	 * @generated
 	 * @ordered
 	 */
-	int CLASS_CS__AST = CS_TRACE__AST;
+	int CLASSIFIER_CS__AST = CS_TRACE__AST;
 
 		/**
 	 * The feature id for the '<em><b>Name</b></em>' attribute.
@@ -212,7 +213,44 @@
 	 * @generated
 	 * @ordered
 	 */
-  int CLASS_CS__NAME = CS_TRACE_FEATURE_COUNT + 0;
+  int CLASSIFIER_CS__NAME = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The number of structural features of the '<em>Classifier CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int CLASSIFIER_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl <em>Class CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getClassCS()
+	 * @generated
+	 */
+  int CLASS_CS = 3;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int CLASS_CS__AST = CLASSIFIER_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int CLASS_CS__NAME = CLASSIFIER_CS__NAME;
 
   /**
 	 * The feature id for the '<em><b>Extends</b></em>' containment reference.
@@ -221,7 +259,7 @@
 	 * @generated
 	 * @ordered
 	 */
-  int CLASS_CS__EXTENDS = CS_TRACE_FEATURE_COUNT + 1;
+  int CLASS_CS__EXTENDS = CLASSIFIER_CS_FEATURE_COUNT + 0;
 
   /**
 	 * The feature id for the '<em><b>Properties</b></em>' containment reference list.
@@ -230,7 +268,7 @@
 	 * @generated
 	 * @ordered
 	 */
-  int CLASS_CS__PROPERTIES = CS_TRACE_FEATURE_COUNT + 2;
+  int CLASS_CS__PROPERTIES = CLASSIFIER_CS_FEATURE_COUNT + 1;
 
   /**
 	 * The feature id for the '<em><b>Operations</b></em>' containment reference list.
@@ -239,7 +277,7 @@
 	 * @generated
 	 * @ordered
 	 */
-  int CLASS_CS__OPERATIONS = CS_TRACE_FEATURE_COUNT + 3;
+  int CLASS_CS__OPERATIONS = CLASSIFIER_CS_FEATURE_COUNT + 2;
 
   /**
 	 * The number of structural features of the '<em>Class CS</em>' class.
@@ -248,7 +286,53 @@
 	 * @generated
 	 * @ordered
 	 */
-  int CLASS_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 4;
+  int CLASS_CS_FEATURE_COUNT = CLASSIFIER_CS_FEATURE_COUNT + 3;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.DatatypeCSImpl <em>Datatype CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.DatatypeCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getDatatypeCS()
+	 * @generated
+	 */
+  int DATATYPE_CS = 4;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int DATATYPE_CS__AST = CLASSIFIER_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int DATATYPE_CS__NAME = CLASSIFIER_CS__NAME;
+
+  /**
+	 * The feature id for the '<em><b>Type Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int DATATYPE_CS__TYPE_NAME = CLASSIFIER_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The number of structural features of the '<em>Datatype CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int DATATYPE_CS_FEATURE_COUNT = CLASSIFIER_CS_FEATURE_COUNT + 1;
 
   /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PropertyCSImpl <em>Property CS</em>}' class.
@@ -258,7 +342,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getPropertyCS()
 	 * @generated
 	 */
-  int PROPERTY_CS = 3;
+  int PROPERTY_CS = 5;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -288,13 +372,95 @@
   int PROPERTY_CS__TYPE_REF = CS_TRACE_FEATURE_COUNT + 1;
 
   /**
+	 * The feature id for the '<em><b>Multiplicity</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int PROPERTY_CS__MULTIPLICITY = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
 	 * The number of structural features of the '<em>Property CS</em>' class.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int PROPERTY_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 2;
+  int PROPERTY_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 3;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl <em>Multiplicity CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getMultiplicityCS()
+	 * @generated
+	 */
+  int MULTIPLICITY_CS = 6;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int MULTIPLICITY_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The feature id for the '<em><b>Opt</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS__OPT = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS__MULT = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The feature id for the '<em><b>Lower</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS__LOWER = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
+	 * The feature id for the '<em><b>Upper Int</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS__UPPER_INT = CS_TRACE_FEATURE_COUNT + 3;
+
+  /**
+	 * The feature id for the '<em><b>Upper Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS__UPPER_MULT = CS_TRACE_FEATURE_COUNT + 4;
+
+  /**
+	 * The number of structural features of the '<em>Multiplicity CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int MULTIPLICITY_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 5;
 
   /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.OperationCSImpl <em>Operation CS</em>}' class.
@@ -304,7 +470,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getOperationCS()
 	 * @generated
 	 */
-  int OPERATION_CS = 4;
+  int OPERATION_CS = 7;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -368,7 +534,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getParameterCS()
 	 * @generated
 	 */
-  int PARAMETER_CS = 5;
+  int PARAMETER_CS = 8;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -414,7 +580,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getConstraintsDefCS()
 	 * @generated
 	 */
-  int CONSTRAINTS_DEF_CS = 6;
+  int CONSTRAINTS_DEF_CS = 9;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -460,7 +626,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getInvariantCS()
 	 * @generated
 	 */
-  int INVARIANT_CS = 7;
+  int INVARIANT_CS = 10;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -497,7 +663,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getExpCS()
 	 * @generated
 	 */
-  int EXP_CS = 8;
+  int EXP_CS = 11;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -525,7 +691,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLogicExpCS()
 	 * @generated
 	 */
-  int LOGIC_EXP_CS = 9;
+  int LOGIC_EXP_CS = 12;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -580,7 +746,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCallExpCS()
 	 * @generated
 	 */
-  int CALL_EXP_CS = 10;
+  int CALL_EXP_CS = 13;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -628,13 +794,13 @@
   int CALL_EXP_CS__SOURCE = LOGIC_EXP_CS_FEATURE_COUNT + 0;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int CALL_EXP_CS__NAME_EXP = LOGIC_EXP_CS_FEATURE_COUNT + 1;
+  int CALL_EXP_CS__NAV_EXP = LOGIC_EXP_CS_FEATURE_COUNT + 1;
 
   /**
 	 * The number of structural features of the '<em>Call Exp CS</em>' class.
@@ -653,7 +819,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getPrimaryExpCS()
 	 * @generated
 	 */
-  int PRIMARY_EXP_CS = 11;
+  int PRIMARY_EXP_CS = 14;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -701,13 +867,13 @@
   int PRIMARY_EXP_CS__SOURCE = CALL_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int PRIMARY_EXP_CS__NAME_EXP = CALL_EXP_CS__NAME_EXP;
+  int PRIMARY_EXP_CS__NAV_EXP = CALL_EXP_CS__NAV_EXP;
 
   /**
 	 * The number of structural features of the '<em>Primary Exp CS</em>' class.
@@ -719,6 +885,355 @@
   int PRIMARY_EXP_CS_FEATURE_COUNT = CALL_EXP_CS_FEATURE_COUNT + 0;
 
   /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.SelfExpCSImpl <em>Self Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.SelfExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getSelfExpCS()
+	 * @generated
+	 */
+  int SELF_EXP_CS = 15;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int SELF_EXP_CS__AST = PRIMARY_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Left</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS__LEFT = PRIMARY_EXP_CS__LEFT;
+
+  /**
+	 * The feature id for the '<em><b>Op</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS__OP = PRIMARY_EXP_CS__OP;
+
+  /**
+	 * The feature id for the '<em><b>Right</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS__RIGHT = PRIMARY_EXP_CS__RIGHT;
+
+  /**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS__SOURCE = PRIMARY_EXP_CS__SOURCE;
+
+  /**
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS__NAV_EXP = PRIMARY_EXP_CS__NAV_EXP;
+
+  /**
+	 * The number of structural features of the '<em>Self Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int SELF_EXP_CS_FEATURE_COUNT = PRIMARY_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NavigationExpCSImpl <em>Navigation Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.NavigationExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getNavigationExpCS()
+	 * @generated
+	 */
+  int NAVIGATION_EXP_CS = 16;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NAVIGATION_EXP_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The number of structural features of the '<em>Navigation Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NAVIGATION_EXP_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl <em>Loop Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLoopExpCS()
+	 * @generated
+	 */
+  int LOOP_EXP_CS = 17;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LOOP_EXP_CS__AST = NAVIGATION_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>It Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LOOP_EXP_CS__IT_VAR = NAVIGATION_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LOOP_EXP_CS__EXP = NAVIGATION_EXP_CS_FEATURE_COUNT + 1;
+
+  /**
+	 * The number of structural features of the '<em>Loop Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LOOP_EXP_CS_FEATURE_COUNT = NAVIGATION_EXP_CS_FEATURE_COUNT + 2;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectExpCSImpl <em>Collect Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectExpCS()
+	 * @generated
+	 */
+  int COLLECT_EXP_CS = 18;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COLLECT_EXP_CS__AST = LOOP_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>It Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECT_EXP_CS__IT_VAR = LOOP_EXP_CS__IT_VAR;
+
+  /**
+	 * The feature id for the '<em><b>Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECT_EXP_CS__EXP = LOOP_EXP_CS__EXP;
+
+  /**
+	 * The number of structural features of the '<em>Collect Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECT_EXP_CS_FEATURE_COUNT = LOOP_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl <em>Iterator Var CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getIteratorVarCS()
+	 * @generated
+	 */
+  int ITERATOR_VAR_CS = 19;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITERATOR_VAR_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The feature id for the '<em><b>It Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATOR_VAR_CS__IT_NAME = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>It Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATOR_VAR_CS__IT_TYPE = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The number of structural features of the '<em>Iterator Var CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATOR_VAR_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.IterateExpCSImpl <em>Iterate Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.IterateExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getIterateExpCS()
+	 * @generated
+	 */
+  int ITERATE_EXP_CS = 20;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ITERATE_EXP_CS__AST = LOOP_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>It Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATE_EXP_CS__IT_VAR = LOOP_EXP_CS__IT_VAR;
+
+  /**
+	 * The feature id for the '<em><b>Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATE_EXP_CS__EXP = LOOP_EXP_CS__EXP;
+
+  /**
+	 * The feature id for the '<em><b>Acc Var</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATE_EXP_CS__ACC_VAR = LOOP_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The number of structural features of the '<em>Iterate Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ITERATE_EXP_CS_FEATURE_COUNT = LOOP_EXP_CS_FEATURE_COUNT + 1;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl <em>Acc Var CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getAccVarCS()
+	 * @generated
+	 */
+  int ACC_VAR_CS = 21;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int ACC_VAR_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The feature id for the '<em><b>Acc Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ACC_VAR_CS__ACC_NAME = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Acc Type</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ACC_VAR_CS__ACC_TYPE = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The feature id for the '<em><b>Acc Init Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ACC_VAR_CS__ACC_INIT_EXP = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
+	 * The number of structural features of the '<em>Acc Var CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int ACC_VAR_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 3;
+
+  /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NameExpCSImpl <em>Name Exp CS</em>}' class.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -726,7 +1241,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getNameExpCS()
 	 * @generated
 	 */
-  int NAME_EXP_CS = 12;
+  int NAME_EXP_CS = 22;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -774,13 +1289,13 @@
   int NAME_EXP_CS__SOURCE = PRIMARY_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int NAME_EXP_CS__NAME_EXP = PRIMARY_EXP_CS__NAME_EXP;
+  int NAME_EXP_CS__NAV_EXP = PRIMARY_EXP_CS__NAV_EXP;
 
   /**
 	 * The feature id for the '<em><b>Exp Name</b></em>' containment reference.
@@ -817,7 +1332,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getRoundedBracketClauseCS()
 	 * @generated
 	 */
-  int ROUNDED_BRACKET_CLAUSE_CS = 13;
+  int ROUNDED_BRACKET_CLAUSE_CS = 23;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -854,7 +1369,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLiteralExpCS()
 	 * @generated
 	 */
-  int LITERAL_EXP_CS = 14;
+  int LITERAL_EXP_CS = 24;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -902,13 +1417,13 @@
   int LITERAL_EXP_CS__SOURCE = PRIMARY_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int LITERAL_EXP_CS__NAME_EXP = PRIMARY_EXP_CS__NAME_EXP;
+  int LITERAL_EXP_CS__NAV_EXP = PRIMARY_EXP_CS__NAV_EXP;
 
   /**
 	 * The number of structural features of the '<em>Literal Exp CS</em>' class.
@@ -927,7 +1442,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getIntLiteralExpCS()
 	 * @generated
 	 */
-  int INT_LITERAL_EXP_CS = 15;
+  int INT_LITERAL_EXP_CS = 25;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -975,13 +1490,13 @@
   int INT_LITERAL_EXP_CS__SOURCE = LITERAL_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int INT_LITERAL_EXP_CS__NAME_EXP = LITERAL_EXP_CS__NAME_EXP;
+  int INT_LITERAL_EXP_CS__NAV_EXP = LITERAL_EXP_CS__NAV_EXP;
 
   /**
 	 * The feature id for the '<em><b>Int Symbol</b></em>' attribute.
@@ -1002,88 +1517,6 @@
   int INT_LITERAL_EXP_CS_FEATURE_COUNT = LITERAL_EXP_CS_FEATURE_COUNT + 1;
 
   /**
-	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.StringLiteralExpCSImpl <em>String Literal Exp CS</em>}' class.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see org.eclipse.qvtd.doc.minioclcs.impl.StringLiteralExpCSImpl
-	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getStringLiteralExpCS()
-	 * @generated
-	 */
-  int STRING_LITERAL_EXP_CS = 16;
-
-  /**
-	 * The feature id for the '<em><b>Ast</b></em>' reference.
-	 * <!-- begin-user-doc -->
-	 * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-	int STRING_LITERAL_EXP_CS__AST = LITERAL_EXP_CS__AST;
-
-		/**
-	 * The feature id for the '<em><b>Left</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__LEFT = LITERAL_EXP_CS__LEFT;
-
-  /**
-	 * The feature id for the '<em><b>Op</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__OP = LITERAL_EXP_CS__OP;
-
-  /**
-	 * The feature id for the '<em><b>Right</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__RIGHT = LITERAL_EXP_CS__RIGHT;
-
-  /**
-	 * The feature id for the '<em><b>Source</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__SOURCE = LITERAL_EXP_CS__SOURCE;
-
-  /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__NAME_EXP = LITERAL_EXP_CS__NAME_EXP;
-
-  /**
-	 * The feature id for the '<em><b>String Symbol</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS__STRING_SYMBOL = LITERAL_EXP_CS_FEATURE_COUNT + 0;
-
-  /**
-	 * The number of structural features of the '<em>String Literal Exp CS</em>' class.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int STRING_LITERAL_EXP_CS_FEATURE_COUNT = LITERAL_EXP_CS_FEATURE_COUNT + 1;
-
-  /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.BooleanLiteralExpCSImpl <em>Boolean Literal Exp CS</em>}' class.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1091,7 +1524,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getBooleanLiteralExpCS()
 	 * @generated
 	 */
-  int BOOLEAN_LITERAL_EXP_CS = 17;
+  int BOOLEAN_LITERAL_EXP_CS = 26;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -1139,13 +1572,13 @@
   int BOOLEAN_LITERAL_EXP_CS__SOURCE = LITERAL_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int BOOLEAN_LITERAL_EXP_CS__NAME_EXP = LITERAL_EXP_CS__NAME_EXP;
+  int BOOLEAN_LITERAL_EXP_CS__NAV_EXP = LITERAL_EXP_CS__NAV_EXP;
 
   /**
 	 * The number of structural features of the '<em>Boolean Literal Exp CS</em>' class.
@@ -1157,6 +1590,362 @@
   int BOOLEAN_LITERAL_EXP_CS_FEATURE_COUNT = LITERAL_EXP_CS_FEATURE_COUNT + 0;
 
   /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NullLiteralExpCSImpl <em>Null Literal Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.NullLiteralExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getNullLiteralExpCS()
+	 * @generated
+	 */
+  int NULL_LITERAL_EXP_CS = 27;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int NULL_LITERAL_EXP_CS__AST = LITERAL_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Left</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS__LEFT = LITERAL_EXP_CS__LEFT;
+
+  /**
+	 * The feature id for the '<em><b>Op</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS__OP = LITERAL_EXP_CS__OP;
+
+  /**
+	 * The feature id for the '<em><b>Right</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS__RIGHT = LITERAL_EXP_CS__RIGHT;
+
+  /**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS__SOURCE = LITERAL_EXP_CS__SOURCE;
+
+  /**
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS__NAV_EXP = LITERAL_EXP_CS__NAV_EXP;
+
+  /**
+	 * The number of structural features of the '<em>Null Literal Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int NULL_LITERAL_EXP_CS_FEATURE_COUNT = LITERAL_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl <em>Collection Literal Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionLiteralExpCS()
+	 * @generated
+	 */
+  int COLLECTION_LITERAL_EXP_CS = 28;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COLLECTION_LITERAL_EXP_CS__AST = LITERAL_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Left</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__LEFT = LITERAL_EXP_CS__LEFT;
+
+  /**
+	 * The feature id for the '<em><b>Op</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__OP = LITERAL_EXP_CS__OP;
+
+  /**
+	 * The feature id for the '<em><b>Right</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__RIGHT = LITERAL_EXP_CS__RIGHT;
+
+  /**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__SOURCE = LITERAL_EXP_CS__SOURCE;
+
+  /**
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__NAV_EXP = LITERAL_EXP_CS__NAV_EXP;
+
+  /**
+	 * The feature id for the '<em><b>Kind</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__KIND = LITERAL_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Parts</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS__PARTS = LITERAL_EXP_CS_FEATURE_COUNT + 1;
+
+  /**
+	 * The number of structural features of the '<em>Collection Literal Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_EXP_CS_FEATURE_COUNT = LITERAL_EXP_CS_FEATURE_COUNT + 2;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl <em>Collection Literal Part CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionLiteralPartCS()
+	 * @generated
+	 */
+  int COLLECTION_LITERAL_PART_CS = 29;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int COLLECTION_LITERAL_PART_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The feature id for the '<em><b>First</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_PART_CS__FIRST = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Last</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_PART_CS__LAST = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The number of structural features of the '<em>Collection Literal Part CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int COLLECTION_LITERAL_PART_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl <em>Let Exp CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLetExpCS()
+	 * @generated
+	 */
+  int LET_EXP_CS = 30;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LET_EXP_CS__AST = PRIMARY_EXP_CS__AST;
+
+		/**
+	 * The feature id for the '<em><b>Left</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__LEFT = PRIMARY_EXP_CS__LEFT;
+
+  /**
+	 * The feature id for the '<em><b>Op</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__OP = PRIMARY_EXP_CS__OP;
+
+  /**
+	 * The feature id for the '<em><b>Right</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__RIGHT = PRIMARY_EXP_CS__RIGHT;
+
+  /**
+	 * The feature id for the '<em><b>Source</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__SOURCE = PRIMARY_EXP_CS__SOURCE;
+
+  /**
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__NAV_EXP = PRIMARY_EXP_CS__NAV_EXP;
+
+  /**
+	 * The feature id for the '<em><b>Let Vars</b></em>' containment reference list.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__LET_VARS = PRIMARY_EXP_CS_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>In Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS__IN_EXP = PRIMARY_EXP_CS_FEATURE_COUNT + 1;
+
+  /**
+	 * The number of structural features of the '<em>Let Exp CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_EXP_CS_FEATURE_COUNT = PRIMARY_EXP_CS_FEATURE_COUNT + 2;
+
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl <em>Let Var CS</em>}' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLetVarCS()
+	 * @generated
+	 */
+  int LET_VAR_CS = 31;
+
+  /**
+	 * The feature id for the '<em><b>Ast</b></em>' reference.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int LET_VAR_CS__AST = CS_TRACE__AST;
+
+		/**
+	 * The feature id for the '<em><b>Name</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_VAR_CS__NAME = CS_TRACE_FEATURE_COUNT + 0;
+
+  /**
+	 * The feature id for the '<em><b>Type Ref</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_VAR_CS__TYPE_REF = CS_TRACE_FEATURE_COUNT + 1;
+
+  /**
+	 * The feature id for the '<em><b>Init Exp</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_VAR_CS__INIT_EXP = CS_TRACE_FEATURE_COUNT + 2;
+
+  /**
+	 * The number of structural features of the '<em>Let Var CS</em>' class.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+  int LET_VAR_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 3;
+
+  /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PathNameCSImpl <em>Path Name CS</em>}' class.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1164,7 +1953,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getPathNameCS()
 	 * @generated
 	 */
-  int PATH_NAME_CS = 18;
+  int PATH_NAME_CS = 32;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -1176,22 +1965,13 @@
 	int PATH_NAME_CS__AST = CS_TRACE__AST;
 
 		/**
-	 * The feature id for the '<em><b>Path</b></em>' containment reference list.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 * @ordered
-	 */
-  int PATH_NAME_CS__PATH = CS_TRACE_FEATURE_COUNT + 0;
-
-  /**
 	 * The feature id for the '<em><b>Path Elements</b></em>' containment reference list.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int PATH_NAME_CS__PATH_ELEMENTS = CS_TRACE_FEATURE_COUNT + 1;
+  int PATH_NAME_CS__PATH_ELEMENTS = CS_TRACE_FEATURE_COUNT + 0;
 
   /**
 	 * The number of structural features of the '<em>Path Name CS</em>' class.
@@ -1200,7 +1980,7 @@
 	 * @generated
 	 * @ordered
 	 */
-  int PATH_NAME_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 2;
+  int PATH_NAME_CS_FEATURE_COUNT = CS_TRACE_FEATURE_COUNT + 1;
 
   /**
 	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PathElementCSImpl <em>Path Element CS</em>}' class.
@@ -1210,7 +1990,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getPathElementCS()
 	 * @generated
 	 */
-  int PATH_ELEMENT_CS = 19;
+  int PATH_ELEMENT_CS = 33;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -1247,7 +2027,7 @@
 	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getBooleanExpCS()
 	 * @generated
 	 */
-  int BOOLEAN_EXP_CS = 20;
+  int BOOLEAN_EXP_CS = 34;
 
   /**
 	 * The feature id for the '<em><b>Ast</b></em>' reference.
@@ -1295,13 +2075,13 @@
   int BOOLEAN_EXP_CS__SOURCE = BOOLEAN_LITERAL_EXP_CS__SOURCE;
 
   /**
-	 * The feature id for the '<em><b>Name Exp</b></em>' containment reference.
+	 * The feature id for the '<em><b>Nav Exp</b></em>' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 * @ordered
 	 */
-  int BOOLEAN_EXP_CS__NAME_EXP = BOOLEAN_LITERAL_EXP_CS__NAME_EXP;
+  int BOOLEAN_EXP_CS__NAV_EXP = BOOLEAN_LITERAL_EXP_CS__NAV_EXP;
 
   /**
 	 * The feature id for the '<em><b>Bool Symbol</b></em>' attribute.
@@ -1321,6 +2101,16 @@
 	 */
   int BOOLEAN_EXP_CS_FEATURE_COUNT = BOOLEAN_LITERAL_EXP_CS_FEATURE_COUNT + 1;
 
+  /**
+	 * The meta object id for the '{@link org.eclipse.qvtd.doc.minioclcs.CollectionKindCS <em>Collection Kind CS</em>}' enum.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionKindCS
+	 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionKindCS()
+	 * @generated
+	 */
+  int COLLECTION_KIND_CS = 36;
+
 
   /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.RootCS <em>Root CS</em>}'.
@@ -1387,15 +2177,36 @@
   EReference getPackageCS_Packages();
 
   /**
-	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getClasses <em>Classes</em>}'.
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getClassifiers <em>Classifiers</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Classes</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.PackageCS#getClasses()
+	 * @return the meta object for the containment reference list '<em>Classifiers</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.PackageCS#getClassifiers()
 	 * @see #getPackageCS()
 	 * @generated
 	 */
-  EReference getPackageCS_Classes();
+  EReference getPackageCS_Classifiers();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS <em>Classifier CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Classifier CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.ClassifierCS
+	 * @generated
+	 */
+  EClass getClassifierCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.ClassifierCS#getName()
+	 * @see #getClassifierCS()
+	 * @generated
+	 */
+  EAttribute getClassifierCS_Name();
 
   /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.ClassCS <em>Class CS</em>}'.
@@ -1408,17 +2219,6 @@
   EClass getClassCS();
 
   /**
-	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getName <em>Name</em>}'.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>Name</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.ClassCS#getName()
-	 * @see #getClassCS()
-	 * @generated
-	 */
-  EAttribute getClassCS_Name();
-
-  /**
 	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.ClassCS#getExtends <em>Extends</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1452,6 +2252,27 @@
   EReference getClassCS_Operations();
 
   /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.DatatypeCS <em>Datatype CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Datatype CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.DatatypeCS
+	 * @generated
+	 */
+  EClass getDatatypeCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.DatatypeCS#getTypeName <em>Type Name</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Type Name</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.DatatypeCS#getTypeName()
+	 * @see #getDatatypeCS()
+	 * @generated
+	 */
+  EAttribute getDatatypeCS_TypeName();
+
+  /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS <em>Property CS</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1484,6 +2305,82 @@
   EReference getPropertyCS_TypeRef();
 
   /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS#getMultiplicity <em>Multiplicity</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Multiplicity</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.PropertyCS#getMultiplicity()
+	 * @see #getPropertyCS()
+	 * @generated
+	 */
+  EReference getPropertyCS_Multiplicity();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS <em>Multiplicity CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Multiplicity CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS
+	 * @generated
+	 */
+  EClass getMultiplicityCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isOpt <em>Opt</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Opt</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isOpt()
+	 * @see #getMultiplicityCS()
+	 * @generated
+	 */
+  EAttribute getMultiplicityCS_Opt();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isMult <em>Mult</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Mult</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isMult()
+	 * @see #getMultiplicityCS()
+	 * @generated
+	 */
+  EAttribute getMultiplicityCS_Mult();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getLower <em>Lower</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Lower</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getLower()
+	 * @see #getMultiplicityCS()
+	 * @generated
+	 */
+  EAttribute getMultiplicityCS_Lower();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getUpperInt <em>Upper Int</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Upper Int</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getUpperInt()
+	 * @see #getMultiplicityCS()
+	 * @generated
+	 */
+  EAttribute getMultiplicityCS_UpperInt();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isUpperMult <em>Upper Mult</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Upper Mult</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isUpperMult()
+	 * @see #getMultiplicityCS()
+	 * @generated
+	 */
+  EAttribute getMultiplicityCS_UpperMult();
+
+  /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.OperationCS <em>Operation CS</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1697,15 +2594,15 @@
   EReference getCallExpCS_Source();
 
   /**
-	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNameExp <em>Name Exp</em>}'.
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNavExp <em>Nav Exp</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference '<em>Name Exp</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNameExp()
+	 * @return the meta object for the containment reference '<em>Nav Exp</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CallExpCS#getNavExp()
 	 * @see #getCallExpCS()
 	 * @generated
 	 */
-  EReference getCallExpCS_NameExp();
+  EReference getCallExpCS_NavExp();
 
   /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.PrimaryExpCS <em>Primary Exp CS</em>}'.
@@ -1718,6 +2615,164 @@
   EClass getPrimaryExpCS();
 
   /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.SelfExpCS <em>Self Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Self Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.SelfExpCS
+	 * @generated
+	 */
+  EClass getSelfExpCS();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.NavigationExpCS <em>Navigation Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Navigation Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.NavigationExpCS
+	 * @generated
+	 */
+  EClass getNavigationExpCS();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS <em>Loop Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Loop Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LoopExpCS
+	 * @generated
+	 */
+  EClass getLoopExpCS();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getItVar <em>It Var</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>It Var</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getItVar()
+	 * @see #getLoopExpCS()
+	 * @generated
+	 */
+  EReference getLoopExpCS_ItVar();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getExp <em>Exp</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Exp</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LoopExpCS#getExp()
+	 * @see #getLoopExpCS()
+	 * @generated
+	 */
+  EReference getLoopExpCS_Exp();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.CollectExpCS <em>Collect Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Collect Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectExpCS
+	 * @generated
+	 */
+  EClass getCollectExpCS();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS <em>Iterator Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Iterator Var CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IteratorVarCS
+	 * @generated
+	 */
+  EClass getIteratorVarCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItName <em>It Name</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>It Name</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItName()
+	 * @see #getIteratorVarCS()
+	 * @generated
+	 */
+  EAttribute getIteratorVarCS_ItName();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItType <em>It Type</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>It Type</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IteratorVarCS#getItType()
+	 * @see #getIteratorVarCS()
+	 * @generated
+	 */
+  EReference getIteratorVarCS_ItType();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.IterateExpCS <em>Iterate Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Iterate Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IterateExpCS
+	 * @generated
+	 */
+  EClass getIterateExpCS();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.IterateExpCS#getAccVar <em>Acc Var</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Acc Var</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IterateExpCS#getAccVar()
+	 * @see #getIterateExpCS()
+	 * @generated
+	 */
+  EReference getIterateExpCS_AccVar();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS <em>Acc Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Acc Var CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.AccVarCS
+	 * @generated
+	 */
+  EClass getAccVarCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccName <em>Acc Name</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Acc Name</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccName()
+	 * @see #getAccVarCS()
+	 * @generated
+	 */
+  EAttribute getAccVarCS_AccName();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccType <em>Acc Type</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Acc Type</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccType()
+	 * @see #getAccVarCS()
+	 * @generated
+	 */
+  EReference getAccVarCS_AccType();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccInitExp <em>Acc Init Exp</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Acc Init Exp</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.AccVarCS#getAccInitExp()
+	 * @see #getAccVarCS()
+	 * @generated
+	 */
+  EReference getAccVarCS_AccInitExp();
+
+  /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.NameExpCS <em>Name Exp CS</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1802,27 +2857,6 @@
   EAttribute getIntLiteralExpCS_IntSymbol();
 
   /**
-	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS <em>String Literal Exp CS</em>}'.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @return the meta object for class '<em>String Literal Exp CS</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS
-	 * @generated
-	 */
-  EClass getStringLiteralExpCS();
-
-  /**
-	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS#getStringSymbol <em>String Symbol</em>}'.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @return the meta object for the attribute '<em>String Symbol</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS#getStringSymbol()
-	 * @see #getStringLiteralExpCS()
-	 * @generated
-	 */
-  EAttribute getStringLiteralExpCS_StringSymbol();
-
-  /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS <em>Boolean Literal Exp CS</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1833,6 +2867,155 @@
   EClass getBooleanLiteralExpCS();
 
   /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS <em>Null Literal Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Null Literal Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS
+	 * @generated
+	 */
+  EClass getNullLiteralExpCS();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS <em>Collection Literal Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Collection Literal Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS
+	 * @generated
+	 */
+  EClass getCollectionLiteralExpCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getKind <em>Kind</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Kind</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getKind()
+	 * @see #getCollectionLiteralExpCS()
+	 * @generated
+	 */
+  EAttribute getCollectionLiteralExpCS_Kind();
+
+  /**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getParts <em>Parts</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Parts</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS#getParts()
+	 * @see #getCollectionLiteralExpCS()
+	 * @generated
+	 */
+  EReference getCollectionLiteralExpCS_Parts();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS <em>Collection Literal Part CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Collection Literal Part CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS
+	 * @generated
+	 */
+  EClass getCollectionLiteralPartCS();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getFirst <em>First</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>First</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getFirst()
+	 * @see #getCollectionLiteralPartCS()
+	 * @generated
+	 */
+  EReference getCollectionLiteralPartCS_First();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getLast <em>Last</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Last</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS#getLast()
+	 * @see #getCollectionLiteralPartCS()
+	 * @generated
+	 */
+  EReference getCollectionLiteralPartCS_Last();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS <em>Let Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Let Exp CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetExpCS
+	 * @generated
+	 */
+  EClass getLetExpCS();
+
+  /**
+	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS#getLetVars <em>Let Vars</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference list '<em>Let Vars</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetExpCS#getLetVars()
+	 * @see #getLetExpCS()
+	 * @generated
+	 */
+  EReference getLetExpCS_LetVars();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS#getInExp <em>In Exp</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>In Exp</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetExpCS#getInExp()
+	 * @see #getLetExpCS()
+	 * @generated
+	 */
+  EReference getLetExpCS_InExp();
+
+  /**
+	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS <em>Let Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Let Var CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetVarCS
+	 * @generated
+	 */
+  EClass getLetVarCS();
+
+  /**
+	 * Returns the meta object for the attribute '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getName <em>Name</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the attribute '<em>Name</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetVarCS#getName()
+	 * @see #getLetVarCS()
+	 * @generated
+	 */
+  EAttribute getLetVarCS_Name();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getTypeRef <em>Type Ref</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Type Ref</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetVarCS#getTypeRef()
+	 * @see #getLetVarCS()
+	 * @generated
+	 */
+  EReference getLetVarCS_TypeRef();
+
+  /**
+	 * Returns the meta object for the containment reference '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS#getInitExp <em>Init Exp</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for the containment reference '<em>Init Exp</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetVarCS#getInitExp()
+	 * @see #getLetVarCS()
+	 * @generated
+	 */
+  EReference getLetVarCS_InitExp();
+
+  /**
 	 * Returns the meta object for class '{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS <em>Path Name CS</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1843,17 +3026,6 @@
   EClass getPathNameCS();
 
   /**
-	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS#getPath <em>Path</em>}'.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @return the meta object for the containment reference list '<em>Path</em>'.
-	 * @see org.eclipse.qvtd.doc.minioclcs.PathNameCS#getPath()
-	 * @see #getPathNameCS()
-	 * @generated
-	 */
-  EReference getPathNameCS_Path();
-
-  /**
 	 * Returns the meta object for the containment reference list '{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS#getPathElements <em>Path Elements</em>}'.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -1928,6 +3100,16 @@
 	EReference getCSTrace_Ast();
 
 		/**
+	 * Returns the meta object for enum '{@link org.eclipse.qvtd.doc.minioclcs.CollectionKindCS <em>Collection Kind CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @return the meta object for enum '<em>Collection Kind CS</em>'.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionKindCS
+	 * @generated
+	 */
+  EEnum getCollectionKindCS();
+
+  /**
 	 * Returns the factory that creates the instances of the model.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -2003,12 +3185,30 @@
     EReference PACKAGE_CS__PACKAGES = eINSTANCE.getPackageCS_Packages();
 
     /**
-		 * The meta object literal for the '<em><b>Classes</b></em>' containment reference list feature.
+		 * The meta object literal for the '<em><b>Classifiers</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
 		 * @generated
 		 */
-    EReference PACKAGE_CS__CLASSES = eINSTANCE.getPackageCS_Classes();
+    EReference PACKAGE_CS__CLASSIFIERS = eINSTANCE.getPackageCS_Classifiers();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassifierCSImpl <em>Classifier CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.ClassifierCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getClassifierCS()
+		 * @generated
+		 */
+    EClass CLASSIFIER_CS = eINSTANCE.getClassifierCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute CLASSIFIER_CS__NAME = eINSTANCE.getClassifierCS_Name();
 
     /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl <em>Class CS</em>}' class.
@@ -2021,14 +3221,6 @@
     EClass CLASS_CS = eINSTANCE.getClassCS();
 
     /**
-		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-		 * @generated
-		 */
-    EAttribute CLASS_CS__NAME = eINSTANCE.getClassCS_Name();
-
-    /**
 		 * The meta object literal for the '<em><b>Extends</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2053,6 +3245,24 @@
     EReference CLASS_CS__OPERATIONS = eINSTANCE.getClassCS_Operations();
 
     /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.DatatypeCSImpl <em>Datatype CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.DatatypeCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getDatatypeCS()
+		 * @generated
+		 */
+    EClass DATATYPE_CS = eINSTANCE.getDatatypeCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Type Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute DATATYPE_CS__TYPE_NAME = eINSTANCE.getDatatypeCS_TypeName();
+
+    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PropertyCSImpl <em>Property CS</em>}' class.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2079,6 +3289,64 @@
     EReference PROPERTY_CS__TYPE_REF = eINSTANCE.getPropertyCS_TypeRef();
 
     /**
+		 * The meta object literal for the '<em><b>Multiplicity</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference PROPERTY_CS__MULTIPLICITY = eINSTANCE.getPropertyCS_Multiplicity();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl <em>Multiplicity CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getMultiplicityCS()
+		 * @generated
+		 */
+    EClass MULTIPLICITY_CS = eINSTANCE.getMultiplicityCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Opt</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute MULTIPLICITY_CS__OPT = eINSTANCE.getMultiplicityCS_Opt();
+
+    /**
+		 * The meta object literal for the '<em><b>Mult</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute MULTIPLICITY_CS__MULT = eINSTANCE.getMultiplicityCS_Mult();
+
+    /**
+		 * The meta object literal for the '<em><b>Lower</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute MULTIPLICITY_CS__LOWER = eINSTANCE.getMultiplicityCS_Lower();
+
+    /**
+		 * The meta object literal for the '<em><b>Upper Int</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute MULTIPLICITY_CS__UPPER_INT = eINSTANCE.getMultiplicityCS_UpperInt();
+
+    /**
+		 * The meta object literal for the '<em><b>Upper Mult</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute MULTIPLICITY_CS__UPPER_MULT = eINSTANCE.getMultiplicityCS_UpperMult();
+
+    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.OperationCSImpl <em>Operation CS</em>}' class.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2253,12 +3521,12 @@
     EReference CALL_EXP_CS__SOURCE = eINSTANCE.getCallExpCS_Source();
 
     /**
-		 * The meta object literal for the '<em><b>Name Exp</b></em>' containment reference feature.
+		 * The meta object literal for the '<em><b>Nav Exp</b></em>' containment reference feature.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
 		 * @generated
 		 */
-    EReference CALL_EXP_CS__NAME_EXP = eINSTANCE.getCallExpCS_NameExp();
+    EReference CALL_EXP_CS__NAV_EXP = eINSTANCE.getCallExpCS_NavExp();
 
     /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PrimaryExpCSImpl <em>Primary Exp CS</em>}' class.
@@ -2271,6 +3539,140 @@
     EClass PRIMARY_EXP_CS = eINSTANCE.getPrimaryExpCS();
 
     /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.SelfExpCSImpl <em>Self Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.SelfExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getSelfExpCS()
+		 * @generated
+		 */
+    EClass SELF_EXP_CS = eINSTANCE.getSelfExpCS();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NavigationExpCSImpl <em>Navigation Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.NavigationExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getNavigationExpCS()
+		 * @generated
+		 */
+    EClass NAVIGATION_EXP_CS = eINSTANCE.getNavigationExpCS();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl <em>Loop Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLoopExpCS()
+		 * @generated
+		 */
+    EClass LOOP_EXP_CS = eINSTANCE.getLoopExpCS();
+
+    /**
+		 * The meta object literal for the '<em><b>It Var</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LOOP_EXP_CS__IT_VAR = eINSTANCE.getLoopExpCS_ItVar();
+
+    /**
+		 * The meta object literal for the '<em><b>Exp</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LOOP_EXP_CS__EXP = eINSTANCE.getLoopExpCS_Exp();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectExpCSImpl <em>Collect Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectExpCS()
+		 * @generated
+		 */
+    EClass COLLECT_EXP_CS = eINSTANCE.getCollectExpCS();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl <em>Iterator Var CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getIteratorVarCS()
+		 * @generated
+		 */
+    EClass ITERATOR_VAR_CS = eINSTANCE.getIteratorVarCS();
+
+    /**
+		 * The meta object literal for the '<em><b>It Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute ITERATOR_VAR_CS__IT_NAME = eINSTANCE.getIteratorVarCS_ItName();
+
+    /**
+		 * The meta object literal for the '<em><b>It Type</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference ITERATOR_VAR_CS__IT_TYPE = eINSTANCE.getIteratorVarCS_ItType();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.IterateExpCSImpl <em>Iterate Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.IterateExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getIterateExpCS()
+		 * @generated
+		 */
+    EClass ITERATE_EXP_CS = eINSTANCE.getIterateExpCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Acc Var</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference ITERATE_EXP_CS__ACC_VAR = eINSTANCE.getIterateExpCS_AccVar();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl <em>Acc Var CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getAccVarCS()
+		 * @generated
+		 */
+    EClass ACC_VAR_CS = eINSTANCE.getAccVarCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Acc Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute ACC_VAR_CS__ACC_NAME = eINSTANCE.getAccVarCS_AccName();
+
+    /**
+		 * The meta object literal for the '<em><b>Acc Type</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference ACC_VAR_CS__ACC_TYPE = eINSTANCE.getAccVarCS_AccType();
+
+    /**
+		 * The meta object literal for the '<em><b>Acc Init Exp</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference ACC_VAR_CS__ACC_INIT_EXP = eINSTANCE.getAccVarCS_AccInitExp();
+
+    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NameExpCSImpl <em>Name Exp CS</em>}' class.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2343,24 +3745,6 @@
     EAttribute INT_LITERAL_EXP_CS__INT_SYMBOL = eINSTANCE.getIntLiteralExpCS_IntSymbol();
 
     /**
-		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.StringLiteralExpCSImpl <em>String Literal Exp CS</em>}' class.
-		 * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-		 * @see org.eclipse.qvtd.doc.minioclcs.impl.StringLiteralExpCSImpl
-		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getStringLiteralExpCS()
-		 * @generated
-		 */
-    EClass STRING_LITERAL_EXP_CS = eINSTANCE.getStringLiteralExpCS();
-
-    /**
-		 * The meta object literal for the '<em><b>String Symbol</b></em>' attribute feature.
-		 * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-		 * @generated
-		 */
-    EAttribute STRING_LITERAL_EXP_CS__STRING_SYMBOL = eINSTANCE.getStringLiteralExpCS_StringSymbol();
-
-    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.BooleanLiteralExpCSImpl <em>Boolean Literal Exp CS</em>}' class.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2371,6 +3755,128 @@
     EClass BOOLEAN_LITERAL_EXP_CS = eINSTANCE.getBooleanLiteralExpCS();
 
     /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.NullLiteralExpCSImpl <em>Null Literal Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.NullLiteralExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getNullLiteralExpCS()
+		 * @generated
+		 */
+    EClass NULL_LITERAL_EXP_CS = eINSTANCE.getNullLiteralExpCS();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl <em>Collection Literal Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionLiteralExpCS()
+		 * @generated
+		 */
+    EClass COLLECTION_LITERAL_EXP_CS = eINSTANCE.getCollectionLiteralExpCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Kind</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute COLLECTION_LITERAL_EXP_CS__KIND = eINSTANCE.getCollectionLiteralExpCS_Kind();
+
+    /**
+		 * The meta object literal for the '<em><b>Parts</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference COLLECTION_LITERAL_EXP_CS__PARTS = eINSTANCE.getCollectionLiteralExpCS_Parts();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl <em>Collection Literal Part CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionLiteralPartCS()
+		 * @generated
+		 */
+    EClass COLLECTION_LITERAL_PART_CS = eINSTANCE.getCollectionLiteralPartCS();
+
+    /**
+		 * The meta object literal for the '<em><b>First</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference COLLECTION_LITERAL_PART_CS__FIRST = eINSTANCE.getCollectionLiteralPartCS_First();
+
+    /**
+		 * The meta object literal for the '<em><b>Last</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference COLLECTION_LITERAL_PART_CS__LAST = eINSTANCE.getCollectionLiteralPartCS_Last();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl <em>Let Exp CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLetExpCS()
+		 * @generated
+		 */
+    EClass LET_EXP_CS = eINSTANCE.getLetExpCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Let Vars</b></em>' containment reference list feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LET_EXP_CS__LET_VARS = eINSTANCE.getLetExpCS_LetVars();
+
+    /**
+		 * The meta object literal for the '<em><b>In Exp</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LET_EXP_CS__IN_EXP = eINSTANCE.getLetExpCS_InExp();
+
+    /**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl <em>Let Var CS</em>}' class.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getLetVarCS()
+		 * @generated
+		 */
+    EClass LET_VAR_CS = eINSTANCE.getLetVarCS();
+
+    /**
+		 * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EAttribute LET_VAR_CS__NAME = eINSTANCE.getLetVarCS_Name();
+
+    /**
+		 * The meta object literal for the '<em><b>Type Ref</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LET_VAR_CS__TYPE_REF = eINSTANCE.getLetVarCS_TypeRef();
+
+    /**
+		 * The meta object literal for the '<em><b>Init Exp</b></em>' containment reference feature.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @generated
+		 */
+    EReference LET_VAR_CS__INIT_EXP = eINSTANCE.getLetVarCS_InitExp();
+
+    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.PathNameCSImpl <em>Path Name CS</em>}' class.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2381,14 +3887,6 @@
     EClass PATH_NAME_CS = eINSTANCE.getPathNameCS();
 
     /**
-		 * The meta object literal for the '<em><b>Path</b></em>' containment reference list feature.
-		 * <!-- begin-user-doc -->
-     * <!-- end-user-doc -->
-		 * @generated
-		 */
-    EReference PATH_NAME_CS__PATH = eINSTANCE.getPathNameCS_Path();
-
-    /**
 		 * The meta object literal for the '<em><b>Path Elements</b></em>' containment reference list feature.
 		 * <!-- begin-user-doc -->
      * <!-- end-user-doc -->
@@ -2432,7 +3930,7 @@
 		 */
     EAttribute BOOLEAN_EXP_CS__BOOL_SYMBOL = eINSTANCE.getBooleanExpCS_BoolSymbol();
 
-				/**
+    /**
 		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.impl.CSTraceImpl <em>CS Trace</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
@@ -2450,6 +3948,16 @@
 		 */
 		EReference CS_TRACE__AST = eINSTANCE.getCSTrace_Ast();
 
+				/**
+		 * The meta object literal for the '{@link org.eclipse.qvtd.doc.minioclcs.CollectionKindCS <em>Collection Kind CS</em>}' enum.
+		 * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+		 * @see org.eclipse.qvtd.doc.minioclcs.CollectionKindCS
+		 * @see org.eclipse.qvtd.doc.minioclcs.impl.MinioclcsPackageImpl#getCollectionKindCS()
+		 * @generated
+		 */
+    EEnum COLLECTION_KIND_CS = eINSTANCE.getCollectionKindCS();
+
   }
 
 } //MinioclcsPackage
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MultiplicityCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MultiplicityCS.java
new file mode 100644
index 0000000..d488faf
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/MultiplicityCS.java
@@ -0,0 +1,158 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Multiplicity CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isOpt <em>Opt</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isMult <em>Mult</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getLower <em>Lower</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getUpperInt <em>Upper Int</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isUpperMult <em>Upper Mult</em>}</li>
+ * </ul>
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS()
+ * @model
+ * @generated
+ */
+public interface MultiplicityCS extends CSTrace
+{
+  /**
+	 * Returns the value of the '<em><b>Opt</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Opt</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Opt</em>' attribute.
+	 * @see #setOpt(boolean)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS_Opt()
+	 * @model
+	 * @generated
+	 */
+  boolean isOpt();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isOpt <em>Opt</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Opt</em>' attribute.
+	 * @see #isOpt()
+	 * @generated
+	 */
+  void setOpt(boolean value);
+
+  /**
+	 * Returns the value of the '<em><b>Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Mult</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Mult</em>' attribute.
+	 * @see #setMult(boolean)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS_Mult()
+	 * @model
+	 * @generated
+	 */
+  boolean isMult();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isMult <em>Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Mult</em>' attribute.
+	 * @see #isMult()
+	 * @generated
+	 */
+  void setMult(boolean value);
+
+  /**
+	 * Returns the value of the '<em><b>Lower</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Lower</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Lower</em>' attribute.
+	 * @see #setLower(int)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS_Lower()
+	 * @model
+	 * @generated
+	 */
+  int getLower();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getLower <em>Lower</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Lower</em>' attribute.
+	 * @see #getLower()
+	 * @generated
+	 */
+  void setLower(int value);
+
+  /**
+	 * Returns the value of the '<em><b>Upper Int</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Upper Int</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Upper Int</em>' attribute.
+	 * @see #setUpperInt(int)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS_UpperInt()
+	 * @model
+	 * @generated
+	 */
+  int getUpperInt();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#getUpperInt <em>Upper Int</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Upper Int</em>' attribute.
+	 * @see #getUpperInt()
+	 * @generated
+	 */
+  void setUpperInt(int value);
+
+  /**
+	 * Returns the value of the '<em><b>Upper Mult</b></em>' attribute.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Upper Mult</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Upper Mult</em>' attribute.
+	 * @see #setUpperMult(boolean)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getMultiplicityCS_UpperMult()
+	 * @model
+	 * @generated
+	 */
+  boolean isUpperMult();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS#isUpperMult <em>Upper Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Upper Mult</em>' attribute.
+	 * @see #isUpperMult()
+	 * @generated
+	 */
+  void setUpperMult(boolean value);
+
+} // MultiplicityCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NameExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NameExpCS.java
index 83a7b70..f301f15 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NameExpCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NameExpCS.java
@@ -21,7 +21,7 @@
  * @model
  * @generated
  */
-public interface NameExpCS extends PrimaryExpCS
+public interface NameExpCS extends PrimaryExpCS, NavigationExpCS
 {
   /**
 	 * Returns the value of the '<em><b>Exp Name</b></em>' containment reference.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NavigationExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NavigationExpCS.java
new file mode 100644
index 0000000..f72c11c
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NavigationExpCS.java
@@ -0,0 +1,18 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Navigation Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getNavigationExpCS()
+ * @model
+ * @generated
+ */
+public interface NavigationExpCS extends CSTrace
+{
+} // NavigationExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NullLiteralExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NullLiteralExpCS.java
new file mode 100644
index 0000000..afd0bda
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/NullLiteralExpCS.java
@@ -0,0 +1,19 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Null Literal Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getNullLiteralExpCS()
+ * @model
+ * @generated
+ */
+public interface NullLiteralExpCS extends LiteralExpCS
+{
+} // NullLiteralExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/OperationCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/OperationCS.java
index 5234bed..5aec517 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/OperationCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/OperationCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Operation CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PackageCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PackageCS.java
index cb3bda0..4e1f288 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PackageCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PackageCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Package CS</b></em>'.
@@ -18,7 +16,7 @@
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getPackages <em>Packages</em>}</li>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getClasses <em>Classes</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PackageCS#getClassifiers <em>Classifiers</em>}</li>
  * </ul>
  *
  * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPackageCS()
@@ -70,19 +68,19 @@
   EList<PackageCS> getPackages();
 
   /**
-	 * Returns the value of the '<em><b>Classes</b></em>' containment reference list.
-	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.ClassCS}.
+	 * Returns the value of the '<em><b>Classifiers</b></em>' containment reference list.
+	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS}.
 	 * <!-- begin-user-doc -->
    * <p>
-   * If the meaning of the '<em>Classes</em>' containment reference list isn't clear,
+   * If the meaning of the '<em>Classifiers</em>' containment reference list isn't clear,
    * there really should be more of a description here...
    * </p>
    * <!-- end-user-doc -->
-	 * @return the value of the '<em>Classes</em>' containment reference list.
-	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPackageCS_Classes()
+	 * @return the value of the '<em>Classifiers</em>' containment reference list.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPackageCS_Classifiers()
 	 * @model containment="true"
 	 * @generated
 	 */
-  EList<ClassCS> getClasses();
+  EList<ClassifierCS> getClassifiers();
 
 } // PackageCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ParameterCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ParameterCS.java
index ed41634..68657c0 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ParameterCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/ParameterCS.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc.minioclcs;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Parameter CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathElementCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathElementCS.java
index 22116e5..6b4c262 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathElementCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathElementCS.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc.minioclcs;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Path Element CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathNameCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathNameCS.java
index 39090f2..025123c 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathNameCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PathNameCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Path Name CS</b></em>'.
@@ -16,7 +14,6 @@
  * The following features are supported:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS#getPath <em>Path</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS#getPathElements <em>Path Elements</em>}</li>
  * </ul>
  *
@@ -27,22 +24,6 @@
 public interface PathNameCS extends CSTrace
 {
   /**
-	 * Returns the value of the '<em><b>Path</b></em>' containment reference list.
-	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.PathElementCS}.
-	 * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>Path</em>' containment reference list isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-	 * @return the value of the '<em>Path</em>' containment reference list.
-	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPathNameCS_Path()
-	 * @model containment="true"
-	 * @generated
-	 */
-  EList<PathElementCS> getPath();
-
-  /**
 	 * Returns the value of the '<em><b>Path Elements</b></em>' containment reference list.
 	 * The list contents are of type {@link org.eclipse.qvtd.doc.minioclcs.PathElementCS}.
 	 * <!-- begin-user-doc -->
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PropertyCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PropertyCS.java
index aaf39e8..ca27bad 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PropertyCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/PropertyCS.java
@@ -3,8 +3,6 @@
  */
 package org.eclipse.qvtd.doc.minioclcs;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Property CS</b></em>'.
@@ -16,6 +14,7 @@
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS#getTypeRef <em>Type Ref</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS#getMultiplicity <em>Multiplicity</em>}</li>
  * </ul>
  *
  * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPropertyCS()
@@ -76,4 +75,30 @@
 	 */
   void setTypeRef(PathNameCS value);
 
+  /**
+	 * Returns the value of the '<em><b>Multiplicity</b></em>' containment reference.
+	 * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Multiplicity</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+	 * @return the value of the '<em>Multiplicity</em>' containment reference.
+	 * @see #setMultiplicity(MultiplicityCS)
+	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getPropertyCS_Multiplicity()
+	 * @model containment="true"
+	 * @generated
+	 */
+  MultiplicityCS getMultiplicity();
+
+  /**
+	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS#getMultiplicity <em>Multiplicity</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @param value the new value of the '<em>Multiplicity</em>' containment reference.
+	 * @see #getMultiplicity()
+	 * @generated
+	 */
+  void setMultiplicity(MultiplicityCS value);
+
 } // PropertyCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RootCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RootCS.java
index 7fe73e9..bfc77a2 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RootCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RootCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Root CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RoundedBracketClauseCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RoundedBracketClauseCS.java
index 2627603..1679dd1 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RoundedBracketClauseCS.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/RoundedBracketClauseCS.java
@@ -5,8 +5,6 @@
 
 import org.eclipse.emf.common.util.EList;
 
-import org.eclipse.emf.ecore.EObject;
-
 /**
  * <!-- begin-user-doc -->
  * A representation of the model object '<em><b>Rounded Bracket Clause CS</b></em>'.
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/SelfExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/SelfExpCS.java
new file mode 100644
index 0000000..582bcac
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/SelfExpCS.java
@@ -0,0 +1,19 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Self Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getSelfExpCS()
+ * @model
+ * @generated
+ */
+public interface SelfExpCS extends PrimaryExpCS
+{
+} // SelfExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/StringLiteralExpCS.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/StringLiteralExpCS.java
deleted file mode 100644
index fdfa17b..0000000
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/StringLiteralExpCS.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * generated by Xtext 2.10.0
- */
-package org.eclipse.qvtd.doc.minioclcs;
-
-
-/**
- * <!-- begin-user-doc -->
- * A representation of the model object '<em><b>String Literal Exp CS</b></em>'.
- * <!-- end-user-doc -->
- *
- * <p>
- * The following features are supported:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS#getStringSymbol <em>String Symbol</em>}</li>
- * </ul>
- *
- * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getStringLiteralExpCS()
- * @model
- * @generated
- */
-public interface StringLiteralExpCS extends LiteralExpCS
-{
-  /**
-	 * Returns the value of the '<em><b>String Symbol</b></em>' attribute.
-	 * <!-- begin-user-doc -->
-   * <p>
-   * If the meaning of the '<em>String Symbol</em>' attribute isn't clear,
-   * there really should be more of a description here...
-   * </p>
-   * <!-- end-user-doc -->
-	 * @return the value of the '<em>String Symbol</em>' attribute.
-	 * @see #setStringSymbol(String)
-	 * @see org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage#getStringLiteralExpCS_StringSymbol()
-	 * @model
-	 * @generated
-	 */
-  String getStringSymbol();
-
-  /**
-	 * Sets the value of the '{@link org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS#getStringSymbol <em>String Symbol</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @param value the new value of the '<em>String Symbol</em>' attribute.
-	 * @see #getStringSymbol()
-	 * @generated
-	 */
-  void setStringSymbol(String value);
-
-} // StringLiteralExpCS
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/AccVarCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/AccVarCSImpl.java
new file mode 100644
index 0000000..297a891
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/AccVarCSImpl.java
@@ -0,0 +1,325 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Acc Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl#getAccName <em>Acc Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl#getAccType <em>Acc Type</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.AccVarCSImpl#getAccInitExp <em>Acc Init Exp</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class AccVarCSImpl extends CSTraceImpl implements AccVarCS
+{
+  /**
+	 * The default value of the '{@link #getAccName() <em>Acc Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getAccName()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final String ACC_NAME_EDEFAULT = null;
+
+  /**
+	 * The cached value of the '{@link #getAccName() <em>Acc Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getAccName()
+	 * @generated
+	 * @ordered
+	 */
+  protected String accName = ACC_NAME_EDEFAULT;
+
+  /**
+	 * The cached value of the '{@link #getAccType() <em>Acc Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getAccType()
+	 * @generated
+	 * @ordered
+	 */
+  protected PathNameCS accType;
+
+  /**
+	 * The cached value of the '{@link #getAccInitExp() <em>Acc Init Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getAccInitExp()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS accInitExp;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected AccVarCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.ACC_VAR_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getAccName()
+  {
+		return accName;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setAccName(String newAccName)
+  {
+		String oldAccName = accName;
+		accName = newAccName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ACC_VAR_CS__ACC_NAME, oldAccName, accName));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public PathNameCS getAccType()
+  {
+		return accType;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetAccType(PathNameCS newAccType, NotificationChain msgs)
+  {
+		PathNameCS oldAccType = accType;
+		accType = newAccType;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ACC_VAR_CS__ACC_TYPE, oldAccType, newAccType);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setAccType(PathNameCS newAccType)
+  {
+		if (newAccType != accType) {
+			NotificationChain msgs = null;
+			if (accType != null)
+				msgs = ((InternalEObject)accType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ACC_VAR_CS__ACC_TYPE, null, msgs);
+			if (newAccType != null)
+				msgs = ((InternalEObject)newAccType).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ACC_VAR_CS__ACC_TYPE, null, msgs);
+			msgs = basicSetAccType(newAccType, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ACC_VAR_CS__ACC_TYPE, newAccType, newAccType));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getAccInitExp()
+  {
+		return accInitExp;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetAccInitExp(ExpCS newAccInitExp, NotificationChain msgs)
+  {
+		ExpCS oldAccInitExp = accInitExp;
+		accInitExp = newAccInitExp;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP, oldAccInitExp, newAccInitExp);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setAccInitExp(ExpCS newAccInitExp)
+  {
+		if (newAccInitExp != accInitExp) {
+			NotificationChain msgs = null;
+			if (accInitExp != null)
+				msgs = ((InternalEObject)accInitExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP, null, msgs);
+			if (newAccInitExp != null)
+				msgs = ((InternalEObject)newAccInitExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP, null, msgs);
+			msgs = basicSetAccInitExp(newAccInitExp, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP, newAccInitExp, newAccInitExp));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ACC_VAR_CS__ACC_TYPE:
+				return basicSetAccType(null, msgs);
+			case MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP:
+				return basicSetAccInitExp(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ACC_VAR_CS__ACC_NAME:
+				return getAccName();
+			case MinioclcsPackage.ACC_VAR_CS__ACC_TYPE:
+				return getAccType();
+			case MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP:
+				return getAccInitExp();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ACC_VAR_CS__ACC_NAME:
+				setAccName((String)newValue);
+				return;
+			case MinioclcsPackage.ACC_VAR_CS__ACC_TYPE:
+				setAccType((PathNameCS)newValue);
+				return;
+			case MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP:
+				setAccInitExp((ExpCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ACC_VAR_CS__ACC_NAME:
+				setAccName(ACC_NAME_EDEFAULT);
+				return;
+			case MinioclcsPackage.ACC_VAR_CS__ACC_TYPE:
+				setAccType((PathNameCS)null);
+				return;
+			case MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP:
+				setAccInitExp((ExpCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ACC_VAR_CS__ACC_NAME:
+				return ACC_NAME_EDEFAULT == null ? accName != null : !ACC_NAME_EDEFAULT.equals(accName);
+			case MinioclcsPackage.ACC_VAR_CS__ACC_TYPE:
+				return accType != null;
+			case MinioclcsPackage.ACC_VAR_CS__ACC_INIT_EXP:
+				return accInitExp != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (accName: ");
+		result.append(accName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //AccVarCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanExpCSImpl.java
index 580e5c1..cb28611 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanExpCSImpl.java
@@ -4,11 +4,8 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanLiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanLiteralExpCSImpl.java
index ca4e948..6a7f9f6 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanLiteralExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/BooleanLiteralExpCSImpl.java
@@ -4,7 +4,6 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CSTraceImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CSTraceImpl.java
index 8e3407c..1698c04 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CSTraceImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CSTraceImpl.java
@@ -4,15 +4,11 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
 import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.miniocl.Element;
-
 import org.eclipse.qvtd.doc.minioclcs.CSTrace;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CallExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CallExpCSImpl.java
index 5e7e414..dd02bd9 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CallExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CallExpCSImpl.java
@@ -5,15 +5,12 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
-import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
 
 /**
  * <!-- begin-user-doc -->
@@ -24,7 +21,7 @@
  * </p>
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CallExpCSImpl#getSource <em>Source</em>}</li>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CallExpCSImpl#getNameExp <em>Name Exp</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CallExpCSImpl#getNavExp <em>Nav Exp</em>}</li>
  * </ul>
  *
  * @generated
@@ -42,14 +39,14 @@
   protected CallExpCS source;
 
   /**
-	 * The cached value of the '{@link #getNameExp() <em>Name Exp</em>}' containment reference.
+	 * The cached value of the '{@link #getNavExp() <em>Nav Exp</em>}' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @see #getNameExp()
+	 * @see #getNavExp()
 	 * @generated
 	 * @ordered
 	 */
-  protected NameExpCS nameExp;
+  protected NavigationExpCS navExp;
 
   /**
 	 * <!-- begin-user-doc -->
@@ -123,9 +120,9 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public NameExpCS getNameExp()
+  public NavigationExpCS getNavExp()
   {
-		return nameExp;
+		return navExp;
 	}
 
   /**
@@ -133,12 +130,12 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public NotificationChain basicSetNameExp(NameExpCS newNameExp, NotificationChain msgs)
+  public NotificationChain basicSetNavExp(NavigationExpCS newNavExp, NotificationChain msgs)
   {
-		NameExpCS oldNameExp = nameExp;
-		nameExp = newNameExp;
+		NavigationExpCS oldNavExp = navExp;
+		navExp = newNavExp;
 		if (eNotificationRequired()) {
-			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CALL_EXP_CS__NAME_EXP, oldNameExp, newNameExp);
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CALL_EXP_CS__NAV_EXP, oldNavExp, newNavExp);
 			if (msgs == null) msgs = notification; else msgs.add(notification);
 		}
 		return msgs;
@@ -149,19 +146,19 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public void setNameExp(NameExpCS newNameExp)
+  public void setNavExp(NavigationExpCS newNavExp)
   {
-		if (newNameExp != nameExp) {
+		if (newNavExp != navExp) {
 			NotificationChain msgs = null;
-			if (nameExp != null)
-				msgs = ((InternalEObject)nameExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.CALL_EXP_CS__NAME_EXP, null, msgs);
-			if (newNameExp != null)
-				msgs = ((InternalEObject)newNameExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.CALL_EXP_CS__NAME_EXP, null, msgs);
-			msgs = basicSetNameExp(newNameExp, msgs);
+			if (navExp != null)
+				msgs = ((InternalEObject)navExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.CALL_EXP_CS__NAV_EXP, null, msgs);
+			if (newNavExp != null)
+				msgs = ((InternalEObject)newNavExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.CALL_EXP_CS__NAV_EXP, null, msgs);
+			msgs = basicSetNavExp(newNavExp, msgs);
 			if (msgs != null) msgs.dispatch();
 		}
 		else if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CALL_EXP_CS__NAME_EXP, newNameExp, newNameExp));
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CALL_EXP_CS__NAV_EXP, newNavExp, newNavExp));
 	}
 
   /**
@@ -175,8 +172,8 @@
 		switch (featureID) {
 			case MinioclcsPackage.CALL_EXP_CS__SOURCE:
 				return basicSetSource(null, msgs);
-			case MinioclcsPackage.CALL_EXP_CS__NAME_EXP:
-				return basicSetNameExp(null, msgs);
+			case MinioclcsPackage.CALL_EXP_CS__NAV_EXP:
+				return basicSetNavExp(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -192,8 +189,8 @@
 		switch (featureID) {
 			case MinioclcsPackage.CALL_EXP_CS__SOURCE:
 				return getSource();
-			case MinioclcsPackage.CALL_EXP_CS__NAME_EXP:
-				return getNameExp();
+			case MinioclcsPackage.CALL_EXP_CS__NAV_EXP:
+				return getNavExp();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -210,8 +207,8 @@
 			case MinioclcsPackage.CALL_EXP_CS__SOURCE:
 				setSource((CallExpCS)newValue);
 				return;
-			case MinioclcsPackage.CALL_EXP_CS__NAME_EXP:
-				setNameExp((NameExpCS)newValue);
+			case MinioclcsPackage.CALL_EXP_CS__NAV_EXP:
+				setNavExp((NavigationExpCS)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -229,8 +226,8 @@
 			case MinioclcsPackage.CALL_EXP_CS__SOURCE:
 				setSource((CallExpCS)null);
 				return;
-			case MinioclcsPackage.CALL_EXP_CS__NAME_EXP:
-				setNameExp((NameExpCS)null);
+			case MinioclcsPackage.CALL_EXP_CS__NAV_EXP:
+				setNavExp((NavigationExpCS)null);
 				return;
 		}
 		super.eUnset(featureID);
@@ -247,8 +244,8 @@
 		switch (featureID) {
 			case MinioclcsPackage.CALL_EXP_CS__SOURCE:
 				return source != null;
-			case MinioclcsPackage.CALL_EXP_CS__NAME_EXP:
-				return nameExp != null;
+			case MinioclcsPackage.CALL_EXP_CS__NAV_EXP:
+				return navExp != null;
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassCSImpl.java
index 73ff27d..f0a22e4 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassCSImpl.java
@@ -7,18 +7,12 @@
 
 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.impl.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.ClassCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.OperationCS;
@@ -33,7 +27,6 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl#getExtends <em>Extends</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl#getProperties <em>Properties</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassCSImpl#getOperations <em>Operations</em>}</li>
@@ -41,29 +34,9 @@
  *
  * @generated
  */
-public class ClassCSImpl extends CSTraceImpl implements ClassCS
+public class ClassCSImpl extends ClassifierCSImpl implements ClassCS
 {
   /**
-	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-  protected static final String NAME_EDEFAULT = null;
-
-  /**
-	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see #getName()
-	 * @generated
-	 * @ordered
-	 */
-  protected String name = NAME_EDEFAULT;
-
-  /**
 	 * The cached value of the '{@link #getExtends() <em>Extends</em>}' containment reference.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -119,29 +92,6 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public String getName()
-  {
-		return name;
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  public void setName(String newName)
-  {
-		String oldName = name;
-		name = newName;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CLASS_CS__NAME, oldName, name));
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
   public PathNameCS getExtends()
   {
 		return extends_;
@@ -237,8 +187,6 @@
   public Object eGet(int featureID, boolean resolve, boolean coreType)
   {
 		switch (featureID) {
-			case MinioclcsPackage.CLASS_CS__NAME:
-				return getName();
 			case MinioclcsPackage.CLASS_CS__EXTENDS:
 				return getExtends();
 			case MinioclcsPackage.CLASS_CS__PROPERTIES:
@@ -259,9 +207,6 @@
   public void eSet(int featureID, Object newValue)
   {
 		switch (featureID) {
-			case MinioclcsPackage.CLASS_CS__NAME:
-				setName((String)newValue);
-				return;
 			case MinioclcsPackage.CLASS_CS__EXTENDS:
 				setExtends((PathNameCS)newValue);
 				return;
@@ -286,9 +231,6 @@
   public void eUnset(int featureID)
   {
 		switch (featureID) {
-			case MinioclcsPackage.CLASS_CS__NAME:
-				setName(NAME_EDEFAULT);
-				return;
 			case MinioclcsPackage.CLASS_CS__EXTENDS:
 				setExtends((PathNameCS)null);
 				return;
@@ -311,8 +253,6 @@
   public boolean eIsSet(int featureID)
   {
 		switch (featureID) {
-			case MinioclcsPackage.CLASS_CS__NAME:
-				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case MinioclcsPackage.CLASS_CS__EXTENDS:
 				return extends_ != null;
 			case MinioclcsPackage.CLASS_CS__PROPERTIES:
@@ -323,21 +263,4 @@
 		return super.eIsSet(featureID);
 	}
 
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public String toString()
-  {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (name: ");
-		result.append(name);
-		result.append(')');
-		return result.toString();
-	}
-
 } //ClassCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassifierCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassifierCSImpl.java
new file mode 100644
index 0000000..292e5b3
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ClassifierCSImpl.java
@@ -0,0 +1,170 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Classifier CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.ClassifierCSImpl#getName <em>Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class ClassifierCSImpl extends CSTraceImpl implements ClassifierCS
+{
+  /**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected ClassifierCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.CLASSIFIER_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getName()
+  {
+		return name;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setName(String newName)
+  {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.CLASSIFIER_CS__NAME, oldName, name));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.CLASSIFIER_CS__NAME:
+				return getName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.CLASSIFIER_CS__NAME:
+				setName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.CLASSIFIER_CS__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.CLASSIFIER_CS__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //ClassifierCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectExpCSImpl.java
new file mode 100644
index 0000000..a9bcbde
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectExpCSImpl.java
@@ -0,0 +1,40 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Collect Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class CollectExpCSImpl extends LoopExpCSImpl implements CollectExpCS
+{
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected CollectExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.COLLECT_EXP_CS;
+	}
+
+} //CollectExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralExpCSImpl.java
new file mode 100644
index 0000000..cf65471
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralExpCSImpl.java
@@ -0,0 +1,230 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.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.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.qvtd.doc.minioclcs.CollectionKindCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Collection Literal Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl#getKind <em>Kind</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralExpCSImpl#getParts <em>Parts</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CollectionLiteralExpCSImpl extends LiteralExpCSImpl implements CollectionLiteralExpCS
+{
+  /**
+	 * The default value of the '{@link #getKind() <em>Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getKind()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final CollectionKindCS KIND_EDEFAULT = CollectionKindCS.COLLECTION;
+
+  /**
+	 * The cached value of the '{@link #getKind() <em>Kind</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getKind()
+	 * @generated
+	 * @ordered
+	 */
+  protected CollectionKindCS kind = KIND_EDEFAULT;
+
+  /**
+	 * The cached value of the '{@link #getParts() <em>Parts</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getParts()
+	 * @generated
+	 * @ordered
+	 */
+  protected EList<CollectionLiteralPartCS> parts;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected CollectionLiteralExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.COLLECTION_LITERAL_EXP_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public CollectionKindCS getKind()
+  {
+		return kind;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setKind(CollectionKindCS newKind)
+  {
+		CollectionKindCS oldKind = kind;
+		kind = newKind == null ? KIND_EDEFAULT : newKind;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__KIND, oldKind, kind));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EList<CollectionLiteralPartCS> getParts()
+  {
+		if (parts == null) {
+			parts = new EObjectContainmentEList<CollectionLiteralPartCS>(CollectionLiteralPartCS.class, this, MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS);
+		}
+		return parts;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS:
+				return ((InternalEList<?>)getParts()).basicRemove(otherEnd, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__KIND:
+				return getKind();
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS:
+				return getParts();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__KIND:
+				setKind((CollectionKindCS)newValue);
+				return;
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS:
+				getParts().clear();
+				getParts().addAll((Collection<? extends CollectionLiteralPartCS>)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__KIND:
+				setKind(KIND_EDEFAULT);
+				return;
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS:
+				getParts().clear();
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__KIND:
+				return kind != KIND_EDEFAULT;
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS__PARTS:
+				return parts != null && !parts.isEmpty();
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (kind: ");
+		result.append(kind);
+		result.append(')');
+		return result.toString();
+	}
+
+} //CollectionLiteralExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralPartCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralPartCSImpl.java
new file mode 100644
index 0000000..d16b0d3
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/CollectionLiteralPartCSImpl.java
@@ -0,0 +1,253 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Collection Literal Part CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl#getFirst <em>First</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.CollectionLiteralPartCSImpl#getLast <em>Last</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class CollectionLiteralPartCSImpl extends CSTraceImpl implements CollectionLiteralPartCS
+{
+  /**
+	 * The cached value of the '{@link #getFirst() <em>First</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getFirst()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS first;
+
+  /**
+	 * The cached value of the '{@link #getLast() <em>Last</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getLast()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS last;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected CollectionLiteralPartCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.COLLECTION_LITERAL_PART_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getFirst()
+  {
+		return first;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetFirst(ExpCS newFirst, NotificationChain msgs)
+  {
+		ExpCS oldFirst = first;
+		first = newFirst;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST, oldFirst, newFirst);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setFirst(ExpCS newFirst)
+  {
+		if (newFirst != first) {
+			NotificationChain msgs = null;
+			if (first != null)
+				msgs = ((InternalEObject)first).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST, null, msgs);
+			if (newFirst != null)
+				msgs = ((InternalEObject)newFirst).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST, null, msgs);
+			msgs = basicSetFirst(newFirst, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST, newFirst, newFirst));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getLast()
+  {
+		return last;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetLast(ExpCS newLast, NotificationChain msgs)
+  {
+		ExpCS oldLast = last;
+		last = newLast;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST, oldLast, newLast);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setLast(ExpCS newLast)
+  {
+		if (newLast != last) {
+			NotificationChain msgs = null;
+			if (last != null)
+				msgs = ((InternalEObject)last).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST, null, msgs);
+			if (newLast != null)
+				msgs = ((InternalEObject)newLast).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST, null, msgs);
+			msgs = basicSetLast(newLast, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST, newLast, newLast));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST:
+				return basicSetFirst(null, msgs);
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST:
+				return basicSetLast(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST:
+				return getFirst();
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST:
+				return getLast();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST:
+				setFirst((ExpCS)newValue);
+				return;
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST:
+				setLast((ExpCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST:
+				setFirst((ExpCS)null);
+				return;
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST:
+				setLast((ExpCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__FIRST:
+				return first != null;
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS__LAST:
+				return last != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //CollectionLiteralPartCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ConstraintsDefCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ConstraintsDefCSImpl.java
index ed746c6..2ec3456 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ConstraintsDefCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ConstraintsDefCSImpl.java
@@ -7,18 +7,12 @@
 
 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.impl.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
 import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/DatatypeCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/DatatypeCSImpl.java
new file mode 100644
index 0000000..028c800
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/DatatypeCSImpl.java
@@ -0,0 +1,170 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Datatype CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.DatatypeCSImpl#getTypeName <em>Type Name</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class DatatypeCSImpl extends ClassifierCSImpl implements DatatypeCS
+{
+  /**
+	 * The default value of the '{@link #getTypeName() <em>Type Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getTypeName()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final String TYPE_NAME_EDEFAULT = null;
+
+  /**
+	 * The cached value of the '{@link #getTypeName() <em>Type Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getTypeName()
+	 * @generated
+	 * @ordered
+	 */
+  protected String typeName = TYPE_NAME_EDEFAULT;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected DatatypeCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.DATATYPE_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getTypeName()
+  {
+		return typeName;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setTypeName(String newTypeName)
+  {
+		String oldTypeName = typeName;
+		typeName = newTypeName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.DATATYPE_CS__TYPE_NAME, oldTypeName, typeName));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.DATATYPE_CS__TYPE_NAME:
+				return getTypeName();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.DATATYPE_CS__TYPE_NAME:
+				setTypeName((String)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.DATATYPE_CS__TYPE_NAME:
+				setTypeName(TYPE_NAME_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.DATATYPE_CS__TYPE_NAME:
+				return TYPE_NAME_EDEFAULT == null ? typeName != null : !TYPE_NAME_EDEFAULT.equals(typeName);
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (typeName: ");
+		result.append(typeName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //DatatypeCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ExpCSImpl.java
index 1ed3329..8ab36f2 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ExpCSImpl.java
@@ -4,9 +4,6 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.ExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IntLiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IntLiteralExpCSImpl.java
index 95c077d..d6f9787 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IntLiteralExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IntLiteralExpCSImpl.java
@@ -4,11 +4,8 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/InvariantCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/InvariantCSImpl.java
index 4de3eb1..61aacb8 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/InvariantCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/InvariantCSImpl.java
@@ -5,13 +5,9 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.ExpCS;
 import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IterateExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IterateExpCSImpl.java
new file mode 100644
index 0000000..e2ef124
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IterateExpCSImpl.java
@@ -0,0 +1,184 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Iterate Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.IterateExpCSImpl#getAccVar <em>Acc Var</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IterateExpCSImpl extends LoopExpCSImpl implements IterateExpCS
+{
+  /**
+	 * The cached value of the '{@link #getAccVar() <em>Acc Var</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getAccVar()
+	 * @generated
+	 * @ordered
+	 */
+  protected AccVarCS accVar;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected IterateExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.ITERATE_EXP_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public AccVarCS getAccVar()
+  {
+		return accVar;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetAccVar(AccVarCS newAccVar, NotificationChain msgs)
+  {
+		AccVarCS oldAccVar = accVar;
+		accVar = newAccVar;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR, oldAccVar, newAccVar);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setAccVar(AccVarCS newAccVar)
+  {
+		if (newAccVar != accVar) {
+			NotificationChain msgs = null;
+			if (accVar != null)
+				msgs = ((InternalEObject)accVar).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR, null, msgs);
+			if (newAccVar != null)
+				msgs = ((InternalEObject)newAccVar).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR, null, msgs);
+			msgs = basicSetAccVar(newAccVar, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR, newAccVar, newAccVar));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR:
+				return basicSetAccVar(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR:
+				return getAccVar();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR:
+				setAccVar((AccVarCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR:
+				setAccVar((AccVarCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATE_EXP_CS__ACC_VAR:
+				return accVar != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //IterateExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IteratorVarCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IteratorVarCSImpl.java
new file mode 100644
index 0000000..353f2b9
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/IteratorVarCSImpl.java
@@ -0,0 +1,255 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Iterator Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl#getItName <em>It Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.IteratorVarCSImpl#getItType <em>It Type</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class IteratorVarCSImpl extends CSTraceImpl implements IteratorVarCS
+{
+  /**
+	 * The default value of the '{@link #getItName() <em>It Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getItName()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final String IT_NAME_EDEFAULT = null;
+
+  /**
+	 * The cached value of the '{@link #getItName() <em>It Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getItName()
+	 * @generated
+	 * @ordered
+	 */
+  protected String itName = IT_NAME_EDEFAULT;
+
+  /**
+	 * The cached value of the '{@link #getItType() <em>It Type</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getItType()
+	 * @generated
+	 * @ordered
+	 */
+  protected PathNameCS itType;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected IteratorVarCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.ITERATOR_VAR_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getItName()
+  {
+		return itName;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setItName(String newItName)
+  {
+		String oldItName = itName;
+		itName = newItName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ITERATOR_VAR_CS__IT_NAME, oldItName, itName));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public PathNameCS getItType()
+  {
+		return itType;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetItType(PathNameCS newItType, NotificationChain msgs)
+  {
+		PathNameCS oldItType = itType;
+		itType = newItType;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE, oldItType, newItType);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setItType(PathNameCS newItType)
+  {
+		if (newItType != itType) {
+			NotificationChain msgs = null;
+			if (itType != null)
+				msgs = ((InternalEObject)itType).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE, null, msgs);
+			if (newItType != null)
+				msgs = ((InternalEObject)newItType).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE, null, msgs);
+			msgs = basicSetItType(newItType, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE, newItType, newItType));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE:
+				return basicSetItType(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_NAME:
+				return getItName();
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE:
+				return getItType();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_NAME:
+				setItName((String)newValue);
+				return;
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE:
+				setItType((PathNameCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_NAME:
+				setItName(IT_NAME_EDEFAULT);
+				return;
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE:
+				setItType((PathNameCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_NAME:
+				return IT_NAME_EDEFAULT == null ? itName != null : !IT_NAME_EDEFAULT.equals(itName);
+			case MinioclcsPackage.ITERATOR_VAR_CS__IT_TYPE:
+				return itType != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (itName: ");
+		result.append(itName);
+		result.append(')');
+		return result.toString();
+	}
+
+} //IteratorVarCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetExpCSImpl.java
new file mode 100644
index 0000000..dac5465
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetExpCSImpl.java
@@ -0,0 +1,228 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.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.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Let Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl#getLetVars <em>Let Vars</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LetExpCSImpl#getInExp <em>In Exp</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LetExpCSImpl extends PrimaryExpCSImpl implements LetExpCS
+{
+  /**
+	 * The cached value of the '{@link #getLetVars() <em>Let Vars</em>}' containment reference list.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getLetVars()
+	 * @generated
+	 * @ordered
+	 */
+  protected EList<LetVarCS> letVars;
+
+  /**
+	 * The cached value of the '{@link #getInExp() <em>In Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getInExp()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS inExp;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected LetExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.LET_EXP_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EList<LetVarCS> getLetVars()
+  {
+		if (letVars == null) {
+			letVars = new EObjectContainmentEList<LetVarCS>(LetVarCS.class, this, MinioclcsPackage.LET_EXP_CS__LET_VARS);
+		}
+		return letVars;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getInExp()
+  {
+		return inExp;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetInExp(ExpCS newInExp, NotificationChain msgs)
+  {
+		ExpCS oldInExp = inExp;
+		inExp = newInExp;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_EXP_CS__IN_EXP, oldInExp, newInExp);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setInExp(ExpCS newInExp)
+  {
+		if (newInExp != inExp) {
+			NotificationChain msgs = null;
+			if (inExp != null)
+				msgs = ((InternalEObject)inExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_EXP_CS__IN_EXP, null, msgs);
+			if (newInExp != null)
+				msgs = ((InternalEObject)newInExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_EXP_CS__IN_EXP, null, msgs);
+			msgs = basicSetInExp(newInExp, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_EXP_CS__IN_EXP, newInExp, newInExp));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_EXP_CS__LET_VARS:
+				return ((InternalEList<?>)getLetVars()).basicRemove(otherEnd, msgs);
+			case MinioclcsPackage.LET_EXP_CS__IN_EXP:
+				return basicSetInExp(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_EXP_CS__LET_VARS:
+				return getLetVars();
+			case MinioclcsPackage.LET_EXP_CS__IN_EXP:
+				return getInExp();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_EXP_CS__LET_VARS:
+				getLetVars().clear();
+				getLetVars().addAll((Collection<? extends LetVarCS>)newValue);
+				return;
+			case MinioclcsPackage.LET_EXP_CS__IN_EXP:
+				setInExp((ExpCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_EXP_CS__LET_VARS:
+				getLetVars().clear();
+				return;
+			case MinioclcsPackage.LET_EXP_CS__IN_EXP:
+				setInExp((ExpCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_EXP_CS__LET_VARS:
+				return letVars != null && !letVars.isEmpty();
+			case MinioclcsPackage.LET_EXP_CS__IN_EXP:
+				return inExp != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LetExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetVarCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetVarCSImpl.java
new file mode 100644
index 0000000..f65eeb5
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LetVarCSImpl.java
@@ -0,0 +1,325 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Let Var CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl#getName <em>Name</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl#getTypeRef <em>Type Ref</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LetVarCSImpl#getInitExp <em>Init Exp</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LetVarCSImpl extends CSTraceImpl implements LetVarCS
+{
+  /**
+	 * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+	 * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getName()
+	 * @generated
+	 * @ordered
+	 */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+	 * The cached value of the '{@link #getTypeRef() <em>Type Ref</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getTypeRef()
+	 * @generated
+	 * @ordered
+	 */
+  protected PathNameCS typeRef;
+
+  /**
+	 * The cached value of the '{@link #getInitExp() <em>Init Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getInitExp()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS initExp;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected LetVarCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.LET_VAR_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String getName()
+  {
+		return name;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setName(String newName)
+  {
+		String oldName = name;
+		name = newName;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_VAR_CS__NAME, oldName, name));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public PathNameCS getTypeRef()
+  {
+		return typeRef;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetTypeRef(PathNameCS newTypeRef, NotificationChain msgs)
+  {
+		PathNameCS oldTypeRef = typeRef;
+		typeRef = newTypeRef;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_VAR_CS__TYPE_REF, oldTypeRef, newTypeRef);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setTypeRef(PathNameCS newTypeRef)
+  {
+		if (newTypeRef != typeRef) {
+			NotificationChain msgs = null;
+			if (typeRef != null)
+				msgs = ((InternalEObject)typeRef).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_VAR_CS__TYPE_REF, null, msgs);
+			if (newTypeRef != null)
+				msgs = ((InternalEObject)newTypeRef).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_VAR_CS__TYPE_REF, null, msgs);
+			msgs = basicSetTypeRef(newTypeRef, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_VAR_CS__TYPE_REF, newTypeRef, newTypeRef));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getInitExp()
+  {
+		return initExp;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetInitExp(ExpCS newInitExp, NotificationChain msgs)
+  {
+		ExpCS oldInitExp = initExp;
+		initExp = newInitExp;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_VAR_CS__INIT_EXP, oldInitExp, newInitExp);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setInitExp(ExpCS newInitExp)
+  {
+		if (newInitExp != initExp) {
+			NotificationChain msgs = null;
+			if (initExp != null)
+				msgs = ((InternalEObject)initExp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_VAR_CS__INIT_EXP, null, msgs);
+			if (newInitExp != null)
+				msgs = ((InternalEObject)newInitExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LET_VAR_CS__INIT_EXP, null, msgs);
+			msgs = basicSetInitExp(newInitExp, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LET_VAR_CS__INIT_EXP, newInitExp, newInitExp));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_VAR_CS__TYPE_REF:
+				return basicSetTypeRef(null, msgs);
+			case MinioclcsPackage.LET_VAR_CS__INIT_EXP:
+				return basicSetInitExp(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_VAR_CS__NAME:
+				return getName();
+			case MinioclcsPackage.LET_VAR_CS__TYPE_REF:
+				return getTypeRef();
+			case MinioclcsPackage.LET_VAR_CS__INIT_EXP:
+				return getInitExp();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_VAR_CS__NAME:
+				setName((String)newValue);
+				return;
+			case MinioclcsPackage.LET_VAR_CS__TYPE_REF:
+				setTypeRef((PathNameCS)newValue);
+				return;
+			case MinioclcsPackage.LET_VAR_CS__INIT_EXP:
+				setInitExp((ExpCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_VAR_CS__NAME:
+				setName(NAME_EDEFAULT);
+				return;
+			case MinioclcsPackage.LET_VAR_CS__TYPE_REF:
+				setTypeRef((PathNameCS)null);
+				return;
+			case MinioclcsPackage.LET_VAR_CS__INIT_EXP:
+				setInitExp((ExpCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LET_VAR_CS__NAME:
+				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+			case MinioclcsPackage.LET_VAR_CS__TYPE_REF:
+				return typeRef != null;
+			case MinioclcsPackage.LET_VAR_CS__INIT_EXP:
+				return initExp != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (name: ");
+		result.append(name);
+		result.append(')');
+		return result.toString();
+	}
+
+} //LetVarCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LiteralExpCSImpl.java
index f6793b6..4a791ff 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LiteralExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LiteralExpCSImpl.java
@@ -4,7 +4,6 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.qvtd.doc.minioclcs.LiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LogicExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LogicExpCSImpl.java
index 8af49d4..9de0d95 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LogicExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LogicExpCSImpl.java
@@ -5,12 +5,9 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
 import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LoopExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LoopExpCSImpl.java
new file mode 100644
index 0000000..ce32afa
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/LoopExpCSImpl.java
@@ -0,0 +1,254 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LoopExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Loop Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl#getItVar <em>It Var</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.LoopExpCSImpl#getExp <em>Exp</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class LoopExpCSImpl extends NavigationExpCSImpl implements LoopExpCS
+{
+  /**
+	 * The cached value of the '{@link #getItVar() <em>It Var</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getItVar()
+	 * @generated
+	 * @ordered
+	 */
+  protected IteratorVarCS itVar;
+
+  /**
+	 * The cached value of the '{@link #getExp() <em>Exp</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getExp()
+	 * @generated
+	 * @ordered
+	 */
+  protected ExpCS exp;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected LoopExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.LOOP_EXP_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public IteratorVarCS getItVar()
+  {
+		return itVar;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetItVar(IteratorVarCS newItVar, NotificationChain msgs)
+  {
+		IteratorVarCS oldItVar = itVar;
+		itVar = newItVar;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LOOP_EXP_CS__IT_VAR, oldItVar, newItVar);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setItVar(IteratorVarCS newItVar)
+  {
+		if (newItVar != itVar) {
+			NotificationChain msgs = null;
+			if (itVar != null)
+				msgs = ((InternalEObject)itVar).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LOOP_EXP_CS__IT_VAR, null, msgs);
+			if (newItVar != null)
+				msgs = ((InternalEObject)newItVar).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LOOP_EXP_CS__IT_VAR, null, msgs);
+			msgs = basicSetItVar(newItVar, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LOOP_EXP_CS__IT_VAR, newItVar, newItVar));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public ExpCS getExp()
+  {
+		return exp;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetExp(ExpCS newExp, NotificationChain msgs)
+  {
+		ExpCS oldExp = exp;
+		exp = newExp;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LOOP_EXP_CS__EXP, oldExp, newExp);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setExp(ExpCS newExp)
+  {
+		if (newExp != exp) {
+			NotificationChain msgs = null;
+			if (exp != null)
+				msgs = ((InternalEObject)exp).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LOOP_EXP_CS__EXP, null, msgs);
+			if (newExp != null)
+				msgs = ((InternalEObject)newExp).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.LOOP_EXP_CS__EXP, null, msgs);
+			msgs = basicSetExp(newExp, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.LOOP_EXP_CS__EXP, newExp, newExp));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LOOP_EXP_CS__IT_VAR:
+				return basicSetItVar(null, msgs);
+			case MinioclcsPackage.LOOP_EXP_CS__EXP:
+				return basicSetExp(null, msgs);
+		}
+		return super.eInverseRemove(otherEnd, featureID, msgs);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LOOP_EXP_CS__IT_VAR:
+				return getItVar();
+			case MinioclcsPackage.LOOP_EXP_CS__EXP:
+				return getExp();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LOOP_EXP_CS__IT_VAR:
+				setItVar((IteratorVarCS)newValue);
+				return;
+			case MinioclcsPackage.LOOP_EXP_CS__EXP:
+				setExp((ExpCS)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LOOP_EXP_CS__IT_VAR:
+				setItVar((IteratorVarCS)null);
+				return;
+			case MinioclcsPackage.LOOP_EXP_CS__EXP:
+				setExp((ExpCS)null);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.LOOP_EXP_CS__IT_VAR:
+				return itVar != null;
+			case MinioclcsPackage.LOOP_EXP_CS__EXP:
+				return exp != null;
+		}
+		return super.eIsSet(featureID);
+	}
+
+} //LoopExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsFactoryImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsFactoryImpl.java
index c893195..160c0dd 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsFactoryImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsFactoryImpl.java
@@ -4,14 +4,49 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EDataType;
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
-
 import org.eclipse.emf.ecore.impl.EFactoryImpl;
-
 import org.eclipse.emf.ecore.plugin.EcorePlugin;
-
-import org.eclipse.qvtd.doc.minioclcs.*;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionKindCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
+import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LoopExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsFactory;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
+import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.OperationCS;
+import org.eclipse.qvtd.doc.minioclcs.PackageCS;
+import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
+import org.eclipse.qvtd.doc.minioclcs.PathElementCS;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+import org.eclipse.qvtd.doc.minioclcs.PrimaryExpCS;
+import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
+import org.eclipse.qvtd.doc.minioclcs.RootCS;
+import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
 
 /**
  * <!-- begin-user-doc -->
@@ -63,8 +98,11 @@
 		switch (eClass.getClassifierID()) {
 			case MinioclcsPackage.ROOT_CS: return createRootCS();
 			case MinioclcsPackage.PACKAGE_CS: return createPackageCS();
+			case MinioclcsPackage.CLASSIFIER_CS: return createClassifierCS();
 			case MinioclcsPackage.CLASS_CS: return createClassCS();
+			case MinioclcsPackage.DATATYPE_CS: return createDatatypeCS();
 			case MinioclcsPackage.PROPERTY_CS: return createPropertyCS();
+			case MinioclcsPackage.MULTIPLICITY_CS: return createMultiplicityCS();
 			case MinioclcsPackage.OPERATION_CS: return createOperationCS();
 			case MinioclcsPackage.PARAMETER_CS: return createParameterCS();
 			case MinioclcsPackage.CONSTRAINTS_DEF_CS: return createConstraintsDefCS();
@@ -73,12 +111,23 @@
 			case MinioclcsPackage.LOGIC_EXP_CS: return createLogicExpCS();
 			case MinioclcsPackage.CALL_EXP_CS: return createCallExpCS();
 			case MinioclcsPackage.PRIMARY_EXP_CS: return createPrimaryExpCS();
+			case MinioclcsPackage.SELF_EXP_CS: return createSelfExpCS();
+			case MinioclcsPackage.NAVIGATION_EXP_CS: return createNavigationExpCS();
+			case MinioclcsPackage.LOOP_EXP_CS: return createLoopExpCS();
+			case MinioclcsPackage.COLLECT_EXP_CS: return createCollectExpCS();
+			case MinioclcsPackage.ITERATOR_VAR_CS: return createIteratorVarCS();
+			case MinioclcsPackage.ITERATE_EXP_CS: return createIterateExpCS();
+			case MinioclcsPackage.ACC_VAR_CS: return createAccVarCS();
 			case MinioclcsPackage.NAME_EXP_CS: return createNameExpCS();
 			case MinioclcsPackage.ROUNDED_BRACKET_CLAUSE_CS: return createRoundedBracketClauseCS();
 			case MinioclcsPackage.LITERAL_EXP_CS: return createLiteralExpCS();
 			case MinioclcsPackage.INT_LITERAL_EXP_CS: return createIntLiteralExpCS();
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS: return createStringLiteralExpCS();
 			case MinioclcsPackage.BOOLEAN_LITERAL_EXP_CS: return createBooleanLiteralExpCS();
+			case MinioclcsPackage.NULL_LITERAL_EXP_CS: return createNullLiteralExpCS();
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS: return createCollectionLiteralExpCS();
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS: return createCollectionLiteralPartCS();
+			case MinioclcsPackage.LET_EXP_CS: return createLetExpCS();
+			case MinioclcsPackage.LET_VAR_CS: return createLetVarCS();
 			case MinioclcsPackage.PATH_NAME_CS: return createPathNameCS();
 			case MinioclcsPackage.PATH_ELEMENT_CS: return createPathElementCS();
 			case MinioclcsPackage.BOOLEAN_EXP_CS: return createBooleanExpCS();
@@ -92,6 +141,38 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  @Override
+  public Object createFromString(EDataType eDataType, String initialValue)
+  {
+		switch (eDataType.getClassifierID()) {
+			case MinioclcsPackage.COLLECTION_KIND_CS:
+				return createCollectionKindCSFromString(eDataType, initialValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String convertToString(EDataType eDataType, Object instanceValue)
+  {
+		switch (eDataType.getClassifierID()) {
+			case MinioclcsPackage.COLLECTION_KIND_CS:
+				return convertCollectionKindCSToString(eDataType, instanceValue);
+			default:
+				throw new IllegalArgumentException("The datatype '" + eDataType.getName() + "' is not a valid classifier");
+		}
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public RootCS createRootCS()
   {
 		RootCSImpl rootCS = new RootCSImpl();
@@ -114,6 +195,17 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public ClassifierCS createClassifierCS()
+  {
+		ClassifierCSImpl classifierCS = new ClassifierCSImpl();
+		return classifierCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public ClassCS createClassCS()
   {
 		ClassCSImpl classCS = new ClassCSImpl();
@@ -125,6 +217,17 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public DatatypeCS createDatatypeCS()
+  {
+		DatatypeCSImpl datatypeCS = new DatatypeCSImpl();
+		return datatypeCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public PropertyCS createPropertyCS()
   {
 		PropertyCSImpl propertyCS = new PropertyCSImpl();
@@ -136,6 +239,17 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public MultiplicityCS createMultiplicityCS()
+  {
+		MultiplicityCSImpl multiplicityCS = new MultiplicityCSImpl();
+		return multiplicityCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public OperationCS createOperationCS()
   {
 		OperationCSImpl operationCS = new OperationCSImpl();
@@ -224,6 +338,83 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public SelfExpCS createSelfExpCS()
+  {
+		SelfExpCSImpl selfExpCS = new SelfExpCSImpl();
+		return selfExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NavigationExpCS createNavigationExpCS()
+  {
+		NavigationExpCSImpl navigationExpCS = new NavigationExpCSImpl();
+		return navigationExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public LoopExpCS createLoopExpCS()
+  {
+		LoopExpCSImpl loopExpCS = new LoopExpCSImpl();
+		return loopExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public CollectExpCS createCollectExpCS()
+  {
+		CollectExpCSImpl collectExpCS = new CollectExpCSImpl();
+		return collectExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public IteratorVarCS createIteratorVarCS()
+  {
+		IteratorVarCSImpl iteratorVarCS = new IteratorVarCSImpl();
+		return iteratorVarCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public IterateExpCS createIterateExpCS()
+  {
+		IterateExpCSImpl iterateExpCS = new IterateExpCSImpl();
+		return iterateExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public AccVarCS createAccVarCS()
+  {
+		AccVarCSImpl accVarCS = new AccVarCSImpl();
+		return accVarCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public NameExpCS createNameExpCS()
   {
 		NameExpCSImpl nameExpCS = new NameExpCSImpl();
@@ -268,10 +459,10 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public StringLiteralExpCS createStringLiteralExpCS()
+  public BooleanLiteralExpCS createBooleanLiteralExpCS()
   {
-		StringLiteralExpCSImpl stringLiteralExpCS = new StringLiteralExpCSImpl();
-		return stringLiteralExpCS;
+		BooleanLiteralExpCSImpl booleanLiteralExpCS = new BooleanLiteralExpCSImpl();
+		return booleanLiteralExpCS;
 	}
 
   /**
@@ -279,10 +470,54 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public BooleanLiteralExpCS createBooleanLiteralExpCS()
+  public NullLiteralExpCS createNullLiteralExpCS()
   {
-		BooleanLiteralExpCSImpl booleanLiteralExpCS = new BooleanLiteralExpCSImpl();
-		return booleanLiteralExpCS;
+		NullLiteralExpCSImpl nullLiteralExpCS = new NullLiteralExpCSImpl();
+		return nullLiteralExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public CollectionLiteralExpCS createCollectionLiteralExpCS()
+  {
+		CollectionLiteralExpCSImpl collectionLiteralExpCS = new CollectionLiteralExpCSImpl();
+		return collectionLiteralExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public CollectionLiteralPartCS createCollectionLiteralPartCS()
+  {
+		CollectionLiteralPartCSImpl collectionLiteralPartCS = new CollectionLiteralPartCSImpl();
+		return collectionLiteralPartCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public LetExpCS createLetExpCS()
+  {
+		LetExpCSImpl letExpCS = new LetExpCSImpl();
+		return letExpCS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public LetVarCS createLetVarCS()
+  {
+		LetVarCSImpl letVarCS = new LetVarCSImpl();
+		return letVarCS;
 	}
 
   /**
@@ -323,6 +558,28 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public CollectionKindCS createCollectionKindCSFromString(EDataType eDataType, String initialValue)
+  {
+		CollectionKindCS result = CollectionKindCS.get(initialValue);
+		if (result == null) throw new IllegalArgumentException("The value '" + initialValue + "' is not a valid enumerator of '" + eDataType.getName() + "'");
+		return result;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public String convertCollectionKindCSToString(EDataType eDataType, Object instanceValue)
+  {
+		return instanceValue == null ? null : instanceValue.toString();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public MinioclcsPackage getMinioclcsPackage()
   {
 		return (MinioclcsPackage)getEPackage();
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsPackageImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsPackageImpl.java
index 37736b7..2c1ffa5 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsPackageImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MinioclcsPackageImpl.java
@@ -5,27 +5,41 @@
 
 import org.eclipse.emf.ecore.EAttribute;
 import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EEnum;
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.emf.ecore.EReference;
 import org.eclipse.emf.ecore.EcorePackage;
-
 import org.eclipse.emf.ecore.impl.EPackageImpl;
-
 import org.eclipse.qvtd.doc.miniocl.MiniOCLPackage;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
 import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
 import org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.CSTrace;
 import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
 import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionKindCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
 import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
 import org.eclipse.qvtd.doc.minioclcs.ExpCS;
 import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
 import org.eclipse.qvtd.doc.minioclcs.LiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LoopExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsFactory;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
 import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.OperationCS;
 import org.eclipse.qvtd.doc.minioclcs.PackageCS;
 import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
@@ -35,7 +49,7 @@
 import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
 import org.eclipse.qvtd.doc.minioclcs.RootCS;
 import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
-import org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
 
 /**
  * <!-- begin-user-doc -->
@@ -64,6 +78,13 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  private EClass classifierCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   private EClass classCSEClass = null;
 
   /**
@@ -71,6 +92,13 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  private EClass datatypeCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   private EClass propertyCSEClass = null;
 
   /**
@@ -78,6 +106,13 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  private EClass multiplicityCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   private EClass operationCSEClass = null;
 
   /**
@@ -134,6 +169,55 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  private EClass selfExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass navigationExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass loopExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass collectExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass iteratorVarCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass iterateExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass accVarCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   private EClass nameExpCSEClass = null;
 
   /**
@@ -162,14 +246,42 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  private EClass stringLiteralExpCSEClass = null;
+  private EClass booleanLiteralExpCSEClass = null;
 
   /**
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  private EClass booleanLiteralExpCSEClass = null;
+  private EClass nullLiteralExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass collectionLiteralExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass collectionLiteralPartCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass letExpCSEClass = null;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EClass letVarCSEClass = null;
 
   /**
 	 * <!-- begin-user-doc -->
@@ -200,6 +312,13 @@
 	private EClass csTraceEClass = null;
 
 		/**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  private EEnum collectionKindCSEEnum = null;
+
+  /**
 	 * Creates an instance of the model <b>Package</b>, registered with
 	 * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
 	 * package URI value.
@@ -332,7 +451,7 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EReference getPackageCS_Classes()
+  public EReference getPackageCS_Classifiers()
   {
 		return (EReference)packageCSEClass.getEStructuralFeatures().get(2);
 	}
@@ -342,6 +461,26 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public EClass getClassifierCS()
+  {
+		return classifierCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getClassifierCS_Name()
+  {
+		return (EAttribute)classifierCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public EClass getClassCS()
   {
 		return classCSEClass;
@@ -352,19 +491,9 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EAttribute getClassCS_Name()
-  {
-		return (EAttribute)classCSEClass.getEStructuralFeatures().get(0);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
   public EReference getClassCS_Extends()
   {
-		return (EReference)classCSEClass.getEStructuralFeatures().get(1);
+		return (EReference)classCSEClass.getEStructuralFeatures().get(0);
 	}
 
   /**
@@ -374,7 +503,7 @@
 	 */
   public EReference getClassCS_Properties()
   {
-		return (EReference)classCSEClass.getEStructuralFeatures().get(2);
+		return (EReference)classCSEClass.getEStructuralFeatures().get(1);
 	}
 
   /**
@@ -384,7 +513,27 @@
 	 */
   public EReference getClassCS_Operations()
   {
-		return (EReference)classCSEClass.getEStructuralFeatures().get(3);
+		return (EReference)classCSEClass.getEStructuralFeatures().get(2);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getDatatypeCS()
+  {
+		return datatypeCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getDatatypeCS_TypeName()
+  {
+		return (EAttribute)datatypeCSEClass.getEStructuralFeatures().get(0);
 	}
 
   /**
@@ -422,6 +571,76 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public EReference getPropertyCS_Multiplicity()
+  {
+		return (EReference)propertyCSEClass.getEStructuralFeatures().get(2);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getMultiplicityCS()
+  {
+		return multiplicityCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getMultiplicityCS_Opt()
+  {
+		return (EAttribute)multiplicityCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getMultiplicityCS_Mult()
+  {
+		return (EAttribute)multiplicityCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getMultiplicityCS_Lower()
+  {
+		return (EAttribute)multiplicityCSEClass.getEStructuralFeatures().get(2);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getMultiplicityCS_UpperInt()
+  {
+		return (EAttribute)multiplicityCSEClass.getEStructuralFeatures().get(3);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getMultiplicityCS_UpperMult()
+  {
+		return (EAttribute)multiplicityCSEClass.getEStructuralFeatures().get(4);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public EClass getOperationCS()
   {
 		return operationCSEClass;
@@ -622,7 +841,7 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EReference getCallExpCS_NameExp()
+  public EReference getCallExpCS_NavExp()
   {
 		return (EReference)callExpCSEClass.getEStructuralFeatures().get(1);
 	}
@@ -642,6 +861,156 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public EClass getSelfExpCS()
+  {
+		return selfExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getNavigationExpCS()
+  {
+		return navigationExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getLoopExpCS()
+  {
+		return loopExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLoopExpCS_ItVar()
+  {
+		return (EReference)loopExpCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLoopExpCS_Exp()
+  {
+		return (EReference)loopExpCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getCollectExpCS()
+  {
+		return collectExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getIteratorVarCS()
+  {
+		return iteratorVarCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getIteratorVarCS_ItName()
+  {
+		return (EAttribute)iteratorVarCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getIteratorVarCS_ItType()
+  {
+		return (EReference)iteratorVarCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getIterateExpCS()
+  {
+		return iterateExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getIterateExpCS_AccVar()
+  {
+		return (EReference)iterateExpCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getAccVarCS()
+  {
+		return accVarCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getAccVarCS_AccName()
+  {
+		return (EAttribute)accVarCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getAccVarCS_AccType()
+  {
+		return (EReference)accVarCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getAccVarCS_AccInitExp()
+  {
+		return (EReference)accVarCSEClass.getEStructuralFeatures().get(2);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public EClass getNameExpCS()
   {
 		return nameExpCSEClass;
@@ -722,26 +1091,6 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EClass getStringLiteralExpCS()
-  {
-		return stringLiteralExpCSEClass;
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  public EAttribute getStringLiteralExpCS_StringSymbol()
-  {
-		return (EAttribute)stringLiteralExpCSEClass.getEStructuralFeatures().get(0);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
   public EClass getBooleanLiteralExpCS()
   {
 		return booleanLiteralExpCSEClass;
@@ -752,6 +1101,146 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public EClass getNullLiteralExpCS()
+  {
+		return nullLiteralExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getCollectionLiteralExpCS()
+  {
+		return collectionLiteralExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getCollectionLiteralExpCS_Kind()
+  {
+		return (EAttribute)collectionLiteralExpCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getCollectionLiteralExpCS_Parts()
+  {
+		return (EReference)collectionLiteralExpCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getCollectionLiteralPartCS()
+  {
+		return collectionLiteralPartCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getCollectionLiteralPartCS_First()
+  {
+		return (EReference)collectionLiteralPartCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getCollectionLiteralPartCS_Last()
+  {
+		return (EReference)collectionLiteralPartCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getLetExpCS()
+  {
+		return letExpCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLetExpCS_LetVars()
+  {
+		return (EReference)letExpCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLetExpCS_InExp()
+  {
+		return (EReference)letExpCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EClass getLetVarCS()
+  {
+		return letVarCSEClass;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EAttribute getLetVarCS_Name()
+  {
+		return (EAttribute)letVarCSEClass.getEStructuralFeatures().get(0);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLetVarCS_TypeRef()
+  {
+		return (EReference)letVarCSEClass.getEStructuralFeatures().get(1);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public EReference getLetVarCS_InitExp()
+  {
+		return (EReference)letVarCSEClass.getEStructuralFeatures().get(2);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public EClass getPathNameCS()
   {
 		return pathNameCSEClass;
@@ -762,19 +1251,9 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EReference getPathNameCS_Path()
-  {
-		return (EReference)pathNameCSEClass.getEStructuralFeatures().get(0);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
   public EReference getPathNameCS_PathElements()
   {
-		return (EReference)pathNameCSEClass.getEStructuralFeatures().get(1);
+		return (EReference)pathNameCSEClass.getEStructuralFeatures().get(0);
 	}
 
   /**
@@ -840,6 +1319,16 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public EEnum getCollectionKindCS()
+  {
+		return collectionKindCSEEnum;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   public MinioclcsFactory getMinioclcsFactory()
   {
 		return (MinioclcsFactory)getEFactoryInstance();
@@ -872,17 +1361,30 @@
 		packageCSEClass = createEClass(PACKAGE_CS);
 		createEAttribute(packageCSEClass, PACKAGE_CS__NAME);
 		createEReference(packageCSEClass, PACKAGE_CS__PACKAGES);
-		createEReference(packageCSEClass, PACKAGE_CS__CLASSES);
+		createEReference(packageCSEClass, PACKAGE_CS__CLASSIFIERS);
+
+		classifierCSEClass = createEClass(CLASSIFIER_CS);
+		createEAttribute(classifierCSEClass, CLASSIFIER_CS__NAME);
 
 		classCSEClass = createEClass(CLASS_CS);
-		createEAttribute(classCSEClass, CLASS_CS__NAME);
 		createEReference(classCSEClass, CLASS_CS__EXTENDS);
 		createEReference(classCSEClass, CLASS_CS__PROPERTIES);
 		createEReference(classCSEClass, CLASS_CS__OPERATIONS);
 
+		datatypeCSEClass = createEClass(DATATYPE_CS);
+		createEAttribute(datatypeCSEClass, DATATYPE_CS__TYPE_NAME);
+
 		propertyCSEClass = createEClass(PROPERTY_CS);
 		createEAttribute(propertyCSEClass, PROPERTY_CS__NAME);
 		createEReference(propertyCSEClass, PROPERTY_CS__TYPE_REF);
+		createEReference(propertyCSEClass, PROPERTY_CS__MULTIPLICITY);
+
+		multiplicityCSEClass = createEClass(MULTIPLICITY_CS);
+		createEAttribute(multiplicityCSEClass, MULTIPLICITY_CS__OPT);
+		createEAttribute(multiplicityCSEClass, MULTIPLICITY_CS__MULT);
+		createEAttribute(multiplicityCSEClass, MULTIPLICITY_CS__LOWER);
+		createEAttribute(multiplicityCSEClass, MULTIPLICITY_CS__UPPER_INT);
+		createEAttribute(multiplicityCSEClass, MULTIPLICITY_CS__UPPER_MULT);
 
 		operationCSEClass = createEClass(OPERATION_CS);
 		createEAttribute(operationCSEClass, OPERATION_CS__NAME);
@@ -910,10 +1412,32 @@
 
 		callExpCSEClass = createEClass(CALL_EXP_CS);
 		createEReference(callExpCSEClass, CALL_EXP_CS__SOURCE);
-		createEReference(callExpCSEClass, CALL_EXP_CS__NAME_EXP);
+		createEReference(callExpCSEClass, CALL_EXP_CS__NAV_EXP);
 
 		primaryExpCSEClass = createEClass(PRIMARY_EXP_CS);
 
+		selfExpCSEClass = createEClass(SELF_EXP_CS);
+
+		navigationExpCSEClass = createEClass(NAVIGATION_EXP_CS);
+
+		loopExpCSEClass = createEClass(LOOP_EXP_CS);
+		createEReference(loopExpCSEClass, LOOP_EXP_CS__IT_VAR);
+		createEReference(loopExpCSEClass, LOOP_EXP_CS__EXP);
+
+		collectExpCSEClass = createEClass(COLLECT_EXP_CS);
+
+		iteratorVarCSEClass = createEClass(ITERATOR_VAR_CS);
+		createEAttribute(iteratorVarCSEClass, ITERATOR_VAR_CS__IT_NAME);
+		createEReference(iteratorVarCSEClass, ITERATOR_VAR_CS__IT_TYPE);
+
+		iterateExpCSEClass = createEClass(ITERATE_EXP_CS);
+		createEReference(iterateExpCSEClass, ITERATE_EXP_CS__ACC_VAR);
+
+		accVarCSEClass = createEClass(ACC_VAR_CS);
+		createEAttribute(accVarCSEClass, ACC_VAR_CS__ACC_NAME);
+		createEReference(accVarCSEClass, ACC_VAR_CS__ACC_TYPE);
+		createEReference(accVarCSEClass, ACC_VAR_CS__ACC_INIT_EXP);
+
 		nameExpCSEClass = createEClass(NAME_EXP_CS);
 		createEReference(nameExpCSEClass, NAME_EXP_CS__EXP_NAME);
 		createEReference(nameExpCSEClass, NAME_EXP_CS__ROUNDED_BRACKETS);
@@ -926,13 +1450,28 @@
 		intLiteralExpCSEClass = createEClass(INT_LITERAL_EXP_CS);
 		createEAttribute(intLiteralExpCSEClass, INT_LITERAL_EXP_CS__INT_SYMBOL);
 
-		stringLiteralExpCSEClass = createEClass(STRING_LITERAL_EXP_CS);
-		createEAttribute(stringLiteralExpCSEClass, STRING_LITERAL_EXP_CS__STRING_SYMBOL);
-
 		booleanLiteralExpCSEClass = createEClass(BOOLEAN_LITERAL_EXP_CS);
 
+		nullLiteralExpCSEClass = createEClass(NULL_LITERAL_EXP_CS);
+
+		collectionLiteralExpCSEClass = createEClass(COLLECTION_LITERAL_EXP_CS);
+		createEAttribute(collectionLiteralExpCSEClass, COLLECTION_LITERAL_EXP_CS__KIND);
+		createEReference(collectionLiteralExpCSEClass, COLLECTION_LITERAL_EXP_CS__PARTS);
+
+		collectionLiteralPartCSEClass = createEClass(COLLECTION_LITERAL_PART_CS);
+		createEReference(collectionLiteralPartCSEClass, COLLECTION_LITERAL_PART_CS__FIRST);
+		createEReference(collectionLiteralPartCSEClass, COLLECTION_LITERAL_PART_CS__LAST);
+
+		letExpCSEClass = createEClass(LET_EXP_CS);
+		createEReference(letExpCSEClass, LET_EXP_CS__LET_VARS);
+		createEReference(letExpCSEClass, LET_EXP_CS__IN_EXP);
+
+		letVarCSEClass = createEClass(LET_VAR_CS);
+		createEAttribute(letVarCSEClass, LET_VAR_CS__NAME);
+		createEReference(letVarCSEClass, LET_VAR_CS__TYPE_REF);
+		createEReference(letVarCSEClass, LET_VAR_CS__INIT_EXP);
+
 		pathNameCSEClass = createEClass(PATH_NAME_CS);
-		createEReference(pathNameCSEClass, PATH_NAME_CS__PATH);
 		createEReference(pathNameCSEClass, PATH_NAME_CS__PATH_ELEMENTS);
 
 		pathElementCSEClass = createEClass(PATH_ELEMENT_CS);
@@ -943,6 +1482,9 @@
 
 		csTraceEClass = createEClass(CS_TRACE);
 		createEReference(csTraceEClass, CS_TRACE__AST);
+
+		// Create enums
+		collectionKindCSEEnum = createEEnum(COLLECTION_KIND_CS);
 	}
 
   /**
@@ -980,8 +1522,11 @@
 		// Add supertypes to classes
 		rootCSEClass.getESuperTypes().add(this.getCSTrace());
 		packageCSEClass.getESuperTypes().add(this.getCSTrace());
-		classCSEClass.getESuperTypes().add(this.getCSTrace());
+		classifierCSEClass.getESuperTypes().add(this.getCSTrace());
+		classCSEClass.getESuperTypes().add(this.getClassifierCS());
+		datatypeCSEClass.getESuperTypes().add(this.getClassifierCS());
 		propertyCSEClass.getESuperTypes().add(this.getCSTrace());
+		multiplicityCSEClass.getESuperTypes().add(this.getCSTrace());
 		operationCSEClass.getESuperTypes().add(this.getCSTrace());
 		parameterCSEClass.getESuperTypes().add(this.getCSTrace());
 		constraintsDefCSEClass.getESuperTypes().add(this.getCSTrace());
@@ -990,12 +1535,24 @@
 		logicExpCSEClass.getESuperTypes().add(this.getExpCS());
 		callExpCSEClass.getESuperTypes().add(this.getLogicExpCS());
 		primaryExpCSEClass.getESuperTypes().add(this.getCallExpCS());
+		selfExpCSEClass.getESuperTypes().add(this.getPrimaryExpCS());
+		navigationExpCSEClass.getESuperTypes().add(this.getCSTrace());
+		loopExpCSEClass.getESuperTypes().add(this.getNavigationExpCS());
+		collectExpCSEClass.getESuperTypes().add(this.getLoopExpCS());
+		iteratorVarCSEClass.getESuperTypes().add(this.getCSTrace());
+		iterateExpCSEClass.getESuperTypes().add(this.getLoopExpCS());
+		accVarCSEClass.getESuperTypes().add(this.getCSTrace());
 		nameExpCSEClass.getESuperTypes().add(this.getPrimaryExpCS());
+		nameExpCSEClass.getESuperTypes().add(this.getNavigationExpCS());
 		roundedBracketClauseCSEClass.getESuperTypes().add(this.getCSTrace());
 		literalExpCSEClass.getESuperTypes().add(this.getPrimaryExpCS());
 		intLiteralExpCSEClass.getESuperTypes().add(this.getLiteralExpCS());
-		stringLiteralExpCSEClass.getESuperTypes().add(this.getLiteralExpCS());
 		booleanLiteralExpCSEClass.getESuperTypes().add(this.getLiteralExpCS());
+		nullLiteralExpCSEClass.getESuperTypes().add(this.getLiteralExpCS());
+		collectionLiteralExpCSEClass.getESuperTypes().add(this.getLiteralExpCS());
+		collectionLiteralPartCSEClass.getESuperTypes().add(this.getCSTrace());
+		letExpCSEClass.getESuperTypes().add(this.getPrimaryExpCS());
+		letVarCSEClass.getESuperTypes().add(this.getCSTrace());
 		pathNameCSEClass.getESuperTypes().add(this.getCSTrace());
 		pathElementCSEClass.getESuperTypes().add(this.getCSTrace());
 		booleanExpCSEClass.getESuperTypes().add(this.getBooleanLiteralExpCS());
@@ -1008,17 +1565,30 @@
 		initEClass(packageCSEClass, PackageCS.class, "PackageCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getPackageCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, PackageCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getPackageCS_Packages(), this.getPackageCS(), null, "packages", null, 0, -1, PackageCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getPackageCS_Classes(), this.getClassCS(), null, "classes", null, 0, -1, PackageCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPackageCS_Classifiers(), this.getClassifierCS(), null, "classifiers", null, 0, -1, PackageCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(classifierCSEClass, ClassifierCS.class, "ClassifierCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getClassifierCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, ClassifierCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(classCSEClass, ClassCS.class, "ClassCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getClassCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, ClassCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getClassCS_Extends(), this.getPathNameCS(), null, "extends", null, 0, 1, ClassCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getClassCS_Properties(), this.getPropertyCS(), null, "properties", null, 0, -1, ClassCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getClassCS_Operations(), this.getOperationCS(), null, "operations", null, 0, -1, ClassCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		initEClass(datatypeCSEClass, DatatypeCS.class, "DatatypeCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getDatatypeCS_TypeName(), theEcorePackage.getEString(), "typeName", null, 0, 1, DatatypeCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		initEClass(propertyCSEClass, PropertyCS.class, "PropertyCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getPropertyCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, PropertyCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getPropertyCS_TypeRef(), this.getPathNameCS(), null, "typeRef", null, 0, 1, PropertyCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getPropertyCS_Multiplicity(), this.getMultiplicityCS(), null, "multiplicity", null, 0, 1, PropertyCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(multiplicityCSEClass, MultiplicityCS.class, "MultiplicityCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getMultiplicityCS_Opt(), theEcorePackage.getEBoolean(), "opt", null, 0, 1, MultiplicityCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMultiplicityCS_Mult(), theEcorePackage.getEBoolean(), "mult", null, 0, 1, MultiplicityCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMultiplicityCS_Lower(), theEcorePackage.getEInt(), "lower", null, 0, 1, MultiplicityCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMultiplicityCS_UpperInt(), theEcorePackage.getEInt(), "upperInt", null, 0, 1, MultiplicityCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEAttribute(getMultiplicityCS_UpperMult(), theEcorePackage.getEBoolean(), "upperMult", null, 0, 1, MultiplicityCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(operationCSEClass, OperationCS.class, "OperationCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getOperationCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, OperationCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -1046,10 +1616,32 @@
 
 		initEClass(callExpCSEClass, CallExpCS.class, "CallExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getCallExpCS_Source(), this.getCallExpCS(), null, "source", null, 0, 1, CallExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-		initEReference(getCallExpCS_NameExp(), this.getNameExpCS(), null, "nameExp", null, 0, 1, CallExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getCallExpCS_NavExp(), this.getNavigationExpCS(), null, "navExp", null, 0, 1, CallExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(primaryExpCSEClass, PrimaryExpCS.class, "PrimaryExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(selfExpCSEClass, SelfExpCS.class, "SelfExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(navigationExpCSEClass, NavigationExpCS.class, "NavigationExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(loopExpCSEClass, LoopExpCS.class, "LoopExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getLoopExpCS_ItVar(), this.getIteratorVarCS(), null, "itVar", null, 0, 1, LoopExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getLoopExpCS_Exp(), this.getExpCS(), null, "exp", null, 0, 1, LoopExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(collectExpCSEClass, CollectExpCS.class, "CollectExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(iteratorVarCSEClass, IteratorVarCS.class, "IteratorVarCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getIteratorVarCS_ItName(), theEcorePackage.getEString(), "itName", null, 0, 1, IteratorVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getIteratorVarCS_ItType(), this.getPathNameCS(), null, "itType", null, 0, 1, IteratorVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(iterateExpCSEClass, IterateExpCS.class, "IterateExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getIterateExpCS_AccVar(), this.getAccVarCS(), null, "accVar", null, 0, 1, IterateExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(accVarCSEClass, AccVarCS.class, "AccVarCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getAccVarCS_AccName(), theEcorePackage.getEString(), "accName", null, 0, 1, AccVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getAccVarCS_AccType(), this.getPathNameCS(), null, "accType", null, 0, 1, AccVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getAccVarCS_AccInitExp(), this.getExpCS(), null, "accInitExp", null, 0, 1, AccVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		initEClass(nameExpCSEClass, NameExpCS.class, "NameExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getNameExpCS_ExpName(), this.getPathNameCS(), null, "expName", null, 0, 1, NameExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getNameExpCS_RoundedBrackets(), this.getRoundedBracketClauseCS(), null, "roundedBrackets", null, 0, 1, NameExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
@@ -1062,13 +1654,28 @@
 		initEClass(intLiteralExpCSEClass, IntLiteralExpCS.class, "IntLiteralExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEAttribute(getIntLiteralExpCS_IntSymbol(), theEcorePackage.getEInt(), "intSymbol", null, 0, 1, IntLiteralExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
-		initEClass(stringLiteralExpCSEClass, StringLiteralExpCS.class, "StringLiteralExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEAttribute(getStringLiteralExpCS_StringSymbol(), theEcorePackage.getEString(), "stringSymbol", null, 0, 1, StringLiteralExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
-
 		initEClass(booleanLiteralExpCSEClass, BooleanLiteralExpCS.class, "BooleanLiteralExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(nullLiteralExpCSEClass, NullLiteralExpCS.class, "NullLiteralExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(collectionLiteralExpCSEClass, CollectionLiteralExpCS.class, "CollectionLiteralExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getCollectionLiteralExpCS_Kind(), this.getCollectionKindCS(), "kind", null, 0, 1, CollectionLiteralExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getCollectionLiteralExpCS_Parts(), this.getCollectionLiteralPartCS(), null, "parts", null, 0, -1, CollectionLiteralExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(collectionLiteralPartCSEClass, CollectionLiteralPartCS.class, "CollectionLiteralPartCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getCollectionLiteralPartCS_First(), this.getExpCS(), null, "first", null, 0, 1, CollectionLiteralPartCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getCollectionLiteralPartCS_Last(), this.getExpCS(), null, "last", null, 0, 1, CollectionLiteralPartCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(letExpCSEClass, LetExpCS.class, "LetExpCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEReference(getLetExpCS_LetVars(), this.getLetVarCS(), null, "letVars", null, 0, -1, LetExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getLetExpCS_InExp(), this.getExpCS(), null, "inExp", null, 0, 1, LetExpCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+		initEClass(letVarCSEClass, LetVarCS.class, "LetVarCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+		initEAttribute(getLetVarCS_Name(), theEcorePackage.getEString(), "name", null, 0, 1, LetVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getLetVarCS_TypeRef(), this.getPathNameCS(), null, "typeRef", null, 0, 1, LetVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+		initEReference(getLetVarCS_InitExp(), this.getExpCS(), null, "initExp", null, 0, 1, LetVarCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
 		initEClass(pathNameCSEClass, PathNameCS.class, "PathNameCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
-		initEReference(getPathNameCS_Path(), this.getPathElementCS(), null, "path", null, 0, -1, PathNameCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 		initEReference(getPathNameCS_PathElements(), this.getPathElementCS(), null, "pathElements", null, 0, -1, PathNameCS.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
 		initEClass(pathElementCSEClass, PathElementCS.class, "PathElementCS", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
@@ -1080,6 +1687,10 @@
 		initEClass(csTraceEClass, CSTrace.class, "CSTrace", IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 		initEReference(getCSTrace_Ast(), theMiniOCLPackage.getElement(), null, "ast", null, 0, 1, CSTrace.class, IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
 
+		// Initialize enums and add enum literals
+		initEEnum(collectionKindCSEEnum, CollectionKindCS.class, "CollectionKindCS");
+		addEEnumLiteral(collectionKindCSEEnum, CollectionKindCS.COLLECTION);
+
 		// Create resource
 		createResource(eNS_URI);
 	}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MultiplicityCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MultiplicityCSImpl.java
new file mode 100644
index 0000000..14d357c
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/MultiplicityCSImpl.java
@@ -0,0 +1,394 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Multiplicity CS</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * </p>
+ * <ul>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl#isOpt <em>Opt</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl#isMult <em>Mult</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl#getLower <em>Lower</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl#getUpperInt <em>Upper Int</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.MultiplicityCSImpl#isUpperMult <em>Upper Mult</em>}</li>
+ * </ul>
+ *
+ * @generated
+ */
+public class MultiplicityCSImpl extends CSTraceImpl implements MultiplicityCS
+{
+  /**
+	 * The default value of the '{@link #isOpt() <em>Opt</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isOpt()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final boolean OPT_EDEFAULT = false;
+
+  /**
+	 * The cached value of the '{@link #isOpt() <em>Opt</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isOpt()
+	 * @generated
+	 * @ordered
+	 */
+  protected boolean opt = OPT_EDEFAULT;
+
+  /**
+	 * The default value of the '{@link #isMult() <em>Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isMult()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final boolean MULT_EDEFAULT = false;
+
+  /**
+	 * The cached value of the '{@link #isMult() <em>Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isMult()
+	 * @generated
+	 * @ordered
+	 */
+  protected boolean mult = MULT_EDEFAULT;
+
+  /**
+	 * The default value of the '{@link #getLower() <em>Lower</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getLower()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final int LOWER_EDEFAULT = 0;
+
+  /**
+	 * The cached value of the '{@link #getLower() <em>Lower</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getLower()
+	 * @generated
+	 * @ordered
+	 */
+  protected int lower = LOWER_EDEFAULT;
+
+  /**
+	 * The default value of the '{@link #getUpperInt() <em>Upper Int</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getUpperInt()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final int UPPER_INT_EDEFAULT = 0;
+
+  /**
+	 * The cached value of the '{@link #getUpperInt() <em>Upper Int</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getUpperInt()
+	 * @generated
+	 * @ordered
+	 */
+  protected int upperInt = UPPER_INT_EDEFAULT;
+
+  /**
+	 * The default value of the '{@link #isUpperMult() <em>Upper Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isUpperMult()
+	 * @generated
+	 * @ordered
+	 */
+  protected static final boolean UPPER_MULT_EDEFAULT = false;
+
+  /**
+	 * The cached value of the '{@link #isUpperMult() <em>Upper Mult</em>}' attribute.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #isUpperMult()
+	 * @generated
+	 * @ordered
+	 */
+  protected boolean upperMult = UPPER_MULT_EDEFAULT;
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected MultiplicityCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.MULTIPLICITY_CS;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public boolean isOpt()
+  {
+		return opt;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setOpt(boolean newOpt)
+  {
+		boolean oldOpt = opt;
+		opt = newOpt;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.MULTIPLICITY_CS__OPT, oldOpt, opt));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public boolean isMult()
+  {
+		return mult;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setMult(boolean newMult)
+  {
+		boolean oldMult = mult;
+		mult = newMult;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.MULTIPLICITY_CS__MULT, oldMult, mult));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public int getLower()
+  {
+		return lower;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setLower(int newLower)
+  {
+		int oldLower = lower;
+		lower = newLower;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.MULTIPLICITY_CS__LOWER, oldLower, lower));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public int getUpperInt()
+  {
+		return upperInt;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setUpperInt(int newUpperInt)
+  {
+		int oldUpperInt = upperInt;
+		upperInt = newUpperInt;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.MULTIPLICITY_CS__UPPER_INT, oldUpperInt, upperInt));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public boolean isUpperMult()
+  {
+		return upperMult;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setUpperMult(boolean newUpperMult)
+  {
+		boolean oldUpperMult = upperMult;
+		upperMult = newUpperMult;
+		if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.MULTIPLICITY_CS__UPPER_MULT, oldUpperMult, upperMult));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.MULTIPLICITY_CS__OPT:
+				return isOpt();
+			case MinioclcsPackage.MULTIPLICITY_CS__MULT:
+				return isMult();
+			case MinioclcsPackage.MULTIPLICITY_CS__LOWER:
+				return getLower();
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_INT:
+				return getUpperInt();
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_MULT:
+				return isUpperMult();
+		}
+		return super.eGet(featureID, resolve, coreType);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.MULTIPLICITY_CS__OPT:
+				setOpt((Boolean)newValue);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__MULT:
+				setMult((Boolean)newValue);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__LOWER:
+				setLower((Integer)newValue);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_INT:
+				setUpperInt((Integer)newValue);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_MULT:
+				setUpperMult((Boolean)newValue);
+				return;
+		}
+		super.eSet(featureID, newValue);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public void eUnset(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.MULTIPLICITY_CS__OPT:
+				setOpt(OPT_EDEFAULT);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__MULT:
+				setMult(MULT_EDEFAULT);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__LOWER:
+				setLower(LOWER_EDEFAULT);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_INT:
+				setUpperInt(UPPER_INT_EDEFAULT);
+				return;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_MULT:
+				setUpperMult(UPPER_MULT_EDEFAULT);
+				return;
+		}
+		super.eUnset(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+		switch (featureID) {
+			case MinioclcsPackage.MULTIPLICITY_CS__OPT:
+				return opt != OPT_EDEFAULT;
+			case MinioclcsPackage.MULTIPLICITY_CS__MULT:
+				return mult != MULT_EDEFAULT;
+			case MinioclcsPackage.MULTIPLICITY_CS__LOWER:
+				return lower != LOWER_EDEFAULT;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_INT:
+				return upperInt != UPPER_INT_EDEFAULT;
+			case MinioclcsPackage.MULTIPLICITY_CS__UPPER_MULT:
+				return upperMult != UPPER_MULT_EDEFAULT;
+		}
+		return super.eIsSet(featureID);
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  public String toString()
+  {
+		if (eIsProxy()) return super.toString();
+
+		StringBuffer result = new StringBuffer(super.toString());
+		result.append(" (opt: ");
+		result.append(opt);
+		result.append(", mult: ");
+		result.append(mult);
+		result.append(", lower: ");
+		result.append(lower);
+		result.append(", upperInt: ");
+		result.append(upperInt);
+		result.append(", upperMult: ");
+		result.append(upperMult);
+		result.append(')');
+		return result.toString();
+	}
+
+} //MultiplicityCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NameExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NameExpCSImpl.java
index fd1d2b4..7f75561 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NameExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NameExpCSImpl.java
@@ -5,12 +5,9 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
 import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NavigationExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NavigationExpCSImpl.java
new file mode 100644
index 0000000..3461d09
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NavigationExpCSImpl.java
@@ -0,0 +1,40 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Navigation Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class NavigationExpCSImpl extends CSTraceImpl implements NavigationExpCS
+{
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected NavigationExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.NAVIGATION_EXP_CS;
+	}
+
+} //NavigationExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NullLiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NullLiteralExpCSImpl.java
new file mode 100644
index 0000000..032012d
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/NullLiteralExpCSImpl.java
@@ -0,0 +1,40 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Null Literal Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class NullLiteralExpCSImpl extends LiteralExpCSImpl implements NullLiteralExpCS
+{
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected NullLiteralExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.NULL_LITERAL_EXP_CS;
+	}
+
+} //NullLiteralExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/OperationCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/OperationCSImpl.java
index 7007b20..650eb59 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/OperationCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/OperationCSImpl.java
@@ -7,18 +7,12 @@
 
 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.impl.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.ExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.OperationCS;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PackageCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PackageCSImpl.java
index d10caca..8782a55 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PackageCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PackageCSImpl.java
@@ -7,19 +7,13 @@
 
 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.impl.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
-import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.PackageCS;
 
@@ -33,7 +27,7 @@
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PackageCSImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PackageCSImpl#getPackages <em>Packages</em>}</li>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PackageCSImpl#getClasses <em>Classes</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PackageCSImpl#getClassifiers <em>Classifiers</em>}</li>
  * </ul>
  *
  * @generated
@@ -71,14 +65,14 @@
   protected EList<PackageCS> packages;
 
   /**
-	 * The cached value of the '{@link #getClasses() <em>Classes</em>}' containment reference list.
+	 * The cached value of the '{@link #getClassifiers() <em>Classifiers</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
-	 * @see #getClasses()
+	 * @see #getClassifiers()
 	 * @generated
 	 * @ordered
 	 */
-  protected EList<ClassCS> classes;
+  protected EList<ClassifierCS> classifiers;
 
   /**
 	 * <!-- begin-user-doc -->
@@ -142,12 +136,12 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EList<ClassCS> getClasses()
+  public EList<ClassifierCS> getClassifiers()
   {
-		if (classes == null) {
-			classes = new EObjectContainmentEList<ClassCS>(ClassCS.class, this, MinioclcsPackage.PACKAGE_CS__CLASSES);
+		if (classifiers == null) {
+			classifiers = new EObjectContainmentEList<ClassifierCS>(ClassifierCS.class, this, MinioclcsPackage.PACKAGE_CS__CLASSIFIERS);
 		}
-		return classes;
+		return classifiers;
 	}
 
   /**
@@ -161,8 +155,8 @@
 		switch (featureID) {
 			case MinioclcsPackage.PACKAGE_CS__PACKAGES:
 				return ((InternalEList<?>)getPackages()).basicRemove(otherEnd, msgs);
-			case MinioclcsPackage.PACKAGE_CS__CLASSES:
-				return ((InternalEList<?>)getClasses()).basicRemove(otherEnd, msgs);
+			case MinioclcsPackage.PACKAGE_CS__CLASSIFIERS:
+				return ((InternalEList<?>)getClassifiers()).basicRemove(otherEnd, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -180,8 +174,8 @@
 				return getName();
 			case MinioclcsPackage.PACKAGE_CS__PACKAGES:
 				return getPackages();
-			case MinioclcsPackage.PACKAGE_CS__CLASSES:
-				return getClasses();
+			case MinioclcsPackage.PACKAGE_CS__CLASSIFIERS:
+				return getClassifiers();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -203,9 +197,9 @@
 				getPackages().clear();
 				getPackages().addAll((Collection<? extends PackageCS>)newValue);
 				return;
-			case MinioclcsPackage.PACKAGE_CS__CLASSES:
-				getClasses().clear();
-				getClasses().addAll((Collection<? extends ClassCS>)newValue);
+			case MinioclcsPackage.PACKAGE_CS__CLASSIFIERS:
+				getClassifiers().clear();
+				getClassifiers().addAll((Collection<? extends ClassifierCS>)newValue);
 				return;
 		}
 		super.eSet(featureID, newValue);
@@ -226,8 +220,8 @@
 			case MinioclcsPackage.PACKAGE_CS__PACKAGES:
 				getPackages().clear();
 				return;
-			case MinioclcsPackage.PACKAGE_CS__CLASSES:
-				getClasses().clear();
+			case MinioclcsPackage.PACKAGE_CS__CLASSIFIERS:
+				getClassifiers().clear();
 				return;
 		}
 		super.eUnset(featureID);
@@ -246,8 +240,8 @@
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case MinioclcsPackage.PACKAGE_CS__PACKAGES:
 				return packages != null && !packages.isEmpty();
-			case MinioclcsPackage.PACKAGE_CS__CLASSES:
-				return classes != null && !classes.isEmpty();
+			case MinioclcsPackage.PACKAGE_CS__CLASSIFIERS:
+				return classifiers != null && !classifiers.isEmpty();
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ParameterCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ParameterCSImpl.java
index 54d9d5c..fd4067b 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ParameterCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/ParameterCSImpl.java
@@ -5,13 +5,9 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
 import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathElementCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathElementCSImpl.java
index 6f9ce1c..0ca1876 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathElementCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathElementCSImpl.java
@@ -4,12 +4,8 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.common.notify.Notification;
-
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.PathElementCS;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathNameCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathNameCSImpl.java
index 7bfc83f..91272c7 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathNameCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PathNameCSImpl.java
@@ -6,17 +6,11 @@
 import java.util.Collection;
 
 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.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.PathElementCS;
 import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
@@ -29,7 +23,6 @@
  * The following features are implemented:
  * </p>
  * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PathNameCSImpl#getPath <em>Path</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PathNameCSImpl#getPathElements <em>Path Elements</em>}</li>
  * </ul>
  *
@@ -38,16 +31,6 @@
 public class PathNameCSImpl extends CSTraceImpl implements PathNameCS
 {
   /**
-	 * The cached value of the '{@link #getPath() <em>Path</em>}' containment reference list.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see #getPath()
-	 * @generated
-	 * @ordered
-	 */
-  protected EList<PathElementCS> path;
-
-  /**
 	 * The cached value of the '{@link #getPathElements() <em>Path Elements</em>}' containment reference list.
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
@@ -83,19 +66,6 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
-  public EList<PathElementCS> getPath()
-  {
-		if (path == null) {
-			path = new EObjectContainmentEList<PathElementCS>(PathElementCS.class, this, MinioclcsPackage.PATH_NAME_CS__PATH);
-		}
-		return path;
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
   public EList<PathElementCS> getPathElements()
   {
 		if (pathElements == null) {
@@ -113,8 +83,6 @@
   public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
   {
 		switch (featureID) {
-			case MinioclcsPackage.PATH_NAME_CS__PATH:
-				return ((InternalEList<?>)getPath()).basicRemove(otherEnd, msgs);
 			case MinioclcsPackage.PATH_NAME_CS__PATH_ELEMENTS:
 				return ((InternalEList<?>)getPathElements()).basicRemove(otherEnd, msgs);
 		}
@@ -130,8 +98,6 @@
   public Object eGet(int featureID, boolean resolve, boolean coreType)
   {
 		switch (featureID) {
-			case MinioclcsPackage.PATH_NAME_CS__PATH:
-				return getPath();
 			case MinioclcsPackage.PATH_NAME_CS__PATH_ELEMENTS:
 				return getPathElements();
 		}
@@ -148,10 +114,6 @@
   public void eSet(int featureID, Object newValue)
   {
 		switch (featureID) {
-			case MinioclcsPackage.PATH_NAME_CS__PATH:
-				getPath().clear();
-				getPath().addAll((Collection<? extends PathElementCS>)newValue);
-				return;
 			case MinioclcsPackage.PATH_NAME_CS__PATH_ELEMENTS:
 				getPathElements().clear();
 				getPathElements().addAll((Collection<? extends PathElementCS>)newValue);
@@ -169,9 +131,6 @@
   public void eUnset(int featureID)
   {
 		switch (featureID) {
-			case MinioclcsPackage.PATH_NAME_CS__PATH:
-				getPath().clear();
-				return;
 			case MinioclcsPackage.PATH_NAME_CS__PATH_ELEMENTS:
 				getPathElements().clear();
 				return;
@@ -188,8 +147,6 @@
   public boolean eIsSet(int featureID)
   {
 		switch (featureID) {
-			case MinioclcsPackage.PATH_NAME_CS__PATH:
-				return path != null && !path.isEmpty();
 			case MinioclcsPackage.PATH_NAME_CS__PATH_ELEMENTS:
 				return pathElements != null && !pathElements.isEmpty();
 		}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PrimaryExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PrimaryExpCSImpl.java
index b9369d4..7b837a3 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PrimaryExpCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PrimaryExpCSImpl.java
@@ -4,7 +4,6 @@
 package org.eclipse.qvtd.doc.minioclcs.impl;
 
 import org.eclipse.emf.ecore.EClass;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.PrimaryExpCS;
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PropertyCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PropertyCSImpl.java
index dfea4da..1d0ec33 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PropertyCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/PropertyCSImpl.java
@@ -5,14 +5,11 @@
 
 import org.eclipse.emf.common.notify.Notification;
 import org.eclipse.emf.common.notify.NotificationChain;
-
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.InternalEObject;
-
 import org.eclipse.emf.ecore.impl.ENotificationImpl;
-import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
-
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
 import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
 import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
 
@@ -26,6 +23,7 @@
  * <ul>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PropertyCSImpl#getName <em>Name</em>}</li>
  *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PropertyCSImpl#getTypeRef <em>Type Ref</em>}</li>
+ *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.PropertyCSImpl#getMultiplicity <em>Multiplicity</em>}</li>
  * </ul>
  *
  * @generated
@@ -63,6 +61,16 @@
   protected PathNameCS typeRef;
 
   /**
+	 * The cached value of the '{@link #getMultiplicity() <em>Multiplicity</em>}' containment reference.
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @see #getMultiplicity()
+	 * @generated
+	 * @ordered
+	 */
+  protected MultiplicityCS multiplicity;
+
+  /**
 	 * <!-- begin-user-doc -->
    * <!-- end-user-doc -->
 	 * @generated
@@ -157,12 +165,60 @@
    * <!-- end-user-doc -->
 	 * @generated
 	 */
+  public MultiplicityCS getMultiplicity()
+  {
+		return multiplicity;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public NotificationChain basicSetMultiplicity(MultiplicityCS newMultiplicity, NotificationChain msgs)
+  {
+		MultiplicityCS oldMultiplicity = multiplicity;
+		multiplicity = newMultiplicity;
+		if (eNotificationRequired()) {
+			ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, MinioclcsPackage.PROPERTY_CS__MULTIPLICITY, oldMultiplicity, newMultiplicity);
+			if (msgs == null) msgs = notification; else msgs.add(notification);
+		}
+		return msgs;
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  public void setMultiplicity(MultiplicityCS newMultiplicity)
+  {
+		if (newMultiplicity != multiplicity) {
+			NotificationChain msgs = null;
+			if (multiplicity != null)
+				msgs = ((InternalEObject)multiplicity).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.PROPERTY_CS__MULTIPLICITY, null, msgs);
+			if (newMultiplicity != null)
+				msgs = ((InternalEObject)newMultiplicity).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - MinioclcsPackage.PROPERTY_CS__MULTIPLICITY, null, msgs);
+			msgs = basicSetMultiplicity(newMultiplicity, msgs);
+			if (msgs != null) msgs.dispatch();
+		}
+		else if (eNotificationRequired())
+			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.PROPERTY_CS__MULTIPLICITY, newMultiplicity, newMultiplicity));
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
   @Override
   public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
   {
 		switch (featureID) {
 			case MinioclcsPackage.PROPERTY_CS__TYPE_REF:
 				return basicSetTypeRef(null, msgs);
+			case MinioclcsPackage.PROPERTY_CS__MULTIPLICITY:
+				return basicSetMultiplicity(null, msgs);
 		}
 		return super.eInverseRemove(otherEnd, featureID, msgs);
 	}
@@ -180,6 +236,8 @@
 				return getName();
 			case MinioclcsPackage.PROPERTY_CS__TYPE_REF:
 				return getTypeRef();
+			case MinioclcsPackage.PROPERTY_CS__MULTIPLICITY:
+				return getMultiplicity();
 		}
 		return super.eGet(featureID, resolve, coreType);
 	}
@@ -199,6 +257,9 @@
 			case MinioclcsPackage.PROPERTY_CS__TYPE_REF:
 				setTypeRef((PathNameCS)newValue);
 				return;
+			case MinioclcsPackage.PROPERTY_CS__MULTIPLICITY:
+				setMultiplicity((MultiplicityCS)newValue);
+				return;
 		}
 		super.eSet(featureID, newValue);
 	}
@@ -218,6 +279,9 @@
 			case MinioclcsPackage.PROPERTY_CS__TYPE_REF:
 				setTypeRef((PathNameCS)null);
 				return;
+			case MinioclcsPackage.PROPERTY_CS__MULTIPLICITY:
+				setMultiplicity((MultiplicityCS)null);
+				return;
 		}
 		super.eUnset(featureID);
 	}
@@ -235,6 +299,8 @@
 				return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
 			case MinioclcsPackage.PROPERTY_CS__TYPE_REF:
 				return typeRef != null;
+			case MinioclcsPackage.PROPERTY_CS__MULTIPLICITY:
+				return multiplicity != null;
 		}
 		return super.eIsSet(featureID);
 	}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RootCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RootCSImpl.java
index f7a5b3f..6fcf42f 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RootCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RootCSImpl.java
@@ -6,17 +6,11 @@
 import java.util.Collection;
 
 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.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.PackageCS;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RoundedBracketClauseCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RoundedBracketClauseCSImpl.java
index b0466ee..79a8e7f 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RoundedBracketClauseCSImpl.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/RoundedBracketClauseCSImpl.java
@@ -6,17 +6,11 @@
 import java.util.Collection;
 
 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.MinimalEObjectImpl;
-
 import org.eclipse.emf.ecore.util.EObjectContainmentEList;
 import org.eclipse.emf.ecore.util.InternalEList;
-
 import org.eclipse.qvtd.doc.minioclcs.ExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
 import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/SelfExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/SelfExpCSImpl.java
new file mode 100644
index 0000000..6900c62
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/SelfExpCSImpl.java
@@ -0,0 +1,40 @@
+/**
+ * generated by Xtext 2.10.0
+ */
+package org.eclipse.qvtd.doc.minioclcs.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Self Exp CS</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class SelfExpCSImpl extends PrimaryExpCSImpl implements SelfExpCS
+{
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  protected SelfExpCSImpl()
+  {
+		super();
+	}
+
+  /**
+	 * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+	 * @generated
+	 */
+  @Override
+  protected EClass eStaticClass()
+  {
+		return MinioclcsPackage.Literals.SELF_EXP_CS;
+	}
+
+} //SelfExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/StringLiteralExpCSImpl.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/StringLiteralExpCSImpl.java
deleted file mode 100644
index 477f130..0000000
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/impl/StringLiteralExpCSImpl.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/**
- * generated by Xtext 2.10.0
- */
-package org.eclipse.qvtd.doc.minioclcs.impl;
-
-import org.eclipse.emf.common.notify.Notification;
-
-import org.eclipse.emf.ecore.EClass;
-
-import org.eclipse.emf.ecore.impl.ENotificationImpl;
-
-import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
-import org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS;
-
-/**
- * <!-- begin-user-doc -->
- * An implementation of the model object '<em><b>String Literal Exp CS</b></em>'.
- * <!-- end-user-doc -->
- * <p>
- * The following features are implemented:
- * </p>
- * <ul>
- *   <li>{@link org.eclipse.qvtd.doc.minioclcs.impl.StringLiteralExpCSImpl#getStringSymbol <em>String Symbol</em>}</li>
- * </ul>
- *
- * @generated
- */
-public class StringLiteralExpCSImpl extends LiteralExpCSImpl implements StringLiteralExpCS
-{
-  /**
-	 * The default value of the '{@link #getStringSymbol() <em>String Symbol</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see #getStringSymbol()
-	 * @generated
-	 * @ordered
-	 */
-  protected static final String STRING_SYMBOL_EDEFAULT = null;
-
-  /**
-	 * The cached value of the '{@link #getStringSymbol() <em>String Symbol</em>}' attribute.
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @see #getStringSymbol()
-	 * @generated
-	 * @ordered
-	 */
-  protected String stringSymbol = STRING_SYMBOL_EDEFAULT;
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  protected StringLiteralExpCSImpl()
-  {
-		super();
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  protected EClass eStaticClass()
-  {
-		return MinioclcsPackage.Literals.STRING_LITERAL_EXP_CS;
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  public String getStringSymbol()
-  {
-		return stringSymbol;
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  public void setStringSymbol(String newStringSymbol)
-  {
-		String oldStringSymbol = stringSymbol;
-		stringSymbol = newStringSymbol;
-		if (eNotificationRequired())
-			eNotify(new ENotificationImpl(this, Notification.SET, MinioclcsPackage.STRING_LITERAL_EXP_CS__STRING_SYMBOL, oldStringSymbol, stringSymbol));
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public Object eGet(int featureID, boolean resolve, boolean coreType)
-  {
-		switch (featureID) {
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS__STRING_SYMBOL:
-				return getStringSymbol();
-		}
-		return super.eGet(featureID, resolve, coreType);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public void eSet(int featureID, Object newValue)
-  {
-		switch (featureID) {
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS__STRING_SYMBOL:
-				setStringSymbol((String)newValue);
-				return;
-		}
-		super.eSet(featureID, newValue);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public void eUnset(int featureID)
-  {
-		switch (featureID) {
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS__STRING_SYMBOL:
-				setStringSymbol(STRING_SYMBOL_EDEFAULT);
-				return;
-		}
-		super.eUnset(featureID);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public boolean eIsSet(int featureID)
-  {
-		switch (featureID) {
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS__STRING_SYMBOL:
-				return STRING_SYMBOL_EDEFAULT == null ? stringSymbol != null : !STRING_SYMBOL_EDEFAULT.equals(stringSymbol);
-		}
-		return super.eIsSet(featureID);
-	}
-
-  /**
-	 * <!-- begin-user-doc -->
-   * <!-- end-user-doc -->
-	 * @generated
-	 */
-  @Override
-  public String toString()
-  {
-		if (eIsProxy()) return super.toString();
-
-		StringBuffer result = new StringBuffer(super.toString());
-		result.append(" (stringSymbol: ");
-		result.append(stringSymbol);
-		result.append(')');
-		return result.toString();
-	}
-
-} //StringLiteralExpCSImpl
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsAdapterFactory.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsAdapterFactory.java
index 023bdf0..8a6ce4f 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsAdapterFactory.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsAdapterFactory.java
@@ -5,13 +5,46 @@
 
 import org.eclipse.emf.common.notify.Adapter;
 import org.eclipse.emf.common.notify.Notifier;
-
 import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
-
 import org.eclipse.emf.ecore.EObject;
-
 import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.qvtd.doc.minioclcs.*;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CSTrace;
+import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
+import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LoopExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
+import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.OperationCS;
+import org.eclipse.qvtd.doc.minioclcs.PackageCS;
+import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
+import org.eclipse.qvtd.doc.minioclcs.PathElementCS;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+import org.eclipse.qvtd.doc.minioclcs.PrimaryExpCS;
+import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
+import org.eclipse.qvtd.doc.minioclcs.RootCS;
+import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
 
 /**
  * <!-- begin-user-doc -->
@@ -81,14 +114,26 @@
 				return createPackageCSAdapter();
 			}
 			@Override
+			public Adapter caseClassifierCS(ClassifierCS object) {
+				return createClassifierCSAdapter();
+			}
+			@Override
 			public Adapter caseClassCS(ClassCS object) {
 				return createClassCSAdapter();
 			}
 			@Override
+			public Adapter caseDatatypeCS(DatatypeCS object) {
+				return createDatatypeCSAdapter();
+			}
+			@Override
 			public Adapter casePropertyCS(PropertyCS object) {
 				return createPropertyCSAdapter();
 			}
 			@Override
+			public Adapter caseMultiplicityCS(MultiplicityCS object) {
+				return createMultiplicityCSAdapter();
+			}
+			@Override
 			public Adapter caseOperationCS(OperationCS object) {
 				return createOperationCSAdapter();
 			}
@@ -121,6 +166,34 @@
 				return createPrimaryExpCSAdapter();
 			}
 			@Override
+			public Adapter caseSelfExpCS(SelfExpCS object) {
+				return createSelfExpCSAdapter();
+			}
+			@Override
+			public Adapter caseNavigationExpCS(NavigationExpCS object) {
+				return createNavigationExpCSAdapter();
+			}
+			@Override
+			public Adapter caseLoopExpCS(LoopExpCS object) {
+				return createLoopExpCSAdapter();
+			}
+			@Override
+			public Adapter caseCollectExpCS(CollectExpCS object) {
+				return createCollectExpCSAdapter();
+			}
+			@Override
+			public Adapter caseIteratorVarCS(IteratorVarCS object) {
+				return createIteratorVarCSAdapter();
+			}
+			@Override
+			public Adapter caseIterateExpCS(IterateExpCS object) {
+				return createIterateExpCSAdapter();
+			}
+			@Override
+			public Adapter caseAccVarCS(AccVarCS object) {
+				return createAccVarCSAdapter();
+			}
+			@Override
 			public Adapter caseNameExpCS(NameExpCS object) {
 				return createNameExpCSAdapter();
 			}
@@ -137,14 +210,30 @@
 				return createIntLiteralExpCSAdapter();
 			}
 			@Override
-			public Adapter caseStringLiteralExpCS(StringLiteralExpCS object) {
-				return createStringLiteralExpCSAdapter();
-			}
-			@Override
 			public Adapter caseBooleanLiteralExpCS(BooleanLiteralExpCS object) {
 				return createBooleanLiteralExpCSAdapter();
 			}
 			@Override
+			public Adapter caseNullLiteralExpCS(NullLiteralExpCS object) {
+				return createNullLiteralExpCSAdapter();
+			}
+			@Override
+			public Adapter caseCollectionLiteralExpCS(CollectionLiteralExpCS object) {
+				return createCollectionLiteralExpCSAdapter();
+			}
+			@Override
+			public Adapter caseCollectionLiteralPartCS(CollectionLiteralPartCS object) {
+				return createCollectionLiteralPartCSAdapter();
+			}
+			@Override
+			public Adapter caseLetExpCS(LetExpCS object) {
+				return createLetExpCSAdapter();
+			}
+			@Override
+			public Adapter caseLetVarCS(LetVarCS object) {
+				return createLetVarCSAdapter();
+			}
+			@Override
 			public Adapter casePathNameCS(PathNameCS object) {
 				return createPathNameCSAdapter();
 			}
@@ -212,6 +301,21 @@
 	}
 
   /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.ClassifierCS <em>Classifier CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.ClassifierCS
+	 * @generated
+	 */
+  public Adapter createClassifierCSAdapter()
+  {
+		return null;
+	}
+
+  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.ClassCS <em>Class CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
@@ -227,6 +331,21 @@
 	}
 
   /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.DatatypeCS <em>Datatype CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.DatatypeCS
+	 * @generated
+	 */
+  public Adapter createDatatypeCSAdapter()
+  {
+		return null;
+	}
+
+  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.PropertyCS <em>Property CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
@@ -242,6 +361,21 @@
 	}
 
   /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.MultiplicityCS <em>Multiplicity CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.MultiplicityCS
+	 * @generated
+	 */
+  public Adapter createMultiplicityCSAdapter()
+  {
+		return null;
+	}
+
+  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.OperationCS <em>Operation CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
@@ -362,6 +496,111 @@
 	}
 
   /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.SelfExpCS <em>Self Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.SelfExpCS
+	 * @generated
+	 */
+  public Adapter createSelfExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.NavigationExpCS <em>Navigation Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.NavigationExpCS
+	 * @generated
+	 */
+  public Adapter createNavigationExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.LoopExpCS <em>Loop Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LoopExpCS
+	 * @generated
+	 */
+  public Adapter createLoopExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.CollectExpCS <em>Collect Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectExpCS
+	 * @generated
+	 */
+  public Adapter createCollectExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.IteratorVarCS <em>Iterator Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IteratorVarCS
+	 * @generated
+	 */
+  public Adapter createIteratorVarCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.IterateExpCS <em>Iterate Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.IterateExpCS
+	 * @generated
+	 */
+  public Adapter createIterateExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.AccVarCS <em>Acc Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.AccVarCS
+	 * @generated
+	 */
+  public Adapter createAccVarCSAdapter()
+  {
+		return null;
+	}
+
+  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.NameExpCS <em>Name Exp CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
@@ -422,21 +661,6 @@
 	}
 
   /**
-	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS <em>String Literal Exp CS</em>}'.
-	 * <!-- begin-user-doc -->
-   * This default implementation returns null so that we can easily ignore cases;
-   * it's useful to ignore a case when inheritance will catch all the cases anyway.
-   * <!-- end-user-doc -->
-	 * @return the new adapter.
-	 * @see org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS
-	 * @generated
-	 */
-  public Adapter createStringLiteralExpCSAdapter()
-  {
-		return null;
-	}
-
-  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS <em>Boolean Literal Exp CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
@@ -452,6 +676,81 @@
 	}
 
   /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS <em>Null Literal Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS
+	 * @generated
+	 */
+  public Adapter createNullLiteralExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS <em>Collection Literal Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS
+	 * @generated
+	 */
+  public Adapter createCollectionLiteralExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS <em>Collection Literal Part CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS
+	 * @generated
+	 */
+  public Adapter createCollectionLiteralPartCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.LetExpCS <em>Let Exp CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetExpCS
+	 * @generated
+	 */
+  public Adapter createLetExpCSAdapter()
+  {
+		return null;
+	}
+
+  /**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.LetVarCS <em>Let Var CS</em>}'.
+	 * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.qvtd.doc.minioclcs.LetVarCS
+	 * @generated
+	 */
+  public Adapter createLetVarCSAdapter()
+  {
+		return null;
+	}
+
+  /**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.qvtd.doc.minioclcs.PathNameCS <em>Path Name CS</em>}'.
 	 * <!-- begin-user-doc -->
    * This default implementation returns null so that we can easily ignore cases;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsSwitch.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsSwitch.java
index 384ff36..039b0f1 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsSwitch.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/util/MinioclcsSwitch.java
@@ -5,11 +5,45 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
-
 import org.eclipse.emf.ecore.util.Switch;
-
 import org.eclipse.jdt.annotation.Nullable;
-import org.eclipse.qvtd.doc.minioclcs.*;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
+import org.eclipse.qvtd.doc.minioclcs.BooleanLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CSTrace;
+import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.ClassifierCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
+import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
+import org.eclipse.qvtd.doc.minioclcs.ExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LoopExpCS;
+import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
+import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NavigationExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.OperationCS;
+import org.eclipse.qvtd.doc.minioclcs.PackageCS;
+import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
+import org.eclipse.qvtd.doc.minioclcs.PathElementCS;
+import org.eclipse.qvtd.doc.minioclcs.PathNameCS;
+import org.eclipse.qvtd.doc.minioclcs.PrimaryExpCS;
+import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
+import org.eclipse.qvtd.doc.minioclcs.RootCS;
+import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
 
 /**
  * <!-- begin-user-doc -->
@@ -86,13 +120,29 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MinioclcsPackage.CLASSIFIER_CS: {
+				ClassifierCS classifierCS = (ClassifierCS)theEObject;
+				T result = caseClassifierCS(classifierCS);
+				if (result == null) result = caseCSTrace(classifierCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MinioclcsPackage.CLASS_CS: {
 				ClassCS classCS = (ClassCS)theEObject;
 				T result = caseClassCS(classCS);
+				if (result == null) result = caseClassifierCS(classCS);
 				if (result == null) result = caseCSTrace(classCS);
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MinioclcsPackage.DATATYPE_CS: {
+				DatatypeCS datatypeCS = (DatatypeCS)theEObject;
+				T result = caseDatatypeCS(datatypeCS);
+				if (result == null) result = caseClassifierCS(datatypeCS);
+				if (result == null) result = caseCSTrace(datatypeCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MinioclcsPackage.PROPERTY_CS: {
 				PropertyCS propertyCS = (PropertyCS)theEObject;
 				T result = casePropertyCS(propertyCS);
@@ -100,6 +150,13 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MinioclcsPackage.MULTIPLICITY_CS: {
+				MultiplicityCS multiplicityCS = (MultiplicityCS)theEObject;
+				T result = caseMultiplicityCS(multiplicityCS);
+				if (result == null) result = caseCSTrace(multiplicityCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MinioclcsPackage.OPERATION_CS: {
 				OperationCS operationCS = (OperationCS)theEObject;
 				T result = caseOperationCS(operationCS);
@@ -162,10 +219,69 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MinioclcsPackage.SELF_EXP_CS: {
+				SelfExpCS selfExpCS = (SelfExpCS)theEObject;
+				T result = caseSelfExpCS(selfExpCS);
+				if (result == null) result = casePrimaryExpCS(selfExpCS);
+				if (result == null) result = caseCallExpCS(selfExpCS);
+				if (result == null) result = caseLogicExpCS(selfExpCS);
+				if (result == null) result = caseExpCS(selfExpCS);
+				if (result == null) result = caseCSTrace(selfExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.NAVIGATION_EXP_CS: {
+				NavigationExpCS navigationExpCS = (NavigationExpCS)theEObject;
+				T result = caseNavigationExpCS(navigationExpCS);
+				if (result == null) result = caseCSTrace(navigationExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.LOOP_EXP_CS: {
+				LoopExpCS loopExpCS = (LoopExpCS)theEObject;
+				T result = caseLoopExpCS(loopExpCS);
+				if (result == null) result = caseNavigationExpCS(loopExpCS);
+				if (result == null) result = caseCSTrace(loopExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.COLLECT_EXP_CS: {
+				CollectExpCS collectExpCS = (CollectExpCS)theEObject;
+				T result = caseCollectExpCS(collectExpCS);
+				if (result == null) result = caseLoopExpCS(collectExpCS);
+				if (result == null) result = caseNavigationExpCS(collectExpCS);
+				if (result == null) result = caseCSTrace(collectExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.ITERATOR_VAR_CS: {
+				IteratorVarCS iteratorVarCS = (IteratorVarCS)theEObject;
+				T result = caseIteratorVarCS(iteratorVarCS);
+				if (result == null) result = caseCSTrace(iteratorVarCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.ITERATE_EXP_CS: {
+				IterateExpCS iterateExpCS = (IterateExpCS)theEObject;
+				T result = caseIterateExpCS(iterateExpCS);
+				if (result == null) result = caseLoopExpCS(iterateExpCS);
+				if (result == null) result = caseNavigationExpCS(iterateExpCS);
+				if (result == null) result = caseCSTrace(iterateExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.ACC_VAR_CS: {
+				AccVarCS accVarCS = (AccVarCS)theEObject;
+				T result = caseAccVarCS(accVarCS);
+				if (result == null) result = caseCSTrace(accVarCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MinioclcsPackage.NAME_EXP_CS: {
 				NameExpCS nameExpCS = (NameExpCS)theEObject;
 				T result = caseNameExpCS(nameExpCS);
 				if (result == null) result = casePrimaryExpCS(nameExpCS);
+				if (result == null) result = caseNavigationExpCS(nameExpCS);
 				if (result == null) result = caseCallExpCS(nameExpCS);
 				if (result == null) result = caseLogicExpCS(nameExpCS);
 				if (result == null) result = caseExpCS(nameExpCS);
@@ -203,18 +319,6 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS: {
-				StringLiteralExpCS stringLiteralExpCS = (StringLiteralExpCS)theEObject;
-				T result = caseStringLiteralExpCS(stringLiteralExpCS);
-				if (result == null) result = caseLiteralExpCS(stringLiteralExpCS);
-				if (result == null) result = casePrimaryExpCS(stringLiteralExpCS);
-				if (result == null) result = caseCallExpCS(stringLiteralExpCS);
-				if (result == null) result = caseLogicExpCS(stringLiteralExpCS);
-				if (result == null) result = caseExpCS(stringLiteralExpCS);
-				if (result == null) result = caseCSTrace(stringLiteralExpCS);
-				if (result == null) result = defaultCase(theEObject);
-				return result;
-			}
 			case MinioclcsPackage.BOOLEAN_LITERAL_EXP_CS: {
 				BooleanLiteralExpCS booleanLiteralExpCS = (BooleanLiteralExpCS)theEObject;
 				T result = caseBooleanLiteralExpCS(booleanLiteralExpCS);
@@ -227,6 +331,55 @@
 				if (result == null) result = defaultCase(theEObject);
 				return result;
 			}
+			case MinioclcsPackage.NULL_LITERAL_EXP_CS: {
+				NullLiteralExpCS nullLiteralExpCS = (NullLiteralExpCS)theEObject;
+				T result = caseNullLiteralExpCS(nullLiteralExpCS);
+				if (result == null) result = caseLiteralExpCS(nullLiteralExpCS);
+				if (result == null) result = casePrimaryExpCS(nullLiteralExpCS);
+				if (result == null) result = caseCallExpCS(nullLiteralExpCS);
+				if (result == null) result = caseLogicExpCS(nullLiteralExpCS);
+				if (result == null) result = caseExpCS(nullLiteralExpCS);
+				if (result == null) result = caseCSTrace(nullLiteralExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS: {
+				CollectionLiteralExpCS collectionLiteralExpCS = (CollectionLiteralExpCS)theEObject;
+				T result = caseCollectionLiteralExpCS(collectionLiteralExpCS);
+				if (result == null) result = caseLiteralExpCS(collectionLiteralExpCS);
+				if (result == null) result = casePrimaryExpCS(collectionLiteralExpCS);
+				if (result == null) result = caseCallExpCS(collectionLiteralExpCS);
+				if (result == null) result = caseLogicExpCS(collectionLiteralExpCS);
+				if (result == null) result = caseExpCS(collectionLiteralExpCS);
+				if (result == null) result = caseCSTrace(collectionLiteralExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS: {
+				CollectionLiteralPartCS collectionLiteralPartCS = (CollectionLiteralPartCS)theEObject;
+				T result = caseCollectionLiteralPartCS(collectionLiteralPartCS);
+				if (result == null) result = caseCSTrace(collectionLiteralPartCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.LET_EXP_CS: {
+				LetExpCS letExpCS = (LetExpCS)theEObject;
+				T result = caseLetExpCS(letExpCS);
+				if (result == null) result = casePrimaryExpCS(letExpCS);
+				if (result == null) result = caseCallExpCS(letExpCS);
+				if (result == null) result = caseLogicExpCS(letExpCS);
+				if (result == null) result = caseExpCS(letExpCS);
+				if (result == null) result = caseCSTrace(letExpCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
+			case MinioclcsPackage.LET_VAR_CS: {
+				LetVarCS letVarCS = (LetVarCS)theEObject;
+				T result = caseLetVarCS(letVarCS);
+				if (result == null) result = caseCSTrace(letVarCS);
+				if (result == null) result = defaultCase(theEObject);
+				return result;
+			}
 			case MinioclcsPackage.PATH_NAME_CS: {
 				PathNameCS pathNameCS = (PathNameCS)theEObject;
 				T result = casePathNameCS(pathNameCS);
@@ -297,6 +450,22 @@
 	}
 
   /**
+	 * Returns the result of interpreting the object as an instance of '<em>Classifier CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Classifier CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseClassifierCS(ClassifierCS object)
+  {
+		return null;
+	}
+
+  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Class CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
@@ -313,6 +482,22 @@
 	}
 
   /**
+	 * Returns the result of interpreting the object as an instance of '<em>Datatype CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Datatype CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseDatatypeCS(DatatypeCS object)
+  {
+		return null;
+	}
+
+  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Property CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
@@ -329,6 +514,22 @@
 	}
 
   /**
+	 * Returns the result of interpreting the object as an instance of '<em>Multiplicity CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Multiplicity CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseMultiplicityCS(MultiplicityCS object)
+  {
+		return null;
+	}
+
+  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Operation CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
@@ -457,6 +658,118 @@
 	}
 
   /**
+	 * Returns the result of interpreting the object as an instance of '<em>Self Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Self Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseSelfExpCS(SelfExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Navigation Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Navigation Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseNavigationExpCS(NavigationExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Loop Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Loop Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseLoopExpCS(LoopExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Collect Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Collect Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseCollectExpCS(CollectExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Iterator Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Iterator Var CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseIteratorVarCS(IteratorVarCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Iterate Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Iterate Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseIterateExpCS(IterateExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Acc Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Acc Var CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseAccVarCS(AccVarCS object)
+  {
+		return null;
+	}
+
+  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Name Exp CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
@@ -521,22 +834,6 @@
 	}
 
   /**
-	 * Returns the result of interpreting the object as an instance of '<em>String Literal Exp CS</em>'.
-	 * <!-- begin-user-doc -->
-   * This implementation returns null;
-   * returning a non-null result will terminate the switch.
-   * <!-- end-user-doc -->
-	 * @param object the target of the switch.
-	 * @return the result of interpreting the object as an instance of '<em>String Literal Exp CS</em>'.
-	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
-	 * @generated
-	 */
-  public T caseStringLiteralExpCS(StringLiteralExpCS object)
-  {
-		return null;
-	}
-
-  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Boolean Literal Exp CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
@@ -553,6 +850,86 @@
 	}
 
   /**
+	 * Returns the result of interpreting the object as an instance of '<em>Null Literal Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Null Literal Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseNullLiteralExpCS(NullLiteralExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Collection Literal Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Collection Literal Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseCollectionLiteralExpCS(CollectionLiteralExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Collection Literal Part CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Collection Literal Part CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseCollectionLiteralPartCS(CollectionLiteralPartCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Let Exp CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Let Exp CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseLetExpCS(LetExpCS object)
+  {
+		return null;
+	}
+
+  /**
+	 * Returns the result of interpreting the object as an instance of '<em>Let Var CS</em>'.
+	 * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Let Var CS</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+  public T caseLetVarCS(LetVarCS object)
+  {
+		return null;
+	}
+
+  /**
 	 * Returns the result of interpreting the object as an instance of '<em>Path Name CS</em>'.
 	 * <!-- begin-user-doc -->
    * This implementation returns null;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/internal/tx/LazyObjectManager.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/internal/tx/LazyObjectManager.java
index c6235f4..e044da6 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/internal/tx/LazyObjectManager.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/internal/tx/LazyObjectManager.java
@@ -12,7 +12,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *   E.D.Willink - Initial API and implementation
  *******************************************************************************/
@@ -138,7 +138,7 @@
 			throw new UnsupportedOperationException();
 		}
 	}
-	
+
 	/**
 	 * Simple SlotState describing a DataType element or 1:1 Object navigation.
 	 */
@@ -148,23 +148,23 @@
 			ASSIGNABLE,		// No assignment has been performed, object reads are blocked (collections reads may be unblocked)
 			ASSIGNED		// Last assignment has been performed, reads are unblocked
 		}
-		
-		protected final @NonNull Object debug_eObject; 
-		protected final @NonNull EStructuralFeature debug_eFeature; 
+
+		protected final @NonNull Object debug_eObject;
+		protected final @NonNull EStructuralFeature debug_eFeature;
 		protected @NonNull SlotMode mode;
 		private @Nullable Object blockedInvocations = null;
-		
+
 		protected BasicSlotState(@NonNull Object eObject, @NonNull EStructuralFeature eFeature) {
-			mode = SlotMode.ASSIGNABLE;	
+			mode = SlotMode.ASSIGNABLE;
 			this.debug_eObject = eObject;
 			this.debug_eFeature = eFeature;
 		}
 
 		protected BasicSlotState(@NonNull Object eObject, @NonNull EStructuralFeature eFeature, @Nullable Object ecoreValue) {
-			mode = SlotMode.ASSIGNED;	
+			mode = SlotMode.ASSIGNED;
 			this.debug_eObject = eObject;
 			this.debug_eFeature = eFeature;
-//			assert !(eFeature instanceof EOppositeReferenceImpl);
+			//			assert !(eFeature instanceof EOppositeReferenceImpl);
 		}
 
 		public synchronized void assigned(@NonNull LazyObjectManager objectManager, @NonNull Object eObject, @NonNull EStructuralFeature eFeature, @Nullable Object ecoreValue) {
@@ -174,11 +174,13 @@
 					unblock(objectManager);
 					break;
 				case ASSIGNED:
-					System.out.println("Re-assignment of " + eFeature.getEContainingClass().getName() + "::" + eFeature.getName() + " for " + eObject + " with " + ecoreValue);
+					if (!(eFeature instanceof EOppositeReferenceImpl)) {
+						System.out.println("Re-assignment of " + eFeature.getEContainingClass().getName() + "::" + eFeature.getName() + " for " + eObject + " with " + ecoreValue);
+					}
 					break;
 			}
 		}
-		
+
 		@Override
 		public synchronized void block(@NonNull Invocation invocation) {
 			final Object blockedInvocations2 = blockedInvocations;
@@ -197,7 +199,7 @@
 				blockedInvocationList.add(invocation);
 			}
 		}
-		
+
 		@Override
 		public synchronized void getting(@NonNull Object eObject, @NonNull EStructuralFeature eFeature) {
 			switch (mode) {
@@ -243,7 +245,7 @@
 			blockedInvocations = null;
 		}
 	}
-	
+
 	/**
 	 * SlotState describing the contained element side of a 1:N Object navigation.
 	 * A single OneToManyContainedSlotState is shared by each of the possible containing features and also the
@@ -256,14 +258,14 @@
 	 * - get of an aggregator => ASSIGNABLE, blocked
 	 * Unblock
 	 * - assign of possibly null aggregator for the element, ASSIGNABLE, blocked => ASSIGNED, not blocked
-	 * - non-null aggregator is notified to unblock 
+	 * - non-null aggregator is notified to unblock
 	 * Thereafter
 	 * - get of aggregator ASSIGNED => ASSIGNED
 	 * <br>
 	 * Lifecycle (write first):
 	 * Create due to
 	 * - assign of a possibly null aggregator => ASSIGNED, unblocked
-	 * - non-null aggregator is notified to unblock 
+	 * - non-null aggregator is notified to unblock
 	 * Thereafter
 	 * - get of aggregator ASSIGNED => ASSIGNED
 	 *
@@ -281,7 +283,7 @@
 			}
 			return new ContainedSlotState(eObject, eFeature, eContainer);
 		}
-		
+
 		public ContainedSlotState(@NonNull EObject eObject, @NonNull EReference eFeature) {
 			super(eObject, eFeature);
 			assert !eFeature.isMany();
@@ -291,7 +293,7 @@
 			}
 //			assert eFeature.getEOpposite().isMany();
 		}
-		
+
 		private ContainedSlotState(@NonNull EObject eObject, @NonNull EReference eFeature, @Nullable EObject eContainer) {
 			super(eObject, eFeature, eContainer);
 			assert !eFeature.isMany();
@@ -313,7 +315,7 @@
 			}
 			super.assigned(objectManager, eObject, eFeature, ecoreValue);
 		}
-		
+
 		@Override
 		@SuppressWarnings("unchecked")
 		public synchronized @Nullable <G> G get(@NonNull ObjectManager objectManager, @NonNull EObject eObject, @NonNull EStructuralFeature eFeature) {
@@ -332,7 +334,7 @@
 			return (G) eObject.eContainer();
 		}
 	} */
-	
+
 	/**
 	 * SlotState describing the container side of a 1:N Object navigation.
 	 * <br>
@@ -371,7 +373,7 @@
 			}
 			return new ContainerSlotState(eObject, eFeature, eContent);
 		}
-		
+
 		public ContainerSlotState(@NonNull EObject eContainer, @NonNull EReference eFeature) {
 			super(eContainer, eFeature);
 			assert eFeature.isContainer();
@@ -404,12 +406,12 @@
 			super.assigned(objectManager, eObject, eFeature, ecoreValue);
 
 		}
-		
+
 		public void assignedElement(@NonNull ObjectManager objectManager,
 				@NonNull EObject eContainer, @NonNull EReference eReference, EObject eObject) {
 			super.assigned(objectManager, eContainer, eReference, eObject);
 		}
-		
+
 		@Override
 		@SuppressWarnings("unchecked")
 		public synchronized @Nullable <G> G get(@NonNull ObjectManager objectManager, @NonNull EObject eObject, @NonNull EStructuralFeature eFeature) {
@@ -424,12 +426,12 @@
 			return (G) eObject.eGet(eFeature);
 		}
 	} */
-	
+
 	/**
 	 * SlotState describing an M:N Object navigation.
 	 */
 	class ManyToManySlotState extends BasicSlotState
-	{	
+	{
 		public ManyToManySlotState(@NonNull Object eObject, @NonNull EStructuralFeature eFeature) {
 			super(eObject, eFeature);
 			throw new UnsupportedOperationException();
@@ -440,7 +442,7 @@
 			throw new UnsupportedOperationException();
 		}
 	}
-	
+
 	/**
 	 * SlotState describing the aggregator side of a 1:N Object navigation.
 	 * <br>
@@ -472,24 +474,24 @@
 	class OneToManyAggregatorSlotState extends BasicSlotState
 	{
 
-//		public static @NonNull  SlotState create(@NonNull ObjectManager objectManager,
-//				EObject eObject, @NonNull EReference eFeature, EReference eOppositeReference, Object ecoreValue) {
-//			// TODO Auto-generated method stub
-//			return null;
-//		}
-		
+		//		public static @NonNull  SlotState create(@NonNull ObjectManager objectManager,
+		//				EObject eObject, @NonNull EReference eFeature, EReference eOppositeReference, Object ecoreValue) {
+		//			// TODO Auto-generated method stub
+		//			return null;
+		//		}
+
 		public OneToManyAggregatorSlotState(@NonNull Object eContainer, @NonNull EStructuralFeature eFeature) {
 			super(eContainer, eFeature);
 			assert eFeature.isMany();
-//			assert eFeature.getEOpposite() != null;
-//			assert eFeature.getEOpposite().isMany();
+			//			assert eFeature.getEOpposite() != null;
+			//			assert eFeature.getEOpposite().isMany();
 		}
 
 		private OneToManyAggregatorSlotState(@NonNull Object eContainer, @NonNull EStructuralFeature eFeature, @Nullable Object eContents) {
 			super(eContainer, eFeature, eContents);
 			assert eFeature.isMany();
-//			assert eFeature.getEOpposite() != null;
-//			assert eFeature.getEOpposite().isMany();
+			//			assert eFeature.getEOpposite() != null;
+			//			assert eFeature.getEOpposite().isMany();
 			assert ((EObject)eContainer).eGet(eFeature).equals(eContents);
 		}
 
@@ -511,12 +513,12 @@
 				Map<@NonNull EStructuralFeature, @NonNull SlotState> elementObjectState = getObjectState(ecoreValue);
 				elementObjectState.put(eOppositeReference, this);
 			}
-//			super.assigned(objectManager, eObject, eFeature, ecoreValue);
+			//			super.assigned(objectManager, eObject, eFeature, ecoreValue);
 			assignedElement(eObject, (EReference)eFeature, (EObject)ecoreValue);
 		}
-		
+
 		public void assignedElement(@NonNull Object eContainer, @NonNull EReference eReference, Object eObject) {
-//			super.assigned(objectManager, eContainer, eReference, eObject);
+			//			super.assigned(objectManager, eContainer, eReference, eObject);
 			switch (mode) {
 				case ASSIGNABLE:
 					mode = SlotMode.ASSIGNED;
@@ -526,7 +528,7 @@
 					break;
 			}
 		}
-		
+
 		@Override
 		public synchronized void getting(@NonNull Object eObject, @NonNull EStructuralFeature eFeature) {
 			switch (mode) {
@@ -539,7 +541,7 @@
 			}
 		}
 	}
-	
+
 	/**
 	 * SlotState describing the element side of a 1:N Object navigation.
 	 * <br>
@@ -548,14 +550,14 @@
 	 * - get of an aggregator => ASSIGNABLE, blocked
 	 * Unblock
 	 * - assign of possibly null aggregator for the element, ASSIGNABLE, blocked => ASSIGNED, not blocked
-	 * - non-null aggregator is notified to unblock 
+	 * - non-null aggregator is notified to unblock
 	 * Thereafter
 	 * - get of aggregator ASSIGNED => ASSIGNED
 	 * <br>
 	 * Lifecycle (write first):
 	 * Create due to
 	 * - assign of a possibly null aggregator => ASSIGNED, unblocked
-	 * - non-null aggregator is notified to unblock 
+	 * - non-null aggregator is notified to unblock
 	 * Thereafter
 	 * - get of aggregator ASSIGNED => ASSIGNED
 	 */
@@ -568,15 +570,15 @@
 				assert eFeature.getEOpposite() == null;
 			}
 			else {
-//				assert eFeature.getEOpposite() != null;
+				//				assert eFeature.getEOpposite() != null;
 				assert getEOppositeReference(eFeature).isMany();
 			}
 		}
-		
+
 		public OneToManyElementSlotState(@NonNull Object eObject, @NonNull EReference eFeature, @NonNull Object eAggregator) {
 			super(eObject, eFeature, eAggregator);
 			assert !eFeature.isMany();
-//			assert eFeature.getEOpposite() != null;
+			//			assert eFeature.getEOpposite() != null;
 			assert getEOppositeReference(eFeature).isMany();
 			if (eFeature == OCLstdlibPackage.Literals.OCL_ELEMENT__OCL_CONTAINER) {
 				assert ((EObject)eObject).eContainer() == eAggregator;
@@ -606,7 +608,7 @@
 			assigned(LazyObjectManager.this, eObject, eFeature, ecoreValue);
 		}
 	}
-	
+
 	/**
 	 * SlotState describing a 1:1 Object navigation. Both ends are assigned exactly once. The remote assignment
 	 * may be null.
@@ -629,7 +631,7 @@
 	 */
 	class OneToOneSlotState extends BasicSlotState
 	{
-/*		public static @NonNull <G,S> SlotState createContainer(@NonNull ObjectManager objectManager,
+		/*		public static @NonNull <G,S> SlotState createContainer(@NonNull ObjectManager objectManager,
 				@NonNull EObject eObject, @NonNull EReference eFeature, @Nullable EReference eOppositeFeature, @Nullable EObject eOpposite) {
 			Map<EStructuralFeature, SlotState> oppositeObjectState = null;
 			if (eOpposite != null) {
@@ -637,7 +639,7 @@
 				SlotState slotState = oppositeObjectState.get(eOppositeFeature);
 				if (slotState != null) {
 					return slotState;
-				}		
+				}
 			}
 			SlotState slotState = new OneToOneSlotState(eObject, eFeature, eOpposite);
 			if (oppositeObjectState != null) {
@@ -645,7 +647,7 @@
 			}
 			return slotState;
 		} */
-		
+
 		public OneToOneSlotState(@NonNull Object eObject, @NonNull EReference eFeature) {
 			super(eObject, eFeature);
 			if (eFeature instanceof EOppositeReferenceImpl) {
@@ -654,17 +656,17 @@
 			else {
 				assert !eFeature.isMany();
 				if (eFeature.isContainer()) {
-	//				assert eObject.eContainer() == eOpposite;
+					//				assert eObject.eContainer() == eOpposite;
 				}
 				else if (eFeature.isContainment()) {
-	//				assert eOpposite != null;
-	//				assert eObject == eOpposite.eContainer();
+					//				assert eOpposite != null;
+					//				assert eObject == eOpposite.eContainer();
 				}
 				else if (eFeature == OCLstdlibPackage.Literals.OCL_ELEMENT__OCL_CONTAINER) {
-	//				slotState = new OneToOneSlotState(eObject, eReference);
+					//				slotState = new OneToOneSlotState(eObject, eReference);
 				}
 				else {
-//					assert eFeature.getEOpposite() != null;
+					//					assert eFeature.getEOpposite() != null;
 					assert !getEOppositeReference(eFeature).isMany();
 				}
 			}
@@ -677,11 +679,12 @@
 				assert ((EObject)eObject).eContainer() == eOpposite;
 			}
 			else if (eFeature.isContainment()) {
-				assert eOpposite != null;
-				assert eObject == ((EObject)eOpposite).eContainer();
+				//				assert eOpposite != null;
+				//				assert eObject == ((EObject)eOpposite).eContainer();
+				assert (eOpposite == null) || (eObject == ((EObject)eOpposite).eContainer());
 			}
 			else {
-//				assert eFeature.getEOpposite() != null;
+				//				assert eFeature.getEOpposite() != null;
 				assert !getEOppositeReference(eFeature).isMany();
 				assert ((EObject)eObject).eGet(eFeature) == eOpposite;
 			}
@@ -692,7 +695,7 @@
 			assigned(LazyObjectManager.this, eObject, eFeature, ecoreValue);
 		}
 	}
-	
+
 	/**
 	 * Simple SlotState describing a DataType element.
 	 */
@@ -713,10 +716,10 @@
 	}
 
 	protected final boolean debugTracing = AbstractTransformer.INVOCATIONS.isActive();
-	
+
 	/**
 	 * This unpleasant Map of Maps is a pathfinder before embarking on slotted objects that merge user and overhead
-	 * in a single object. The first map is then a null lookup and the nested map is an index within the object. 
+	 * in a single object. The first map is then a null lookup and the nested map is an index within the object.
 	 */
 	private @NonNull Map<@NonNull Object, @NonNull Map<@NonNull EStructuralFeature, @NonNull SlotState>> object2feature2slotState = new HashMap<@NonNull Object, @NonNull Map<@NonNull EStructuralFeature, @NonNull SlotState>>();
 
@@ -724,7 +727,7 @@
 	 * Map of helper objects to reify missing EReference::eOpposites. Only used as a semantically inverse handle on the available EReference.
 	 */
 	private @NonNull Map<@NonNull EReference, @NonNull EOppositeReferenceImpl> eReference2eOppositeReference = new HashMap<@NonNull EReference, @NonNull EOppositeReferenceImpl>();
-	
+
 	public LazyObjectManager(@NonNull LazyInvocationManager invocationManager) {
 		super(invocationManager);
 	}
@@ -738,7 +741,7 @@
 		Map<@NonNull EStructuralFeature, @NonNull SlotState> objectState = getObjectState(eObject);
 		SlotState slotState = objectState.get(eFeature);
 		if (slotState != null) {
-			slotState.assigned(eObject, eFeature, ecoreValue);		
+			slotState.assigned(eObject, eFeature, ecoreValue);
 		}
 		else {
 			if (eFeature instanceof EAttribute) {
@@ -748,10 +751,10 @@
 				EReference eReference = (EReference)eFeature;
 				EReference eOppositeReference = getEOppositeReference(eReference);
 				if (!(eOppositeReference instanceof EOppositeReferenceImpl)) {
-//					if (ecoreValue != null) {
-//						Map<EStructuralFeature, SlotState> oppositeObjectState = getObjectState((EObject) ecoreValue);
-//						SlotState oppositeSlotState = oppositeObjectState.get(eOppositeReference);
-//					}
+					//					if (ecoreValue != null) {
+					//						Map<EStructuralFeature, SlotState> oppositeObjectState = getObjectState((EObject) ecoreValue);
+					//						SlotState oppositeSlotState = oppositeObjectState.get(eOppositeReference);
+					//					}
 					if (eReference.isMany()) {
 						assert ecoreValue != null;
 						if (eOppositeReference.isMany()) {
@@ -765,9 +768,9 @@
 						if (eOppositeReference.isMany()) {
 							slotState = createOneToManyElementSlotState(eObject, eReference, eOppositeReference, ecoreValue);
 						}
-//						else if (isIncremental) {
-//							slotState = OneToOneSlotState.create(this, eObject, eReference, eOppositeReference, ecoreValue);
-//						}
+						//						else if (isIncremental) {
+						//							slotState = OneToOneSlotState.create(this, eObject, eReference, eOppositeReference, ecoreValue);
+						//						}
 						else {
 							slotState = createOneToOneSlotState(eObject, eReference, eOppositeReference, ecoreValue);
 						}
@@ -787,16 +790,16 @@
 						Map<@NonNull EStructuralFeature, @NonNull SlotState> oppositeObjectState = getObjectState(ecoreValue);
 						slotState = oppositeObjectState.get(eOppositeReference);
 						if (slotState != null) {
-							slotState.assigned(ecoreValue, eOppositeReference, eObject);		
+							slotState.assigned(ecoreValue, eOppositeReference, eObject);
 						}
 						else {
 							slotState = createOneToOneSlotState(eObject, eReference, eOppositeReference, (EObject)ecoreValue);
 						}
 					}
 				}
-//				else if (eReference == OCLstdlibPackage.Literals.OCL_ELEMENT__OCL_CONTAINER) {
-//					slotState = OneToOneSlotState.create(this, eObject, eReference, eOppositeReference, (EObject)ecoreValue);
-//				}
+				//				else if (eReference == OCLstdlibPackage.Literals.OCL_ELEMENT__OCL_CONTAINER) {
+				//					slotState = OneToOneSlotState.create(this, eObject, eReference, eOppositeReference, (EObject)ecoreValue);
+				//				}
 				else {						// Unidirectional non-containment EReference
 					if (ecoreValue != null) {
 						eOppositeReference = getEOppositeReference(eReference);
@@ -816,12 +819,12 @@
 							}
 						}
 						else {
-							slotState.assigned(ecoreValue, eOppositeReference, eObject);		
+							slotState.assigned(ecoreValue, eOppositeReference, eObject);
 						}
 					}
 					else {
 						slotState = createOneToOneSlotState(eObject, eReference, eOppositeReference, ecoreValue);
-						
+
 					}
 				}
 			}
@@ -842,8 +845,8 @@
 	@NonNull SlotState createOneToManyAggregatorSlotState(
 			@NonNull Object eObject, @NonNull EReference eFeature, @NonNull EReference eOppositeFeature, @Nullable Object eContents) {
 		if (eContents != null) {
-//			SlotState containedSlotState = objectManager.getSlotState(eContent, eOppositeFeature);
-//			containedSlotState.assigned(objectManager, eContent, eOppositeFeature, eObject);
+			//			SlotState containedSlotState = objectManager.getSlotState(eContent, eOppositeFeature);
+			//			containedSlotState.assigned(objectManager, eContent, eOppositeFeature, eObject);
 		}
 		return new OneToManyAggregatorSlotState(eObject, eFeature, eContents);
 	}
@@ -911,14 +914,14 @@
 						String lowerValue = details.get("lower");
 						IntegerValue lower = lowerValue != null ? ValueUtil.integerValueOf(lowerValue) :  PivotConstantsInternal.ANNOTATED_IMPLICIT_OPPOSITE_LOWER_VALUE;
 						if (lower.isInvalid()) {
-//							logger.error("Invalid " + PROPERTY_OPPOSITE_ROLE_LOWER_KEY + " " + lower);
+							//							logger.error("Invalid " + PROPERTY_OPPOSITE_ROLE_LOWER_KEY + " " + lower);
 							lower = PivotConstantsInternal.ANNOTATED_IMPLICIT_OPPOSITE_LOWER_VALUE;
 						}
 						eOppositeReference2.setLowerBound(lower.intValue());
 						String upperValue = details.get("upper");
 						UnlimitedNaturalValue upper = upperValue != null ? ValueUtil.unlimitedNaturalValueOf(upperValue) : PivotConstantsInternal.ANNOTATED_IMPLICIT_OPPOSITE_UPPER_VALUE;
 						if (upper.isInvalid()) {
-//							logger.error("Invalid " + PROPERTY_OPPOSITE_ROLE_UPPER_KEY + " " + upper);
+							//							logger.error("Invalid " + PROPERTY_OPPOSITE_ROLE_UPPER_KEY + " " + upper);
 							upper = PivotConstantsInternal.ANNOTATED_IMPLICIT_OPPOSITE_UPPER_VALUE;
 						}
 						eOppositeReference2.setUpperBound(upper.isUnlimited() ? -1 : upper.intValue());
@@ -938,7 +941,7 @@
 		}
 		return eOppositeReference;
 	}
-	
+
 	public @NonNull Map<@NonNull EStructuralFeature, @NonNull SlotState> getObjectState(@NonNull Object eObject) {
 		Map<@NonNull EStructuralFeature, @NonNull SlotState> feature2state = object2feature2slotState.get(eObject);
 		if (feature2state == null) {
@@ -967,7 +970,7 @@
 				EReference eOppositeReference = getEOppositeReference(eReference);
 				if (eReference instanceof EOppositeReferenceImpl) {
 					slotState = createReferenceSlotState(eObject, eReference, eOppositeReference);
-/*					if (eOppositeReference.isMany()) {
+					/*					if (eOppositeReference.isMany()) {
 						slotState = new OneToManyElementSlotState(eObject, eReference);
 					}
 					else {
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/AbstractCS2ASTransformer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/AbstractCS2ASTransformer.java
index ecbccea..b258a9c 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/AbstractCS2ASTransformer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/AbstractCS2ASTransformer.java
@@ -27,7 +27,6 @@
 import org.eclipse.ocl.pivot.evaluation.Executor;
 import org.eclipse.ocl.pivot.ids.ClassId;
 import org.eclipse.ocl.pivot.ids.PropertyId;
-import org.eclipse.qvtd.doc.minioclcs.xtext.tx.AbstractTransformer;
 
 
 public abstract class AbstractCS2ASTransformer extends AbstractTransformer
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASExceptionDiagnostic.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASExceptionDiagnostic.java
index 71444d9..549a453 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASExceptionDiagnostic.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASExceptionDiagnostic.java
@@ -20,7 +20,6 @@
 
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.qvtd.doc.minioclcs.xtext.tx.CS2ASException;
 import org.eclipse.xtext.diagnostics.ExceptionDiagnostic;
 import org.eclipse.xtext.nodemodel.ICompositeNode;
 import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformationExecutor.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformationExecutor.java
index cbd02d4..7971876 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformationExecutor.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformationExecutor.java
@@ -20,7 +20,6 @@
 
 import org.eclipse.jdt.annotation.NonNull;
 import org.eclipse.ocl.pivot.utilities.EnvironmentFactory;
-import org.eclipse.qvtd.doc.minioclcs.xtext.tx.AbstractTransformationExecutor;
 
 public class CS2ASTransformationExecutor extends AbstractTransformationExecutor {
 
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformer.java
index cc38acd..f90e702 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/CS2ASTransformer.java
@@ -20,8 +20,6 @@
 
 import java.util.List;
 
-import org.eclipse.qvtd.doc.minioclcs.xtext.tx.Transformer;
-
 public interface CS2ASTransformer extends Transformer {
 
 	public List<CS2ASDiagnostic> getErrors();
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/ObjectManager.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/ObjectManager.java
index 32013d4..25edf99 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/ObjectManager.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtext/tx/ObjectManager.java
@@ -12,7 +12,7 @@
  * are made available under the terms of the Eclipse Public License v1.0
  * which accompanies this distribution, and is available at
  * http://www.eclipse.org/legal/epl-v10.html
- * 
+ *
  * Contributors:
  *   E.D.Willink - Initial API and implementation
  *******************************************************************************/
@@ -24,11 +24,11 @@
 
 /**
  * An ObjectManager supervises the state of relevant properties in objects used by a mapping invocation.
- * 
+ *
  * getting should be invoked as a pre-access guard to cause the invocation to fail if a not-ready property is accessed.
- * 
+ *
  * assigned should be invoked to invocation that a property whose access is guarded is now assigned.
- * 
+ *
  * at-since 1.1
  * @noimplement clients should derive from AbstractObjectManager
  */
@@ -51,13 +51,13 @@
 
 	@NonNull Iterable<@NonNull ? extends Object> getObjects();
 	@NonNull Iterable<@NonNull ? extends SlotState> getSlotStates(@NonNull Object object);
-	
+
 	/**
 	 * Throw an InvocationFailedException if the eFeature of eObject has not yet been assigned.
 	 * If isOpposite, the eFeature's opposite is to be be assessed.
 	 */
 	void getting(@NonNull Object eObject, /*@NonNull*/ EStructuralFeature eFeature, boolean isOpposite) throws InvocationFailedException;
-	
+
 	/**
 	 * Identify that the read of eFeature of eObject return ecoreValue.
 	 */
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/LabelGeneratorRegistry.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/LabelGeneratorRegistry.java
deleted file mode 100644
index 9b5de8c..0000000
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/LabelGeneratorRegistry.java
+++ /dev/null
@@ -1,51 +0,0 @@
-/**
- * This file was copied and re-packaged automatically by
- *     org.eclipse.qvtd.doc.miniocl.build.MiniOCLBuildEverything
- * from 
- *     ..\..\plugins\org.eclipse.qvtd.runtime\src\org\eclipse\qvtd\runtime\labels\LabelGeneratorRegistry.java
- *
- * Do not edit this file. 
- */
-/*******************************************************************************
- * Copyright (c) 2010, 2016 Willink Transformations and others.
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v1.0
- * which accompanies this distribution, and is available at
- * http://www.eclipse.org/legal/epl-v10.html
- *
- * Contributors:
- *     E.D.Willink - initial API and implementation
- *******************************************************************************/
-package org.eclipse.qvtd.doc.minioclcs.xtexts.labels;
-
-import org.eclipse.jdt.annotation.NonNull;
-import org.eclipse.ocl.pivot.labels.ILabelGenerator;
-
-/**
- * DebugString supports generation of debug identification of objects, determining a name usuing
- * the following alternatives.
- * <br>The null object is identified as <null-Object>
- * <br>Implementers of IDebugString are identified by IDebugString.toDebugString();
- * <br>MethodCall registrations in DebugUtils are identified by MethodCall.invoke().
- * <br>Other objects are identified as <unknown-'class-name' 'object.toString()'>
- * <p>
- * MethodCall registrations may be made via registerInstanceMethod or registerStaticMethod.
- * <p>
- * A debug string may be obtained via DebugString.toDebug(object).
- * <p>
- * DebugString providers string formatters for simple classes such as String, Number, Boolean
- * and Ecore components such as EObject, Resource and ResourceSet.
- * <p>
- * User extensions should be registered prior to use. Beware that late registration can
- * give misleading results since in the absence of an exact MethodCall registration the
- * class hierarchy is search first for base classes then for instances for which there
- * is an exact MethodCall match. This result is then cached and so may occlude a late
- * registration.
- */
-public class LabelGeneratorRegistry
-{	
-	public static void initialize(ILabelGenerator.@NonNull Registry registry) {
-		TransformationInstanceLabelGenerator.initialize(registry);
-		TypedModelInstanceLabelGenerator.initialize(registry);
-	}
-}
\ No newline at end of file
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/QVTiLabelGenerators.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/QVTiLabelGenerators.java
new file mode 100644
index 0000000..697f3aa
--- /dev/null
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/minioclcs/xtexts/labels/QVTiLabelGenerators.java
@@ -0,0 +1,30 @@
+/**
+ * This file was copied and re-packaged automatically by
+ *     org.eclipse.qvtd.doc.miniocl.build.MiniOCLBuildEverything
+ * from 
+ *     ..\..\plugins\org.eclipse.qvtd.runtime\src\org\eclipse\qvtd\runtime\labels\QVTiLabelGenerators.java
+ *
+ * Do not edit this file. 
+ */
+/*******************************************************************************
+ * Copyright (c) 2015, 2016 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ *     E.D.Willink - initial API and implementation
+ *******************************************************************************/
+package org.eclipse.qvtd.doc.minioclcs.xtexts.labels;
+
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.ocl.pivot.labels.ILabelGenerator;
+
+public class QVTiLabelGenerators
+{
+	public static void initialize(ILabelGenerator.@NonNull Registry registry) {
+		TransformationInstanceLabelGenerator.initialize(registry);
+		TypedModelInstanceLabelGenerator.initialize(registry);
+	}
+}
\ No newline at end of file
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSAntlrTokenFileProvider.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSAntlrTokenFileProvider.java
index 3f0870b..7f3cf00 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSAntlrTokenFileProvider.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSAntlrTokenFileProvider.java
@@ -4,6 +4,7 @@
 package org.eclipse.qvtd.doc.parser.antlr;
 
 import java.io.InputStream;
+
 import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
 
 public class MiniOCLCSAntlrTokenFileProvider implements IAntlrTokenFileProvider {
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSParser.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSParser.java
index 7065276..32b1f41 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSParser.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/MiniOCLCSParser.java
@@ -3,12 +3,13 @@
  */
 package org.eclipse.qvtd.doc.parser.antlr;
 
-import com.google.inject.Inject;
 import org.eclipse.qvtd.doc.parser.antlr.internal.InternalMiniOCLCSParser;
 import org.eclipse.qvtd.doc.services.MiniOCLCSGrammarAccess;
 import org.eclipse.xtext.parser.antlr.AbstractAntlrParser;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
 
+import com.google.inject.Inject;
+
 public class MiniOCLCSParser extends AbstractAntlrParser {
 
 	@Inject
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.g b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.g
index e6567ac..1adb2cd 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.g
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.g
@@ -24,6 +24,7 @@
 import org.eclipse.xtext.parser.impl.*;
 import org.eclipse.emf.ecore.util.EcoreUtil;
 import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.common.util.Enumerator;
 import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream;
 import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
@@ -190,18 +191,18 @@
 			(
 				(
 					{
-						newCompositeNode(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0());
+						newCompositeNode(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0());
 					}
-					lv_classes_4_0=ruleClassCS
+					lv_classifiers_4_0=ruleClassifierCS
 					{
 						if ($current==null) {
 							$current = createModelElementForParent(grammarAccess.getPackageCSRule());
 						}
 						add(
 							$current,
-							"classes",
-							lv_classes_4_0,
-							"org.eclipse.qvtd.doc.MiniOCLCS.ClassCS");
+							"classifiers",
+							lv_classifiers_4_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.ClassifierCS");
 						afterParserOrEnumRuleCall();
 					}
 				)
@@ -214,6 +215,48 @@
 	)
 ;
 
+// Entry rule entryRuleClassifierCS
+entryRuleClassifierCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getClassifierCSRule()); }
+	iv_ruleClassifierCS=ruleClassifierCS
+	{ $current=$iv_ruleClassifierCS.current; }
+	EOF;
+
+// Rule ClassifierCS
+ruleClassifierCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0());
+		}
+		this_ClassCS_0=ruleClassCS
+		{
+			$current = $this_ClassCS_0.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1());
+		}
+		this_DatatypeCS_1=ruleDatatypeCS
+		{
+			$current = $this_DatatypeCS_1.current;
+			afterParserOrEnumRuleCall();
+		}
+	)
+;
+
 // Entry rule entryRuleClassCS
 entryRuleClassCS returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getClassCSRule()); }
@@ -329,6 +372,73 @@
 	)
 ;
 
+// Entry rule entryRuleDatatypeCS
+entryRuleDatatypeCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getDatatypeCSRule()); }
+	iv_ruleDatatypeCS=ruleDatatypeCS
+	{ $current=$iv_ruleDatatypeCS.current; }
+	EOF;
+
+// Rule DatatypeCS
+ruleDatatypeCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='datatype'
+		{
+			newLeafNode(otherlv_0, grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0());
+		}
+		(
+			(
+				lv_name_1_0=RULE_ID
+				{
+					newLeafNode(lv_name_1_0, grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getDatatypeCSRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_1_0,
+						"org.eclipse.xtext.common.Terminals.ID");
+				}
+			)
+		)
+		otherlv_2=':'
+		{
+			newLeafNode(otherlv_2, grammarAccess.getDatatypeCSAccess().getColonKeyword_2());
+		}
+		(
+			(
+				lv_typeName_3_0=RULE_STRING
+				{
+					newLeafNode(lv_typeName_3_0, grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getDatatypeCSRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"typeName",
+						lv_typeName_3_0,
+						"org.eclipse.xtext.common.Terminals.STRING");
+				}
+			)
+		)
+		otherlv_4=';'
+		{
+			newLeafNode(otherlv_4, grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4());
+		}
+	)
+;
+
 // Entry rule entryRulePropertyCS
 entryRulePropertyCS returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getPropertyCSRule()); }
@@ -345,15 +455,27 @@
 	leaveRule();
 }:
 	(
-		otherlv_0='prop'
-		{
-			newLeafNode(otherlv_0, grammarAccess.getPropertyCSAccess().getPropKeyword_0());
-		}
+		(
+			otherlv_0='attribute'
+			{
+				newLeafNode(otherlv_0, grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0());
+			}
+			    |
+			otherlv_1='containment'
+			{
+				newLeafNode(otherlv_1, grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1());
+			}
+			    |
+			otherlv_2='cross_reference'
+			{
+				newLeafNode(otherlv_2, grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2());
+			}
+		)
 		(
 			(
-				lv_name_1_0=RULE_ID
+				lv_name_3_0=RULE_ID
 				{
-					newLeafNode(lv_name_1_0, grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0());
+					newLeafNode(lv_name_3_0, grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0());
 				}
 				{
 					if ($current==null) {
@@ -362,21 +484,21 @@
 					setWithLastConsumed(
 						$current,
 						"name",
-						lv_name_1_0,
+						lv_name_3_0,
 						"org.eclipse.xtext.common.Terminals.ID");
 				}
 			)
 		)
-		otherlv_2=':'
+		otherlv_4=':'
 		{
-			newLeafNode(otherlv_2, grammarAccess.getPropertyCSAccess().getColonKeyword_2());
+			newLeafNode(otherlv_4, grammarAccess.getPropertyCSAccess().getColonKeyword_2());
 		}
 		(
 			(
 				{
 					newCompositeNode(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0());
 				}
-				lv_typeRef_3_0=rulePathNameCS
+				lv_typeRef_5_0=rulePathNameCS
 				{
 					if ($current==null) {
 						$current = createModelElementForParent(grammarAccess.getPropertyCSRule());
@@ -384,15 +506,152 @@
 					set(
 						$current,
 						"typeRef",
-						lv_typeRef_3_0,
+						lv_typeRef_5_0,
 						"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
 					afterParserOrEnumRuleCall();
 				}
 			)
 		)
-		otherlv_4=';'
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0());
+				}
+				lv_multiplicity_6_0=ruleMultiplicityCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getPropertyCSRule());
+					}
+					set(
+						$current,
+						"multiplicity",
+						lv_multiplicity_6_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.MultiplicityCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)?
+		otherlv_7=';'
 		{
-			newLeafNode(otherlv_4, grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4());
+			newLeafNode(otherlv_7, grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5());
+		}
+	)
+;
+
+// Entry rule entryRuleMultiplicityCS
+entryRuleMultiplicityCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getMultiplicityCSRule()); }
+	iv_ruleMultiplicityCS=ruleMultiplicityCS
+	{ $current=$iv_ruleMultiplicityCS.current; }
+	EOF;
+
+// Rule MultiplicityCS
+ruleMultiplicityCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='['
+		{
+			newLeafNode(otherlv_0, grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0());
+		}
+		(
+			(
+				(
+					lv_opt_1_0='?'
+					{
+						newLeafNode(lv_opt_1_0, grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0());
+					}
+					{
+						if ($current==null) {
+							$current = createModelElement(grammarAccess.getMultiplicityCSRule());
+						}
+						setWithLastConsumed($current, "opt", true, "?");
+					}
+				)
+			)
+			    |
+			(
+				(
+					lv_mult_2_0='*'
+					{
+						newLeafNode(lv_mult_2_0, grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0());
+					}
+					{
+						if ($current==null) {
+							$current = createModelElement(grammarAccess.getMultiplicityCSRule());
+						}
+						setWithLastConsumed($current, "mult", true, "*");
+					}
+				)
+			)
+			    |
+			(
+				(
+					(
+						lv_lower_3_0=RULE_INT
+						{
+							newLeafNode(lv_lower_3_0, grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0());
+						}
+						{
+							if ($current==null) {
+								$current = createModelElement(grammarAccess.getMultiplicityCSRule());
+							}
+							setWithLastConsumed(
+								$current,
+								"lower",
+								lv_lower_3_0,
+								"org.eclipse.xtext.common.Terminals.INT");
+						}
+					)
+				)
+				otherlv_4='..'
+				{
+					newLeafNode(otherlv_4, grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1());
+				}
+				(
+					(
+						(
+							lv_upperInt_5_0=RULE_INT
+							{
+								newLeafNode(lv_upperInt_5_0, grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0());
+							}
+							{
+								if ($current==null) {
+									$current = createModelElement(grammarAccess.getMultiplicityCSRule());
+								}
+								setWithLastConsumed(
+									$current,
+									"upperInt",
+									lv_upperInt_5_0,
+									"org.eclipse.xtext.common.Terminals.INT");
+							}
+						)
+					)
+					    |
+					(
+						(
+							lv_upperMult_6_0='*'
+							{
+								newLeafNode(lv_upperMult_6_0, grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0());
+							}
+							{
+								if ($current==null) {
+									$current = createModelElement(grammarAccess.getMultiplicityCSRule());
+								}
+								setWithLastConsumed($current, "upperMult", true, "*");
+							}
+						)
+					)
+				)
+			)
+		)
+		otherlv_7=']'
+		{
+			newLeafNode(otherlv_7, grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2());
 		}
 	)
 ;
@@ -905,18 +1164,18 @@
 			(
 				(
 					{
-						newCompositeNode(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0());
+						newCompositeNode(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0());
 					}
-					lv_nameExp_3_0=ruleNameExpCS
+					lv_navExp_3_0=ruleNavigationExpCS
 					{
 						if ($current==null) {
 							$current = createModelElementForParent(grammarAccess.getCallExpCSRule());
 						}
 						set(
 							$current,
-							"nameExp",
-							lv_nameExp_3_0,
-							"org.eclipse.qvtd.doc.MiniOCLCS.NameExpCS");
+							"navExp",
+							lv_navExp_3_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.NavigationExpCS");
 						afterParserOrEnumRuleCall();
 					}
 				)
@@ -945,11 +1204,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0());
+			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0());
 		}
-		this_NameExpCS_0=ruleNameExpCS
+		this_SelfExpCS_0=ruleSelfExpCS
 		{
-			$current = $this_NameExpCS_0.current;
+			$current = $this_SelfExpCS_0.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -957,13 +1216,472 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1());
+			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1());
 		}
-		this_LiteralExpCS_1=ruleLiteralExpCS
+		this_NameExpCS_1=ruleNameExpCS
 		{
-			$current = $this_LiteralExpCS_1.current;
+			$current = $this_NameExpCS_1.current;
 			afterParserOrEnumRuleCall();
 		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2());
+		}
+		this_LiteralExpCS_2=ruleLiteralExpCS
+		{
+			$current = $this_LiteralExpCS_2.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3());
+		}
+		this_LetExpCS_3=ruleLetExpCS
+		{
+			$current = $this_LetExpCS_3.current;
+			afterParserOrEnumRuleCall();
+		}
+	)
+;
+
+// Entry rule entryRuleSelfExpCS
+entryRuleSelfExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getSelfExpCSRule()); }
+	iv_ruleSelfExpCS=ruleSelfExpCS
+	{ $current=$iv_ruleSelfExpCS.current; }
+	EOF;
+
+// Rule SelfExpCS
+ruleSelfExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				/* */
+			}
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='self'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getSelfExpCSAccess().getSelfKeyword_1());
+		}
+	)
+;
+
+// Entry rule entryRuleNavigationExpCS
+entryRuleNavigationExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getNavigationExpCSRule()); }
+	iv_ruleNavigationExpCS=ruleNavigationExpCS
+	{ $current=$iv_ruleNavigationExpCS.current; }
+	EOF;
+
+// Rule NavigationExpCS
+ruleNavigationExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0());
+		}
+		this_LoopExpCS_0=ruleLoopExpCS
+		{
+			$current = $this_LoopExpCS_0.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1());
+		}
+		this_NameExpCS_1=ruleNameExpCS
+		{
+			$current = $this_NameExpCS_1.current;
+			afterParserOrEnumRuleCall();
+		}
+	)
+;
+
+// Entry rule entryRuleLoopExpCS
+entryRuleLoopExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getLoopExpCSRule()); }
+	iv_ruleLoopExpCS=ruleLoopExpCS
+	{ $current=$iv_ruleLoopExpCS.current; }
+	EOF;
+
+// Rule LoopExpCS
+ruleLoopExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0());
+		}
+		this_CollectExpCS_0=ruleCollectExpCS
+		{
+			$current = $this_CollectExpCS_0.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1());
+		}
+		this_IterateExpCS_1=ruleIterateExpCS
+		{
+			$current = $this_IterateExpCS_1.current;
+			afterParserOrEnumRuleCall();
+		}
+	)
+;
+
+// Entry rule entryRuleCollectExpCS
+entryRuleCollectExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getCollectExpCSRule()); }
+	iv_ruleCollectExpCS=ruleCollectExpCS
+	{ $current=$iv_ruleCollectExpCS.current; }
+	EOF;
+
+// Rule CollectExpCS
+ruleCollectExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='collect'
+		{
+			newLeafNode(otherlv_0, grammarAccess.getCollectExpCSAccess().getCollectKeyword_0());
+		}
+		otherlv_1='('
+		{
+			newLeafNode(otherlv_1, grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1());
+		}
+		(
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0());
+					}
+					lv_itVar_2_0=ruleIteratorVarCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getCollectExpCSRule());
+						}
+						set(
+							$current,
+							"itVar",
+							lv_itVar_2_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.IteratorVarCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+			otherlv_3='|'
+			{
+				newLeafNode(otherlv_3, grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1());
+			}
+		)?
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0());
+				}
+				lv_exp_4_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getCollectExpCSRule());
+					}
+					set(
+						$current,
+						"exp",
+						lv_exp_4_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_5=')'
+		{
+			newLeafNode(otherlv_5, grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4());
+		}
+	)
+;
+
+// Entry rule entryRuleIteratorVarCS
+entryRuleIteratorVarCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getIteratorVarCSRule()); }
+	iv_ruleIteratorVarCS=ruleIteratorVarCS
+	{ $current=$iv_ruleIteratorVarCS.current; }
+	EOF;
+
+// Rule IteratorVarCS
+ruleIteratorVarCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				lv_itName_0_0=RULE_ID
+				{
+					newLeafNode(lv_itName_0_0, grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getIteratorVarCSRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"itName",
+						lv_itName_0_0,
+						"org.eclipse.xtext.common.Terminals.ID");
+				}
+			)
+		)
+		(
+			otherlv_1=':'
+			{
+				newLeafNode(otherlv_1, grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0());
+					}
+					lv_itType_2_0=rulePathNameCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getIteratorVarCSRule());
+						}
+						set(
+							$current,
+							"itType",
+							lv_itType_2_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+	)
+;
+
+// Entry rule entryRuleIterateExpCS
+entryRuleIterateExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getIterateExpCSRule()); }
+	iv_ruleIterateExpCS=ruleIterateExpCS
+	{ $current=$iv_ruleIterateExpCS.current; }
+	EOF;
+
+// Rule IterateExpCS
+ruleIterateExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='iterate'
+		{
+			newLeafNode(otherlv_0, grammarAccess.getIterateExpCSAccess().getIterateKeyword_0());
+		}
+		otherlv_1='('
+		{
+			newLeafNode(otherlv_1, grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0());
+				}
+				lv_itVar_2_0=ruleIteratorVarCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+					}
+					set(
+						$current,
+						"itVar",
+						lv_itVar_2_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.IteratorVarCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_3=';'
+		{
+			newLeafNode(otherlv_3, grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0());
+				}
+				lv_accVar_4_0=ruleAccVarCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+					}
+					set(
+						$current,
+						"accVar",
+						lv_accVar_4_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.AccVarCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_5='|'
+		{
+			newLeafNode(otherlv_5, grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0());
+				}
+				lv_exp_6_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+					}
+					set(
+						$current,
+						"exp",
+						lv_exp_6_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_7=')'
+		{
+			newLeafNode(otherlv_7, grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7());
+		}
+	)
+;
+
+// Entry rule entryRuleAccVarCS
+entryRuleAccVarCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getAccVarCSRule()); }
+	iv_ruleAccVarCS=ruleAccVarCS
+	{ $current=$iv_ruleAccVarCS.current; }
+	EOF;
+
+// Rule AccVarCS
+ruleAccVarCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				lv_accName_0_0=RULE_ID
+				{
+					newLeafNode(lv_accName_0_0, grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getAccVarCSRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"accName",
+						lv_accName_0_0,
+						"org.eclipse.xtext.common.Terminals.ID");
+				}
+			)
+		)
+		(
+			otherlv_1=':'
+			{
+				newLeafNode(otherlv_1, grammarAccess.getAccVarCSAccess().getColonKeyword_1_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0());
+					}
+					lv_accType_2_0=rulePathNameCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getAccVarCSRule());
+						}
+						set(
+							$current,
+							"accType",
+							lv_accType_2_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+		otherlv_3='='
+		{
+			newLeafNode(otherlv_3, grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0());
+				}
+				lv_accInitExp_4_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getAccVarCSRule());
+					}
+					set(
+						$current,
+						"accInitExp",
+						lv_accInitExp_4_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
 	)
 ;
 
@@ -1139,11 +1857,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1());
+			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1());
 		}
-		this_StringLiteralExpCS_1=ruleStringLiteralExpCS
+		this_BooleanLiteralExpCS_1=ruleBooleanLiteralExpCS
 		{
-			$current = $this_StringLiteralExpCS_1.current;
+			$current = $this_BooleanLiteralExpCS_1.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1151,11 +1869,23 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2());
+			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2());
 		}
-		this_BooleanLiteralExpCS_2=ruleBooleanLiteralExpCS
+		this_NullLiteralExpCS_2=ruleNullLiteralExpCS
 		{
-			$current = $this_BooleanLiteralExpCS_2.current;
+			$current = $this_NullLiteralExpCS_2.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3());
+		}
+		this_CollectionLiteralExpCS_3=ruleCollectionLiteralExpCS
+		{
+			$current = $this_CollectionLiteralExpCS_3.current;
 			afterParserOrEnumRuleCall();
 		}
 	)
@@ -1196,41 +1926,6 @@
 	)
 ;
 
-// Entry rule entryRuleStringLiteralExpCS
-entryRuleStringLiteralExpCS returns [EObject current=null]:
-	{ newCompositeNode(grammarAccess.getStringLiteralExpCSRule()); }
-	iv_ruleStringLiteralExpCS=ruleStringLiteralExpCS
-	{ $current=$iv_ruleStringLiteralExpCS.current; }
-	EOF;
-
-// Rule StringLiteralExpCS
-ruleStringLiteralExpCS returns [EObject current=null]
-@init {
-	enterRule();
-}
-@after {
-	leaveRule();
-}:
-	(
-		(
-			lv_stringSymbol_0_0=RULE_STRING
-			{
-				newLeafNode(lv_stringSymbol_0_0, grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0());
-			}
-			{
-				if ($current==null) {
-					$current = createModelElement(grammarAccess.getStringLiteralExpCSRule());
-				}
-				setWithLastConsumed(
-					$current,
-					"stringSymbol",
-					lv_stringSymbol_0_0,
-					"org.eclipse.xtext.common.Terminals.STRING");
-			}
-		)
-	)
-;
-
 // Entry rule entryRuleBooleanLiteralExpCS
 entryRuleBooleanLiteralExpCS returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getBooleanLiteralExpCSRule()); }
@@ -1281,6 +1976,342 @@
 	)
 ;
 
+// Entry rule entryRuleNullLiteralExpCS
+entryRuleNullLiteralExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getNullLiteralExpCSRule()); }
+	iv_ruleNullLiteralExpCS=ruleNullLiteralExpCS
+	{ $current=$iv_ruleNullLiteralExpCS.current; }
+	EOF;
+
+// Rule NullLiteralExpCS
+ruleNullLiteralExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				/* */
+			}
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='null'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1());
+		}
+	)
+;
+
+// Entry rule entryRuleCollectionLiteralExpCS
+entryRuleCollectionLiteralExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getCollectionLiteralExpCSRule()); }
+	iv_ruleCollectionLiteralExpCS=ruleCollectionLiteralExpCS
+	{ $current=$iv_ruleCollectionLiteralExpCS.current; }
+	EOF;
+
+// Rule CollectionLiteralExpCS
+ruleCollectionLiteralExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0());
+				}
+				lv_kind_0_0=ruleCollectionKindCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getCollectionLiteralExpCSRule());
+					}
+					set(
+						$current,
+						"kind",
+						lv_kind_0_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.CollectionKindCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		otherlv_1='{'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0());
+				}
+				lv_parts_2_0=ruleCollectionLiteralPartCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getCollectionLiteralExpCSRule());
+					}
+					add(
+						$current,
+						"parts",
+						lv_parts_2_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.CollectionLiteralPartCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)*
+		otherlv_3='}'
+		{
+			newLeafNode(otherlv_3, grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3());
+		}
+	)
+;
+
+// Entry rule entryRuleCollectionLiteralPartCS
+entryRuleCollectionLiteralPartCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getCollectionLiteralPartCSRule()); }
+	iv_ruleCollectionLiteralPartCS=ruleCollectionLiteralPartCS
+	{ $current=$iv_ruleCollectionLiteralPartCS.current; }
+	EOF;
+
+// Rule CollectionLiteralPartCS
+ruleCollectionLiteralPartCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0());
+				}
+				lv_first_0_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getCollectionLiteralPartCSRule());
+					}
+					set(
+						$current,
+						"first",
+						lv_first_0_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			otherlv_1='..'
+			{
+				newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0());
+					}
+					lv_last_2_0=ruleExpCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getCollectionLiteralPartCSRule());
+						}
+						set(
+							$current,
+							"last",
+							lv_last_2_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+	)
+;
+
+// Entry rule entryRuleLetExpCS
+entryRuleLetExpCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getLetExpCSRule()); }
+	iv_ruleLetExpCS=ruleLetExpCS
+	{ $current=$iv_ruleLetExpCS.current; }
+	EOF;
+
+// Rule LetExpCS
+ruleLetExpCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		otherlv_0='let'
+		{
+			newLeafNode(otherlv_0, grammarAccess.getLetExpCSAccess().getLetKeyword_0());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0());
+				}
+				lv_letVars_1_0=ruleLetVarCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+					}
+					add(
+						$current,
+						"letVars",
+						lv_letVars_1_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.LetVarCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+		(
+			otherlv_2=','
+			{
+				newLeafNode(otherlv_2, grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0());
+					}
+					lv_letVars_3_0=ruleLetVarCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+						}
+						add(
+							$current,
+							"letVars",
+							lv_letVars_3_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.LetVarCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)*
+		otherlv_4='in'
+		{
+			newLeafNode(otherlv_4, grammarAccess.getLetExpCSAccess().getInKeyword_3());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0());
+				}
+				lv_inExp_5_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+					}
+					set(
+						$current,
+						"inExp",
+						lv_inExp_5_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
+// Entry rule entryRuleLetVarCS
+entryRuleLetVarCS returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getLetVarCSRule()); }
+	iv_ruleLetVarCS=ruleLetVarCS
+	{ $current=$iv_ruleLetVarCS.current; }
+	EOF;
+
+// Rule LetVarCS
+ruleLetVarCS returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			(
+				lv_name_0_0=RULE_ID
+				{
+					newLeafNode(lv_name_0_0, grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0());
+				}
+				{
+					if ($current==null) {
+						$current = createModelElement(grammarAccess.getLetVarCSRule());
+					}
+					setWithLastConsumed(
+						$current,
+						"name",
+						lv_name_0_0,
+						"org.eclipse.xtext.common.Terminals.ID");
+				}
+			)
+		)
+		(
+			otherlv_1=':'
+			{
+				newLeafNode(otherlv_1, grammarAccess.getLetVarCSAccess().getColonKeyword_1_0());
+			}
+			(
+				(
+					{
+						newCompositeNode(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0());
+					}
+					lv_typeRef_2_0=rulePathNameCS
+					{
+						if ($current==null) {
+							$current = createModelElementForParent(grammarAccess.getLetVarCSRule());
+						}
+						set(
+							$current,
+							"typeRef",
+							lv_typeRef_2_0,
+							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+						afterParserOrEnumRuleCall();
+					}
+				)
+			)
+		)?
+		otherlv_3='='
+		{
+			newLeafNode(otherlv_3, grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2());
+		}
+		(
+			(
+				{
+					newCompositeNode(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0());
+				}
+				lv_initExp_4_0=ruleExpCS
+				{
+					if ($current==null) {
+						$current = createModelElementForParent(grammarAccess.getLetVarCSRule());
+					}
+					set(
+						$current,
+						"initExp",
+						lv_initExp_4_0,
+						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+					afterParserOrEnumRuleCall();
+				}
+			)
+		)
+	)
+;
+
 // Entry rule entryRulePathNameCS
 entryRulePathNameCS returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getPathNameCSRule()); }
@@ -1300,17 +2331,17 @@
 		(
 			(
 				{
-					newCompositeNode(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0());
+					newCompositeNode(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0());
 				}
-				lv_path_0_0=rulePathElementCS
+				lv_pathElements_0_0=rulePathElementCS
 				{
 					if ($current==null) {
 						$current = createModelElementForParent(grammarAccess.getPathNameCSRule());
 					}
 					add(
 						$current,
-						"path",
-						lv_path_0_0,
+						"pathElements",
+						lv_pathElements_0_0,
 						"org.eclipse.qvtd.doc.MiniOCLCS.PathElementCS");
 					afterParserOrEnumRuleCall();
 				}
@@ -1379,6 +2410,23 @@
 	)
 ;
 
+// Rule CollectionKindCS
+ruleCollectionKindCS returns [Enumerator current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		enumLiteral_0='Collection'
+		{
+			$current = grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration().getEnumLiteral().getInstance();
+			newLeafNode(enumLiteral_0, grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration());
+		}
+	)
+;
+
 RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 
 RULE_INT : ('0'..'9')+;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.tokens b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.tokens
index 642cda4..fa4c57f 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.tokens
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCS.tokens
@@ -1,30 +1,46 @@
-'('=20
-')'=22
-','=21
-'->'=28
-'.'=27
+'('=28
+')'=30
+'*'=24
+','=29
+'->'=36
+'.'=35
+'..'=25
 ':'=17
-'::'=31
+'::'=46
 ';'=18
-'<>'=26
-'='=23
+'<>'=34
+'='=31
+'?'=23
+'Collection'=47
+'['=22
+']'=26
+'attribute'=19
 'class'=14
-'context'=24
+'collect'=38
+'containment'=20
+'context'=32
+'cross_reference'=21
+'datatype'=16
 'extends'=15
-'false'=30
-'inv'=25
-'op'=19
+'false'=42
+'in'=45
+'inv'=33
+'iterate'=40
+'let'=44
+'null'=43
+'op'=27
 'package'=11
-'prop'=16
-'true'=29
+'self'=37
+'true'=41
 '{'=12
+'|'=39
 '}'=13
 RULE_ANY_OTHER=10
 RULE_ID=4
-RULE_INT=5
+RULE_INT=6
 RULE_ML_COMMENT=7
 RULE_SL_COMMENT=8
-RULE_STRING=6
+RULE_STRING=5
 RULE_WS=9
 T__11=11
 T__12=12
@@ -47,3 +63,19 @@
 T__29=29
 T__30=30
 T__31=31
+T__32=32
+T__33=33
+T__34=34
+T__35=35
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+T__40=40
+T__41=41
+T__42=42
+T__43=43
+T__44=44
+T__45=45
+T__46=46
+T__47=47
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSLexer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSLexer.java
index b1ff619..26e5ade 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSLexer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSLexer.java
@@ -1,19 +1,20 @@
 package org.eclipse.qvtd.doc.parser.antlr.internal;
 
+import org.antlr.runtime.BaseRecognizer;
+import org.antlr.runtime.CharStream;
+import org.antlr.runtime.DFA;
+import org.antlr.runtime.EarlyExitException;
+import org.antlr.runtime.IntStream;
+import org.antlr.runtime.MismatchedSetException;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.RecognizerSharedState;
 // Hack: Use our own Lexer superclass by means of import. 
 // Currently there is no other way to specify the superclass for the lexer.
 import org.eclipse.xtext.parser.antlr.Lexer;
 
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-
 @SuppressWarnings("all")
 public class InternalMiniOCLCSLexer extends Lexer {
-    public static final int RULE_STRING=6;
-    public static final int RULE_SL_COMMENT=8;
     public static final int T__19=19;
     public static final int T__15=15;
     public static final int T__16=16;
@@ -23,16 +24,11 @@
     public static final int T__12=12;
     public static final int T__13=13;
     public static final int T__14=14;
-    public static final int EOF=-1;
-    public static final int T__30=30;
-    public static final int T__31=31;
     public static final int RULE_ID=4;
-    public static final int RULE_WS=9;
-    public static final int RULE_ANY_OTHER=10;
     public static final int T__26=26;
     public static final int T__27=27;
     public static final int T__28=28;
-    public static final int RULE_INT=5;
+    public static final int RULE_INT=6;
     public static final int T__29=29;
     public static final int T__22=22;
     public static final int RULE_ML_COMMENT=7;
@@ -41,6 +37,29 @@
     public static final int T__25=25;
     public static final int T__20=20;
     public static final int T__21=21;
+    public static final int RULE_STRING=5;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__33=33;
+    public static final int T__34=34;
+    public static final int T__35=35;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__42=42;
+    public static final int T__43=43;
 
     // delegates
     // delegators
@@ -163,10 +182,10 @@
         try {
             int _type = T__16;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:16:7: ( 'prop' )
-            // InternalMiniOCLCS.g:16:9: 'prop'
+            // InternalMiniOCLCS.g:16:7: ( 'datatype' )
+            // InternalMiniOCLCS.g:16:9: 'datatype'
             {
-            match("prop"); 
+            match("datatype"); 
 
 
             }
@@ -224,10 +243,10 @@
         try {
             int _type = T__19;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:19:7: ( 'op' )
-            // InternalMiniOCLCS.g:19:9: 'op'
+            // InternalMiniOCLCS.g:19:7: ( 'attribute' )
+            // InternalMiniOCLCS.g:19:9: 'attribute'
             {
-            match("op"); 
+            match("attribute"); 
 
 
             }
@@ -245,10 +264,11 @@
         try {
             int _type = T__20;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:20:7: ( '(' )
-            // InternalMiniOCLCS.g:20:9: '('
+            // InternalMiniOCLCS.g:20:7: ( 'containment' )
+            // InternalMiniOCLCS.g:20:9: 'containment'
             {
-            match('('); 
+            match("containment"); 
+
 
             }
 
@@ -265,10 +285,11 @@
         try {
             int _type = T__21;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:21:7: ( ',' )
-            // InternalMiniOCLCS.g:21:9: ','
+            // InternalMiniOCLCS.g:21:7: ( 'cross_reference' )
+            // InternalMiniOCLCS.g:21:9: 'cross_reference'
             {
-            match(','); 
+            match("cross_reference"); 
+
 
             }
 
@@ -285,10 +306,10 @@
         try {
             int _type = T__22;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:22:7: ( ')' )
-            // InternalMiniOCLCS.g:22:9: ')'
+            // InternalMiniOCLCS.g:22:7: ( '[' )
+            // InternalMiniOCLCS.g:22:9: '['
             {
-            match(')'); 
+            match('['); 
 
             }
 
@@ -305,10 +326,10 @@
         try {
             int _type = T__23;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:23:7: ( '=' )
-            // InternalMiniOCLCS.g:23:9: '='
+            // InternalMiniOCLCS.g:23:7: ( '?' )
+            // InternalMiniOCLCS.g:23:9: '?'
             {
-            match('='); 
+            match('?'); 
 
             }
 
@@ -325,11 +346,10 @@
         try {
             int _type = T__24;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:24:7: ( 'context' )
-            // InternalMiniOCLCS.g:24:9: 'context'
+            // InternalMiniOCLCS.g:24:7: ( '*' )
+            // InternalMiniOCLCS.g:24:9: '*'
             {
-            match("context"); 
-
+            match('*'); 
 
             }
 
@@ -346,10 +366,10 @@
         try {
             int _type = T__25;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:25:7: ( 'inv' )
-            // InternalMiniOCLCS.g:25:9: 'inv'
+            // InternalMiniOCLCS.g:25:7: ( '..' )
+            // InternalMiniOCLCS.g:25:9: '..'
             {
-            match("inv"); 
+            match(".."); 
 
 
             }
@@ -367,11 +387,10 @@
         try {
             int _type = T__26;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:26:7: ( '<>' )
-            // InternalMiniOCLCS.g:26:9: '<>'
+            // InternalMiniOCLCS.g:26:7: ( ']' )
+            // InternalMiniOCLCS.g:26:9: ']'
             {
-            match("<>"); 
-
+            match(']'); 
 
             }
 
@@ -388,10 +407,11 @@
         try {
             int _type = T__27;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:27:7: ( '.' )
-            // InternalMiniOCLCS.g:27:9: '.'
+            // InternalMiniOCLCS.g:27:7: ( 'op' )
+            // InternalMiniOCLCS.g:27:9: 'op'
             {
-            match('.'); 
+            match("op"); 
+
 
             }
 
@@ -408,11 +428,10 @@
         try {
             int _type = T__28;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:28:7: ( '->' )
-            // InternalMiniOCLCS.g:28:9: '->'
+            // InternalMiniOCLCS.g:28:7: ( '(' )
+            // InternalMiniOCLCS.g:28:9: '('
             {
-            match("->"); 
-
+            match('('); 
 
             }
 
@@ -429,11 +448,10 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:29:7: ( 'true' )
-            // InternalMiniOCLCS.g:29:9: 'true'
+            // InternalMiniOCLCS.g:29:7: ( ',' )
+            // InternalMiniOCLCS.g:29:9: ','
             {
-            match("true"); 
-
+            match(','); 
 
             }
 
@@ -450,11 +468,10 @@
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:30:7: ( 'false' )
-            // InternalMiniOCLCS.g:30:9: 'false'
+            // InternalMiniOCLCS.g:30:7: ( ')' )
+            // InternalMiniOCLCS.g:30:9: ')'
             {
-            match("false"); 
-
+            match(')'); 
 
             }
 
@@ -471,8 +488,320 @@
         try {
             int _type = T__31;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:31:7: ( '::' )
-            // InternalMiniOCLCS.g:31:9: '::'
+            // InternalMiniOCLCS.g:31:7: ( '=' )
+            // InternalMiniOCLCS.g:31:9: '='
+            {
+            match('='); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:32:7: ( 'context' )
+            // InternalMiniOCLCS.g:32:9: 'context'
+            {
+            match("context"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:33:7: ( 'inv' )
+            // InternalMiniOCLCS.g:33:9: 'inv'
+            {
+            match("inv"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:34:7: ( '<>' )
+            // InternalMiniOCLCS.g:34:9: '<>'
+            {
+            match("<>"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "T__35"
+    public final void mT__35() throws RecognitionException {
+        try {
+            int _type = T__35;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:35:7: ( '.' )
+            // InternalMiniOCLCS.g:35:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__35"
+
+    // $ANTLR start "T__36"
+    public final void mT__36() throws RecognitionException {
+        try {
+            int _type = T__36;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:36:7: ( '->' )
+            // InternalMiniOCLCS.g:36:9: '->'
+            {
+            match("->"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__36"
+
+    // $ANTLR start "T__37"
+    public final void mT__37() throws RecognitionException {
+        try {
+            int _type = T__37;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:37:7: ( 'self' )
+            // InternalMiniOCLCS.g:37:9: 'self'
+            {
+            match("self"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__37"
+
+    // $ANTLR start "T__38"
+    public final void mT__38() throws RecognitionException {
+        try {
+            int _type = T__38;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:38:7: ( 'collect' )
+            // InternalMiniOCLCS.g:38:9: 'collect'
+            {
+            match("collect"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__38"
+
+    // $ANTLR start "T__39"
+    public final void mT__39() throws RecognitionException {
+        try {
+            int _type = T__39;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:39:7: ( '|' )
+            // InternalMiniOCLCS.g:39:9: '|'
+            {
+            match('|'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "T__40"
+    public final void mT__40() throws RecognitionException {
+        try {
+            int _type = T__40;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:40:7: ( 'iterate' )
+            // InternalMiniOCLCS.g:40:9: 'iterate'
+            {
+            match("iterate"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__40"
+
+    // $ANTLR start "T__41"
+    public final void mT__41() throws RecognitionException {
+        try {
+            int _type = T__41;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:41:7: ( 'true' )
+            // InternalMiniOCLCS.g:41:9: 'true'
+            {
+            match("true"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__41"
+
+    // $ANTLR start "T__42"
+    public final void mT__42() throws RecognitionException {
+        try {
+            int _type = T__42;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:42:7: ( 'false' )
+            // InternalMiniOCLCS.g:42:9: 'false'
+            {
+            match("false"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__42"
+
+    // $ANTLR start "T__43"
+    public final void mT__43() throws RecognitionException {
+        try {
+            int _type = T__43;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:43:7: ( 'null' )
+            // InternalMiniOCLCS.g:43:9: 'null'
+            {
+            match("null"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__43"
+
+    // $ANTLR start "T__44"
+    public final void mT__44() throws RecognitionException {
+        try {
+            int _type = T__44;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:44:7: ( 'let' )
+            // InternalMiniOCLCS.g:44:9: 'let'
+            {
+            match("let"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__44"
+
+    // $ANTLR start "T__45"
+    public final void mT__45() throws RecognitionException {
+        try {
+            int _type = T__45;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:45:7: ( 'in' )
+            // InternalMiniOCLCS.g:45:9: 'in'
+            {
+            match("in"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__45"
+
+    // $ANTLR start "T__46"
+    public final void mT__46() throws RecognitionException {
+        try {
+            int _type = T__46;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:46:7: ( '::' )
+            // InternalMiniOCLCS.g:46:9: '::'
             {
             match("::"); 
 
@@ -485,17 +814,38 @@
         finally {
         }
     }
-    // $ANTLR end "T__31"
+    // $ANTLR end "T__46"
+
+    // $ANTLR start "T__47"
+    public final void mT__47() throws RecognitionException {
+        try {
+            int _type = T__47;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalMiniOCLCS.g:47:7: ( 'Collection' )
+            // InternalMiniOCLCS.g:47:9: 'Collection'
+            {
+            match("Collection"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__47"
 
     // $ANTLR start "RULE_ID"
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1382:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // InternalMiniOCLCS.g:1382:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalMiniOCLCS.g:2430:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalMiniOCLCS.g:2430:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // InternalMiniOCLCS.g:1382:11: ( '^' )?
+            // InternalMiniOCLCS.g:2430:11: ( '^' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -504,7 +854,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1382:11: '^'
+                    // InternalMiniOCLCS.g:2430:11: '^'
                     {
                     match('^'); 
 
@@ -522,7 +872,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalMiniOCLCS.g:1382:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalMiniOCLCS.g:2430:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop2:
             do {
                 int alt2=2;
@@ -571,10 +921,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1384:10: ( ( '0' .. '9' )+ )
-            // InternalMiniOCLCS.g:1384:12: ( '0' .. '9' )+
+            // InternalMiniOCLCS.g:2432:10: ( ( '0' .. '9' )+ )
+            // InternalMiniOCLCS.g:2432:12: ( '0' .. '9' )+
             {
-            // InternalMiniOCLCS.g:1384:12: ( '0' .. '9' )+
+            // InternalMiniOCLCS.g:2432:12: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -588,7 +938,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1384:13: '0' .. '9'
+            	    // InternalMiniOCLCS.g:2432:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -620,10 +970,10 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1386:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // InternalMiniOCLCS.g:1386:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalMiniOCLCS.g:2434:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalMiniOCLCS.g:2434:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // InternalMiniOCLCS.g:1386:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalMiniOCLCS.g:2434:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -641,10 +991,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1386:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // InternalMiniOCLCS.g:2434:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"'); 
-                    // InternalMiniOCLCS.g:1386:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // InternalMiniOCLCS.g:2434:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop4:
                     do {
                         int alt4=3;
@@ -660,7 +1010,7 @@
 
                         switch (alt4) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:1386:21: '\\\\' .
+                    	    // InternalMiniOCLCS.g:2434:21: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -668,7 +1018,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalMiniOCLCS.g:1386:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    // InternalMiniOCLCS.g:2434:28: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -693,10 +1043,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:1386:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // InternalMiniOCLCS.g:2434:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\''); 
-                    // InternalMiniOCLCS.g:1386:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // InternalMiniOCLCS.g:2434:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -712,7 +1062,7 @@
 
                         switch (alt5) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:1386:54: '\\\\' .
+                    	    // InternalMiniOCLCS.g:2434:54: '\\\\' .
                     	    {
                     	    match('\\'); 
                     	    matchAny(); 
@@ -720,7 +1070,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalMiniOCLCS.g:1386:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // InternalMiniOCLCS.g:2434:61: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -763,12 +1113,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1388:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // InternalMiniOCLCS.g:1388:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // InternalMiniOCLCS.g:2436:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalMiniOCLCS.g:2436:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // InternalMiniOCLCS.g:1388:24: ( options {greedy=false; } : . )*
+            // InternalMiniOCLCS.g:2436:24: ( options {greedy=false; } : . )*
             loop7:
             do {
                 int alt7=2;
@@ -793,7 +1143,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1388:52: .
+            	    // InternalMiniOCLCS.g:2436:52: .
             	    {
             	    matchAny(); 
 
@@ -823,12 +1173,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1390:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalMiniOCLCS.g:1390:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalMiniOCLCS.g:2438:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalMiniOCLCS.g:2438:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // InternalMiniOCLCS.g:1390:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalMiniOCLCS.g:2438:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop8:
             do {
                 int alt8=2;
@@ -841,7 +1191,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1390:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalMiniOCLCS.g:2438: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();
@@ -861,7 +1211,7 @@
                 }
             } while (true);
 
-            // InternalMiniOCLCS.g:1390:40: ( ( '\\r' )? '\\n' )?
+            // InternalMiniOCLCS.g:2438:40: ( ( '\\r' )? '\\n' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -870,9 +1220,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1390:41: ( '\\r' )? '\\n'
+                    // InternalMiniOCLCS.g:2438:41: ( '\\r' )? '\\n'
                     {
-                    // InternalMiniOCLCS.g:1390:41: ( '\\r' )?
+                    // InternalMiniOCLCS.g:2438:41: ( '\\r' )?
                     int alt9=2;
                     int LA9_0 = input.LA(1);
 
@@ -881,7 +1231,7 @@
                     }
                     switch (alt9) {
                         case 1 :
-                            // InternalMiniOCLCS.g:1390:41: '\\r'
+                            // InternalMiniOCLCS.g:2438:41: '\\r'
                             {
                             match('\r'); 
 
@@ -913,10 +1263,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1392:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalMiniOCLCS.g:1392:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalMiniOCLCS.g:2440:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalMiniOCLCS.g:2440:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalMiniOCLCS.g:1392:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalMiniOCLCS.g:2440:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt11=0;
             loop11:
             do {
@@ -970,8 +1320,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalMiniOCLCS.g:1394:16: ( . )
-            // InternalMiniOCLCS.g:1394:18: .
+            // InternalMiniOCLCS.g:2442:16: ( . )
+            // InternalMiniOCLCS.g:2442:18: .
             {
             matchAny(); 
 
@@ -986,8 +1336,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalMiniOCLCS.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=28;
+        // InternalMiniOCLCS.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=44;
         alt12 = dfa12.predict(input);
         switch (alt12) {
             case 1 :
@@ -1138,49 +1488,161 @@
                 }
                 break;
             case 22 :
-                // InternalMiniOCLCS.g:1:136: RULE_ID
+                // InternalMiniOCLCS.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // InternalMiniOCLCS.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // InternalMiniOCLCS.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // InternalMiniOCLCS.g:1:154: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 26 :
+                // InternalMiniOCLCS.g:1:160: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 27 :
+                // InternalMiniOCLCS.g:1:166: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 28 :
+                // InternalMiniOCLCS.g:1:172: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 29 :
+                // InternalMiniOCLCS.g:1:178: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 30 :
+                // InternalMiniOCLCS.g:1:184: T__40
+                {
+                mT__40(); 
+
+                }
+                break;
+            case 31 :
+                // InternalMiniOCLCS.g:1:190: T__41
+                {
+                mT__41(); 
+
+                }
+                break;
+            case 32 :
+                // InternalMiniOCLCS.g:1:196: T__42
+                {
+                mT__42(); 
+
+                }
+                break;
+            case 33 :
+                // InternalMiniOCLCS.g:1:202: T__43
+                {
+                mT__43(); 
+
+                }
+                break;
+            case 34 :
+                // InternalMiniOCLCS.g:1:208: T__44
+                {
+                mT__44(); 
+
+                }
+                break;
+            case 35 :
+                // InternalMiniOCLCS.g:1:214: T__45
+                {
+                mT__45(); 
+
+                }
+                break;
+            case 36 :
+                // InternalMiniOCLCS.g:1:220: T__46
+                {
+                mT__46(); 
+
+                }
+                break;
+            case 37 :
+                // InternalMiniOCLCS.g:1:226: T__47
+                {
+                mT__47(); 
+
+                }
+                break;
+            case 38 :
+                // InternalMiniOCLCS.g:1:232: RULE_ID
                 {
                 mRULE_ID(); 
 
                 }
                 break;
-            case 23 :
-                // InternalMiniOCLCS.g:1:144: RULE_INT
+            case 39 :
+                // InternalMiniOCLCS.g:1:240: RULE_INT
                 {
                 mRULE_INT(); 
 
                 }
                 break;
-            case 24 :
-                // InternalMiniOCLCS.g:1:153: RULE_STRING
+            case 40 :
+                // InternalMiniOCLCS.g:1:249: RULE_STRING
                 {
                 mRULE_STRING(); 
 
                 }
                 break;
-            case 25 :
-                // InternalMiniOCLCS.g:1:165: RULE_ML_COMMENT
+            case 41 :
+                // InternalMiniOCLCS.g:1:261: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT(); 
 
                 }
                 break;
-            case 26 :
-                // InternalMiniOCLCS.g:1:181: RULE_SL_COMMENT
+            case 42 :
+                // InternalMiniOCLCS.g:1:277: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT(); 
 
                 }
                 break;
-            case 27 :
-                // InternalMiniOCLCS.g:1:197: RULE_WS
+            case 43 :
+                // InternalMiniOCLCS.g:1:293: RULE_WS
                 {
                 mRULE_WS(); 
 
                 }
                 break;
-            case 28 :
-                // InternalMiniOCLCS.g:1:205: RULE_ANY_OTHER
+            case 44 :
+                // InternalMiniOCLCS.g:1:301: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -1194,106 +1656,194 @@
 
     protected DFA12 dfa12 = new DFA12(this);
     static final String DFA12_eotS =
-        "\1\uffff\1\35\2\uffff\2\35\1\44\1\uffff\1\35\4\uffff\1\35\1\32\1\uffff\1\32\2\35\1\32\2\uffff\3\32\2\uffff\2\35\3\uffff\3\35\3\uffff\1\73\4\uffff\1\35\3\uffff\2\35\5\uffff\5\35\1\uffff\1\104\3\35\1\110\3\35\1\uffff\1\114\2\35\1\uffff\1\117\2\35\1\uffff\1\122\1\35\1\uffff\2\35\1\uffff\1\126\1\127\1\130\3\uffff";
+        "\1\uffff\1\47\2\uffff\3\47\1\60\1\uffff\1\47\3\uffff\1\67\1\uffff\1\47\4\uffff\1\47\2\45\1\47\1\uffff\5\47\1\45\2\uffff\3\45\2\uffff\1\47\3\uffff\5\47\3\uffff\1\47\6\uffff\1\126\4\uffff\1\130\1\47\2\uffff\1\47\1\uffff\5\47\5\uffff\10\47\1\uffff\1\150\1\uffff\5\47\1\156\11\47\1\uffff\1\47\1\172\1\173\1\47\1\175\1\uffff\2\47\1\u0080\10\47\2\uffff\1\u0089\1\uffff\2\47\1\uffff\10\47\1\uffff\1\47\1\u0095\1\47\1\u0097\1\u0098\1\47\1\u009a\2\47\1\u009d\1\47\1\uffff\1\47\2\uffff\1\47\1\uffff\1\u00a1\1\47\1\uffff\3\47\1\uffff\1\u00a6\3\47\1\uffff\1\u00aa\1\u00ab\1\47\2\uffff\3\47\1\u00b0\1\uffff";
     static final String DFA12_eofS =
-        "\131\uffff";
+        "\u00b1\uffff";
     static final String DFA12_minS =
-        "\1\0\1\141\2\uffff\1\154\1\170\1\72\1\uffff\1\160\4\uffff\1\156\1\76\1\uffff\1\76\1\162\1\141\1\101\2\uffff\2\0\1\52\2\uffff\1\143\1\157\3\uffff\1\141\1\156\1\164\3\uffff\1\60\4\uffff\1\166\3\uffff\1\165\1\154\5\uffff\1\153\1\160\1\163\1\164\1\145\1\uffff\1\60\1\145\1\163\1\141\1\60\1\163\1\145\1\156\1\uffff\1\60\1\145\1\147\1\uffff\1\60\1\170\1\144\1\uffff\1\60\1\145\1\uffff\1\164\1\163\1\uffff\3\60\3\uffff";
+        "\1\0\1\141\2\uffff\1\154\1\170\1\141\1\72\1\uffff\1\164\3\uffff\1\56\1\uffff\1\160\4\uffff\1\156\2\76\1\145\1\uffff\1\162\1\141\1\165\1\145\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\143\3\uffff\1\141\1\154\1\157\2\164\3\uffff\1\164\6\uffff\1\60\4\uffff\1\60\1\145\2\uffff\1\154\1\uffff\1\165\2\154\1\164\1\154\5\uffff\1\153\1\163\1\164\1\154\1\163\1\145\1\141\1\162\1\uffff\1\60\1\uffff\1\162\1\146\1\145\1\163\1\154\1\60\1\154\1\141\1\163\1\141\1\145\1\163\1\156\1\164\1\151\1\uffff\1\141\2\60\1\145\1\60\1\uffff\1\145\1\147\1\60\1\151\1\170\1\143\1\137\1\144\1\171\1\142\1\164\2\uffff\1\60\1\uffff\1\143\1\145\1\uffff\1\156\2\164\1\162\1\163\1\160\1\165\1\145\1\uffff\1\164\1\60\1\155\2\60\1\145\1\60\1\145\1\164\1\60\1\151\1\uffff\1\145\2\uffff\1\146\1\uffff\1\60\1\145\1\uffff\1\157\1\156\1\145\1\uffff\1\60\1\156\1\164\1\162\1\uffff\2\60\1\145\2\uffff\1\156\1\143\1\145\1\60\1\uffff";
     static final String DFA12_maxS =
-        "\1\uffff\1\162\2\uffff\1\157\1\170\1\72\1\uffff\1\160\4\uffff\1\156\1\76\1\uffff\1\76\1\162\1\141\1\172\2\uffff\2\uffff\1\57\2\uffff\1\143\1\157\3\uffff\1\141\1\156\1\164\3\uffff\1\172\4\uffff\1\166\3\uffff\1\165\1\154\5\uffff\1\153\1\160\1\163\1\164\1\145\1\uffff\1\172\1\145\1\163\1\141\1\172\1\163\1\145\1\156\1\uffff\1\172\1\145\1\147\1\uffff\1\172\1\170\1\144\1\uffff\1\172\1\145\1\uffff\1\164\1\163\1\uffff\3\172\3\uffff";
+        "\1\uffff\1\141\2\uffff\1\162\1\170\1\141\1\72\1\uffff\1\164\3\uffff\1\56\1\uffff\1\160\4\uffff\1\164\2\76\1\145\1\uffff\1\162\1\141\1\165\1\145\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\143\3\uffff\1\141\1\156\1\157\2\164\3\uffff\1\164\6\uffff\1\172\4\uffff\1\172\1\145\2\uffff\1\154\1\uffff\1\165\2\154\1\164\1\154\5\uffff\1\153\1\163\1\164\1\154\1\163\1\145\1\141\1\162\1\uffff\1\172\1\uffff\1\162\1\146\1\145\1\163\1\154\1\172\1\154\1\141\1\163\2\145\1\163\1\156\1\164\1\151\1\uffff\1\141\2\172\1\145\1\172\1\uffff\1\145\1\147\1\172\1\151\1\170\1\143\1\137\1\144\1\171\1\142\1\164\2\uffff\1\172\1\uffff\1\143\1\145\1\uffff\1\156\2\164\1\162\1\163\1\160\1\165\1\145\1\uffff\1\164\1\172\1\155\2\172\1\145\1\172\1\145\1\164\1\172\1\151\1\uffff\1\145\2\uffff\1\146\1\uffff\1\172\1\145\1\uffff\1\157\1\156\1\145\1\uffff\1\172\1\156\1\164\1\162\1\uffff\2\172\1\145\2\uffff\1\156\1\143\1\145\1\172\1\uffff";
     static final String DFA12_acceptS =
-        "\2\uffff\1\2\1\3\3\uffff\1\10\1\uffff\1\12\1\13\1\14\1\15\2\uffff\1\21\4\uffff\1\26\1\27\3\uffff\1\33\1\34\2\uffff\1\26\1\2\1\3\3\uffff\1\25\1\7\1\10\1\uffff\1\12\1\13\1\14\1\15\1\uffff\1\20\1\21\1\22\2\uffff\1\27\1\30\1\31\1\32\1\33\5\uffff\1\11\10\uffff\1\17\3\uffff\1\6\3\uffff\1\23\2\uffff\1\4\2\uffff\1\24\3\uffff\1\1\1\16\1\5";
+        "\2\uffff\1\2\1\3\4\uffff\1\10\1\uffff\1\14\1\15\1\16\1\uffff\1\20\1\uffff\1\22\1\23\1\24\1\25\4\uffff\1\35\6\uffff\1\46\1\47\3\uffff\1\53\1\54\1\uffff\1\46\1\2\1\3\5\uffff\1\44\1\7\1\10\1\uffff\1\14\1\15\1\16\1\17\1\31\1\20\1\uffff\1\22\1\23\1\24\1\25\2\uffff\1\30\1\32\1\uffff\1\35\5\uffff\1\47\1\50\1\51\1\52\1\53\10\uffff\1\21\1\uffff\1\43\17\uffff\1\27\5\uffff\1\42\13\uffff\1\33\1\37\1\uffff\1\41\2\uffff\1\4\10\uffff\1\40\13\uffff\1\1\1\uffff\1\26\1\34\1\uffff\1\5\2\uffff\1\36\3\uffff\1\6\4\uffff\1\11\3\uffff\1\45\1\12\4\uffff\1\13";
     static final String DFA12_specialS =
-        "\1\2\25\uffff\1\0\1\1\101\uffff}>";
+        "\1\1\40\uffff\1\2\1\0\u008e\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\11\32\2\31\2\32\1\31\22\32\1\31\1\32\1\26\4\32\1\27\1\11\1\13\2\32\1\12\1\20\1\17\1\30\12\25\1\6\1\7\1\16\1\14\3\32\32\24\3\32\1\23\1\24\1\32\2\24\1\4\1\24\1\5\1\22\2\24\1\15\5\24\1\10\1\1\3\24\1\21\6\24\1\2\1\32\1\3\uff82\32",
-            "\1\33\20\uffff\1\34",
-            "",
-            "",
-            "\1\40\2\uffff\1\41",
-            "\1\42",
-            "\1\43",
-            "",
+            "\11\45\2\44\2\45\1\44\22\45\1\44\1\45\1\41\4\45\1\42\1\20\1\22\1\14\1\45\1\21\1\26\1\15\1\43\12\40\1\7\1\10\1\25\1\23\1\45\1\13\1\45\2\37\1\35\27\37\1\12\1\45\1\16\1\36\1\37\1\45\1\11\1\37\1\4\1\6\1\5\1\32\2\37\1\24\2\37\1\34\1\37\1\33\1\17\1\1\2\37\1\27\1\31\6\37\1\2\1\30\1\3\uff82\45",
             "\1\46",
             "",
             "",
-            "",
-            "",
-            "\1\53",
-            "\1\54",
-            "",
+            "\1\52\2\uffff\1\53\2\uffff\1\54",
+            "\1\55",
             "\1\56",
             "\1\57",
-            "\1\60",
-            "\32\35\4\uffff\1\35\1\uffff\32\35",
             "",
+            "\1\62",
             "",
-            "\0\62",
-            "\0\62",
-            "\1\63\4\uffff\1\64",
             "",
             "",
             "\1\66",
-            "\1\67",
             "",
-            "",
-            "",
-            "\1\70",
             "\1\71",
-            "\1\72",
-            "",
-            "",
-            "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
             "",
             "",
             "",
             "",
-            "\1\74",
-            "",
-            "",
-            "",
-            "\1\75",
-            "\1\76",
-            "",
-            "",
-            "",
-            "",
-            "",
-            "\1\77",
+            "\1\76\5\uffff\1\77",
             "\1\100",
             "\1\101",
             "\1\102",
-            "\1\103",
             "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+            "\1\104",
             "\1\105",
             "\1\106",
             "\1\107",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-            "\1\111",
-            "\1\112",
-            "\1\113",
+            "\1\110",
+            "\32\47\4\uffff\1\47\1\uffff\32\47",
             "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-            "\1\115",
+            "",
+            "\0\112",
+            "\0\112",
+            "\1\113\4\uffff\1\114",
+            "",
+            "",
             "\1\116",
             "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-            "\1\120",
-            "\1\121",
             "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+            "",
+            "\1\117",
+            "\1\121\1\uffff\1\120",
+            "\1\122",
             "\1\123",
-            "",
             "\1\124",
+            "",
+            "",
+            "",
             "\1\125",
             "",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-            "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
             "",
             "",
+            "",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\25\47\1\127\4\47",
+            "\1\131",
+            "",
+            "",
+            "\1\132",
+            "",
+            "\1\133",
+            "\1\134",
+            "\1\135",
+            "\1\136",
+            "\1\137",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\140",
+            "\1\141",
+            "\1\142",
+            "\1\143",
+            "\1\144",
+            "\1\145",
+            "\1\146",
+            "\1\147",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\151",
+            "\1\152",
+            "\1\153",
+            "\1\154",
+            "\1\155",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\157",
+            "\1\160",
+            "\1\161",
+            "\1\162\3\uffff\1\163",
+            "\1\164",
+            "\1\165",
+            "\1\166",
+            "\1\167",
+            "\1\170",
+            "",
+            "\1\171",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\174",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\176",
+            "\1\177",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u0081",
+            "\1\u0082",
+            "\1\u0083",
+            "\1\u0084",
+            "\1\u0085",
+            "\1\u0086",
+            "\1\u0087",
+            "\1\u0088",
+            "",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "",
+            "\1\u008a",
+            "\1\u008b",
+            "",
+            "\1\u008c",
+            "\1\u008d",
+            "\1\u008e",
+            "\1\u008f",
+            "\1\u0090",
+            "\1\u0091",
+            "\1\u0092",
+            "\1\u0093",
+            "",
+            "\1\u0094",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u0096",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u0099",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u009b",
+            "\1\u009c",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u009e",
+            "",
+            "\1\u009f",
+            "",
+            "",
+            "\1\u00a0",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u00a2",
+            "",
+            "\1\u00a3",
+            "\1\u00a4",
+            "\1\u00a5",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u00a7",
+            "\1\u00a8",
+            "\1\u00a9",
+            "",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
+            "\1\u00ac",
+            "",
+            "",
+            "\1\u00ad",
+            "\1\u00ae",
+            "\1\u00af",
+            "\12\47\7\uffff\32\47\4\uffff\1\47\1\uffff\32\47",
             ""
     };
 
@@ -1327,33 +1877,23 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 : 
-                        int LA12_22 = input.LA(1);
+                        int LA12_34 = input.LA(1);
 
                         s = -1;
-                        if ( ((LA12_22>='\u0000' && LA12_22<='\uFFFF')) ) {s = 50;}
+                        if ( ((LA12_34>='\u0000' && LA12_34<='\uFFFF')) ) {s = 74;}
 
-                        else s = 26;
+                        else s = 37;
 
                         if ( s>=0 ) return s;
                         break;
                     case 1 : 
-                        int LA12_23 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_23>='\u0000' && LA12_23<='\uFFFF')) ) {s = 50;}
-
-                        else s = 26;
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
                         int LA12_0 = input.LA(1);
 
                         s = -1;
@@ -1367,47 +1907,79 @@
 
                         else if ( (LA12_0=='e') ) {s = 5;}
 
-                        else if ( (LA12_0==':') ) {s = 6;}
+                        else if ( (LA12_0=='d') ) {s = 6;}
 
-                        else if ( (LA12_0==';') ) {s = 7;}
+                        else if ( (LA12_0==':') ) {s = 7;}
 
-                        else if ( (LA12_0=='o') ) {s = 8;}
+                        else if ( (LA12_0==';') ) {s = 8;}
 
-                        else if ( (LA12_0=='(') ) {s = 9;}
+                        else if ( (LA12_0=='a') ) {s = 9;}
 
-                        else if ( (LA12_0==',') ) {s = 10;}
+                        else if ( (LA12_0=='[') ) {s = 10;}
 
-                        else if ( (LA12_0==')') ) {s = 11;}
+                        else if ( (LA12_0=='?') ) {s = 11;}
 
-                        else if ( (LA12_0=='=') ) {s = 12;}
+                        else if ( (LA12_0=='*') ) {s = 12;}
 
-                        else if ( (LA12_0=='i') ) {s = 13;}
+                        else if ( (LA12_0=='.') ) {s = 13;}
 
-                        else if ( (LA12_0=='<') ) {s = 14;}
+                        else if ( (LA12_0==']') ) {s = 14;}
 
-                        else if ( (LA12_0=='.') ) {s = 15;}
+                        else if ( (LA12_0=='o') ) {s = 15;}
 
-                        else if ( (LA12_0=='-') ) {s = 16;}
+                        else if ( (LA12_0=='(') ) {s = 16;}
 
-                        else if ( (LA12_0=='t') ) {s = 17;}
+                        else if ( (LA12_0==',') ) {s = 17;}
 
-                        else if ( (LA12_0=='f') ) {s = 18;}
+                        else if ( (LA12_0==')') ) {s = 18;}
 
-                        else if ( (LA12_0=='^') ) {s = 19;}
+                        else if ( (LA12_0=='=') ) {s = 19;}
 
-                        else if ( ((LA12_0>='A' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='b')||LA12_0=='d'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='n')||(LA12_0>='q' && LA12_0<='s')||(LA12_0>='u' && LA12_0<='z')) ) {s = 20;}
+                        else if ( (LA12_0=='i') ) {s = 20;}
 
-                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 21;}
+                        else if ( (LA12_0=='<') ) {s = 21;}
 
-                        else if ( (LA12_0=='\"') ) {s = 22;}
+                        else if ( (LA12_0=='-') ) {s = 22;}
 
-                        else if ( (LA12_0=='\'') ) {s = 23;}
+                        else if ( (LA12_0=='s') ) {s = 23;}
 
-                        else if ( (LA12_0=='/') ) {s = 24;}
+                        else if ( (LA12_0=='|') ) {s = 24;}
 
-                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 25;}
+                        else if ( (LA12_0=='t') ) {s = 25;}
 
-                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='*' && LA12_0<='+')||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 26;}
+                        else if ( (LA12_0=='f') ) {s = 26;}
+
+                        else if ( (LA12_0=='n') ) {s = 27;}
+
+                        else if ( (LA12_0=='l') ) {s = 28;}
+
+                        else if ( (LA12_0=='C') ) {s = 29;}
+
+                        else if ( (LA12_0=='^') ) {s = 30;}
+
+                        else if ( ((LA12_0>='A' && LA12_0<='B')||(LA12_0>='D' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='b'||(LA12_0>='g' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='k')||LA12_0=='m'||(LA12_0>='q' && LA12_0<='r')||(LA12_0>='u' && LA12_0<='z')) ) {s = 31;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 32;}
+
+                        else if ( (LA12_0=='\"') ) {s = 33;}
+
+                        else if ( (LA12_0=='\'') ) {s = 34;}
+
+                        else if ( (LA12_0=='/') ) {s = 35;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 36;}
+
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||LA12_0=='+'||LA12_0=='>'||LA12_0=='@'||LA12_0=='\\'||LA12_0=='`'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 37;}
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_33 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_33>='\u0000' && LA12_33<='\uFFFF')) ) {s = 74;}
+
+                        else s = 37;
 
                         if ( s>=0 ) return s;
                         break;
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSParser.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSParser.java
index a2d5c01..af85d68 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSParser.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/parser/antlr/internal/InternalMiniOCLCSParser.java
@@ -1,31 +1,20 @@
 package org.eclipse.qvtd.doc.parser.antlr.internal;
 
-import org.eclipse.xtext.*;
-import org.eclipse.xtext.parser.*;
-import org.eclipse.xtext.parser.impl.*;
-import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.antlr.runtime.BitSet;
+import org.antlr.runtime.NoViableAltException;
+import org.antlr.runtime.RecognitionException;
+import org.antlr.runtime.RecognizerSharedState;
+import org.antlr.runtime.Token;
+import org.antlr.runtime.TokenStream;
+import org.eclipse.emf.common.util.Enumerator;
 import org.eclipse.emf.ecore.EObject;
-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.AntlrDatatypeRuleToken;
 import org.eclipse.qvtd.doc.services.MiniOCLCSGrammarAccess;
-
-
-
-import org.antlr.runtime.*;
-import java.util.Stack;
-import java.util.List;
-import java.util.ArrayList;
-import java.util.Map;
-import java.util.HashMap;
+import org.eclipse.xtext.parser.antlr.AbstractInternalAntlrParser;
 @SuppressWarnings("all")
 public class InternalMiniOCLCSParser extends AbstractInternalAntlrParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_INT", "RULE_STRING", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'package'", "'{'", "'}'", "'class'", "'extends'", "'prop'", "':'", "';'", "'op'", "'('", "','", "')'", "'='", "'context'", "'inv'", "'<>'", "'.'", "'->'", "'true'", "'false'", "'::'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'package'", "'{'", "'}'", "'class'", "'extends'", "'datatype'", "':'", "';'", "'attribute'", "'containment'", "'cross_reference'", "'['", "'?'", "'*'", "'..'", "']'", "'op'", "'('", "','", "')'", "'='", "'context'", "'inv'", "'<>'", "'.'", "'->'", "'self'", "'collect'", "'|'", "'iterate'", "'true'", "'false'", "'null'", "'let'", "'in'", "'::'", "'Collection'"
     };
-    public static final int RULE_STRING=6;
-    public static final int RULE_SL_COMMENT=8;
     public static final int T__19=19;
     public static final int T__15=15;
     public static final int T__16=16;
@@ -35,16 +24,11 @@
     public static final int T__12=12;
     public static final int T__13=13;
     public static final int T__14=14;
-    public static final int EOF=-1;
-    public static final int T__30=30;
-    public static final int T__31=31;
     public static final int RULE_ID=4;
-    public static final int RULE_WS=9;
-    public static final int RULE_ANY_OTHER=10;
     public static final int T__26=26;
     public static final int T__27=27;
     public static final int T__28=28;
-    public static final int RULE_INT=5;
+    public static final int RULE_INT=6;
     public static final int T__29=29;
     public static final int T__22=22;
     public static final int RULE_ML_COMMENT=7;
@@ -53,6 +37,29 @@
     public static final int T__25=25;
     public static final int T__20=20;
     public static final int T__21=21;
+    public static final int RULE_STRING=5;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__33=33;
+    public static final int T__34=34;
+    public static final int T__35=35;
+    public static final int T__36=36;
+    public static final int EOF=-1;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int T__32=32;
+    public static final int RULE_WS=9;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__42=42;
+    public static final int T__43=43;
 
     // delegates
     // delegators
@@ -99,7 +106,7 @@
 
 
     // $ANTLR start "entryRuleRootCS"
-    // InternalMiniOCLCS.g:70:1: entryRuleRootCS returns [EObject current=null] : iv_ruleRootCS= ruleRootCS EOF ;
+    // InternalMiniOCLCS.g:71:1: entryRuleRootCS returns [EObject current=null] : iv_ruleRootCS= ruleRootCS EOF ;
     public final EObject entryRuleRootCS() throws RecognitionException {
         EObject current = null;
 
@@ -107,8 +114,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:70:47: (iv_ruleRootCS= ruleRootCS EOF )
-            // InternalMiniOCLCS.g:71:2: iv_ruleRootCS= ruleRootCS EOF
+            // InternalMiniOCLCS.g:71:47: (iv_ruleRootCS= ruleRootCS EOF )
+            // InternalMiniOCLCS.g:72:2: iv_ruleRootCS= ruleRootCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRootCSRule()); 
@@ -139,7 +146,7 @@
 
 
     // $ANTLR start "ruleRootCS"
-    // InternalMiniOCLCS.g:77:1: ruleRootCS returns [EObject current=null] : ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )* ;
+    // InternalMiniOCLCS.g:78:1: ruleRootCS returns [EObject current=null] : ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )* ;
     public final EObject ruleRootCS() throws RecognitionException {
         EObject current = null;
 
@@ -152,10 +159,10 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:83:2: ( ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )* )
-            // InternalMiniOCLCS.g:84:2: ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )*
+            // InternalMiniOCLCS.g:84:2: ( ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )* )
+            // InternalMiniOCLCS.g:85:2: ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )*
             {
-            // InternalMiniOCLCS.g:84:2: ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )*
+            // InternalMiniOCLCS.g:85:2: ( ( (lv_packages_0_0= rulePackageCS ) ) | ( (lv_contraints_1_0= ruleConstraintsDefCS ) ) )*
             loop1:
             do {
                 int alt1=3;
@@ -164,20 +171,20 @@
                 if ( (LA1_0==11) ) {
                     alt1=1;
                 }
-                else if ( (LA1_0==24) ) {
+                else if ( (LA1_0==32) ) {
                     alt1=2;
                 }
 
 
                 switch (alt1) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:85:3: ( (lv_packages_0_0= rulePackageCS ) )
+            	    // InternalMiniOCLCS.g:86:3: ( (lv_packages_0_0= rulePackageCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:85:3: ( (lv_packages_0_0= rulePackageCS ) )
-            	    // InternalMiniOCLCS.g:86:4: (lv_packages_0_0= rulePackageCS )
+            	    // InternalMiniOCLCS.g:86:3: ( (lv_packages_0_0= rulePackageCS ) )
+            	    // InternalMiniOCLCS.g:87:4: (lv_packages_0_0= rulePackageCS )
             	    {
-            	    // InternalMiniOCLCS.g:86:4: (lv_packages_0_0= rulePackageCS )
-            	    // InternalMiniOCLCS.g:87:5: lv_packages_0_0= rulePackageCS
+            	    // InternalMiniOCLCS.g:87:4: (lv_packages_0_0= rulePackageCS )
+            	    // InternalMiniOCLCS.g:88:5: lv_packages_0_0= rulePackageCS
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -212,13 +219,13 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalMiniOCLCS.g:105:3: ( (lv_contraints_1_0= ruleConstraintsDefCS ) )
+            	    // InternalMiniOCLCS.g:106:3: ( (lv_contraints_1_0= ruleConstraintsDefCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:105:3: ( (lv_contraints_1_0= ruleConstraintsDefCS ) )
-            	    // InternalMiniOCLCS.g:106:4: (lv_contraints_1_0= ruleConstraintsDefCS )
+            	    // InternalMiniOCLCS.g:106:3: ( (lv_contraints_1_0= ruleConstraintsDefCS ) )
+            	    // InternalMiniOCLCS.g:107:4: (lv_contraints_1_0= ruleConstraintsDefCS )
             	    {
-            	    // InternalMiniOCLCS.g:106:4: (lv_contraints_1_0= ruleConstraintsDefCS )
-            	    // InternalMiniOCLCS.g:107:5: lv_contraints_1_0= ruleConstraintsDefCS
+            	    // InternalMiniOCLCS.g:107:4: (lv_contraints_1_0= ruleConstraintsDefCS )
+            	    // InternalMiniOCLCS.g:108:5: lv_contraints_1_0= ruleConstraintsDefCS
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -280,7 +287,7 @@
 
 
     // $ANTLR start "entryRulePackageCS"
-    // InternalMiniOCLCS.g:128:1: entryRulePackageCS returns [EObject current=null] : iv_rulePackageCS= rulePackageCS EOF ;
+    // InternalMiniOCLCS.g:129:1: entryRulePackageCS returns [EObject current=null] : iv_rulePackageCS= rulePackageCS EOF ;
     public final EObject entryRulePackageCS() throws RecognitionException {
         EObject current = null;
 
@@ -288,8 +295,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:128:50: (iv_rulePackageCS= rulePackageCS EOF )
-            // InternalMiniOCLCS.g:129:2: iv_rulePackageCS= rulePackageCS EOF
+            // InternalMiniOCLCS.g:129:50: (iv_rulePackageCS= rulePackageCS EOF )
+            // InternalMiniOCLCS.g:130:2: iv_rulePackageCS= rulePackageCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPackageCSRule()); 
@@ -320,7 +327,7 @@
 
 
     // $ANTLR start "rulePackageCS"
-    // InternalMiniOCLCS.g:135:1: rulePackageCS returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )* otherlv_5= '}' ) ;
+    // InternalMiniOCLCS.g:136:1: rulePackageCS returns [EObject current=null] : (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )* otherlv_5= '}' ) ;
     public final EObject rulePackageCS() throws RecognitionException {
         EObject current = null;
 
@@ -330,18 +337,18 @@
         Token otherlv_5=null;
         EObject lv_packages_3_0 = null;
 
-        EObject lv_classes_4_0 = null;
+        EObject lv_classifiers_4_0 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:141:2: ( (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )* otherlv_5= '}' ) )
-            // InternalMiniOCLCS.g:142:2: (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )* otherlv_5= '}' )
+            // InternalMiniOCLCS.g:142:2: ( (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )* otherlv_5= '}' ) )
+            // InternalMiniOCLCS.g:143:2: (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )* otherlv_5= '}' )
             {
-            // InternalMiniOCLCS.g:142:2: (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )* otherlv_5= '}' )
-            // InternalMiniOCLCS.g:143:3: otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )* otherlv_5= '}'
+            // InternalMiniOCLCS.g:143:2: (otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )* otherlv_5= '}' )
+            // InternalMiniOCLCS.g:144:3: otherlv_0= 'package' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '{' ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )* otherlv_5= '}'
             {
             otherlv_0=(Token)match(input,11,FOLLOW_4); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -349,11 +356,11 @@
               			newLeafNode(otherlv_0, grammarAccess.getPackageCSAccess().getPackageKeyword_0());
               		
             }
-            // InternalMiniOCLCS.g:147:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:148:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:148:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:149:4: (lv_name_1_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:148:4: (lv_name_1_0= RULE_ID )
-            // InternalMiniOCLCS.g:149:5: lv_name_1_0= RULE_ID
+            // InternalMiniOCLCS.g:149:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:150:5: lv_name_1_0= RULE_ID
             {
             lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_5); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -385,7 +392,7 @@
               			newLeafNode(otherlv_2, grammarAccess.getPackageCSAccess().getLeftCurlyBracketKeyword_2());
               		
             }
-            // InternalMiniOCLCS.g:169:3: ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classes_4_0= ruleClassCS ) ) )*
+            // InternalMiniOCLCS.g:170:3: ( ( (lv_packages_3_0= rulePackageCS ) ) | ( (lv_classifiers_4_0= ruleClassifierCS ) ) )*
             loop2:
             do {
                 int alt2=3;
@@ -394,20 +401,20 @@
                 if ( (LA2_0==11) ) {
                     alt2=1;
                 }
-                else if ( (LA2_0==14) ) {
+                else if ( (LA2_0==14||LA2_0==16) ) {
                     alt2=2;
                 }
 
 
                 switch (alt2) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:170:4: ( (lv_packages_3_0= rulePackageCS ) )
+            	    // InternalMiniOCLCS.g:171:4: ( (lv_packages_3_0= rulePackageCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:170:4: ( (lv_packages_3_0= rulePackageCS ) )
-            	    // InternalMiniOCLCS.g:171:5: (lv_packages_3_0= rulePackageCS )
+            	    // InternalMiniOCLCS.g:171:4: ( (lv_packages_3_0= rulePackageCS ) )
+            	    // InternalMiniOCLCS.g:172:5: (lv_packages_3_0= rulePackageCS )
             	    {
-            	    // InternalMiniOCLCS.g:171:5: (lv_packages_3_0= rulePackageCS )
-            	    // InternalMiniOCLCS.g:172:6: lv_packages_3_0= rulePackageCS
+            	    // InternalMiniOCLCS.g:172:5: (lv_packages_3_0= rulePackageCS )
+            	    // InternalMiniOCLCS.g:173:6: lv_packages_3_0= rulePackageCS
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -442,21 +449,21 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalMiniOCLCS.g:190:4: ( (lv_classes_4_0= ruleClassCS ) )
+            	    // InternalMiniOCLCS.g:191:4: ( (lv_classifiers_4_0= ruleClassifierCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:190:4: ( (lv_classes_4_0= ruleClassCS ) )
-            	    // InternalMiniOCLCS.g:191:5: (lv_classes_4_0= ruleClassCS )
+            	    // InternalMiniOCLCS.g:191:4: ( (lv_classifiers_4_0= ruleClassifierCS ) )
+            	    // InternalMiniOCLCS.g:192:5: (lv_classifiers_4_0= ruleClassifierCS )
             	    {
-            	    // InternalMiniOCLCS.g:191:5: (lv_classes_4_0= ruleClassCS )
-            	    // InternalMiniOCLCS.g:192:6: lv_classes_4_0= ruleClassCS
+            	    // InternalMiniOCLCS.g:192:5: (lv_classifiers_4_0= ruleClassifierCS )
+            	    // InternalMiniOCLCS.g:193:6: lv_classifiers_4_0= ruleClassifierCS
             	    {
             	    if ( state.backtracking==0 ) {
 
-            	      						newCompositeNode(grammarAccess.getPackageCSAccess().getClassesClassCSParserRuleCall_3_1_0());
+            	      						newCompositeNode(grammarAccess.getPackageCSAccess().getClassifiersClassifierCSParserRuleCall_3_1_0());
             	      					
             	    }
             	    pushFollow(FOLLOW_6);
-            	    lv_classes_4_0=ruleClassCS();
+            	    lv_classifiers_4_0=ruleClassifierCS();
 
             	    state._fsp--;
             	    if (state.failed) return current;
@@ -467,9 +474,9 @@
             	      						}
             	      						add(
             	      							current,
-            	      							"classes",
-            	      							lv_classes_4_0,
-            	      							"org.eclipse.qvtd.doc.MiniOCLCS.ClassCS");
+            	      							"classifiers",
+            	      							lv_classifiers_4_0,
+            	      							"org.eclipse.qvtd.doc.MiniOCLCS.ClassifierCS");
             	      						afterParserOrEnumRuleCall();
             	      					
             	    }
@@ -518,8 +525,161 @@
     // $ANTLR end "rulePackageCS"
 
 
+    // $ANTLR start "entryRuleClassifierCS"
+    // InternalMiniOCLCS.g:219:1: entryRuleClassifierCS returns [EObject current=null] : iv_ruleClassifierCS= ruleClassifierCS EOF ;
+    public final EObject entryRuleClassifierCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleClassifierCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:219:53: (iv_ruleClassifierCS= ruleClassifierCS EOF )
+            // InternalMiniOCLCS.g:220:2: iv_ruleClassifierCS= ruleClassifierCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getClassifierCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleClassifierCS=ruleClassifierCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleClassifierCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleClassifierCS"
+
+
+    // $ANTLR start "ruleClassifierCS"
+    // InternalMiniOCLCS.g:226:1: ruleClassifierCS returns [EObject current=null] : (this_ClassCS_0= ruleClassCS | this_DatatypeCS_1= ruleDatatypeCS ) ;
+    public final EObject ruleClassifierCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_ClassCS_0 = null;
+
+        EObject this_DatatypeCS_1 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:232:2: ( (this_ClassCS_0= ruleClassCS | this_DatatypeCS_1= ruleDatatypeCS ) )
+            // InternalMiniOCLCS.g:233:2: (this_ClassCS_0= ruleClassCS | this_DatatypeCS_1= ruleDatatypeCS )
+            {
+            // InternalMiniOCLCS.g:233:2: (this_ClassCS_0= ruleClassCS | this_DatatypeCS_1= ruleDatatypeCS )
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==14) ) {
+                alt3=1;
+            }
+            else if ( (LA3_0==16) ) {
+                alt3=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return current;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+            switch (alt3) {
+                case 1 :
+                    // InternalMiniOCLCS.g:234:3: this_ClassCS_0= ruleClassCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getClassifierCSAccess().getClassCSParserRuleCall_0());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_ClassCS_0=ruleClassCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_ClassCS_0;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:246:3: this_DatatypeCS_1= ruleDatatypeCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getClassifierCSAccess().getDatatypeCSParserRuleCall_1());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_DatatypeCS_1=ruleDatatypeCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_DatatypeCS_1;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleClassifierCS"
+
+
     // $ANTLR start "entryRuleClassCS"
-    // InternalMiniOCLCS.g:218:1: entryRuleClassCS returns [EObject current=null] : iv_ruleClassCS= ruleClassCS EOF ;
+    // InternalMiniOCLCS.g:261:1: entryRuleClassCS returns [EObject current=null] : iv_ruleClassCS= ruleClassCS EOF ;
     public final EObject entryRuleClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -527,8 +687,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:218:48: (iv_ruleClassCS= ruleClassCS EOF )
-            // InternalMiniOCLCS.g:219:2: iv_ruleClassCS= ruleClassCS EOF
+            // InternalMiniOCLCS.g:261:48: (iv_ruleClassCS= ruleClassCS EOF )
+            // InternalMiniOCLCS.g:262:2: iv_ruleClassCS= ruleClassCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getClassCSRule()); 
@@ -559,7 +719,7 @@
 
 
     // $ANTLR start "ruleClassCS"
-    // InternalMiniOCLCS.g:225:1: ruleClassCS returns [EObject current=null] : (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' ) ;
+    // InternalMiniOCLCS.g:268:1: ruleClassCS returns [EObject current=null] : (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' ) ;
     public final EObject ruleClassCS() throws RecognitionException {
         EObject current = null;
 
@@ -579,11 +739,11 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:231:2: ( (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' ) )
-            // InternalMiniOCLCS.g:232:2: (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' )
+            // InternalMiniOCLCS.g:274:2: ( (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' ) )
+            // InternalMiniOCLCS.g:275:2: (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' )
             {
-            // InternalMiniOCLCS.g:232:2: (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' )
-            // InternalMiniOCLCS.g:233:3: otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}'
+            // InternalMiniOCLCS.g:275:2: (otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}' )
+            // InternalMiniOCLCS.g:276:3: otherlv_0= 'class' ( (lv_name_1_0= RULE_ID ) ) (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )? otherlv_4= '{' ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )* otherlv_7= '}'
             {
             otherlv_0=(Token)match(input,14,FOLLOW_4); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -591,11 +751,11 @@
               			newLeafNode(otherlv_0, grammarAccess.getClassCSAccess().getClassKeyword_0());
               		
             }
-            // InternalMiniOCLCS.g:237:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:238:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:280:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:281:4: (lv_name_1_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:238:4: (lv_name_1_0= RULE_ID )
-            // InternalMiniOCLCS.g:239:5: lv_name_1_0= RULE_ID
+            // InternalMiniOCLCS.g:281:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:282:5: lv_name_1_0= RULE_ID
             {
             lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_7); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -621,16 +781,16 @@
 
             }
 
-            // InternalMiniOCLCS.g:255:3: (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )?
-            int alt3=2;
-            int LA3_0 = input.LA(1);
+            // InternalMiniOCLCS.g:298:3: (otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) ) )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
 
-            if ( (LA3_0==15) ) {
-                alt3=1;
+            if ( (LA4_0==15) ) {
+                alt4=1;
             }
-            switch (alt3) {
+            switch (alt4) {
                 case 1 :
-                    // InternalMiniOCLCS.g:256:4: otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) )
+                    // InternalMiniOCLCS.g:299:4: otherlv_2= 'extends' ( (lv_extends_3_0= rulePathNameCS ) )
                     {
                     otherlv_2=(Token)match(input,15,FOLLOW_4); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -638,11 +798,11 @@
                       				newLeafNode(otherlv_2, grammarAccess.getClassCSAccess().getExtendsKeyword_2_0());
                       			
                     }
-                    // InternalMiniOCLCS.g:260:4: ( (lv_extends_3_0= rulePathNameCS ) )
-                    // InternalMiniOCLCS.g:261:5: (lv_extends_3_0= rulePathNameCS )
+                    // InternalMiniOCLCS.g:303:4: ( (lv_extends_3_0= rulePathNameCS ) )
+                    // InternalMiniOCLCS.g:304:5: (lv_extends_3_0= rulePathNameCS )
                     {
-                    // InternalMiniOCLCS.g:261:5: (lv_extends_3_0= rulePathNameCS )
-                    // InternalMiniOCLCS.g:262:6: lv_extends_3_0= rulePathNameCS
+                    // InternalMiniOCLCS.g:304:5: (lv_extends_3_0= rulePathNameCS )
+                    // InternalMiniOCLCS.g:305:6: lv_extends_3_0= rulePathNameCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -685,29 +845,29 @@
               			newLeafNode(otherlv_4, grammarAccess.getClassCSAccess().getLeftCurlyBracketKeyword_3());
               		
             }
-            // InternalMiniOCLCS.g:284:3: ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )*
-            loop4:
+            // InternalMiniOCLCS.g:327:3: ( ( (lv_properties_5_0= rulePropertyCS ) ) | ( (lv_operations_6_0= ruleOperationCS ) ) )*
+            loop5:
             do {
-                int alt4=3;
-                int LA4_0 = input.LA(1);
+                int alt5=3;
+                int LA5_0 = input.LA(1);
 
-                if ( (LA4_0==16) ) {
-                    alt4=1;
+                if ( ((LA5_0>=19 && LA5_0<=21)) ) {
+                    alt5=1;
                 }
-                else if ( (LA4_0==19) ) {
-                    alt4=2;
+                else if ( (LA5_0==27) ) {
+                    alt5=2;
                 }
 
 
-                switch (alt4) {
+                switch (alt5) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:285:4: ( (lv_properties_5_0= rulePropertyCS ) )
+            	    // InternalMiniOCLCS.g:328:4: ( (lv_properties_5_0= rulePropertyCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:285:4: ( (lv_properties_5_0= rulePropertyCS ) )
-            	    // InternalMiniOCLCS.g:286:5: (lv_properties_5_0= rulePropertyCS )
+            	    // InternalMiniOCLCS.g:328:4: ( (lv_properties_5_0= rulePropertyCS ) )
+            	    // InternalMiniOCLCS.g:329:5: (lv_properties_5_0= rulePropertyCS )
             	    {
-            	    // InternalMiniOCLCS.g:286:5: (lv_properties_5_0= rulePropertyCS )
-            	    // InternalMiniOCLCS.g:287:6: lv_properties_5_0= rulePropertyCS
+            	    // InternalMiniOCLCS.g:329:5: (lv_properties_5_0= rulePropertyCS )
+            	    // InternalMiniOCLCS.g:330:6: lv_properties_5_0= rulePropertyCS
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -742,13 +902,13 @@
             	    }
             	    break;
             	case 2 :
-            	    // InternalMiniOCLCS.g:305:4: ( (lv_operations_6_0= ruleOperationCS ) )
+            	    // InternalMiniOCLCS.g:348:4: ( (lv_operations_6_0= ruleOperationCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:305:4: ( (lv_operations_6_0= ruleOperationCS ) )
-            	    // InternalMiniOCLCS.g:306:5: (lv_operations_6_0= ruleOperationCS )
+            	    // InternalMiniOCLCS.g:348:4: ( (lv_operations_6_0= ruleOperationCS ) )
+            	    // InternalMiniOCLCS.g:349:5: (lv_operations_6_0= ruleOperationCS )
             	    {
-            	    // InternalMiniOCLCS.g:306:5: (lv_operations_6_0= ruleOperationCS )
-            	    // InternalMiniOCLCS.g:307:6: lv_operations_6_0= ruleOperationCS
+            	    // InternalMiniOCLCS.g:349:5: (lv_operations_6_0= ruleOperationCS )
+            	    // InternalMiniOCLCS.g:350:6: lv_operations_6_0= ruleOperationCS
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -784,7 +944,7 @@
             	    break;
 
             	default :
-            	    break loop4;
+            	    break loop5;
                 }
             } while (true);
 
@@ -818,8 +978,171 @@
     // $ANTLR end "ruleClassCS"
 
 
+    // $ANTLR start "entryRuleDatatypeCS"
+    // InternalMiniOCLCS.g:376:1: entryRuleDatatypeCS returns [EObject current=null] : iv_ruleDatatypeCS= ruleDatatypeCS EOF ;
+    public final EObject entryRuleDatatypeCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleDatatypeCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:376:51: (iv_ruleDatatypeCS= ruleDatatypeCS EOF )
+            // InternalMiniOCLCS.g:377:2: iv_ruleDatatypeCS= ruleDatatypeCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getDatatypeCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleDatatypeCS=ruleDatatypeCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleDatatypeCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDatatypeCS"
+
+
+    // $ANTLR start "ruleDatatypeCS"
+    // InternalMiniOCLCS.g:383:1: ruleDatatypeCS returns [EObject current=null] : (otherlv_0= 'datatype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeName_3_0= RULE_STRING ) ) otherlv_4= ';' ) ;
+    public final EObject ruleDatatypeCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_name_1_0=null;
+        Token otherlv_2=null;
+        Token lv_typeName_3_0=null;
+        Token otherlv_4=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:389:2: ( (otherlv_0= 'datatype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeName_3_0= RULE_STRING ) ) otherlv_4= ';' ) )
+            // InternalMiniOCLCS.g:390:2: (otherlv_0= 'datatype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeName_3_0= RULE_STRING ) ) otherlv_4= ';' )
+            {
+            // InternalMiniOCLCS.g:390:2: (otherlv_0= 'datatype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeName_3_0= RULE_STRING ) ) otherlv_4= ';' )
+            // InternalMiniOCLCS.g:391:3: otherlv_0= 'datatype' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeName_3_0= RULE_STRING ) ) otherlv_4= ';'
+            {
+            otherlv_0=(Token)match(input,16,FOLLOW_4); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_0, grammarAccess.getDatatypeCSAccess().getDatatypeKeyword_0());
+              		
+            }
+            // InternalMiniOCLCS.g:395:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:396:4: (lv_name_1_0= RULE_ID )
+            {
+            // InternalMiniOCLCS.g:396:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:397:5: lv_name_1_0= RULE_ID
+            {
+            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					newLeafNode(lv_name_1_0, grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0());
+              				
+            }
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElement(grammarAccess.getDatatypeCSRule());
+              					}
+              					setWithLastConsumed(
+              						current,
+              						"name",
+              						lv_name_1_0,
+              						"org.eclipse.xtext.common.Terminals.ID");
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,17,FOLLOW_10); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_2, grammarAccess.getDatatypeCSAccess().getColonKeyword_2());
+              		
+            }
+            // InternalMiniOCLCS.g:417:3: ( (lv_typeName_3_0= RULE_STRING ) )
+            // InternalMiniOCLCS.g:418:4: (lv_typeName_3_0= RULE_STRING )
+            {
+            // InternalMiniOCLCS.g:418:4: (lv_typeName_3_0= RULE_STRING )
+            // InternalMiniOCLCS.g:419:5: lv_typeName_3_0= RULE_STRING
+            {
+            lv_typeName_3_0=(Token)match(input,RULE_STRING,FOLLOW_11); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					newLeafNode(lv_typeName_3_0, grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0());
+              				
+            }
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElement(grammarAccess.getDatatypeCSRule());
+              					}
+              					setWithLastConsumed(
+              						current,
+              						"typeName",
+              						lv_typeName_3_0,
+              						"org.eclipse.xtext.common.Terminals.STRING");
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_4=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_4, grammarAccess.getDatatypeCSAccess().getSemicolonKeyword_4());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDatatypeCS"
+
+
     // $ANTLR start "entryRulePropertyCS"
-    // InternalMiniOCLCS.g:333:1: entryRulePropertyCS returns [EObject current=null] : iv_rulePropertyCS= rulePropertyCS EOF ;
+    // InternalMiniOCLCS.g:443:1: entryRulePropertyCS returns [EObject current=null] : iv_rulePropertyCS= rulePropertyCS EOF ;
     public final EObject entryRulePropertyCS() throws RecognitionException {
         EObject current = null;
 
@@ -827,8 +1150,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:333:51: (iv_rulePropertyCS= rulePropertyCS EOF )
-            // InternalMiniOCLCS.g:334:2: iv_rulePropertyCS= rulePropertyCS EOF
+            // InternalMiniOCLCS.g:443:51: (iv_rulePropertyCS= rulePropertyCS EOF )
+            // InternalMiniOCLCS.g:444:2: iv_rulePropertyCS= rulePropertyCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPropertyCSRule()); 
@@ -859,43 +1182,107 @@
 
 
     // $ANTLR start "rulePropertyCS"
-    // InternalMiniOCLCS.g:340:1: rulePropertyCS returns [EObject current=null] : (otherlv_0= 'prop' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeRef_3_0= rulePathNameCS ) ) otherlv_4= ';' ) ;
+    // InternalMiniOCLCS.g:450:1: rulePropertyCS returns [EObject current=null] : ( (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' ) ( (lv_name_3_0= RULE_ID ) ) otherlv_4= ':' ( (lv_typeRef_5_0= rulePathNameCS ) ) ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )? otherlv_7= ';' ) ;
     public final EObject rulePropertyCS() throws RecognitionException {
         EObject current = null;
 
         Token otherlv_0=null;
-        Token lv_name_1_0=null;
+        Token otherlv_1=null;
         Token otherlv_2=null;
+        Token lv_name_3_0=null;
         Token otherlv_4=null;
-        EObject lv_typeRef_3_0 = null;
+        Token otherlv_7=null;
+        EObject lv_typeRef_5_0 = null;
+
+        EObject lv_multiplicity_6_0 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:346:2: ( (otherlv_0= 'prop' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeRef_3_0= rulePathNameCS ) ) otherlv_4= ';' ) )
-            // InternalMiniOCLCS.g:347:2: (otherlv_0= 'prop' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeRef_3_0= rulePathNameCS ) ) otherlv_4= ';' )
+            // InternalMiniOCLCS.g:456:2: ( ( (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' ) ( (lv_name_3_0= RULE_ID ) ) otherlv_4= ':' ( (lv_typeRef_5_0= rulePathNameCS ) ) ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )? otherlv_7= ';' ) )
+            // InternalMiniOCLCS.g:457:2: ( (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' ) ( (lv_name_3_0= RULE_ID ) ) otherlv_4= ':' ( (lv_typeRef_5_0= rulePathNameCS ) ) ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )? otherlv_7= ';' )
             {
-            // InternalMiniOCLCS.g:347:2: (otherlv_0= 'prop' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeRef_3_0= rulePathNameCS ) ) otherlv_4= ';' )
-            // InternalMiniOCLCS.g:348:3: otherlv_0= 'prop' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= ':' ( (lv_typeRef_3_0= rulePathNameCS ) ) otherlv_4= ';'
+            // InternalMiniOCLCS.g:457:2: ( (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' ) ( (lv_name_3_0= RULE_ID ) ) otherlv_4= ':' ( (lv_typeRef_5_0= rulePathNameCS ) ) ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )? otherlv_7= ';' )
+            // InternalMiniOCLCS.g:458:3: (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' ) ( (lv_name_3_0= RULE_ID ) ) otherlv_4= ':' ( (lv_typeRef_5_0= rulePathNameCS ) ) ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )? otherlv_7= ';'
             {
-            otherlv_0=(Token)match(input,16,FOLLOW_4); if (state.failed) return current;
-            if ( state.backtracking==0 ) {
+            // InternalMiniOCLCS.g:458:3: (otherlv_0= 'attribute' | otherlv_1= 'containment' | otherlv_2= 'cross_reference' )
+            int alt6=3;
+            switch ( input.LA(1) ) {
+            case 19:
+                {
+                alt6=1;
+                }
+                break;
+            case 20:
+                {
+                alt6=2;
+                }
+                break;
+            case 21:
+                {
+                alt6=3;
+                }
+                break;
+            default:
+                if (state.backtracking>0) {state.failed=true; return current;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
 
-              			newLeafNode(otherlv_0, grammarAccess.getPropertyCSAccess().getPropKeyword_0());
-              		
+                throw nvae;
             }
-            // InternalMiniOCLCS.g:352:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:353:4: (lv_name_1_0= RULE_ID )
+
+            switch (alt6) {
+                case 1 :
+                    // InternalMiniOCLCS.g:459:4: otherlv_0= 'attribute'
+                    {
+                    otherlv_0=(Token)match(input,19,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_0, grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0());
+                      			
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:464:4: otherlv_1= 'containment'
+                    {
+                    otherlv_1=(Token)match(input,20,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_1, grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1());
+                      			
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:469:4: otherlv_2= 'cross_reference'
+                    {
+                    otherlv_2=(Token)match(input,21,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_2, grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2());
+                      			
+                    }
+
+                    }
+                    break;
+
+            }
+
+            // InternalMiniOCLCS.g:474:3: ( (lv_name_3_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:475:4: (lv_name_3_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:353:4: (lv_name_1_0= RULE_ID )
-            // InternalMiniOCLCS.g:354:5: lv_name_1_0= RULE_ID
+            // InternalMiniOCLCS.g:475:4: (lv_name_3_0= RULE_ID )
+            // InternalMiniOCLCS.g:476:5: lv_name_3_0= RULE_ID
             {
-            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-              					newLeafNode(lv_name_1_0, grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0());
+              					newLeafNode(lv_name_3_0, grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0());
               				
             }
             if ( state.backtracking==0 ) {
@@ -906,7 +1293,7 @@
               					setWithLastConsumed(
               						current,
               						"name",
-              						lv_name_1_0,
+              						lv_name_3_0,
               						"org.eclipse.xtext.common.Terminals.ID");
               				
             }
@@ -916,25 +1303,25 @@
 
             }
 
-            otherlv_2=(Token)match(input,17,FOLLOW_4); if (state.failed) return current;
+            otherlv_4=(Token)match(input,17,FOLLOW_4); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-              			newLeafNode(otherlv_2, grammarAccess.getPropertyCSAccess().getColonKeyword_2());
+              			newLeafNode(otherlv_4, grammarAccess.getPropertyCSAccess().getColonKeyword_2());
               		
             }
-            // InternalMiniOCLCS.g:374:3: ( (lv_typeRef_3_0= rulePathNameCS ) )
-            // InternalMiniOCLCS.g:375:4: (lv_typeRef_3_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:496:3: ( (lv_typeRef_5_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:497:4: (lv_typeRef_5_0= rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:375:4: (lv_typeRef_3_0= rulePathNameCS )
-            // InternalMiniOCLCS.g:376:5: lv_typeRef_3_0= rulePathNameCS
+            // InternalMiniOCLCS.g:497:4: (lv_typeRef_5_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:498:5: lv_typeRef_5_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
 
               					newCompositeNode(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0());
               				
             }
-            pushFollow(FOLLOW_10);
-            lv_typeRef_3_0=rulePathNameCS();
+            pushFollow(FOLLOW_12);
+            lv_typeRef_5_0=rulePathNameCS();
 
             state._fsp--;
             if (state.failed) return current;
@@ -946,7 +1333,7 @@
               					set(
               						current,
               						"typeRef",
-              						lv_typeRef_3_0,
+              						lv_typeRef_5_0,
               						"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
               					afterParserOrEnumRuleCall();
               				
@@ -957,10 +1344,56 @@
 
             }
 
-            otherlv_4=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
+            // InternalMiniOCLCS.g:515:3: ( (lv_multiplicity_6_0= ruleMultiplicityCS ) )?
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0==22) ) {
+                alt7=1;
+            }
+            switch (alt7) {
+                case 1 :
+                    // InternalMiniOCLCS.g:516:4: (lv_multiplicity_6_0= ruleMultiplicityCS )
+                    {
+                    // InternalMiniOCLCS.g:516:4: (lv_multiplicity_6_0= ruleMultiplicityCS )
+                    // InternalMiniOCLCS.g:517:5: lv_multiplicity_6_0= ruleMultiplicityCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      					newCompositeNode(grammarAccess.getPropertyCSAccess().getMultiplicityMultiplicityCSParserRuleCall_4_0());
+                      				
+                    }
+                    pushFollow(FOLLOW_11);
+                    lv_multiplicity_6_0=ruleMultiplicityCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      					if (current==null) {
+                      						current = createModelElementForParent(grammarAccess.getPropertyCSRule());
+                      					}
+                      					set(
+                      						current,
+                      						"multiplicity",
+                      						lv_multiplicity_6_0,
+                      						"org.eclipse.qvtd.doc.MiniOCLCS.MultiplicityCS");
+                      					afterParserOrEnumRuleCall();
+                      				
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_7=(Token)match(input,18,FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
-              			newLeafNode(otherlv_4, grammarAccess.getPropertyCSAccess().getSemicolonKeyword_4());
+              			newLeafNode(otherlv_7, grammarAccess.getPropertyCSAccess().getSemicolonKeyword_5());
               		
             }
 
@@ -987,8 +1420,339 @@
     // $ANTLR end "rulePropertyCS"
 
 
+    // $ANTLR start "entryRuleMultiplicityCS"
+    // InternalMiniOCLCS.g:542:1: entryRuleMultiplicityCS returns [EObject current=null] : iv_ruleMultiplicityCS= ruleMultiplicityCS EOF ;
+    public final EObject entryRuleMultiplicityCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleMultiplicityCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:542:55: (iv_ruleMultiplicityCS= ruleMultiplicityCS EOF )
+            // InternalMiniOCLCS.g:543:2: iv_ruleMultiplicityCS= ruleMultiplicityCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getMultiplicityCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleMultiplicityCS=ruleMultiplicityCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleMultiplicityCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleMultiplicityCS"
+
+
+    // $ANTLR start "ruleMultiplicityCS"
+    // InternalMiniOCLCS.g:549:1: ruleMultiplicityCS returns [EObject current=null] : (otherlv_0= '[' ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) ) otherlv_7= ']' ) ;
+    public final EObject ruleMultiplicityCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_opt_1_0=null;
+        Token lv_mult_2_0=null;
+        Token lv_lower_3_0=null;
+        Token otherlv_4=null;
+        Token lv_upperInt_5_0=null;
+        Token lv_upperMult_6_0=null;
+        Token otherlv_7=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:555:2: ( (otherlv_0= '[' ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) ) otherlv_7= ']' ) )
+            // InternalMiniOCLCS.g:556:2: (otherlv_0= '[' ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) ) otherlv_7= ']' )
+            {
+            // InternalMiniOCLCS.g:556:2: (otherlv_0= '[' ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) ) otherlv_7= ']' )
+            // InternalMiniOCLCS.g:557:3: otherlv_0= '[' ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) ) otherlv_7= ']'
+            {
+            otherlv_0=(Token)match(input,22,FOLLOW_13); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_0, grammarAccess.getMultiplicityCSAccess().getLeftSquareBracketKeyword_0());
+              		
+            }
+            // InternalMiniOCLCS.g:561:3: ( ( (lv_opt_1_0= '?' ) ) | ( (lv_mult_2_0= '*' ) ) | ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) ) )
+            int alt9=3;
+            switch ( input.LA(1) ) {
+            case 23:
+                {
+                alt9=1;
+                }
+                break;
+            case 24:
+                {
+                alt9=2;
+                }
+                break;
+            case RULE_INT:
+                {
+                alt9=3;
+                }
+                break;
+            default:
+                if (state.backtracking>0) {state.failed=true; return current;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // InternalMiniOCLCS.g:562:4: ( (lv_opt_1_0= '?' ) )
+                    {
+                    // InternalMiniOCLCS.g:562:4: ( (lv_opt_1_0= '?' ) )
+                    // InternalMiniOCLCS.g:563:5: (lv_opt_1_0= '?' )
+                    {
+                    // InternalMiniOCLCS.g:563:5: (lv_opt_1_0= '?' )
+                    // InternalMiniOCLCS.g:564:6: lv_opt_1_0= '?'
+                    {
+                    lv_opt_1_0=(Token)match(input,23,FOLLOW_14); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						newLeafNode(lv_opt_1_0, grammarAccess.getMultiplicityCSAccess().getOptQuestionMarkKeyword_1_0_0());
+                      					
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElement(grammarAccess.getMultiplicityCSRule());
+                      						}
+                      						setWithLastConsumed(current, "opt", true, "?");
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:577:4: ( (lv_mult_2_0= '*' ) )
+                    {
+                    // InternalMiniOCLCS.g:577:4: ( (lv_mult_2_0= '*' ) )
+                    // InternalMiniOCLCS.g:578:5: (lv_mult_2_0= '*' )
+                    {
+                    // InternalMiniOCLCS.g:578:5: (lv_mult_2_0= '*' )
+                    // InternalMiniOCLCS.g:579:6: lv_mult_2_0= '*'
+                    {
+                    lv_mult_2_0=(Token)match(input,24,FOLLOW_14); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						newLeafNode(lv_mult_2_0, grammarAccess.getMultiplicityCSAccess().getMultAsteriskKeyword_1_1_0());
+                      					
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElement(grammarAccess.getMultiplicityCSRule());
+                      						}
+                      						setWithLastConsumed(current, "mult", true, "*");
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:592:4: ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) )
+                    {
+                    // InternalMiniOCLCS.g:592:4: ( ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) ) )
+                    // InternalMiniOCLCS.g:593:5: ( (lv_lower_3_0= RULE_INT ) ) otherlv_4= '..' ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) )
+                    {
+                    // InternalMiniOCLCS.g:593:5: ( (lv_lower_3_0= RULE_INT ) )
+                    // InternalMiniOCLCS.g:594:6: (lv_lower_3_0= RULE_INT )
+                    {
+                    // InternalMiniOCLCS.g:594:6: (lv_lower_3_0= RULE_INT )
+                    // InternalMiniOCLCS.g:595:7: lv_lower_3_0= RULE_INT
+                    {
+                    lv_lower_3_0=(Token)match(input,RULE_INT,FOLLOW_15); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      							newLeafNode(lv_lower_3_0, grammarAccess.getMultiplicityCSAccess().getLowerINTTerminalRuleCall_1_2_0_0());
+                      						
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      							if (current==null) {
+                      								current = createModelElement(grammarAccess.getMultiplicityCSRule());
+                      							}
+                      							setWithLastConsumed(
+                      								current,
+                      								"lower",
+                      								lv_lower_3_0,
+                      								"org.eclipse.xtext.common.Terminals.INT");
+                      						
+                    }
+
+                    }
+
+
+                    }
+
+                    otherlv_4=(Token)match(input,25,FOLLOW_16); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      					newLeafNode(otherlv_4, grammarAccess.getMultiplicityCSAccess().getFullStopFullStopKeyword_1_2_1());
+                      				
+                    }
+                    // InternalMiniOCLCS.g:615:5: ( ( (lv_upperInt_5_0= RULE_INT ) ) | ( (lv_upperMult_6_0= '*' ) ) )
+                    int alt8=2;
+                    int LA8_0 = input.LA(1);
+
+                    if ( (LA8_0==RULE_INT) ) {
+                        alt8=1;
+                    }
+                    else if ( (LA8_0==24) ) {
+                        alt8=2;
+                    }
+                    else {
+                        if (state.backtracking>0) {state.failed=true; return current;}
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 8, 0, input);
+
+                        throw nvae;
+                    }
+                    switch (alt8) {
+                        case 1 :
+                            // InternalMiniOCLCS.g:616:6: ( (lv_upperInt_5_0= RULE_INT ) )
+                            {
+                            // InternalMiniOCLCS.g:616:6: ( (lv_upperInt_5_0= RULE_INT ) )
+                            // InternalMiniOCLCS.g:617:7: (lv_upperInt_5_0= RULE_INT )
+                            {
+                            // InternalMiniOCLCS.g:617:7: (lv_upperInt_5_0= RULE_INT )
+                            // InternalMiniOCLCS.g:618:8: lv_upperInt_5_0= RULE_INT
+                            {
+                            lv_upperInt_5_0=(Token)match(input,RULE_INT,FOLLOW_14); if (state.failed) return current;
+                            if ( state.backtracking==0 ) {
+
+                              								newLeafNode(lv_upperInt_5_0, grammarAccess.getMultiplicityCSAccess().getUpperIntINTTerminalRuleCall_1_2_2_0_0());
+                              							
+                            }
+                            if ( state.backtracking==0 ) {
+
+                              								if (current==null) {
+                              									current = createModelElement(grammarAccess.getMultiplicityCSRule());
+                              								}
+                              								setWithLastConsumed(
+                              									current,
+                              									"upperInt",
+                              									lv_upperInt_5_0,
+                              									"org.eclipse.xtext.common.Terminals.INT");
+                              							
+                            }
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+                        case 2 :
+                            // InternalMiniOCLCS.g:635:6: ( (lv_upperMult_6_0= '*' ) )
+                            {
+                            // InternalMiniOCLCS.g:635:6: ( (lv_upperMult_6_0= '*' ) )
+                            // InternalMiniOCLCS.g:636:7: (lv_upperMult_6_0= '*' )
+                            {
+                            // InternalMiniOCLCS.g:636:7: (lv_upperMult_6_0= '*' )
+                            // InternalMiniOCLCS.g:637:8: lv_upperMult_6_0= '*'
+                            {
+                            lv_upperMult_6_0=(Token)match(input,24,FOLLOW_14); if (state.failed) return current;
+                            if ( state.backtracking==0 ) {
+
+                              								newLeafNode(lv_upperMult_6_0, grammarAccess.getMultiplicityCSAccess().getUpperMultAsteriskKeyword_1_2_2_1_0());
+                              							
+                            }
+                            if ( state.backtracking==0 ) {
+
+                              								if (current==null) {
+                              									current = createModelElement(grammarAccess.getMultiplicityCSRule());
+                              								}
+                              								setWithLastConsumed(current, "upperMult", true, "*");
+                              							
+                            }
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_7=(Token)match(input,26,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_7, grammarAccess.getMultiplicityCSAccess().getRightSquareBracketKeyword_2());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleMultiplicityCS"
+
+
     // $ANTLR start "entryRuleOperationCS"
-    // InternalMiniOCLCS.g:401:1: entryRuleOperationCS returns [EObject current=null] : iv_ruleOperationCS= ruleOperationCS EOF ;
+    // InternalMiniOCLCS.g:660:1: entryRuleOperationCS returns [EObject current=null] : iv_ruleOperationCS= ruleOperationCS EOF ;
     public final EObject entryRuleOperationCS() throws RecognitionException {
         EObject current = null;
 
@@ -996,8 +1760,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:401:52: (iv_ruleOperationCS= ruleOperationCS EOF )
-            // InternalMiniOCLCS.g:402:2: iv_ruleOperationCS= ruleOperationCS EOF
+            // InternalMiniOCLCS.g:660:52: (iv_ruleOperationCS= ruleOperationCS EOF )
+            // InternalMiniOCLCS.g:661:2: iv_ruleOperationCS= ruleOperationCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getOperationCSRule()); 
@@ -1028,7 +1792,7 @@
 
 
     // $ANTLR start "ruleOperationCS"
-    // InternalMiniOCLCS.g:408:1: ruleOperationCS returns [EObject current=null] : (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' ) ;
+    // InternalMiniOCLCS.g:667:1: ruleOperationCS returns [EObject current=null] : (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' ) ;
     public final EObject ruleOperationCS() throws RecognitionException {
         EObject current = null;
 
@@ -1053,25 +1817,25 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:414:2: ( (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' ) )
-            // InternalMiniOCLCS.g:415:2: (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' )
+            // InternalMiniOCLCS.g:673:2: ( (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' ) )
+            // InternalMiniOCLCS.g:674:2: (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' )
             {
-            // InternalMiniOCLCS.g:415:2: (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' )
-            // InternalMiniOCLCS.g:416:3: otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';'
+            // InternalMiniOCLCS.g:674:2: (otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';' )
+            // InternalMiniOCLCS.g:675:3: otherlv_0= 'op' ( (lv_name_1_0= RULE_ID ) ) otherlv_2= '(' ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )? otherlv_6= ')' otherlv_7= ':' ( (lv_resultRef_8_0= rulePathNameCS ) ) otherlv_9= '=' ( (lv_body_10_0= ruleExpCS ) ) otherlv_11= ';'
             {
-            otherlv_0=(Token)match(input,19,FOLLOW_4); if (state.failed) return current;
+            otherlv_0=(Token)match(input,27,FOLLOW_4); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_0, grammarAccess.getOperationCSAccess().getOpKeyword_0());
               		
             }
-            // InternalMiniOCLCS.g:420:3: ( (lv_name_1_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:421:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:679:3: ( (lv_name_1_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:680:4: (lv_name_1_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:421:4: (lv_name_1_0= RULE_ID )
-            // InternalMiniOCLCS.g:422:5: lv_name_1_0= RULE_ID
+            // InternalMiniOCLCS.g:680:4: (lv_name_1_0= RULE_ID )
+            // InternalMiniOCLCS.g:681:5: lv_name_1_0= RULE_ID
             {
-            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_11); if (state.failed) return current;
+            lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_17); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               					newLeafNode(lv_name_1_0, grammarAccess.getOperationCSAccess().getNameIDTerminalRuleCall_1_0());
@@ -1095,35 +1859,35 @@
 
             }
 
-            otherlv_2=(Token)match(input,20,FOLLOW_12); if (state.failed) return current;
+            otherlv_2=(Token)match(input,28,FOLLOW_18); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_2, grammarAccess.getOperationCSAccess().getLeftParenthesisKeyword_2());
               		
             }
-            // InternalMiniOCLCS.g:442:3: ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )?
-            int alt6=2;
-            int LA6_0 = input.LA(1);
+            // InternalMiniOCLCS.g:701:3: ( ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )* )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
 
-            if ( (LA6_0==RULE_ID) ) {
-                alt6=1;
+            if ( (LA11_0==RULE_ID) ) {
+                alt11=1;
             }
-            switch (alt6) {
+            switch (alt11) {
                 case 1 :
-                    // InternalMiniOCLCS.g:443:4: ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )*
+                    // InternalMiniOCLCS.g:702:4: ( (lv_params_3_0= ruleParameterCS ) ) (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )*
                     {
-                    // InternalMiniOCLCS.g:443:4: ( (lv_params_3_0= ruleParameterCS ) )
-                    // InternalMiniOCLCS.g:444:5: (lv_params_3_0= ruleParameterCS )
+                    // InternalMiniOCLCS.g:702:4: ( (lv_params_3_0= ruleParameterCS ) )
+                    // InternalMiniOCLCS.g:703:5: (lv_params_3_0= ruleParameterCS )
                     {
-                    // InternalMiniOCLCS.g:444:5: (lv_params_3_0= ruleParameterCS )
-                    // InternalMiniOCLCS.g:445:6: lv_params_3_0= ruleParameterCS
+                    // InternalMiniOCLCS.g:703:5: (lv_params_3_0= ruleParameterCS )
+                    // InternalMiniOCLCS.g:704:6: lv_params_3_0= ruleParameterCS
                     {
                     if ( state.backtracking==0 ) {
 
                       						newCompositeNode(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_0_0());
                       					
                     }
-                    pushFollow(FOLLOW_13);
+                    pushFollow(FOLLOW_19);
                     lv_params_3_0=ruleParameterCS();
 
                     state._fsp--;
@@ -1147,39 +1911,39 @@
 
                     }
 
-                    // InternalMiniOCLCS.g:462:4: (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )*
-                    loop5:
+                    // InternalMiniOCLCS.g:721:4: (otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) ) )*
+                    loop10:
                     do {
-                        int alt5=2;
-                        int LA5_0 = input.LA(1);
+                        int alt10=2;
+                        int LA10_0 = input.LA(1);
 
-                        if ( (LA5_0==21) ) {
-                            alt5=1;
+                        if ( (LA10_0==29) ) {
+                            alt10=1;
                         }
 
 
-                        switch (alt5) {
+                        switch (alt10) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:463:5: otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) )
+                    	    // InternalMiniOCLCS.g:722:5: otherlv_4= ',' ( (lv_params_5_0= ruleParameterCS ) )
                     	    {
-                    	    otherlv_4=(Token)match(input,21,FOLLOW_4); if (state.failed) return current;
+                    	    otherlv_4=(Token)match(input,29,FOLLOW_4); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	      					newLeafNode(otherlv_4, grammarAccess.getOperationCSAccess().getCommaKeyword_3_1_0());
                     	      				
                     	    }
-                    	    // InternalMiniOCLCS.g:467:5: ( (lv_params_5_0= ruleParameterCS ) )
-                    	    // InternalMiniOCLCS.g:468:6: (lv_params_5_0= ruleParameterCS )
+                    	    // InternalMiniOCLCS.g:726:5: ( (lv_params_5_0= ruleParameterCS ) )
+                    	    // InternalMiniOCLCS.g:727:6: (lv_params_5_0= ruleParameterCS )
                     	    {
-                    	    // InternalMiniOCLCS.g:468:6: (lv_params_5_0= ruleParameterCS )
-                    	    // InternalMiniOCLCS.g:469:7: lv_params_5_0= ruleParameterCS
+                    	    // InternalMiniOCLCS.g:727:6: (lv_params_5_0= ruleParameterCS )
+                    	    // InternalMiniOCLCS.g:728:7: lv_params_5_0= ruleParameterCS
                     	    {
                     	    if ( state.backtracking==0 ) {
 
                     	      							newCompositeNode(grammarAccess.getOperationCSAccess().getParamsParameterCSParserRuleCall_3_1_1_0());
                     	      						
                     	    }
-                    	    pushFollow(FOLLOW_13);
+                    	    pushFollow(FOLLOW_19);
                     	    lv_params_5_0=ruleParameterCS();
 
                     	    state._fsp--;
@@ -1208,7 +1972,7 @@
                     	    break;
 
                     	default :
-                    	    break loop5;
+                    	    break loop10;
                         }
                     } while (true);
 
@@ -1218,7 +1982,7 @@
 
             }
 
-            otherlv_6=(Token)match(input,22,FOLLOW_9); if (state.failed) return current;
+            otherlv_6=(Token)match(input,30,FOLLOW_9); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_6, grammarAccess.getOperationCSAccess().getRightParenthesisKeyword_4());
@@ -1230,18 +1994,18 @@
               			newLeafNode(otherlv_7, grammarAccess.getOperationCSAccess().getColonKeyword_5());
               		
             }
-            // InternalMiniOCLCS.g:496:3: ( (lv_resultRef_8_0= rulePathNameCS ) )
-            // InternalMiniOCLCS.g:497:4: (lv_resultRef_8_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:755:3: ( (lv_resultRef_8_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:756:4: (lv_resultRef_8_0= rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:497:4: (lv_resultRef_8_0= rulePathNameCS )
-            // InternalMiniOCLCS.g:498:5: lv_resultRef_8_0= rulePathNameCS
+            // InternalMiniOCLCS.g:756:4: (lv_resultRef_8_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:757:5: lv_resultRef_8_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
 
               					newCompositeNode(grammarAccess.getOperationCSAccess().getResultRefPathNameCSParserRuleCall_6_0());
               				
             }
-            pushFollow(FOLLOW_14);
+            pushFollow(FOLLOW_20);
             lv_resultRef_8_0=rulePathNameCS();
 
             state._fsp--;
@@ -1265,24 +2029,24 @@
 
             }
 
-            otherlv_9=(Token)match(input,23,FOLLOW_15); if (state.failed) return current;
+            otherlv_9=(Token)match(input,31,FOLLOW_21); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_9, grammarAccess.getOperationCSAccess().getEqualsSignKeyword_7());
               		
             }
-            // InternalMiniOCLCS.g:519:3: ( (lv_body_10_0= ruleExpCS ) )
-            // InternalMiniOCLCS.g:520:4: (lv_body_10_0= ruleExpCS )
+            // InternalMiniOCLCS.g:778:3: ( (lv_body_10_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:779:4: (lv_body_10_0= ruleExpCS )
             {
-            // InternalMiniOCLCS.g:520:4: (lv_body_10_0= ruleExpCS )
-            // InternalMiniOCLCS.g:521:5: lv_body_10_0= ruleExpCS
+            // InternalMiniOCLCS.g:779:4: (lv_body_10_0= ruleExpCS )
+            // InternalMiniOCLCS.g:780:5: lv_body_10_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
 
               					newCompositeNode(grammarAccess.getOperationCSAccess().getBodyExpCSParserRuleCall_8_0());
               				
             }
-            pushFollow(FOLLOW_10);
+            pushFollow(FOLLOW_11);
             lv_body_10_0=ruleExpCS();
 
             state._fsp--;
@@ -1337,7 +2101,7 @@
 
 
     // $ANTLR start "entryRuleParameterCS"
-    // InternalMiniOCLCS.g:546:1: entryRuleParameterCS returns [EObject current=null] : iv_ruleParameterCS= ruleParameterCS EOF ;
+    // InternalMiniOCLCS.g:805:1: entryRuleParameterCS returns [EObject current=null] : iv_ruleParameterCS= ruleParameterCS EOF ;
     public final EObject entryRuleParameterCS() throws RecognitionException {
         EObject current = null;
 
@@ -1345,8 +2109,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:546:52: (iv_ruleParameterCS= ruleParameterCS EOF )
-            // InternalMiniOCLCS.g:547:2: iv_ruleParameterCS= ruleParameterCS EOF
+            // InternalMiniOCLCS.g:805:52: (iv_ruleParameterCS= ruleParameterCS EOF )
+            // InternalMiniOCLCS.g:806:2: iv_ruleParameterCS= ruleParameterCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getParameterCSRule()); 
@@ -1377,7 +2141,7 @@
 
 
     // $ANTLR start "ruleParameterCS"
-    // InternalMiniOCLCS.g:553:1: ruleParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) ) ;
+    // InternalMiniOCLCS.g:812:1: ruleParameterCS returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) ) ;
     public final EObject ruleParameterCS() throws RecognitionException {
         EObject current = null;
 
@@ -1390,17 +2154,17 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:559:2: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) ) )
-            // InternalMiniOCLCS.g:560:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )
+            // InternalMiniOCLCS.g:818:2: ( ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) ) )
+            // InternalMiniOCLCS.g:819:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )
             {
-            // InternalMiniOCLCS.g:560:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )
-            // InternalMiniOCLCS.g:561:3: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:819:2: ( ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )
+            // InternalMiniOCLCS.g:820:3: ( (lv_name_0_0= RULE_ID ) ) otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) )
             {
-            // InternalMiniOCLCS.g:561:3: ( (lv_name_0_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:562:4: (lv_name_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:820:3: ( (lv_name_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:821:4: (lv_name_0_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:562:4: (lv_name_0_0= RULE_ID )
-            // InternalMiniOCLCS.g:563:5: lv_name_0_0= RULE_ID
+            // InternalMiniOCLCS.g:821:4: (lv_name_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:822:5: lv_name_0_0= RULE_ID
             {
             lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_9); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -1432,11 +2196,11 @@
               			newLeafNode(otherlv_1, grammarAccess.getParameterCSAccess().getColonKeyword_1());
               		
             }
-            // InternalMiniOCLCS.g:583:3: ( (lv_typeRef_2_0= rulePathNameCS ) )
-            // InternalMiniOCLCS.g:584:4: (lv_typeRef_2_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:842:3: ( (lv_typeRef_2_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:843:4: (lv_typeRef_2_0= rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:584:4: (lv_typeRef_2_0= rulePathNameCS )
-            // InternalMiniOCLCS.g:585:5: lv_typeRef_2_0= rulePathNameCS
+            // InternalMiniOCLCS.g:843:4: (lv_typeRef_2_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:844:5: lv_typeRef_2_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
 
@@ -1492,7 +2256,7 @@
 
 
     // $ANTLR start "entryRuleConstraintsDefCS"
-    // InternalMiniOCLCS.g:606:1: entryRuleConstraintsDefCS returns [EObject current=null] : iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF ;
+    // InternalMiniOCLCS.g:865:1: entryRuleConstraintsDefCS returns [EObject current=null] : iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF ;
     public final EObject entryRuleConstraintsDefCS() throws RecognitionException {
         EObject current = null;
 
@@ -1500,8 +2264,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:606:57: (iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF )
-            // InternalMiniOCLCS.g:607:2: iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF
+            // InternalMiniOCLCS.g:865:57: (iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF )
+            // InternalMiniOCLCS.g:866:2: iv_ruleConstraintsDefCS= ruleConstraintsDefCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getConstraintsDefCSRule()); 
@@ -1532,7 +2296,7 @@
 
 
     // $ANTLR start "ruleConstraintsDefCS"
-    // InternalMiniOCLCS.g:613:1: ruleConstraintsDefCS returns [EObject current=null] : (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' ) ;
+    // InternalMiniOCLCS.g:872:1: ruleConstraintsDefCS returns [EObject current=null] : (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' ) ;
     public final EObject ruleConstraintsDefCS() throws RecognitionException {
         EObject current = null;
 
@@ -1548,23 +2312,23 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:619:2: ( (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' ) )
-            // InternalMiniOCLCS.g:620:2: (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' )
+            // InternalMiniOCLCS.g:878:2: ( (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' ) )
+            // InternalMiniOCLCS.g:879:2: (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' )
             {
-            // InternalMiniOCLCS.g:620:2: (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' )
-            // InternalMiniOCLCS.g:621:3: otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}'
+            // InternalMiniOCLCS.g:879:2: (otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}' )
+            // InternalMiniOCLCS.g:880:3: otherlv_0= 'context' ( (lv_typeRef_1_0= rulePathNameCS ) ) otherlv_2= '{' ( (lv_invariants_3_0= ruleInvariantCS ) )* otherlv_4= '}'
             {
-            otherlv_0=(Token)match(input,24,FOLLOW_4); if (state.failed) return current;
+            otherlv_0=(Token)match(input,32,FOLLOW_4); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_0, grammarAccess.getConstraintsDefCSAccess().getContextKeyword_0());
               		
             }
-            // InternalMiniOCLCS.g:625:3: ( (lv_typeRef_1_0= rulePathNameCS ) )
-            // InternalMiniOCLCS.g:626:4: (lv_typeRef_1_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:884:3: ( (lv_typeRef_1_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:885:4: (lv_typeRef_1_0= rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:626:4: (lv_typeRef_1_0= rulePathNameCS )
-            // InternalMiniOCLCS.g:627:5: lv_typeRef_1_0= rulePathNameCS
+            // InternalMiniOCLCS.g:885:4: (lv_typeRef_1_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:886:5: lv_typeRef_1_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
 
@@ -1595,36 +2359,36 @@
 
             }
 
-            otherlv_2=(Token)match(input,12,FOLLOW_16); if (state.failed) return current;
+            otherlv_2=(Token)match(input,12,FOLLOW_22); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_2, grammarAccess.getConstraintsDefCSAccess().getLeftCurlyBracketKeyword_2());
               		
             }
-            // InternalMiniOCLCS.g:648:3: ( (lv_invariants_3_0= ruleInvariantCS ) )*
-            loop7:
+            // InternalMiniOCLCS.g:907:3: ( (lv_invariants_3_0= ruleInvariantCS ) )*
+            loop12:
             do {
-                int alt7=2;
-                int LA7_0 = input.LA(1);
+                int alt12=2;
+                int LA12_0 = input.LA(1);
 
-                if ( (LA7_0==25) ) {
-                    alt7=1;
+                if ( (LA12_0==33) ) {
+                    alt12=1;
                 }
 
 
-                switch (alt7) {
+                switch (alt12) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:649:4: (lv_invariants_3_0= ruleInvariantCS )
+            	    // InternalMiniOCLCS.g:908:4: (lv_invariants_3_0= ruleInvariantCS )
             	    {
-            	    // InternalMiniOCLCS.g:649:4: (lv_invariants_3_0= ruleInvariantCS )
-            	    // InternalMiniOCLCS.g:650:5: lv_invariants_3_0= ruleInvariantCS
+            	    // InternalMiniOCLCS.g:908:4: (lv_invariants_3_0= ruleInvariantCS )
+            	    // InternalMiniOCLCS.g:909:5: lv_invariants_3_0= ruleInvariantCS
             	    {
             	    if ( state.backtracking==0 ) {
 
             	      					newCompositeNode(grammarAccess.getConstraintsDefCSAccess().getInvariantsInvariantCSParserRuleCall_3_0());
             	      				
             	    }
-            	    pushFollow(FOLLOW_16);
+            	    pushFollow(FOLLOW_22);
             	    lv_invariants_3_0=ruleInvariantCS();
 
             	    state._fsp--;
@@ -1650,7 +2414,7 @@
             	    break;
 
             	default :
-            	    break loop7;
+            	    break loop12;
                 }
             } while (true);
 
@@ -1685,7 +2449,7 @@
 
 
     // $ANTLR start "entryRuleInvariantCS"
-    // InternalMiniOCLCS.g:675:1: entryRuleInvariantCS returns [EObject current=null] : iv_ruleInvariantCS= ruleInvariantCS EOF ;
+    // InternalMiniOCLCS.g:934:1: entryRuleInvariantCS returns [EObject current=null] : iv_ruleInvariantCS= ruleInvariantCS EOF ;
     public final EObject entryRuleInvariantCS() throws RecognitionException {
         EObject current = null;
 
@@ -1693,8 +2457,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:675:52: (iv_ruleInvariantCS= ruleInvariantCS EOF )
-            // InternalMiniOCLCS.g:676:2: iv_ruleInvariantCS= ruleInvariantCS EOF
+            // InternalMiniOCLCS.g:934:52: (iv_ruleInvariantCS= ruleInvariantCS EOF )
+            // InternalMiniOCLCS.g:935:2: iv_ruleInvariantCS= ruleInvariantCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getInvariantCSRule()); 
@@ -1725,7 +2489,7 @@
 
 
     // $ANTLR start "ruleInvariantCS"
-    // InternalMiniOCLCS.g:682:1: ruleInvariantCS returns [EObject current=null] : (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' ) ;
+    // InternalMiniOCLCS.g:941:1: ruleInvariantCS returns [EObject current=null] : (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' ) ;
     public final EObject ruleInvariantCS() throws RecognitionException {
         EObject current = null;
 
@@ -1739,36 +2503,36 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:688:2: ( (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' ) )
-            // InternalMiniOCLCS.g:689:2: (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' )
+            // InternalMiniOCLCS.g:947:2: ( (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' ) )
+            // InternalMiniOCLCS.g:948:2: (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' )
             {
-            // InternalMiniOCLCS.g:689:2: (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' )
-            // InternalMiniOCLCS.g:690:3: otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';'
+            // InternalMiniOCLCS.g:948:2: (otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';' )
+            // InternalMiniOCLCS.g:949:3: otherlv_0= 'inv' otherlv_1= ':' ( (lv_exp_2_0= ruleExpCS ) ) otherlv_3= ';'
             {
-            otherlv_0=(Token)match(input,25,FOLLOW_9); if (state.failed) return current;
+            otherlv_0=(Token)match(input,33,FOLLOW_9); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_0, grammarAccess.getInvariantCSAccess().getInvKeyword_0());
               		
             }
-            otherlv_1=(Token)match(input,17,FOLLOW_15); if (state.failed) return current;
+            otherlv_1=(Token)match(input,17,FOLLOW_21); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getInvariantCSAccess().getColonKeyword_1());
               		
             }
-            // InternalMiniOCLCS.g:698:3: ( (lv_exp_2_0= ruleExpCS ) )
-            // InternalMiniOCLCS.g:699:4: (lv_exp_2_0= ruleExpCS )
+            // InternalMiniOCLCS.g:957:3: ( (lv_exp_2_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:958:4: (lv_exp_2_0= ruleExpCS )
             {
-            // InternalMiniOCLCS.g:699:4: (lv_exp_2_0= ruleExpCS )
-            // InternalMiniOCLCS.g:700:5: lv_exp_2_0= ruleExpCS
+            // InternalMiniOCLCS.g:958:4: (lv_exp_2_0= ruleExpCS )
+            // InternalMiniOCLCS.g:959:5: lv_exp_2_0= ruleExpCS
             {
             if ( state.backtracking==0 ) {
 
               					newCompositeNode(grammarAccess.getInvariantCSAccess().getExpExpCSParserRuleCall_2_0());
               				
             }
-            pushFollow(FOLLOW_10);
+            pushFollow(FOLLOW_11);
             lv_exp_2_0=ruleExpCS();
 
             state._fsp--;
@@ -1823,7 +2587,7 @@
 
 
     // $ANTLR start "entryRuleExpCS"
-    // InternalMiniOCLCS.g:725:1: entryRuleExpCS returns [EObject current=null] : iv_ruleExpCS= ruleExpCS EOF ;
+    // InternalMiniOCLCS.g:984:1: entryRuleExpCS returns [EObject current=null] : iv_ruleExpCS= ruleExpCS EOF ;
     public final EObject entryRuleExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -1831,8 +2595,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:725:46: (iv_ruleExpCS= ruleExpCS EOF )
-            // InternalMiniOCLCS.g:726:2: iv_ruleExpCS= ruleExpCS EOF
+            // InternalMiniOCLCS.g:984:46: (iv_ruleExpCS= ruleExpCS EOF )
+            // InternalMiniOCLCS.g:985:2: iv_ruleExpCS= ruleExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getExpCSRule()); 
@@ -1863,7 +2627,7 @@
 
 
     // $ANTLR start "ruleExpCS"
-    // InternalMiniOCLCS.g:732:1: ruleExpCS returns [EObject current=null] : this_LogicExpCS_0= ruleLogicExpCS ;
+    // InternalMiniOCLCS.g:991:1: ruleExpCS returns [EObject current=null] : this_LogicExpCS_0= ruleLogicExpCS ;
     public final EObject ruleExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -1874,8 +2638,8 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:738:2: (this_LogicExpCS_0= ruleLogicExpCS )
-            // InternalMiniOCLCS.g:739:2: this_LogicExpCS_0= ruleLogicExpCS
+            // InternalMiniOCLCS.g:997:2: (this_LogicExpCS_0= ruleLogicExpCS )
+            // InternalMiniOCLCS.g:998:2: this_LogicExpCS_0= ruleLogicExpCS
             {
             if ( state.backtracking==0 ) {
 
@@ -1920,7 +2684,7 @@
 
 
     // $ANTLR start "entryRuleLogicExpCS"
-    // InternalMiniOCLCS.g:753:1: entryRuleLogicExpCS returns [EObject current=null] : iv_ruleLogicExpCS= ruleLogicExpCS EOF ;
+    // InternalMiniOCLCS.g:1012:1: entryRuleLogicExpCS returns [EObject current=null] : iv_ruleLogicExpCS= ruleLogicExpCS EOF ;
     public final EObject entryRuleLogicExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -1928,8 +2692,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:753:51: (iv_ruleLogicExpCS= ruleLogicExpCS EOF )
-            // InternalMiniOCLCS.g:754:2: iv_ruleLogicExpCS= ruleLogicExpCS EOF
+            // InternalMiniOCLCS.g:1012:51: (iv_ruleLogicExpCS= ruleLogicExpCS EOF )
+            // InternalMiniOCLCS.g:1013:2: iv_ruleLogicExpCS= ruleLogicExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLogicExpCSRule()); 
@@ -1960,7 +2724,7 @@
 
 
     // $ANTLR start "ruleLogicExpCS"
-    // InternalMiniOCLCS.g:760:1: ruleLogicExpCS returns [EObject current=null] : (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* ) ;
+    // InternalMiniOCLCS.g:1019:1: ruleLogicExpCS returns [EObject current=null] : (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* ) ;
     public final EObject ruleLogicExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -1975,11 +2739,11 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:766:2: ( (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* ) )
-            // InternalMiniOCLCS.g:767:2: (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* )
+            // InternalMiniOCLCS.g:1025:2: ( (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* ) )
+            // InternalMiniOCLCS.g:1026:2: (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* )
             {
-            // InternalMiniOCLCS.g:767:2: (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* )
-            // InternalMiniOCLCS.g:768:3: this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )*
+            // InternalMiniOCLCS.g:1026:2: (this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )* )
+            // InternalMiniOCLCS.g:1027:3: this_CallExpCS_0= ruleCallExpCS ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )*
             {
             if ( state.backtracking==0 ) {
 
@@ -1991,7 +2755,7 @@
               			newCompositeNode(grammarAccess.getLogicExpCSAccess().getCallExpCSParserRuleCall_0());
               		
             }
-            pushFollow(FOLLOW_17);
+            pushFollow(FOLLOW_23);
             this_CallExpCS_0=ruleCallExpCS();
 
             state._fsp--;
@@ -2002,23 +2766,38 @@
               			afterParserOrEnumRuleCall();
               		
             }
-            // InternalMiniOCLCS.g:779:3: ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )*
-            loop9:
+            // InternalMiniOCLCS.g:1038:3: ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )*
+            loop14:
             do {
-                int alt9=2;
-                int LA9_0 = input.LA(1);
+                int alt14=2;
+                int LA14_0 = input.LA(1);
 
-                if ( (LA9_0==23||LA9_0==26) ) {
-                    alt9=1;
+                if ( (LA14_0==31) ) {
+                    int LA14_2 = input.LA(2);
+
+                    if ( (synpred19_InternalMiniOCLCS()) ) {
+                        alt14=1;
+                    }
+
+
+                }
+                else if ( (LA14_0==34) ) {
+                    int LA14_3 = input.LA(2);
+
+                    if ( (synpred19_InternalMiniOCLCS()) ) {
+                        alt14=1;
+                    }
+
+
                 }
 
 
-                switch (alt9) {
+                switch (alt14) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:780:4: () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) )
+            	    // InternalMiniOCLCS.g:1039:4: () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:780:4: ()
-            	    // InternalMiniOCLCS.g:781:5: 
+            	    // InternalMiniOCLCS.g:1039:4: ()
+            	    // InternalMiniOCLCS.g:1040:5: 
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -2035,34 +2814,34 @@
 
             	    }
 
-            	    // InternalMiniOCLCS.g:790:4: ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) )
-            	    // InternalMiniOCLCS.g:791:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
+            	    // InternalMiniOCLCS.g:1049:4: ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) )
+            	    // InternalMiniOCLCS.g:1050:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
             	    {
-            	    // InternalMiniOCLCS.g:791:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
-            	    // InternalMiniOCLCS.g:792:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
+            	    // InternalMiniOCLCS.g:1050:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
+            	    // InternalMiniOCLCS.g:1051:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
             	    {
-            	    // InternalMiniOCLCS.g:792:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
-            	    int alt8=2;
-            	    int LA8_0 = input.LA(1);
+            	    // InternalMiniOCLCS.g:1051:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
+            	    int alt13=2;
+            	    int LA13_0 = input.LA(1);
 
-            	    if ( (LA8_0==23) ) {
-            	        alt8=1;
+            	    if ( (LA13_0==31) ) {
+            	        alt13=1;
             	    }
-            	    else if ( (LA8_0==26) ) {
-            	        alt8=2;
+            	    else if ( (LA13_0==34) ) {
+            	        alt13=2;
             	    }
             	    else {
             	        if (state.backtracking>0) {state.failed=true; return current;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("", 8, 0, input);
+            	            new NoViableAltException("", 13, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt8) {
+            	    switch (alt13) {
             	        case 1 :
-            	            // InternalMiniOCLCS.g:793:7: lv_op_2_1= '='
+            	            // InternalMiniOCLCS.g:1052:7: lv_op_2_1= '='
             	            {
-            	            lv_op_2_1=(Token)match(input,23,FOLLOW_15); if (state.failed) return current;
+            	            lv_op_2_1=(Token)match(input,31,FOLLOW_21); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              							newLeafNode(lv_op_2_1, grammarAccess.getLogicExpCSAccess().getOpEqualsSignKeyword_1_1_0_0());
@@ -2080,9 +2859,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // InternalMiniOCLCS.g:804:7: lv_op_2_2= '<>'
+            	            // InternalMiniOCLCS.g:1063:7: lv_op_2_2= '<>'
             	            {
-            	            lv_op_2_2=(Token)match(input,26,FOLLOW_15); if (state.failed) return current;
+            	            lv_op_2_2=(Token)match(input,34,FOLLOW_21); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              							newLeafNode(lv_op_2_2, grammarAccess.getLogicExpCSAccess().getOpLessThanSignGreaterThanSignKeyword_1_1_0_1());
@@ -2108,18 +2887,18 @@
 
             	    }
 
-            	    // InternalMiniOCLCS.g:817:4: ( (lv_right_3_0= ruleCallExpCS ) )
-            	    // InternalMiniOCLCS.g:818:5: (lv_right_3_0= ruleCallExpCS )
+            	    // InternalMiniOCLCS.g:1076:4: ( (lv_right_3_0= ruleCallExpCS ) )
+            	    // InternalMiniOCLCS.g:1077:5: (lv_right_3_0= ruleCallExpCS )
             	    {
-            	    // InternalMiniOCLCS.g:818:5: (lv_right_3_0= ruleCallExpCS )
-            	    // InternalMiniOCLCS.g:819:6: lv_right_3_0= ruleCallExpCS
+            	    // InternalMiniOCLCS.g:1077:5: (lv_right_3_0= ruleCallExpCS )
+            	    // InternalMiniOCLCS.g:1078:6: lv_right_3_0= ruleCallExpCS
             	    {
             	    if ( state.backtracking==0 ) {
 
             	      						newCompositeNode(grammarAccess.getLogicExpCSAccess().getRightCallExpCSParserRuleCall_1_2_0());
             	      					
             	    }
-            	    pushFollow(FOLLOW_17);
+            	    pushFollow(FOLLOW_23);
             	    lv_right_3_0=ruleCallExpCS();
 
             	    state._fsp--;
@@ -2148,7 +2927,7 @@
             	    break;
 
             	default :
-            	    break loop9;
+            	    break loop14;
                 }
             } while (true);
 
@@ -2177,7 +2956,7 @@
 
 
     // $ANTLR start "entryRuleCallExpCS"
-    // InternalMiniOCLCS.g:841:1: entryRuleCallExpCS returns [EObject current=null] : iv_ruleCallExpCS= ruleCallExpCS EOF ;
+    // InternalMiniOCLCS.g:1100:1: entryRuleCallExpCS returns [EObject current=null] : iv_ruleCallExpCS= ruleCallExpCS EOF ;
     public final EObject entryRuleCallExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2185,8 +2964,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:841:50: (iv_ruleCallExpCS= ruleCallExpCS EOF )
-            // InternalMiniOCLCS.g:842:2: iv_ruleCallExpCS= ruleCallExpCS EOF
+            // InternalMiniOCLCS.g:1100:50: (iv_ruleCallExpCS= ruleCallExpCS EOF )
+            // InternalMiniOCLCS.g:1101:2: iv_ruleCallExpCS= ruleCallExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCallExpCSRule()); 
@@ -2217,7 +2996,7 @@
 
 
     // $ANTLR start "ruleCallExpCS"
-    // InternalMiniOCLCS.g:848:1: ruleCallExpCS returns [EObject current=null] : (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )* ) ;
+    // InternalMiniOCLCS.g:1107:1: ruleCallExpCS returns [EObject current=null] : (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )* ) ;
     public final EObject ruleCallExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2225,18 +3004,18 @@
         Token lv_op_2_2=null;
         EObject this_PrimaryExpCS_0 = null;
 
-        EObject lv_nameExp_3_0 = null;
+        EObject lv_navExp_3_0 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:854:2: ( (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )* ) )
-            // InternalMiniOCLCS.g:855:2: (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )* )
+            // InternalMiniOCLCS.g:1113:2: ( (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )* ) )
+            // InternalMiniOCLCS.g:1114:2: (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )* )
             {
-            // InternalMiniOCLCS.g:855:2: (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )* )
-            // InternalMiniOCLCS.g:856:3: this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )*
+            // InternalMiniOCLCS.g:1114:2: (this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )* )
+            // InternalMiniOCLCS.g:1115:3: this_PrimaryExpCS_0= rulePrimaryExpCS ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )*
             {
             if ( state.backtracking==0 ) {
 
@@ -2248,7 +3027,7 @@
               			newCompositeNode(grammarAccess.getCallExpCSAccess().getPrimaryExpCSParserRuleCall_0());
               		
             }
-            pushFollow(FOLLOW_18);
+            pushFollow(FOLLOW_24);
             this_PrimaryExpCS_0=rulePrimaryExpCS();
 
             state._fsp--;
@@ -2259,23 +3038,38 @@
               			afterParserOrEnumRuleCall();
               		
             }
-            // InternalMiniOCLCS.g:867:3: ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) ) )*
-            loop11:
+            // InternalMiniOCLCS.g:1126:3: ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )*
+            loop16:
             do {
-                int alt11=2;
-                int LA11_0 = input.LA(1);
+                int alt16=2;
+                int LA16_0 = input.LA(1);
 
-                if ( ((LA11_0>=27 && LA11_0<=28)) ) {
-                    alt11=1;
+                if ( (LA16_0==35) ) {
+                    int LA16_2 = input.LA(2);
+
+                    if ( (synpred21_InternalMiniOCLCS()) ) {
+                        alt16=1;
+                    }
+
+
+                }
+                else if ( (LA16_0==36) ) {
+                    int LA16_3 = input.LA(2);
+
+                    if ( (synpred21_InternalMiniOCLCS()) ) {
+                        alt16=1;
+                    }
+
+
                 }
 
 
-                switch (alt11) {
+                switch (alt16) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:868:4: () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_nameExp_3_0= ruleNameExpCS ) )
+            	    // InternalMiniOCLCS.g:1127:4: () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) )
             	    {
-            	    // InternalMiniOCLCS.g:868:4: ()
-            	    // InternalMiniOCLCS.g:869:5: 
+            	    // InternalMiniOCLCS.g:1127:4: ()
+            	    // InternalMiniOCLCS.g:1128:5: 
             	    {
             	    if ( state.backtracking==0 ) {
 
@@ -2292,34 +3086,34 @@
 
             	    }
 
-            	    // InternalMiniOCLCS.g:878:4: ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) )
-            	    // InternalMiniOCLCS.g:879:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
+            	    // InternalMiniOCLCS.g:1137:4: ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) )
+            	    // InternalMiniOCLCS.g:1138:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
             	    {
-            	    // InternalMiniOCLCS.g:879:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
-            	    // InternalMiniOCLCS.g:880:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
+            	    // InternalMiniOCLCS.g:1138:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
+            	    // InternalMiniOCLCS.g:1139:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
             	    {
-            	    // InternalMiniOCLCS.g:880:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
-            	    int alt10=2;
-            	    int LA10_0 = input.LA(1);
+            	    // InternalMiniOCLCS.g:1139:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
+            	    int alt15=2;
+            	    int LA15_0 = input.LA(1);
 
-            	    if ( (LA10_0==27) ) {
-            	        alt10=1;
+            	    if ( (LA15_0==35) ) {
+            	        alt15=1;
             	    }
-            	    else if ( (LA10_0==28) ) {
-            	        alt10=2;
+            	    else if ( (LA15_0==36) ) {
+            	        alt15=2;
             	    }
             	    else {
             	        if (state.backtracking>0) {state.failed=true; return current;}
             	        NoViableAltException nvae =
-            	            new NoViableAltException("", 10, 0, input);
+            	            new NoViableAltException("", 15, 0, input);
 
             	        throw nvae;
             	    }
-            	    switch (alt10) {
+            	    switch (alt15) {
             	        case 1 :
-            	            // InternalMiniOCLCS.g:881:7: lv_op_2_1= '.'
+            	            // InternalMiniOCLCS.g:1140:7: lv_op_2_1= '.'
             	            {
-            	            lv_op_2_1=(Token)match(input,27,FOLLOW_4); if (state.failed) return current;
+            	            lv_op_2_1=(Token)match(input,35,FOLLOW_25); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              							newLeafNode(lv_op_2_1, grammarAccess.getCallExpCSAccess().getOpFullStopKeyword_1_1_0_0());
@@ -2337,9 +3131,9 @@
             	            }
             	            break;
             	        case 2 :
-            	            // InternalMiniOCLCS.g:892:7: lv_op_2_2= '->'
+            	            // InternalMiniOCLCS.g:1151:7: lv_op_2_2= '->'
             	            {
-            	            lv_op_2_2=(Token)match(input,28,FOLLOW_4); if (state.failed) return current;
+            	            lv_op_2_2=(Token)match(input,36,FOLLOW_25); if (state.failed) return current;
             	            if ( state.backtracking==0 ) {
 
             	              							newLeafNode(lv_op_2_2, grammarAccess.getCallExpCSAccess().getOpHyphenMinusGreaterThanSignKeyword_1_1_0_1());
@@ -2365,19 +3159,19 @@
 
             	    }
 
-            	    // InternalMiniOCLCS.g:905:4: ( (lv_nameExp_3_0= ruleNameExpCS ) )
-            	    // InternalMiniOCLCS.g:906:5: (lv_nameExp_3_0= ruleNameExpCS )
+            	    // InternalMiniOCLCS.g:1164:4: ( (lv_navExp_3_0= ruleNavigationExpCS ) )
+            	    // InternalMiniOCLCS.g:1165:5: (lv_navExp_3_0= ruleNavigationExpCS )
             	    {
-            	    // InternalMiniOCLCS.g:906:5: (lv_nameExp_3_0= ruleNameExpCS )
-            	    // InternalMiniOCLCS.g:907:6: lv_nameExp_3_0= ruleNameExpCS
+            	    // InternalMiniOCLCS.g:1165:5: (lv_navExp_3_0= ruleNavigationExpCS )
+            	    // InternalMiniOCLCS.g:1166:6: lv_navExp_3_0= ruleNavigationExpCS
             	    {
             	    if ( state.backtracking==0 ) {
 
-            	      						newCompositeNode(grammarAccess.getCallExpCSAccess().getNameExpNameExpCSParserRuleCall_1_2_0());
+            	      						newCompositeNode(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0());
             	      					
             	    }
-            	    pushFollow(FOLLOW_18);
-            	    lv_nameExp_3_0=ruleNameExpCS();
+            	    pushFollow(FOLLOW_24);
+            	    lv_navExp_3_0=ruleNavigationExpCS();
 
             	    state._fsp--;
             	    if (state.failed) return current;
@@ -2388,9 +3182,9 @@
             	      						}
             	      						set(
             	      							current,
-            	      							"nameExp",
-            	      							lv_nameExp_3_0,
-            	      							"org.eclipse.qvtd.doc.MiniOCLCS.NameExpCS");
+            	      							"navExp",
+            	      							lv_navExp_3_0,
+            	      							"org.eclipse.qvtd.doc.MiniOCLCS.NavigationExpCS");
             	      						afterParserOrEnumRuleCall();
             	      					
             	    }
@@ -2405,7 +3199,7 @@
             	    break;
 
             	default :
-            	    break loop11;
+            	    break loop16;
                 }
             } while (true);
 
@@ -2434,7 +3228,7 @@
 
 
     // $ANTLR start "entryRulePrimaryExpCS"
-    // InternalMiniOCLCS.g:929:1: entryRulePrimaryExpCS returns [EObject current=null] : iv_rulePrimaryExpCS= rulePrimaryExpCS EOF ;
+    // InternalMiniOCLCS.g:1188:1: entryRulePrimaryExpCS returns [EObject current=null] : iv_rulePrimaryExpCS= rulePrimaryExpCS EOF ;
     public final EObject entryRulePrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2442,8 +3236,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:929:53: (iv_rulePrimaryExpCS= rulePrimaryExpCS EOF )
-            // InternalMiniOCLCS.g:930:2: iv_rulePrimaryExpCS= rulePrimaryExpCS EOF
+            // InternalMiniOCLCS.g:1188:53: (iv_rulePrimaryExpCS= rulePrimaryExpCS EOF )
+            // InternalMiniOCLCS.g:1189:2: iv_rulePrimaryExpCS= rulePrimaryExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPrimaryExpCSRule()); 
@@ -2474,42 +3268,64 @@
 
 
     // $ANTLR start "rulePrimaryExpCS"
-    // InternalMiniOCLCS.g:936:1: rulePrimaryExpCS returns [EObject current=null] : (this_NameExpCS_0= ruleNameExpCS | this_LiteralExpCS_1= ruleLiteralExpCS ) ;
+    // InternalMiniOCLCS.g:1195:1: rulePrimaryExpCS returns [EObject current=null] : (this_SelfExpCS_0= ruleSelfExpCS | this_NameExpCS_1= ruleNameExpCS | this_LiteralExpCS_2= ruleLiteralExpCS | this_LetExpCS_3= ruleLetExpCS ) ;
     public final EObject rulePrimaryExpCS() throws RecognitionException {
         EObject current = null;
 
-        EObject this_NameExpCS_0 = null;
+        EObject this_SelfExpCS_0 = null;
 
-        EObject this_LiteralExpCS_1 = null;
+        EObject this_NameExpCS_1 = null;
+
+        EObject this_LiteralExpCS_2 = null;
+
+        EObject this_LetExpCS_3 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:942:2: ( (this_NameExpCS_0= ruleNameExpCS | this_LiteralExpCS_1= ruleLiteralExpCS ) )
-            // InternalMiniOCLCS.g:943:2: (this_NameExpCS_0= ruleNameExpCS | this_LiteralExpCS_1= ruleLiteralExpCS )
+            // InternalMiniOCLCS.g:1201:2: ( (this_SelfExpCS_0= ruleSelfExpCS | this_NameExpCS_1= ruleNameExpCS | this_LiteralExpCS_2= ruleLiteralExpCS | this_LetExpCS_3= ruleLetExpCS ) )
+            // InternalMiniOCLCS.g:1202:2: (this_SelfExpCS_0= ruleSelfExpCS | this_NameExpCS_1= ruleNameExpCS | this_LiteralExpCS_2= ruleLiteralExpCS | this_LetExpCS_3= ruleLetExpCS )
             {
-            // InternalMiniOCLCS.g:943:2: (this_NameExpCS_0= ruleNameExpCS | this_LiteralExpCS_1= ruleLiteralExpCS )
-            int alt12=2;
-            int LA12_0 = input.LA(1);
-
-            if ( (LA12_0==RULE_ID) ) {
-                alt12=1;
-            }
-            else if ( ((LA12_0>=RULE_INT && LA12_0<=RULE_STRING)||(LA12_0>=29 && LA12_0<=30)) ) {
-                alt12=2;
-            }
-            else {
+            // InternalMiniOCLCS.g:1202:2: (this_SelfExpCS_0= ruleSelfExpCS | this_NameExpCS_1= ruleNameExpCS | this_LiteralExpCS_2= ruleLiteralExpCS | this_LetExpCS_3= ruleLetExpCS )
+            int alt17=4;
+            switch ( input.LA(1) ) {
+            case 37:
+                {
+                alt17=1;
+                }
+                break;
+            case RULE_ID:
+                {
+                alt17=2;
+                }
+                break;
+            case RULE_INT:
+            case 41:
+            case 42:
+            case 43:
+            case 47:
+                {
+                alt17=3;
+                }
+                break;
+            case 44:
+                {
+                alt17=4;
+                }
+                break;
+            default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 12, 0, input);
+                    new NoViableAltException("", 17, 0, input);
 
                 throw nvae;
             }
-            switch (alt12) {
+
+            switch (alt17) {
                 case 1 :
-                    // InternalMiniOCLCS.g:944:3: this_NameExpCS_0= ruleNameExpCS
+                    // InternalMiniOCLCS.g:1203:3: this_SelfExpCS_0= ruleSelfExpCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2518,17 +3334,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_0());
+                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getSelfExpCSParserRuleCall_0());
                       		
                     }
                     pushFollow(FOLLOW_2);
-                    this_NameExpCS_0=ruleNameExpCS();
+                    this_SelfExpCS_0=ruleSelfExpCS();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_NameExpCS_0;
+                      			current = this_SelfExpCS_0;
                       			afterParserOrEnumRuleCall();
                       		
                     }
@@ -2536,7 +3352,7 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:956:3: this_LiteralExpCS_1= ruleLiteralExpCS
+                    // InternalMiniOCLCS.g:1215:3: this_NameExpCS_1= ruleNameExpCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2545,17 +3361,71 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_1());
+                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getNameExpCSParserRuleCall_1());
                       		
                     }
                     pushFollow(FOLLOW_2);
-                    this_LiteralExpCS_1=ruleLiteralExpCS();
+                    this_NameExpCS_1=ruleNameExpCS();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_LiteralExpCS_1;
+                      			current = this_NameExpCS_1;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 3 :
+                    // InternalMiniOCLCS.g:1227:3: this_LiteralExpCS_2= ruleLiteralExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLiteralExpCSParserRuleCall_2());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_LiteralExpCS_2=ruleLiteralExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_LiteralExpCS_2;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // InternalMiniOCLCS.g:1239:3: this_LetExpCS_3= ruleLetExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getPrimaryExpCSAccess().getLetExpCSParserRuleCall_3());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_LetExpCS_3=ruleLetExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_LetExpCS_3;
                       			afterParserOrEnumRuleCall();
                       		
                     }
@@ -2586,8 +3456,1236 @@
     // $ANTLR end "rulePrimaryExpCS"
 
 
+    // $ANTLR start "entryRuleSelfExpCS"
+    // InternalMiniOCLCS.g:1254:1: entryRuleSelfExpCS returns [EObject current=null] : iv_ruleSelfExpCS= ruleSelfExpCS EOF ;
+    public final EObject entryRuleSelfExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSelfExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1254:50: (iv_ruleSelfExpCS= ruleSelfExpCS EOF )
+            // InternalMiniOCLCS.g:1255:2: iv_ruleSelfExpCS= ruleSelfExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getSelfExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleSelfExpCS=ruleSelfExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleSelfExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSelfExpCS"
+
+
+    // $ANTLR start "ruleSelfExpCS"
+    // InternalMiniOCLCS.g:1261:1: ruleSelfExpCS returns [EObject current=null] : ( () otherlv_1= 'self' ) ;
+    public final EObject ruleSelfExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1267:2: ( ( () otherlv_1= 'self' ) )
+            // InternalMiniOCLCS.g:1268:2: ( () otherlv_1= 'self' )
+            {
+            // InternalMiniOCLCS.g:1268:2: ( () otherlv_1= 'self' )
+            // InternalMiniOCLCS.g:1269:3: () otherlv_1= 'self'
+            {
+            // InternalMiniOCLCS.g:1269:3: ()
+            // InternalMiniOCLCS.g:1270:4: 
+            {
+            if ( state.backtracking==0 ) {
+
+              				/* */
+              			
+            }
+            if ( state.backtracking==0 ) {
+
+              				current = forceCreateModelElement(
+              					grammarAccess.getSelfExpCSAccess().getSelfExpCSAction_0(),
+              					current);
+              			
+            }
+
+            }
+
+            otherlv_1=(Token)match(input,37,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getSelfExpCSAccess().getSelfKeyword_1());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSelfExpCS"
+
+
+    // $ANTLR start "entryRuleNavigationExpCS"
+    // InternalMiniOCLCS.g:1287:1: entryRuleNavigationExpCS returns [EObject current=null] : iv_ruleNavigationExpCS= ruleNavigationExpCS EOF ;
+    public final EObject entryRuleNavigationExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleNavigationExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1287:56: (iv_ruleNavigationExpCS= ruleNavigationExpCS EOF )
+            // InternalMiniOCLCS.g:1288:2: iv_ruleNavigationExpCS= ruleNavigationExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getNavigationExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleNavigationExpCS=ruleNavigationExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleNavigationExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleNavigationExpCS"
+
+
+    // $ANTLR start "ruleNavigationExpCS"
+    // InternalMiniOCLCS.g:1294:1: ruleNavigationExpCS returns [EObject current=null] : (this_LoopExpCS_0= ruleLoopExpCS | this_NameExpCS_1= ruleNameExpCS ) ;
+    public final EObject ruleNavigationExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_LoopExpCS_0 = null;
+
+        EObject this_NameExpCS_1 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1300:2: ( (this_LoopExpCS_0= ruleLoopExpCS | this_NameExpCS_1= ruleNameExpCS ) )
+            // InternalMiniOCLCS.g:1301:2: (this_LoopExpCS_0= ruleLoopExpCS | this_NameExpCS_1= ruleNameExpCS )
+            {
+            // InternalMiniOCLCS.g:1301:2: (this_LoopExpCS_0= ruleLoopExpCS | this_NameExpCS_1= ruleNameExpCS )
+            int alt18=2;
+            int LA18_0 = input.LA(1);
+
+            if ( (LA18_0==38||LA18_0==40) ) {
+                alt18=1;
+            }
+            else if ( (LA18_0==RULE_ID) ) {
+                alt18=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return current;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 18, 0, input);
+
+                throw nvae;
+            }
+            switch (alt18) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1302:3: this_LoopExpCS_0= ruleLoopExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getNavigationExpCSAccess().getLoopExpCSParserRuleCall_0());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_LoopExpCS_0=ruleLoopExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_LoopExpCS_0;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1314:3: this_NameExpCS_1= ruleNameExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getNavigationExpCSAccess().getNameExpCSParserRuleCall_1());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_NameExpCS_1=ruleNameExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_NameExpCS_1;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleNavigationExpCS"
+
+
+    // $ANTLR start "entryRuleLoopExpCS"
+    // InternalMiniOCLCS.g:1329:1: entryRuleLoopExpCS returns [EObject current=null] : iv_ruleLoopExpCS= ruleLoopExpCS EOF ;
+    public final EObject entryRuleLoopExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleLoopExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1329:50: (iv_ruleLoopExpCS= ruleLoopExpCS EOF )
+            // InternalMiniOCLCS.g:1330:2: iv_ruleLoopExpCS= ruleLoopExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getLoopExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleLoopExpCS=ruleLoopExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleLoopExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleLoopExpCS"
+
+
+    // $ANTLR start "ruleLoopExpCS"
+    // InternalMiniOCLCS.g:1336:1: ruleLoopExpCS returns [EObject current=null] : (this_CollectExpCS_0= ruleCollectExpCS | this_IterateExpCS_1= ruleIterateExpCS ) ;
+    public final EObject ruleLoopExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_CollectExpCS_0 = null;
+
+        EObject this_IterateExpCS_1 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1342:2: ( (this_CollectExpCS_0= ruleCollectExpCS | this_IterateExpCS_1= ruleIterateExpCS ) )
+            // InternalMiniOCLCS.g:1343:2: (this_CollectExpCS_0= ruleCollectExpCS | this_IterateExpCS_1= ruleIterateExpCS )
+            {
+            // InternalMiniOCLCS.g:1343:2: (this_CollectExpCS_0= ruleCollectExpCS | this_IterateExpCS_1= ruleIterateExpCS )
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==38) ) {
+                alt19=1;
+            }
+            else if ( (LA19_0==40) ) {
+                alt19=2;
+            }
+            else {
+                if (state.backtracking>0) {state.failed=true; return current;}
+                NoViableAltException nvae =
+                    new NoViableAltException("", 19, 0, input);
+
+                throw nvae;
+            }
+            switch (alt19) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1344:3: this_CollectExpCS_0= ruleCollectExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getLoopExpCSAccess().getCollectExpCSParserRuleCall_0());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_CollectExpCS_0=ruleCollectExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_CollectExpCS_0;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 2 :
+                    // InternalMiniOCLCS.g:1356:3: this_IterateExpCS_1= ruleIterateExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getLoopExpCSAccess().getIterateExpCSParserRuleCall_1());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_IterateExpCS_1=ruleIterateExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_IterateExpCS_1;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleLoopExpCS"
+
+
+    // $ANTLR start "entryRuleCollectExpCS"
+    // InternalMiniOCLCS.g:1371:1: entryRuleCollectExpCS returns [EObject current=null] : iv_ruleCollectExpCS= ruleCollectExpCS EOF ;
+    public final EObject entryRuleCollectExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCollectExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1371:53: (iv_ruleCollectExpCS= ruleCollectExpCS EOF )
+            // InternalMiniOCLCS.g:1372:2: iv_ruleCollectExpCS= ruleCollectExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getCollectExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleCollectExpCS=ruleCollectExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleCollectExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCollectExpCS"
+
+
+    // $ANTLR start "ruleCollectExpCS"
+    // InternalMiniOCLCS.g:1378:1: ruleCollectExpCS returns [EObject current=null] : (otherlv_0= 'collect' otherlv_1= '(' ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )? ( (lv_exp_4_0= ruleExpCS ) ) otherlv_5= ')' ) ;
+    public final EObject ruleCollectExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        EObject lv_itVar_2_0 = null;
+
+        EObject lv_exp_4_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1384:2: ( (otherlv_0= 'collect' otherlv_1= '(' ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )? ( (lv_exp_4_0= ruleExpCS ) ) otherlv_5= ')' ) )
+            // InternalMiniOCLCS.g:1385:2: (otherlv_0= 'collect' otherlv_1= '(' ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )? ( (lv_exp_4_0= ruleExpCS ) ) otherlv_5= ')' )
+            {
+            // InternalMiniOCLCS.g:1385:2: (otherlv_0= 'collect' otherlv_1= '(' ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )? ( (lv_exp_4_0= ruleExpCS ) ) otherlv_5= ')' )
+            // InternalMiniOCLCS.g:1386:3: otherlv_0= 'collect' otherlv_1= '(' ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )? ( (lv_exp_4_0= ruleExpCS ) ) otherlv_5= ')'
+            {
+            otherlv_0=(Token)match(input,38,FOLLOW_17); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_0, grammarAccess.getCollectExpCSAccess().getCollectKeyword_0());
+              		
+            }
+            otherlv_1=(Token)match(input,28,FOLLOW_21); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getCollectExpCSAccess().getLeftParenthesisKeyword_1());
+              		
+            }
+            // InternalMiniOCLCS.g:1394:3: ( ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|' )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
+
+            if ( (LA20_0==RULE_ID) ) {
+                int LA20_1 = input.LA(2);
+
+                if ( (LA20_1==17||LA20_1==39) ) {
+                    alt20=1;
+                }
+            }
+            switch (alt20) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1395:4: ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= '|'
+                    {
+                    // InternalMiniOCLCS.g:1395:4: ( (lv_itVar_2_0= ruleIteratorVarCS ) )
+                    // InternalMiniOCLCS.g:1396:5: (lv_itVar_2_0= ruleIteratorVarCS )
+                    {
+                    // InternalMiniOCLCS.g:1396:5: (lv_itVar_2_0= ruleIteratorVarCS )
+                    // InternalMiniOCLCS.g:1397:6: lv_itVar_2_0= ruleIteratorVarCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      						newCompositeNode(grammarAccess.getCollectExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0_0());
+                      					
+                    }
+                    pushFollow(FOLLOW_26);
+                    lv_itVar_2_0=ruleIteratorVarCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElementForParent(grammarAccess.getCollectExpCSRule());
+                      						}
+                      						set(
+                      							current,
+                      							"itVar",
+                      							lv_itVar_2_0,
+                      							"org.eclipse.qvtd.doc.MiniOCLCS.IteratorVarCS");
+                      						afterParserOrEnumRuleCall();
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+                    otherlv_3=(Token)match(input,39,FOLLOW_21); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_3, grammarAccess.getCollectExpCSAccess().getVerticalLineKeyword_2_1());
+                      			
+                    }
+
+                    }
+                    break;
+
+            }
+
+            // InternalMiniOCLCS.g:1419:3: ( (lv_exp_4_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:1420:4: (lv_exp_4_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:1420:4: (lv_exp_4_0= ruleExpCS )
+            // InternalMiniOCLCS.g:1421:5: lv_exp_4_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getCollectExpCSAccess().getExpExpCSParserRuleCall_3_0());
+              				
+            }
+            pushFollow(FOLLOW_27);
+            lv_exp_4_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getCollectExpCSRule());
+              					}
+              					set(
+              						current,
+              						"exp",
+              						lv_exp_4_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_5, grammarAccess.getCollectExpCSAccess().getRightParenthesisKeyword_4());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCollectExpCS"
+
+
+    // $ANTLR start "entryRuleIteratorVarCS"
+    // InternalMiniOCLCS.g:1446:1: entryRuleIteratorVarCS returns [EObject current=null] : iv_ruleIteratorVarCS= ruleIteratorVarCS EOF ;
+    public final EObject entryRuleIteratorVarCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleIteratorVarCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1446:54: (iv_ruleIteratorVarCS= ruleIteratorVarCS EOF )
+            // InternalMiniOCLCS.g:1447:2: iv_ruleIteratorVarCS= ruleIteratorVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getIteratorVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleIteratorVarCS=ruleIteratorVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleIteratorVarCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleIteratorVarCS"
+
+
+    // $ANTLR start "ruleIteratorVarCS"
+    // InternalMiniOCLCS.g:1453:1: ruleIteratorVarCS returns [EObject current=null] : ( ( (lv_itName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )? ) ;
+    public final EObject ruleIteratorVarCS() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_itName_0_0=null;
+        Token otherlv_1=null;
+        EObject lv_itType_2_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1459:2: ( ( ( (lv_itName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )? ) )
+            // InternalMiniOCLCS.g:1460:2: ( ( (lv_itName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )? )
+            {
+            // InternalMiniOCLCS.g:1460:2: ( ( (lv_itName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )? )
+            // InternalMiniOCLCS.g:1461:3: ( (lv_itName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )?
+            {
+            // InternalMiniOCLCS.g:1461:3: ( (lv_itName_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:1462:4: (lv_itName_0_0= RULE_ID )
+            {
+            // InternalMiniOCLCS.g:1462:4: (lv_itName_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:1463:5: lv_itName_0_0= RULE_ID
+            {
+            lv_itName_0_0=(Token)match(input,RULE_ID,FOLLOW_28); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					newLeafNode(lv_itName_0_0, grammarAccess.getIteratorVarCSAccess().getItNameIDTerminalRuleCall_0_0());
+              				
+            }
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElement(grammarAccess.getIteratorVarCSRule());
+              					}
+              					setWithLastConsumed(
+              						current,
+              						"itName",
+              						lv_itName_0_0,
+              						"org.eclipse.xtext.common.Terminals.ID");
+              				
+            }
+
+            }
+
+
+            }
+
+            // InternalMiniOCLCS.g:1479:3: (otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) ) )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==17) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1480:4: otherlv_1= ':' ( (lv_itType_2_0= rulePathNameCS ) )
+                    {
+                    otherlv_1=(Token)match(input,17,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_1, grammarAccess.getIteratorVarCSAccess().getColonKeyword_1_0());
+                      			
+                    }
+                    // InternalMiniOCLCS.g:1484:4: ( (lv_itType_2_0= rulePathNameCS ) )
+                    // InternalMiniOCLCS.g:1485:5: (lv_itType_2_0= rulePathNameCS )
+                    {
+                    // InternalMiniOCLCS.g:1485:5: (lv_itType_2_0= rulePathNameCS )
+                    // InternalMiniOCLCS.g:1486:6: lv_itType_2_0= rulePathNameCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      						newCompositeNode(grammarAccess.getIteratorVarCSAccess().getItTypePathNameCSParserRuleCall_1_1_0());
+                      					
+                    }
+                    pushFollow(FOLLOW_2);
+                    lv_itType_2_0=rulePathNameCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElementForParent(grammarAccess.getIteratorVarCSRule());
+                      						}
+                      						set(
+                      							current,
+                      							"itType",
+                      							lv_itType_2_0,
+                      							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+                      						afterParserOrEnumRuleCall();
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleIteratorVarCS"
+
+
+    // $ANTLR start "entryRuleIterateExpCS"
+    // InternalMiniOCLCS.g:1508:1: entryRuleIterateExpCS returns [EObject current=null] : iv_ruleIterateExpCS= ruleIterateExpCS EOF ;
+    public final EObject entryRuleIterateExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleIterateExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1508:53: (iv_ruleIterateExpCS= ruleIterateExpCS EOF )
+            // InternalMiniOCLCS.g:1509:2: iv_ruleIterateExpCS= ruleIterateExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getIterateExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleIterateExpCS=ruleIterateExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleIterateExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleIterateExpCS"
+
+
+    // $ANTLR start "ruleIterateExpCS"
+    // InternalMiniOCLCS.g:1515:1: ruleIterateExpCS returns [EObject current=null] : (otherlv_0= 'iterate' otherlv_1= '(' ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= ';' ( (lv_accVar_4_0= ruleAccVarCS ) ) otherlv_5= '|' ( (lv_exp_6_0= ruleExpCS ) ) otherlv_7= ')' ) ;
+    public final EObject ruleIterateExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        EObject lv_itVar_2_0 = null;
+
+        EObject lv_accVar_4_0 = null;
+
+        EObject lv_exp_6_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1521:2: ( (otherlv_0= 'iterate' otherlv_1= '(' ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= ';' ( (lv_accVar_4_0= ruleAccVarCS ) ) otherlv_5= '|' ( (lv_exp_6_0= ruleExpCS ) ) otherlv_7= ')' ) )
+            // InternalMiniOCLCS.g:1522:2: (otherlv_0= 'iterate' otherlv_1= '(' ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= ';' ( (lv_accVar_4_0= ruleAccVarCS ) ) otherlv_5= '|' ( (lv_exp_6_0= ruleExpCS ) ) otherlv_7= ')' )
+            {
+            // InternalMiniOCLCS.g:1522:2: (otherlv_0= 'iterate' otherlv_1= '(' ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= ';' ( (lv_accVar_4_0= ruleAccVarCS ) ) otherlv_5= '|' ( (lv_exp_6_0= ruleExpCS ) ) otherlv_7= ')' )
+            // InternalMiniOCLCS.g:1523:3: otherlv_0= 'iterate' otherlv_1= '(' ( (lv_itVar_2_0= ruleIteratorVarCS ) ) otherlv_3= ';' ( (lv_accVar_4_0= ruleAccVarCS ) ) otherlv_5= '|' ( (lv_exp_6_0= ruleExpCS ) ) otherlv_7= ')'
+            {
+            otherlv_0=(Token)match(input,40,FOLLOW_17); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_0, grammarAccess.getIterateExpCSAccess().getIterateKeyword_0());
+              		
+            }
+            otherlv_1=(Token)match(input,28,FOLLOW_4); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getIterateExpCSAccess().getLeftParenthesisKeyword_1());
+              		
+            }
+            // InternalMiniOCLCS.g:1531:3: ( (lv_itVar_2_0= ruleIteratorVarCS ) )
+            // InternalMiniOCLCS.g:1532:4: (lv_itVar_2_0= ruleIteratorVarCS )
+            {
+            // InternalMiniOCLCS.g:1532:4: (lv_itVar_2_0= ruleIteratorVarCS )
+            // InternalMiniOCLCS.g:1533:5: lv_itVar_2_0= ruleIteratorVarCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0());
+              				
+            }
+            pushFollow(FOLLOW_11);
+            lv_itVar_2_0=ruleIteratorVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+              					}
+              					set(
+              						current,
+              						"itVar",
+              						lv_itVar_2_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.IteratorVarCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,18,FOLLOW_4); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_3, grammarAccess.getIterateExpCSAccess().getSemicolonKeyword_3());
+              		
+            }
+            // InternalMiniOCLCS.g:1554:3: ( (lv_accVar_4_0= ruleAccVarCS ) )
+            // InternalMiniOCLCS.g:1555:4: (lv_accVar_4_0= ruleAccVarCS )
+            {
+            // InternalMiniOCLCS.g:1555:4: (lv_accVar_4_0= ruleAccVarCS )
+            // InternalMiniOCLCS.g:1556:5: lv_accVar_4_0= ruleAccVarCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0());
+              				
+            }
+            pushFollow(FOLLOW_26);
+            lv_accVar_4_0=ruleAccVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+              					}
+              					set(
+              						current,
+              						"accVar",
+              						lv_accVar_4_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.AccVarCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,39,FOLLOW_21); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_5, grammarAccess.getIterateExpCSAccess().getVerticalLineKeyword_5());
+              		
+            }
+            // InternalMiniOCLCS.g:1577:3: ( (lv_exp_6_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:1578:4: (lv_exp_6_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:1578:4: (lv_exp_6_0= ruleExpCS )
+            // InternalMiniOCLCS.g:1579:5: lv_exp_6_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0());
+              				
+            }
+            pushFollow(FOLLOW_27);
+            lv_exp_6_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getIterateExpCSRule());
+              					}
+              					set(
+              						current,
+              						"exp",
+              						lv_exp_6_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_7=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_7, grammarAccess.getIterateExpCSAccess().getRightParenthesisKeyword_7());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleIterateExpCS"
+
+
+    // $ANTLR start "entryRuleAccVarCS"
+    // InternalMiniOCLCS.g:1604:1: entryRuleAccVarCS returns [EObject current=null] : iv_ruleAccVarCS= ruleAccVarCS EOF ;
+    public final EObject entryRuleAccVarCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAccVarCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1604:49: (iv_ruleAccVarCS= ruleAccVarCS EOF )
+            // InternalMiniOCLCS.g:1605:2: iv_ruleAccVarCS= ruleAccVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getAccVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleAccVarCS=ruleAccVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleAccVarCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAccVarCS"
+
+
+    // $ANTLR start "ruleAccVarCS"
+    // InternalMiniOCLCS.g:1611:1: ruleAccVarCS returns [EObject current=null] : ( ( (lv_accName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_accInitExp_4_0= ruleExpCS ) ) ) ;
+    public final EObject ruleAccVarCS() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_accName_0_0=null;
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        EObject lv_accType_2_0 = null;
+
+        EObject lv_accInitExp_4_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1617:2: ( ( ( (lv_accName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_accInitExp_4_0= ruleExpCS ) ) ) )
+            // InternalMiniOCLCS.g:1618:2: ( ( (lv_accName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_accInitExp_4_0= ruleExpCS ) ) )
+            {
+            // InternalMiniOCLCS.g:1618:2: ( ( (lv_accName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_accInitExp_4_0= ruleExpCS ) ) )
+            // InternalMiniOCLCS.g:1619:3: ( (lv_accName_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_accInitExp_4_0= ruleExpCS ) )
+            {
+            // InternalMiniOCLCS.g:1619:3: ( (lv_accName_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:1620:4: (lv_accName_0_0= RULE_ID )
+            {
+            // InternalMiniOCLCS.g:1620:4: (lv_accName_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:1621:5: lv_accName_0_0= RULE_ID
+            {
+            lv_accName_0_0=(Token)match(input,RULE_ID,FOLLOW_29); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					newLeafNode(lv_accName_0_0, grammarAccess.getAccVarCSAccess().getAccNameIDTerminalRuleCall_0_0());
+              				
+            }
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElement(grammarAccess.getAccVarCSRule());
+              					}
+              					setWithLastConsumed(
+              						current,
+              						"accName",
+              						lv_accName_0_0,
+              						"org.eclipse.xtext.common.Terminals.ID");
+              				
+            }
+
+            }
+
+
+            }
+
+            // InternalMiniOCLCS.g:1637:3: (otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) ) )?
+            int alt22=2;
+            int LA22_0 = input.LA(1);
+
+            if ( (LA22_0==17) ) {
+                alt22=1;
+            }
+            switch (alt22) {
+                case 1 :
+                    // InternalMiniOCLCS.g:1638:4: otherlv_1= ':' ( (lv_accType_2_0= rulePathNameCS ) )
+                    {
+                    otherlv_1=(Token)match(input,17,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_1, grammarAccess.getAccVarCSAccess().getColonKeyword_1_0());
+                      			
+                    }
+                    // InternalMiniOCLCS.g:1642:4: ( (lv_accType_2_0= rulePathNameCS ) )
+                    // InternalMiniOCLCS.g:1643:5: (lv_accType_2_0= rulePathNameCS )
+                    {
+                    // InternalMiniOCLCS.g:1643:5: (lv_accType_2_0= rulePathNameCS )
+                    // InternalMiniOCLCS.g:1644:6: lv_accType_2_0= rulePathNameCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      						newCompositeNode(grammarAccess.getAccVarCSAccess().getAccTypePathNameCSParserRuleCall_1_1_0());
+                      					
+                    }
+                    pushFollow(FOLLOW_20);
+                    lv_accType_2_0=rulePathNameCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElementForParent(grammarAccess.getAccVarCSRule());
+                      						}
+                      						set(
+                      							current,
+                      							"accType",
+                      							lv_accType_2_0,
+                      							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+                      						afterParserOrEnumRuleCall();
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_3=(Token)match(input,31,FOLLOW_21); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_3, grammarAccess.getAccVarCSAccess().getEqualsSignKeyword_2());
+              		
+            }
+            // InternalMiniOCLCS.g:1666:3: ( (lv_accInitExp_4_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:1667:4: (lv_accInitExp_4_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:1667:4: (lv_accInitExp_4_0= ruleExpCS )
+            // InternalMiniOCLCS.g:1668:5: lv_accInitExp_4_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getAccVarCSAccess().getAccInitExpExpCSParserRuleCall_3_0());
+              				
+            }
+            pushFollow(FOLLOW_2);
+            lv_accInitExp_4_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getAccVarCSRule());
+              					}
+              					set(
+              						current,
+              						"accInitExp",
+              						lv_accInitExp_4_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAccVarCS"
+
+
     // $ANTLR start "entryRuleNameExpCS"
-    // InternalMiniOCLCS.g:971:1: entryRuleNameExpCS returns [EObject current=null] : iv_ruleNameExpCS= ruleNameExpCS EOF ;
+    // InternalMiniOCLCS.g:1689:1: entryRuleNameExpCS returns [EObject current=null] : iv_ruleNameExpCS= ruleNameExpCS EOF ;
     public final EObject entryRuleNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2595,8 +4693,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:971:50: (iv_ruleNameExpCS= ruleNameExpCS EOF )
-            // InternalMiniOCLCS.g:972:2: iv_ruleNameExpCS= ruleNameExpCS EOF
+            // InternalMiniOCLCS.g:1689:50: (iv_ruleNameExpCS= ruleNameExpCS EOF )
+            // InternalMiniOCLCS.g:1690:2: iv_ruleNameExpCS= ruleNameExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNameExpCSRule()); 
@@ -2627,7 +4725,7 @@
 
 
     // $ANTLR start "ruleNameExpCS"
-    // InternalMiniOCLCS.g:978:1: ruleNameExpCS returns [EObject current=null] : ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? ) ;
+    // InternalMiniOCLCS.g:1696:1: ruleNameExpCS returns [EObject current=null] : ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? ) ;
     public final EObject ruleNameExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2640,24 +4738,24 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:984:2: ( ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? ) )
-            // InternalMiniOCLCS.g:985:2: ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? )
+            // InternalMiniOCLCS.g:1702:2: ( ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? ) )
+            // InternalMiniOCLCS.g:1703:2: ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? )
             {
-            // InternalMiniOCLCS.g:985:2: ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? )
-            // InternalMiniOCLCS.g:986:3: ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )?
+            // InternalMiniOCLCS.g:1703:2: ( ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )? )
+            // InternalMiniOCLCS.g:1704:3: ( (lv_expName_0_0= rulePathNameCS ) ) ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )?
             {
-            // InternalMiniOCLCS.g:986:3: ( (lv_expName_0_0= rulePathNameCS ) )
-            // InternalMiniOCLCS.g:987:4: (lv_expName_0_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:1704:3: ( (lv_expName_0_0= rulePathNameCS ) )
+            // InternalMiniOCLCS.g:1705:4: (lv_expName_0_0= rulePathNameCS )
             {
-            // InternalMiniOCLCS.g:987:4: (lv_expName_0_0= rulePathNameCS )
-            // InternalMiniOCLCS.g:988:5: lv_expName_0_0= rulePathNameCS
+            // InternalMiniOCLCS.g:1705:4: (lv_expName_0_0= rulePathNameCS )
+            // InternalMiniOCLCS.g:1706:5: lv_expName_0_0= rulePathNameCS
             {
             if ( state.backtracking==0 ) {
 
               					newCompositeNode(grammarAccess.getNameExpCSAccess().getExpNamePathNameCSParserRuleCall_0_0());
               				
             }
-            pushFollow(FOLLOW_19);
+            pushFollow(FOLLOW_30);
             lv_expName_0_0=rulePathNameCS();
 
             state._fsp--;
@@ -2681,19 +4779,19 @@
 
             }
 
-            // InternalMiniOCLCS.g:1005:3: ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1723:3: ( (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS ) )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
 
-            if ( (LA13_0==20) ) {
-                alt13=1;
+            if ( (LA23_0==28) ) {
+                alt23=1;
             }
-            switch (alt13) {
+            switch (alt23) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1006:4: (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS )
+                    // InternalMiniOCLCS.g:1724:4: (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS )
                     {
-                    // InternalMiniOCLCS.g:1006:4: (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS )
-                    // InternalMiniOCLCS.g:1007:5: lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS
+                    // InternalMiniOCLCS.g:1724:4: (lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS )
+                    // InternalMiniOCLCS.g:1725:5: lv_roundedBrackets_1_0= ruleRoundedBracketClauseCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2752,7 +4850,7 @@
 
 
     // $ANTLR start "entryRuleRoundedBracketClauseCS"
-    // InternalMiniOCLCS.g:1028:1: entryRuleRoundedBracketClauseCS returns [EObject current=null] : iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF ;
+    // InternalMiniOCLCS.g:1746:1: entryRuleRoundedBracketClauseCS returns [EObject current=null] : iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF ;
     public final EObject entryRuleRoundedBracketClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -2760,8 +4858,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1028:63: (iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF )
-            // InternalMiniOCLCS.g:1029:2: iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF
+            // InternalMiniOCLCS.g:1746:63: (iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF )
+            // InternalMiniOCLCS.g:1747:2: iv_ruleRoundedBracketClauseCS= ruleRoundedBracketClauseCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRoundedBracketClauseCSRule()); 
@@ -2792,7 +4890,7 @@
 
 
     // $ANTLR start "ruleRoundedBracketClauseCS"
-    // InternalMiniOCLCS.g:1035:1: ruleRoundedBracketClauseCS returns [EObject current=null] : ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' ) ;
+    // InternalMiniOCLCS.g:1753:1: ruleRoundedBracketClauseCS returns [EObject current=null] : ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' ) ;
     public final EObject ruleRoundedBracketClauseCS() throws RecognitionException {
         EObject current = null;
 
@@ -2808,14 +4906,14 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1041:2: ( ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' ) )
-            // InternalMiniOCLCS.g:1042:2: ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' )
+            // InternalMiniOCLCS.g:1759:2: ( ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' ) )
+            // InternalMiniOCLCS.g:1760:2: ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' )
             {
-            // InternalMiniOCLCS.g:1042:2: ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' )
-            // InternalMiniOCLCS.g:1043:3: () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')'
+            // InternalMiniOCLCS.g:1760:2: ( () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')' )
+            // InternalMiniOCLCS.g:1761:3: () otherlv_1= '(' ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )? otherlv_5= ')'
             {
-            // InternalMiniOCLCS.g:1043:3: ()
-            // InternalMiniOCLCS.g:1044:4: 
+            // InternalMiniOCLCS.g:1761:3: ()
+            // InternalMiniOCLCS.g:1762:4: 
             {
             if ( state.backtracking==0 ) {
 
@@ -2832,35 +4930,35 @@
 
             }
 
-            otherlv_1=(Token)match(input,20,FOLLOW_20); if (state.failed) return current;
+            otherlv_1=(Token)match(input,28,FOLLOW_31); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getRoundedBracketClauseCSAccess().getLeftParenthesisKeyword_1());
               		
             }
-            // InternalMiniOCLCS.g:1057:3: ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )?
-            int alt15=2;
-            int LA15_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1775:3: ( ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )* )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
 
-            if ( ((LA15_0>=RULE_ID && LA15_0<=RULE_STRING)||(LA15_0>=29 && LA15_0<=30)) ) {
-                alt15=1;
+            if ( (LA25_0==RULE_ID||LA25_0==RULE_INT||LA25_0==37||(LA25_0>=41 && LA25_0<=44)||LA25_0==47) ) {
+                alt25=1;
             }
-            switch (alt15) {
+            switch (alt25) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1058:4: ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )*
+                    // InternalMiniOCLCS.g:1776:4: ( (lv_args_2_0= ruleExpCS ) ) (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )*
                     {
-                    // InternalMiniOCLCS.g:1058:4: ( (lv_args_2_0= ruleExpCS ) )
-                    // InternalMiniOCLCS.g:1059:5: (lv_args_2_0= ruleExpCS )
+                    // InternalMiniOCLCS.g:1776:4: ( (lv_args_2_0= ruleExpCS ) )
+                    // InternalMiniOCLCS.g:1777:5: (lv_args_2_0= ruleExpCS )
                     {
-                    // InternalMiniOCLCS.g:1059:5: (lv_args_2_0= ruleExpCS )
-                    // InternalMiniOCLCS.g:1060:6: lv_args_2_0= ruleExpCS
+                    // InternalMiniOCLCS.g:1777:5: (lv_args_2_0= ruleExpCS )
+                    // InternalMiniOCLCS.g:1778:6: lv_args_2_0= ruleExpCS
                     {
                     if ( state.backtracking==0 ) {
 
                       						newCompositeNode(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_0_0());
                       					
                     }
-                    pushFollow(FOLLOW_13);
+                    pushFollow(FOLLOW_19);
                     lv_args_2_0=ruleExpCS();
 
                     state._fsp--;
@@ -2884,39 +4982,39 @@
 
                     }
 
-                    // InternalMiniOCLCS.g:1077:4: (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )*
-                    loop14:
+                    // InternalMiniOCLCS.g:1795:4: (otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) ) )*
+                    loop24:
                     do {
-                        int alt14=2;
-                        int LA14_0 = input.LA(1);
+                        int alt24=2;
+                        int LA24_0 = input.LA(1);
 
-                        if ( (LA14_0==21) ) {
-                            alt14=1;
+                        if ( (LA24_0==29) ) {
+                            alt24=1;
                         }
 
 
-                        switch (alt14) {
+                        switch (alt24) {
                     	case 1 :
-                    	    // InternalMiniOCLCS.g:1078:5: otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) )
+                    	    // InternalMiniOCLCS.g:1796:5: otherlv_3= ',' ( (lv_args_4_0= ruleExpCS ) )
                     	    {
-                    	    otherlv_3=(Token)match(input,21,FOLLOW_15); if (state.failed) return current;
+                    	    otherlv_3=(Token)match(input,29,FOLLOW_21); if (state.failed) return current;
                     	    if ( state.backtracking==0 ) {
 
                     	      					newLeafNode(otherlv_3, grammarAccess.getRoundedBracketClauseCSAccess().getCommaKeyword_2_1_0());
                     	      				
                     	    }
-                    	    // InternalMiniOCLCS.g:1082:5: ( (lv_args_4_0= ruleExpCS ) )
-                    	    // InternalMiniOCLCS.g:1083:6: (lv_args_4_0= ruleExpCS )
+                    	    // InternalMiniOCLCS.g:1800:5: ( (lv_args_4_0= ruleExpCS ) )
+                    	    // InternalMiniOCLCS.g:1801:6: (lv_args_4_0= ruleExpCS )
                     	    {
-                    	    // InternalMiniOCLCS.g:1083:6: (lv_args_4_0= ruleExpCS )
-                    	    // InternalMiniOCLCS.g:1084:7: lv_args_4_0= ruleExpCS
+                    	    // InternalMiniOCLCS.g:1801:6: (lv_args_4_0= ruleExpCS )
+                    	    // InternalMiniOCLCS.g:1802:7: lv_args_4_0= ruleExpCS
                     	    {
                     	    if ( state.backtracking==0 ) {
 
                     	      							newCompositeNode(grammarAccess.getRoundedBracketClauseCSAccess().getArgsExpCSParserRuleCall_2_1_1_0());
                     	      						
                     	    }
-                    	    pushFollow(FOLLOW_13);
+                    	    pushFollow(FOLLOW_19);
                     	    lv_args_4_0=ruleExpCS();
 
                     	    state._fsp--;
@@ -2945,7 +5043,7 @@
                     	    break;
 
                     	default :
-                    	    break loop14;
+                    	    break loop24;
                         }
                     } while (true);
 
@@ -2955,7 +5053,7 @@
 
             }
 
-            otherlv_5=(Token)match(input,22,FOLLOW_2); if (state.failed) return current;
+            otherlv_5=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_5, grammarAccess.getRoundedBracketClauseCSAccess().getRightParenthesisKeyword_3());
@@ -2986,7 +5084,7 @@
 
 
     // $ANTLR start "entryRuleLiteralExpCS"
-    // InternalMiniOCLCS.g:1111:1: entryRuleLiteralExpCS returns [EObject current=null] : iv_ruleLiteralExpCS= ruleLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:1829:1: entryRuleLiteralExpCS returns [EObject current=null] : iv_ruleLiteralExpCS= ruleLiteralExpCS EOF ;
     public final EObject entryRuleLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -2994,8 +5092,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1111:53: (iv_ruleLiteralExpCS= ruleLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:1112:2: iv_ruleLiteralExpCS= ruleLiteralExpCS EOF
+            // InternalMiniOCLCS.g:1829:53: (iv_ruleLiteralExpCS= ruleLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:1830:2: iv_ruleLiteralExpCS= ruleLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getLiteralExpCSRule()); 
@@ -3026,54 +5124,61 @@
 
 
     // $ANTLR start "ruleLiteralExpCS"
-    // InternalMiniOCLCS.g:1118:1: ruleLiteralExpCS returns [EObject current=null] : (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS ) ;
+    // InternalMiniOCLCS.g:1836:1: ruleLiteralExpCS returns [EObject current=null] : (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_BooleanLiteralExpCS_1= ruleBooleanLiteralExpCS | this_NullLiteralExpCS_2= ruleNullLiteralExpCS | this_CollectionLiteralExpCS_3= ruleCollectionLiteralExpCS ) ;
     public final EObject ruleLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
         EObject this_IntLiteralExpCS_0 = null;
 
-        EObject this_StringLiteralExpCS_1 = null;
+        EObject this_BooleanLiteralExpCS_1 = null;
 
-        EObject this_BooleanLiteralExpCS_2 = null;
+        EObject this_NullLiteralExpCS_2 = null;
+
+        EObject this_CollectionLiteralExpCS_3 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1124:2: ( (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS ) )
-            // InternalMiniOCLCS.g:1125:2: (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS )
+            // InternalMiniOCLCS.g:1842:2: ( (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_BooleanLiteralExpCS_1= ruleBooleanLiteralExpCS | this_NullLiteralExpCS_2= ruleNullLiteralExpCS | this_CollectionLiteralExpCS_3= ruleCollectionLiteralExpCS ) )
+            // InternalMiniOCLCS.g:1843:2: (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_BooleanLiteralExpCS_1= ruleBooleanLiteralExpCS | this_NullLiteralExpCS_2= ruleNullLiteralExpCS | this_CollectionLiteralExpCS_3= ruleCollectionLiteralExpCS )
             {
-            // InternalMiniOCLCS.g:1125:2: (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_StringLiteralExpCS_1= ruleStringLiteralExpCS | this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS )
-            int alt16=3;
+            // InternalMiniOCLCS.g:1843:2: (this_IntLiteralExpCS_0= ruleIntLiteralExpCS | this_BooleanLiteralExpCS_1= ruleBooleanLiteralExpCS | this_NullLiteralExpCS_2= ruleNullLiteralExpCS | this_CollectionLiteralExpCS_3= ruleCollectionLiteralExpCS )
+            int alt26=4;
             switch ( input.LA(1) ) {
             case RULE_INT:
                 {
-                alt16=1;
+                alt26=1;
                 }
                 break;
-            case RULE_STRING:
+            case 41:
+            case 42:
                 {
-                alt16=2;
+                alt26=2;
                 }
                 break;
-            case 29:
-            case 30:
+            case 43:
                 {
-                alt16=3;
+                alt26=3;
+                }
+                break;
+            case 47:
+                {
+                alt26=4;
                 }
                 break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 16, 0, input);
+                    new NoViableAltException("", 26, 0, input);
 
                 throw nvae;
             }
 
-            switch (alt16) {
+            switch (alt26) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1126:3: this_IntLiteralExpCS_0= ruleIntLiteralExpCS
+                    // InternalMiniOCLCS.g:1844:3: this_IntLiteralExpCS_0= ruleIntLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3100,7 +5205,7 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:1138:3: this_StringLiteralExpCS_1= ruleStringLiteralExpCS
+                    // InternalMiniOCLCS.g:1856:3: this_BooleanLiteralExpCS_1= ruleBooleanLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3109,17 +5214,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getStringLiteralExpCSParserRuleCall_1());
+                      			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_1());
                       		
                     }
                     pushFollow(FOLLOW_2);
-                    this_StringLiteralExpCS_1=ruleStringLiteralExpCS();
+                    this_BooleanLiteralExpCS_1=ruleBooleanLiteralExpCS();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_StringLiteralExpCS_1;
+                      			current = this_BooleanLiteralExpCS_1;
                       			afterParserOrEnumRuleCall();
                       		
                     }
@@ -3127,7 +5232,7 @@
                     }
                     break;
                 case 3 :
-                    // InternalMiniOCLCS.g:1150:3: this_BooleanLiteralExpCS_2= ruleBooleanLiteralExpCS
+                    // InternalMiniOCLCS.g:1868:3: this_NullLiteralExpCS_2= ruleNullLiteralExpCS
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3136,17 +5241,44 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getBooleanLiteralExpCSParserRuleCall_2());
+                      			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getNullLiteralExpCSParserRuleCall_2());
                       		
                     }
                     pushFollow(FOLLOW_2);
-                    this_BooleanLiteralExpCS_2=ruleBooleanLiteralExpCS();
+                    this_NullLiteralExpCS_2=ruleNullLiteralExpCS();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_BooleanLiteralExpCS_2;
+                      			current = this_NullLiteralExpCS_2;
+                      			afterParserOrEnumRuleCall();
+                      		
+                    }
+
+                    }
+                    break;
+                case 4 :
+                    // InternalMiniOCLCS.g:1880:3: this_CollectionLiteralExpCS_3= ruleCollectionLiteralExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+                      		
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getLiteralExpCSAccess().getCollectionLiteralExpCSParserRuleCall_3());
+                      		
+                    }
+                    pushFollow(FOLLOW_2);
+                    this_CollectionLiteralExpCS_3=ruleCollectionLiteralExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_CollectionLiteralExpCS_3;
                       			afterParserOrEnumRuleCall();
                       		
                     }
@@ -3178,7 +5310,7 @@
 
 
     // $ANTLR start "entryRuleIntLiteralExpCS"
-    // InternalMiniOCLCS.g:1165:1: entryRuleIntLiteralExpCS returns [EObject current=null] : iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:1895:1: entryRuleIntLiteralExpCS returns [EObject current=null] : iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF ;
     public final EObject entryRuleIntLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -3186,8 +5318,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1165:56: (iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:1166:2: iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF
+            // InternalMiniOCLCS.g:1895:56: (iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:1896:2: iv_ruleIntLiteralExpCS= ruleIntLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getIntLiteralExpCSRule()); 
@@ -3218,7 +5350,7 @@
 
 
     // $ANTLR start "ruleIntLiteralExpCS"
-    // InternalMiniOCLCS.g:1172:1: ruleIntLiteralExpCS returns [EObject current=null] : ( (lv_intSymbol_0_0= RULE_INT ) ) ;
+    // InternalMiniOCLCS.g:1902:1: ruleIntLiteralExpCS returns [EObject current=null] : ( (lv_intSymbol_0_0= RULE_INT ) ) ;
     public final EObject ruleIntLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -3228,14 +5360,14 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1178:2: ( ( (lv_intSymbol_0_0= RULE_INT ) ) )
-            // InternalMiniOCLCS.g:1179:2: ( (lv_intSymbol_0_0= RULE_INT ) )
+            // InternalMiniOCLCS.g:1908:2: ( ( (lv_intSymbol_0_0= RULE_INT ) ) )
+            // InternalMiniOCLCS.g:1909:2: ( (lv_intSymbol_0_0= RULE_INT ) )
             {
-            // InternalMiniOCLCS.g:1179:2: ( (lv_intSymbol_0_0= RULE_INT ) )
-            // InternalMiniOCLCS.g:1180:3: (lv_intSymbol_0_0= RULE_INT )
+            // InternalMiniOCLCS.g:1909:2: ( (lv_intSymbol_0_0= RULE_INT ) )
+            // InternalMiniOCLCS.g:1910:3: (lv_intSymbol_0_0= RULE_INT )
             {
-            // InternalMiniOCLCS.g:1180:3: (lv_intSymbol_0_0= RULE_INT )
-            // InternalMiniOCLCS.g:1181:4: lv_intSymbol_0_0= RULE_INT
+            // InternalMiniOCLCS.g:1910:3: (lv_intSymbol_0_0= RULE_INT )
+            // InternalMiniOCLCS.g:1911:4: lv_intSymbol_0_0= RULE_INT
             {
             lv_intSymbol_0_0=(Token)match(input,RULE_INT,FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -3282,113 +5414,8 @@
     // $ANTLR end "ruleIntLiteralExpCS"
 
 
-    // $ANTLR start "entryRuleStringLiteralExpCS"
-    // InternalMiniOCLCS.g:1200:1: entryRuleStringLiteralExpCS returns [EObject current=null] : iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF ;
-    public final EObject entryRuleStringLiteralExpCS() throws RecognitionException {
-        EObject current = null;
-
-        EObject iv_ruleStringLiteralExpCS = null;
-
-
-        try {
-            // InternalMiniOCLCS.g:1200:59: (iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:1201:2: iv_ruleStringLiteralExpCS= ruleStringLiteralExpCS EOF
-            {
-            if ( state.backtracking==0 ) {
-               newCompositeNode(grammarAccess.getStringLiteralExpCSRule()); 
-            }
-            pushFollow(FOLLOW_1);
-            iv_ruleStringLiteralExpCS=ruleStringLiteralExpCS();
-
-            state._fsp--;
-            if (state.failed) return current;
-            if ( state.backtracking==0 ) {
-               current =iv_ruleStringLiteralExpCS; 
-            }
-            match(input,EOF,FOLLOW_2); if (state.failed) return current;
-
-            }
-
-        }
-
-            catch (RecognitionException re) {
-                recover(input,re);
-                appendSkippedTokens();
-            }
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "entryRuleStringLiteralExpCS"
-
-
-    // $ANTLR start "ruleStringLiteralExpCS"
-    // InternalMiniOCLCS.g:1207:1: ruleStringLiteralExpCS returns [EObject current=null] : ( (lv_stringSymbol_0_0= RULE_STRING ) ) ;
-    public final EObject ruleStringLiteralExpCS() throws RecognitionException {
-        EObject current = null;
-
-        Token lv_stringSymbol_0_0=null;
-
-
-        	enterRule();
-
-        try {
-            // InternalMiniOCLCS.g:1213:2: ( ( (lv_stringSymbol_0_0= RULE_STRING ) ) )
-            // InternalMiniOCLCS.g:1214:2: ( (lv_stringSymbol_0_0= RULE_STRING ) )
-            {
-            // InternalMiniOCLCS.g:1214:2: ( (lv_stringSymbol_0_0= RULE_STRING ) )
-            // InternalMiniOCLCS.g:1215:3: (lv_stringSymbol_0_0= RULE_STRING )
-            {
-            // InternalMiniOCLCS.g:1215:3: (lv_stringSymbol_0_0= RULE_STRING )
-            // InternalMiniOCLCS.g:1216:4: lv_stringSymbol_0_0= RULE_STRING
-            {
-            lv_stringSymbol_0_0=(Token)match(input,RULE_STRING,FOLLOW_2); if (state.failed) return current;
-            if ( state.backtracking==0 ) {
-
-              				newLeafNode(lv_stringSymbol_0_0, grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0());
-              			
-            }
-            if ( state.backtracking==0 ) {
-
-              				if (current==null) {
-              					current = createModelElement(grammarAccess.getStringLiteralExpCSRule());
-              				}
-              				setWithLastConsumed(
-              					current,
-              					"stringSymbol",
-              					lv_stringSymbol_0_0,
-              					"org.eclipse.xtext.common.Terminals.STRING");
-              			
-            }
-
-            }
-
-
-            }
-
-
-            }
-
-            if ( state.backtracking==0 ) {
-
-              	leaveRule();
-
-            }
-        }
-
-            catch (RecognitionException re) {
-                recover(input,re);
-                appendSkippedTokens();
-            }
-        finally {
-        }
-        return current;
-    }
-    // $ANTLR end "ruleStringLiteralExpCS"
-
-
     // $ANTLR start "entryRuleBooleanLiteralExpCS"
-    // InternalMiniOCLCS.g:1235:1: entryRuleBooleanLiteralExpCS returns [EObject current=null] : iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF ;
+    // InternalMiniOCLCS.g:1930:1: entryRuleBooleanLiteralExpCS returns [EObject current=null] : iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF ;
     public final EObject entryRuleBooleanLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -3396,8 +5423,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1235:60: (iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF )
-            // InternalMiniOCLCS.g:1236:2: iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF
+            // InternalMiniOCLCS.g:1930:60: (iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:1931:2: iv_ruleBooleanLiteralExpCS= ruleBooleanLiteralExpCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getBooleanLiteralExpCSRule()); 
@@ -3428,7 +5455,7 @@
 
 
     // $ANTLR start "ruleBooleanLiteralExpCS"
-    // InternalMiniOCLCS.g:1242:1: ruleBooleanLiteralExpCS returns [EObject current=null] : ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) ) ;
+    // InternalMiniOCLCS.g:1937:1: ruleBooleanLiteralExpCS returns [EObject current=null] : ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) ) ;
     public final EObject ruleBooleanLiteralExpCS() throws RecognitionException {
         EObject current = null;
 
@@ -3439,14 +5466,14 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1248:2: ( ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) ) )
-            // InternalMiniOCLCS.g:1249:2: ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) )
+            // InternalMiniOCLCS.g:1943:2: ( ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) ) )
+            // InternalMiniOCLCS.g:1944:2: ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) )
             {
-            // InternalMiniOCLCS.g:1249:2: ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) )
-            // InternalMiniOCLCS.g:1250:3: () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' )
+            // InternalMiniOCLCS.g:1944:2: ( () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' ) )
+            // InternalMiniOCLCS.g:1945:3: () ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' )
             {
-            // InternalMiniOCLCS.g:1250:3: ()
-            // InternalMiniOCLCS.g:1251:4: 
+            // InternalMiniOCLCS.g:1945:3: ()
+            // InternalMiniOCLCS.g:1946:4: 
             {
             if ( state.backtracking==0 ) {
 
@@ -3463,34 +5490,34 @@
 
             }
 
-            // InternalMiniOCLCS.g:1260:3: ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' )
-            int alt17=2;
-            int LA17_0 = input.LA(1);
+            // InternalMiniOCLCS.g:1955:3: ( ( (lv_boolSymbol_1_0= 'true' ) ) | otherlv_2= 'false' )
+            int alt27=2;
+            int LA27_0 = input.LA(1);
 
-            if ( (LA17_0==29) ) {
-                alt17=1;
+            if ( (LA27_0==41) ) {
+                alt27=1;
             }
-            else if ( (LA17_0==30) ) {
-                alt17=2;
+            else if ( (LA27_0==42) ) {
+                alt27=2;
             }
             else {
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
-                    new NoViableAltException("", 17, 0, input);
+                    new NoViableAltException("", 27, 0, input);
 
                 throw nvae;
             }
-            switch (alt17) {
+            switch (alt27) {
                 case 1 :
-                    // InternalMiniOCLCS.g:1261:4: ( (lv_boolSymbol_1_0= 'true' ) )
+                    // InternalMiniOCLCS.g:1956:4: ( (lv_boolSymbol_1_0= 'true' ) )
                     {
-                    // InternalMiniOCLCS.g:1261:4: ( (lv_boolSymbol_1_0= 'true' ) )
-                    // InternalMiniOCLCS.g:1262:5: (lv_boolSymbol_1_0= 'true' )
+                    // InternalMiniOCLCS.g:1956:4: ( (lv_boolSymbol_1_0= 'true' ) )
+                    // InternalMiniOCLCS.g:1957:5: (lv_boolSymbol_1_0= 'true' )
                     {
-                    // InternalMiniOCLCS.g:1262:5: (lv_boolSymbol_1_0= 'true' )
-                    // InternalMiniOCLCS.g:1263:6: lv_boolSymbol_1_0= 'true'
+                    // InternalMiniOCLCS.g:1957:5: (lv_boolSymbol_1_0= 'true' )
+                    // InternalMiniOCLCS.g:1958:6: lv_boolSymbol_1_0= 'true'
                     {
-                    lv_boolSymbol_1_0=(Token)match(input,29,FOLLOW_2); if (state.failed) return current;
+                    lv_boolSymbol_1_0=(Token)match(input,41,FOLLOW_2); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       						newLeafNode(lv_boolSymbol_1_0, grammarAccess.getBooleanLiteralExpCSAccess().getBoolSymbolTrueKeyword_1_0_0());
@@ -3514,9 +5541,9 @@
                     }
                     break;
                 case 2 :
-                    // InternalMiniOCLCS.g:1276:4: otherlv_2= 'false'
+                    // InternalMiniOCLCS.g:1971:4: otherlv_2= 'false'
                     {
-                    otherlv_2=(Token)match(input,30,FOLLOW_2); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,42,FOLLOW_2); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       				newLeafNode(otherlv_2, grammarAccess.getBooleanLiteralExpCSAccess().getFalseKeyword_1_1());
@@ -3552,8 +5579,929 @@
     // $ANTLR end "ruleBooleanLiteralExpCS"
 
 
+    // $ANTLR start "entryRuleNullLiteralExpCS"
+    // InternalMiniOCLCS.g:1980:1: entryRuleNullLiteralExpCS returns [EObject current=null] : iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF ;
+    public final EObject entryRuleNullLiteralExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleNullLiteralExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:1980:57: (iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:1981:2: iv_ruleNullLiteralExpCS= ruleNullLiteralExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getNullLiteralExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleNullLiteralExpCS=ruleNullLiteralExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleNullLiteralExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleNullLiteralExpCS"
+
+
+    // $ANTLR start "ruleNullLiteralExpCS"
+    // InternalMiniOCLCS.g:1987:1: ruleNullLiteralExpCS returns [EObject current=null] : ( () otherlv_1= 'null' ) ;
+    public final EObject ruleNullLiteralExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:1993:2: ( ( () otherlv_1= 'null' ) )
+            // InternalMiniOCLCS.g:1994:2: ( () otherlv_1= 'null' )
+            {
+            // InternalMiniOCLCS.g:1994:2: ( () otherlv_1= 'null' )
+            // InternalMiniOCLCS.g:1995:3: () otherlv_1= 'null'
+            {
+            // InternalMiniOCLCS.g:1995:3: ()
+            // InternalMiniOCLCS.g:1996:4: 
+            {
+            if ( state.backtracking==0 ) {
+
+              				/* */
+              			
+            }
+            if ( state.backtracking==0 ) {
+
+              				current = forceCreateModelElement(
+              					grammarAccess.getNullLiteralExpCSAccess().getNullLiteralExpCSAction_0(),
+              					current);
+              			
+            }
+
+            }
+
+            otherlv_1=(Token)match(input,43,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getNullLiteralExpCSAccess().getNullKeyword_1());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleNullLiteralExpCS"
+
+
+    // $ANTLR start "entryRuleCollectionLiteralExpCS"
+    // InternalMiniOCLCS.g:2013:1: entryRuleCollectionLiteralExpCS returns [EObject current=null] : iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF ;
+    public final EObject entryRuleCollectionLiteralExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCollectionLiteralExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:2013:63: (iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF )
+            // InternalMiniOCLCS.g:2014:2: iv_ruleCollectionLiteralExpCS= ruleCollectionLiteralExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getCollectionLiteralExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleCollectionLiteralExpCS=ruleCollectionLiteralExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleCollectionLiteralExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCollectionLiteralExpCS"
+
+
+    // $ANTLR start "ruleCollectionLiteralExpCS"
+    // InternalMiniOCLCS.g:2020:1: ruleCollectionLiteralExpCS returns [EObject current=null] : ( ( (lv_kind_0_0= ruleCollectionKindCS ) ) otherlv_1= '{' ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )* otherlv_3= '}' ) ;
+    public final EObject ruleCollectionLiteralExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Enumerator lv_kind_0_0 = null;
+
+        EObject lv_parts_2_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:2026:2: ( ( ( (lv_kind_0_0= ruleCollectionKindCS ) ) otherlv_1= '{' ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )* otherlv_3= '}' ) )
+            // InternalMiniOCLCS.g:2027:2: ( ( (lv_kind_0_0= ruleCollectionKindCS ) ) otherlv_1= '{' ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )* otherlv_3= '}' )
+            {
+            // InternalMiniOCLCS.g:2027:2: ( ( (lv_kind_0_0= ruleCollectionKindCS ) ) otherlv_1= '{' ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )* otherlv_3= '}' )
+            // InternalMiniOCLCS.g:2028:3: ( (lv_kind_0_0= ruleCollectionKindCS ) ) otherlv_1= '{' ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )* otherlv_3= '}'
+            {
+            // InternalMiniOCLCS.g:2028:3: ( (lv_kind_0_0= ruleCollectionKindCS ) )
+            // InternalMiniOCLCS.g:2029:4: (lv_kind_0_0= ruleCollectionKindCS )
+            {
+            // InternalMiniOCLCS.g:2029:4: (lv_kind_0_0= ruleCollectionKindCS )
+            // InternalMiniOCLCS.g:2030:5: lv_kind_0_0= ruleCollectionKindCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getKindCollectionKindCSEnumRuleCall_0_0());
+              				
+            }
+            pushFollow(FOLLOW_5);
+            lv_kind_0_0=ruleCollectionKindCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getCollectionLiteralExpCSRule());
+              					}
+              					set(
+              						current,
+              						"kind",
+              						lv_kind_0_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.CollectionKindCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            otherlv_1=(Token)match(input,12,FOLLOW_32); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralExpCSAccess().getLeftCurlyBracketKeyword_1());
+              		
+            }
+            // InternalMiniOCLCS.g:2051:3: ( (lv_parts_2_0= ruleCollectionLiteralPartCS ) )*
+            loop28:
+            do {
+                int alt28=2;
+                int LA28_0 = input.LA(1);
+
+                if ( (LA28_0==RULE_ID||LA28_0==RULE_INT||LA28_0==37||(LA28_0>=41 && LA28_0<=44)||LA28_0==47) ) {
+                    alt28=1;
+                }
+
+
+                switch (alt28) {
+            	case 1 :
+            	    // InternalMiniOCLCS.g:2052:4: (lv_parts_2_0= ruleCollectionLiteralPartCS )
+            	    {
+            	    // InternalMiniOCLCS.g:2052:4: (lv_parts_2_0= ruleCollectionLiteralPartCS )
+            	    // InternalMiniOCLCS.g:2053:5: lv_parts_2_0= ruleCollectionLiteralPartCS
+            	    {
+            	    if ( state.backtracking==0 ) {
+
+            	      					newCompositeNode(grammarAccess.getCollectionLiteralExpCSAccess().getPartsCollectionLiteralPartCSParserRuleCall_2_0());
+            	      				
+            	    }
+            	    pushFollow(FOLLOW_32);
+            	    lv_parts_2_0=ruleCollectionLiteralPartCS();
+
+            	    state._fsp--;
+            	    if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
+
+            	      					if (current==null) {
+            	      						current = createModelElementForParent(grammarAccess.getCollectionLiteralExpCSRule());
+            	      					}
+            	      					add(
+            	      						current,
+            	      						"parts",
+            	      						lv_parts_2_0,
+            	      						"org.eclipse.qvtd.doc.MiniOCLCS.CollectionLiteralPartCS");
+            	      					afterParserOrEnumRuleCall();
+            	      				
+            	    }
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop28;
+                }
+            } while (true);
+
+            otherlv_3=(Token)match(input,13,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_3, grammarAccess.getCollectionLiteralExpCSAccess().getRightCurlyBracketKeyword_3());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCollectionLiteralExpCS"
+
+
+    // $ANTLR start "entryRuleCollectionLiteralPartCS"
+    // InternalMiniOCLCS.g:2078:1: entryRuleCollectionLiteralPartCS returns [EObject current=null] : iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF ;
+    public final EObject entryRuleCollectionLiteralPartCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCollectionLiteralPartCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:2078:64: (iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF )
+            // InternalMiniOCLCS.g:2079:2: iv_ruleCollectionLiteralPartCS= ruleCollectionLiteralPartCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getCollectionLiteralPartCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleCollectionLiteralPartCS=ruleCollectionLiteralPartCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleCollectionLiteralPartCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCollectionLiteralPartCS"
+
+
+    // $ANTLR start "ruleCollectionLiteralPartCS"
+    // InternalMiniOCLCS.g:2085:1: ruleCollectionLiteralPartCS returns [EObject current=null] : ( ( (lv_first_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )? ) ;
+    public final EObject ruleCollectionLiteralPartCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        EObject lv_first_0_0 = null;
+
+        EObject lv_last_2_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:2091:2: ( ( ( (lv_first_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )? ) )
+            // InternalMiniOCLCS.g:2092:2: ( ( (lv_first_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )? )
+            {
+            // InternalMiniOCLCS.g:2092:2: ( ( (lv_first_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )? )
+            // InternalMiniOCLCS.g:2093:3: ( (lv_first_0_0= ruleExpCS ) ) (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )?
+            {
+            // InternalMiniOCLCS.g:2093:3: ( (lv_first_0_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:2094:4: (lv_first_0_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:2094:4: (lv_first_0_0= ruleExpCS )
+            // InternalMiniOCLCS.g:2095:5: lv_first_0_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getFirstExpCSParserRuleCall_0_0());
+              				
+            }
+            pushFollow(FOLLOW_33);
+            lv_first_0_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getCollectionLiteralPartCSRule());
+              					}
+              					set(
+              						current,
+              						"first",
+              						lv_first_0_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            // InternalMiniOCLCS.g:2112:3: (otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) ) )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
+
+            if ( (LA29_0==25) ) {
+                alt29=1;
+            }
+            switch (alt29) {
+                case 1 :
+                    // InternalMiniOCLCS.g:2113:4: otherlv_1= '..' ( (lv_last_2_0= ruleExpCS ) )
+                    {
+                    otherlv_1=(Token)match(input,25,FOLLOW_21); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_1, grammarAccess.getCollectionLiteralPartCSAccess().getFullStopFullStopKeyword_1_0());
+                      			
+                    }
+                    // InternalMiniOCLCS.g:2117:4: ( (lv_last_2_0= ruleExpCS ) )
+                    // InternalMiniOCLCS.g:2118:5: (lv_last_2_0= ruleExpCS )
+                    {
+                    // InternalMiniOCLCS.g:2118:5: (lv_last_2_0= ruleExpCS )
+                    // InternalMiniOCLCS.g:2119:6: lv_last_2_0= ruleExpCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      						newCompositeNode(grammarAccess.getCollectionLiteralPartCSAccess().getLastExpCSParserRuleCall_1_1_0());
+                      					
+                    }
+                    pushFollow(FOLLOW_2);
+                    lv_last_2_0=ruleExpCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElementForParent(grammarAccess.getCollectionLiteralPartCSRule());
+                      						}
+                      						set(
+                      							current,
+                      							"last",
+                      							lv_last_2_0,
+                      							"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+                      						afterParserOrEnumRuleCall();
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCollectionLiteralPartCS"
+
+
+    // $ANTLR start "entryRuleLetExpCS"
+    // InternalMiniOCLCS.g:2141:1: entryRuleLetExpCS returns [EObject current=null] : iv_ruleLetExpCS= ruleLetExpCS EOF ;
+    public final EObject entryRuleLetExpCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleLetExpCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:2141:49: (iv_ruleLetExpCS= ruleLetExpCS EOF )
+            // InternalMiniOCLCS.g:2142:2: iv_ruleLetExpCS= ruleLetExpCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getLetExpCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleLetExpCS=ruleLetExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleLetExpCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleLetExpCS"
+
+
+    // $ANTLR start "ruleLetExpCS"
+    // InternalMiniOCLCS.g:2148:1: ruleLetExpCS returns [EObject current=null] : (otherlv_0= 'let' ( (lv_letVars_1_0= ruleLetVarCS ) ) (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )* otherlv_4= 'in' ( (lv_inExp_5_0= ruleExpCS ) ) ) ;
+    public final EObject ruleLetExpCS() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject lv_letVars_1_0 = null;
+
+        EObject lv_letVars_3_0 = null;
+
+        EObject lv_inExp_5_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:2154:2: ( (otherlv_0= 'let' ( (lv_letVars_1_0= ruleLetVarCS ) ) (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )* otherlv_4= 'in' ( (lv_inExp_5_0= ruleExpCS ) ) ) )
+            // InternalMiniOCLCS.g:2155:2: (otherlv_0= 'let' ( (lv_letVars_1_0= ruleLetVarCS ) ) (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )* otherlv_4= 'in' ( (lv_inExp_5_0= ruleExpCS ) ) )
+            {
+            // InternalMiniOCLCS.g:2155:2: (otherlv_0= 'let' ( (lv_letVars_1_0= ruleLetVarCS ) ) (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )* otherlv_4= 'in' ( (lv_inExp_5_0= ruleExpCS ) ) )
+            // InternalMiniOCLCS.g:2156:3: otherlv_0= 'let' ( (lv_letVars_1_0= ruleLetVarCS ) ) (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )* otherlv_4= 'in' ( (lv_inExp_5_0= ruleExpCS ) )
+            {
+            otherlv_0=(Token)match(input,44,FOLLOW_4); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_0, grammarAccess.getLetExpCSAccess().getLetKeyword_0());
+              		
+            }
+            // InternalMiniOCLCS.g:2160:3: ( (lv_letVars_1_0= ruleLetVarCS ) )
+            // InternalMiniOCLCS.g:2161:4: (lv_letVars_1_0= ruleLetVarCS )
+            {
+            // InternalMiniOCLCS.g:2161:4: (lv_letVars_1_0= ruleLetVarCS )
+            // InternalMiniOCLCS.g:2162:5: lv_letVars_1_0= ruleLetVarCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_1_0());
+              				
+            }
+            pushFollow(FOLLOW_34);
+            lv_letVars_1_0=ruleLetVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+              					}
+              					add(
+              						current,
+              						"letVars",
+              						lv_letVars_1_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.LetVarCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+            // InternalMiniOCLCS.g:2179:3: (otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) ) )*
+            loop30:
+            do {
+                int alt30=2;
+                int LA30_0 = input.LA(1);
+
+                if ( (LA30_0==29) ) {
+                    alt30=1;
+                }
+
+
+                switch (alt30) {
+            	case 1 :
+            	    // InternalMiniOCLCS.g:2180:4: otherlv_2= ',' ( (lv_letVars_3_0= ruleLetVarCS ) )
+            	    {
+            	    otherlv_2=(Token)match(input,29,FOLLOW_4); if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
+
+            	      				newLeafNode(otherlv_2, grammarAccess.getLetExpCSAccess().getCommaKeyword_2_0());
+            	      			
+            	    }
+            	    // InternalMiniOCLCS.g:2184:4: ( (lv_letVars_3_0= ruleLetVarCS ) )
+            	    // InternalMiniOCLCS.g:2185:5: (lv_letVars_3_0= ruleLetVarCS )
+            	    {
+            	    // InternalMiniOCLCS.g:2185:5: (lv_letVars_3_0= ruleLetVarCS )
+            	    // InternalMiniOCLCS.g:2186:6: lv_letVars_3_0= ruleLetVarCS
+            	    {
+            	    if ( state.backtracking==0 ) {
+
+            	      						newCompositeNode(grammarAccess.getLetExpCSAccess().getLetVarsLetVarCSParserRuleCall_2_1_0());
+            	      					
+            	    }
+            	    pushFollow(FOLLOW_34);
+            	    lv_letVars_3_0=ruleLetVarCS();
+
+            	    state._fsp--;
+            	    if (state.failed) return current;
+            	    if ( state.backtracking==0 ) {
+
+            	      						if (current==null) {
+            	      							current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+            	      						}
+            	      						add(
+            	      							current,
+            	      							"letVars",
+            	      							lv_letVars_3_0,
+            	      							"org.eclipse.qvtd.doc.MiniOCLCS.LetVarCS");
+            	      						afterParserOrEnumRuleCall();
+            	      					
+            	    }
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop30;
+                }
+            } while (true);
+
+            otherlv_4=(Token)match(input,45,FOLLOW_21); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_4, grammarAccess.getLetExpCSAccess().getInKeyword_3());
+              		
+            }
+            // InternalMiniOCLCS.g:2208:3: ( (lv_inExp_5_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:2209:4: (lv_inExp_5_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:2209:4: (lv_inExp_5_0= ruleExpCS )
+            // InternalMiniOCLCS.g:2210:5: lv_inExp_5_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getLetExpCSAccess().getInExpExpCSParserRuleCall_4_0());
+              				
+            }
+            pushFollow(FOLLOW_2);
+            lv_inExp_5_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getLetExpCSRule());
+              					}
+              					set(
+              						current,
+              						"inExp",
+              						lv_inExp_5_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleLetExpCS"
+
+
+    // $ANTLR start "entryRuleLetVarCS"
+    // InternalMiniOCLCS.g:2231:1: entryRuleLetVarCS returns [EObject current=null] : iv_ruleLetVarCS= ruleLetVarCS EOF ;
+    public final EObject entryRuleLetVarCS() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleLetVarCS = null;
+
+
+        try {
+            // InternalMiniOCLCS.g:2231:49: (iv_ruleLetVarCS= ruleLetVarCS EOF )
+            // InternalMiniOCLCS.g:2232:2: iv_ruleLetVarCS= ruleLetVarCS EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getLetVarCSRule()); 
+            }
+            pushFollow(FOLLOW_1);
+            iv_ruleLetVarCS=ruleLetVarCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleLetVarCS; 
+            }
+            match(input,EOF,FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleLetVarCS"
+
+
+    // $ANTLR start "ruleLetVarCS"
+    // InternalMiniOCLCS.g:2238:1: ruleLetVarCS returns [EObject current=null] : ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_initExp_4_0= ruleExpCS ) ) ) ;
+    public final EObject ruleLetVarCS() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_name_0_0=null;
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        EObject lv_typeRef_2_0 = null;
+
+        EObject lv_initExp_4_0 = null;
+
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:2244:2: ( ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_initExp_4_0= ruleExpCS ) ) ) )
+            // InternalMiniOCLCS.g:2245:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_initExp_4_0= ruleExpCS ) ) )
+            {
+            // InternalMiniOCLCS.g:2245:2: ( ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_initExp_4_0= ruleExpCS ) ) )
+            // InternalMiniOCLCS.g:2246:3: ( (lv_name_0_0= RULE_ID ) ) (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )? otherlv_3= '=' ( (lv_initExp_4_0= ruleExpCS ) )
+            {
+            // InternalMiniOCLCS.g:2246:3: ( (lv_name_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:2247:4: (lv_name_0_0= RULE_ID )
+            {
+            // InternalMiniOCLCS.g:2247:4: (lv_name_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:2248:5: lv_name_0_0= RULE_ID
+            {
+            lv_name_0_0=(Token)match(input,RULE_ID,FOLLOW_29); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					newLeafNode(lv_name_0_0, grammarAccess.getLetVarCSAccess().getNameIDTerminalRuleCall_0_0());
+              				
+            }
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElement(grammarAccess.getLetVarCSRule());
+              					}
+              					setWithLastConsumed(
+              						current,
+              						"name",
+              						lv_name_0_0,
+              						"org.eclipse.xtext.common.Terminals.ID");
+              				
+            }
+
+            }
+
+
+            }
+
+            // InternalMiniOCLCS.g:2264:3: (otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) ) )?
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==17) ) {
+                alt31=1;
+            }
+            switch (alt31) {
+                case 1 :
+                    // InternalMiniOCLCS.g:2265:4: otherlv_1= ':' ( (lv_typeRef_2_0= rulePathNameCS ) )
+                    {
+                    otherlv_1=(Token)match(input,17,FOLLOW_4); if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      				newLeafNode(otherlv_1, grammarAccess.getLetVarCSAccess().getColonKeyword_1_0());
+                      			
+                    }
+                    // InternalMiniOCLCS.g:2269:4: ( (lv_typeRef_2_0= rulePathNameCS ) )
+                    // InternalMiniOCLCS.g:2270:5: (lv_typeRef_2_0= rulePathNameCS )
+                    {
+                    // InternalMiniOCLCS.g:2270:5: (lv_typeRef_2_0= rulePathNameCS )
+                    // InternalMiniOCLCS.g:2271:6: lv_typeRef_2_0= rulePathNameCS
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      						newCompositeNode(grammarAccess.getLetVarCSAccess().getTypeRefPathNameCSParserRuleCall_1_1_0());
+                      					
+                    }
+                    pushFollow(FOLLOW_20);
+                    lv_typeRef_2_0=rulePathNameCS();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      						if (current==null) {
+                      							current = createModelElementForParent(grammarAccess.getLetVarCSRule());
+                      						}
+                      						set(
+                      							current,
+                      							"typeRef",
+                      							lv_typeRef_2_0,
+                      							"org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
+                      						afterParserOrEnumRuleCall();
+                      					
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_3=(Token)match(input,31,FOLLOW_21); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_3, grammarAccess.getLetVarCSAccess().getEqualsSignKeyword_2());
+              		
+            }
+            // InternalMiniOCLCS.g:2293:3: ( (lv_initExp_4_0= ruleExpCS ) )
+            // InternalMiniOCLCS.g:2294:4: (lv_initExp_4_0= ruleExpCS )
+            {
+            // InternalMiniOCLCS.g:2294:4: (lv_initExp_4_0= ruleExpCS )
+            // InternalMiniOCLCS.g:2295:5: lv_initExp_4_0= ruleExpCS
+            {
+            if ( state.backtracking==0 ) {
+
+              					newCompositeNode(grammarAccess.getLetVarCSAccess().getInitExpExpCSParserRuleCall_3_0());
+              				
+            }
+            pushFollow(FOLLOW_2);
+            lv_initExp_4_0=ruleExpCS();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              					if (current==null) {
+              						current = createModelElementForParent(grammarAccess.getLetVarCSRule());
+              					}
+              					set(
+              						current,
+              						"initExp",
+              						lv_initExp_4_0,
+              						"org.eclipse.qvtd.doc.MiniOCLCS.ExpCS");
+              					afterParserOrEnumRuleCall();
+              				
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleLetVarCS"
+
+
     // $ANTLR start "entryRulePathNameCS"
-    // InternalMiniOCLCS.g:1285:1: entryRulePathNameCS returns [EObject current=null] : iv_rulePathNameCS= rulePathNameCS EOF ;
+    // InternalMiniOCLCS.g:2316:1: entryRulePathNameCS returns [EObject current=null] : iv_rulePathNameCS= rulePathNameCS EOF ;
     public final EObject entryRulePathNameCS() throws RecognitionException {
         EObject current = null;
 
@@ -3561,8 +6509,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1285:51: (iv_rulePathNameCS= rulePathNameCS EOF )
-            // InternalMiniOCLCS.g:1286:2: iv_rulePathNameCS= rulePathNameCS EOF
+            // InternalMiniOCLCS.g:2316:51: (iv_rulePathNameCS= rulePathNameCS EOF )
+            // InternalMiniOCLCS.g:2317:2: iv_rulePathNameCS= rulePathNameCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPathNameCSRule()); 
@@ -3593,12 +6541,12 @@
 
 
     // $ANTLR start "rulePathNameCS"
-    // InternalMiniOCLCS.g:1292:1: rulePathNameCS returns [EObject current=null] : ( ( (lv_path_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* ) ;
+    // InternalMiniOCLCS.g:2323:1: rulePathNameCS returns [EObject current=null] : ( ( (lv_pathElements_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* ) ;
     public final EObject rulePathNameCS() throws RecognitionException {
         EObject current = null;
 
         Token otherlv_1=null;
-        EObject lv_path_0_0 = null;
+        EObject lv_pathElements_0_0 = null;
 
         EObject lv_pathElements_2_0 = null;
 
@@ -3607,25 +6555,25 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1298:2: ( ( ( (lv_path_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* ) )
-            // InternalMiniOCLCS.g:1299:2: ( ( (lv_path_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* )
+            // InternalMiniOCLCS.g:2329:2: ( ( ( (lv_pathElements_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* ) )
+            // InternalMiniOCLCS.g:2330:2: ( ( (lv_pathElements_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* )
             {
-            // InternalMiniOCLCS.g:1299:2: ( ( (lv_path_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* )
-            // InternalMiniOCLCS.g:1300:3: ( (lv_path_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )*
+            // InternalMiniOCLCS.g:2330:2: ( ( (lv_pathElements_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )* )
+            // InternalMiniOCLCS.g:2331:3: ( (lv_pathElements_0_0= rulePathElementCS ) ) (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )*
             {
-            // InternalMiniOCLCS.g:1300:3: ( (lv_path_0_0= rulePathElementCS ) )
-            // InternalMiniOCLCS.g:1301:4: (lv_path_0_0= rulePathElementCS )
+            // InternalMiniOCLCS.g:2331:3: ( (lv_pathElements_0_0= rulePathElementCS ) )
+            // InternalMiniOCLCS.g:2332:4: (lv_pathElements_0_0= rulePathElementCS )
             {
-            // InternalMiniOCLCS.g:1301:4: (lv_path_0_0= rulePathElementCS )
-            // InternalMiniOCLCS.g:1302:5: lv_path_0_0= rulePathElementCS
+            // InternalMiniOCLCS.g:2332:4: (lv_pathElements_0_0= rulePathElementCS )
+            // InternalMiniOCLCS.g:2333:5: lv_pathElements_0_0= rulePathElementCS
             {
             if ( state.backtracking==0 ) {
 
-              					newCompositeNode(grammarAccess.getPathNameCSAccess().getPathPathElementCSParserRuleCall_0_0());
+              					newCompositeNode(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_0_0());
               				
             }
-            pushFollow(FOLLOW_21);
-            lv_path_0_0=rulePathElementCS();
+            pushFollow(FOLLOW_35);
+            lv_pathElements_0_0=rulePathElementCS();
 
             state._fsp--;
             if (state.failed) return current;
@@ -3636,8 +6584,8 @@
               					}
               					add(
               						current,
-              						"path",
-              						lv_path_0_0,
+              						"pathElements",
+              						lv_pathElements_0_0,
               						"org.eclipse.qvtd.doc.MiniOCLCS.PathElementCS");
               					afterParserOrEnumRuleCall();
               				
@@ -3648,39 +6596,39 @@
 
             }
 
-            // InternalMiniOCLCS.g:1319:3: (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )*
-            loop18:
+            // InternalMiniOCLCS.g:2350:3: (otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) ) )*
+            loop32:
             do {
-                int alt18=2;
-                int LA18_0 = input.LA(1);
+                int alt32=2;
+                int LA32_0 = input.LA(1);
 
-                if ( (LA18_0==31) ) {
-                    alt18=1;
+                if ( (LA32_0==46) ) {
+                    alt32=1;
                 }
 
 
-                switch (alt18) {
+                switch (alt32) {
             	case 1 :
-            	    // InternalMiniOCLCS.g:1320:4: otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) )
+            	    // InternalMiniOCLCS.g:2351:4: otherlv_1= '::' ( (lv_pathElements_2_0= rulePathElementCS ) )
             	    {
-            	    otherlv_1=(Token)match(input,31,FOLLOW_4); if (state.failed) return current;
+            	    otherlv_1=(Token)match(input,46,FOLLOW_4); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
             	      				newLeafNode(otherlv_1, grammarAccess.getPathNameCSAccess().getColonColonKeyword_1_0());
             	      			
             	    }
-            	    // InternalMiniOCLCS.g:1324:4: ( (lv_pathElements_2_0= rulePathElementCS ) )
-            	    // InternalMiniOCLCS.g:1325:5: (lv_pathElements_2_0= rulePathElementCS )
+            	    // InternalMiniOCLCS.g:2355:4: ( (lv_pathElements_2_0= rulePathElementCS ) )
+            	    // InternalMiniOCLCS.g:2356:5: (lv_pathElements_2_0= rulePathElementCS )
             	    {
-            	    // InternalMiniOCLCS.g:1325:5: (lv_pathElements_2_0= rulePathElementCS )
-            	    // InternalMiniOCLCS.g:1326:6: lv_pathElements_2_0= rulePathElementCS
+            	    // InternalMiniOCLCS.g:2356:5: (lv_pathElements_2_0= rulePathElementCS )
+            	    // InternalMiniOCLCS.g:2357:6: lv_pathElements_2_0= rulePathElementCS
             	    {
             	    if ( state.backtracking==0 ) {
 
             	      						newCompositeNode(grammarAccess.getPathNameCSAccess().getPathElementsPathElementCSParserRuleCall_1_1_0());
             	      					
             	    }
-            	    pushFollow(FOLLOW_21);
+            	    pushFollow(FOLLOW_35);
             	    lv_pathElements_2_0=rulePathElementCS();
 
             	    state._fsp--;
@@ -3709,7 +6657,7 @@
             	    break;
 
             	default :
-            	    break loop18;
+            	    break loop32;
                 }
             } while (true);
 
@@ -3738,7 +6686,7 @@
 
 
     // $ANTLR start "entryRulePathElementCS"
-    // InternalMiniOCLCS.g:1348:1: entryRulePathElementCS returns [EObject current=null] : iv_rulePathElementCS= rulePathElementCS EOF ;
+    // InternalMiniOCLCS.g:2379:1: entryRulePathElementCS returns [EObject current=null] : iv_rulePathElementCS= rulePathElementCS EOF ;
     public final EObject entryRulePathElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -3746,8 +6694,8 @@
 
 
         try {
-            // InternalMiniOCLCS.g:1348:54: (iv_rulePathElementCS= rulePathElementCS EOF )
-            // InternalMiniOCLCS.g:1349:2: iv_rulePathElementCS= rulePathElementCS EOF
+            // InternalMiniOCLCS.g:2379:54: (iv_rulePathElementCS= rulePathElementCS EOF )
+            // InternalMiniOCLCS.g:2380:2: iv_rulePathElementCS= rulePathElementCS EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPathElementCSRule()); 
@@ -3778,7 +6726,7 @@
 
 
     // $ANTLR start "rulePathElementCS"
-    // InternalMiniOCLCS.g:1355:1: rulePathElementCS returns [EObject current=null] : ( (lv_elementName_0_0= RULE_ID ) ) ;
+    // InternalMiniOCLCS.g:2386:1: rulePathElementCS returns [EObject current=null] : ( (lv_elementName_0_0= RULE_ID ) ) ;
     public final EObject rulePathElementCS() throws RecognitionException {
         EObject current = null;
 
@@ -3788,14 +6736,14 @@
         	enterRule();
 
         try {
-            // InternalMiniOCLCS.g:1361:2: ( ( (lv_elementName_0_0= RULE_ID ) ) )
-            // InternalMiniOCLCS.g:1362:2: ( (lv_elementName_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:2392:2: ( ( (lv_elementName_0_0= RULE_ID ) ) )
+            // InternalMiniOCLCS.g:2393:2: ( (lv_elementName_0_0= RULE_ID ) )
             {
-            // InternalMiniOCLCS.g:1362:2: ( (lv_elementName_0_0= RULE_ID ) )
-            // InternalMiniOCLCS.g:1363:3: (lv_elementName_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:2393:2: ( (lv_elementName_0_0= RULE_ID ) )
+            // InternalMiniOCLCS.g:2394:3: (lv_elementName_0_0= RULE_ID )
             {
-            // InternalMiniOCLCS.g:1363:3: (lv_elementName_0_0= RULE_ID )
-            // InternalMiniOCLCS.g:1364:4: lv_elementName_0_0= RULE_ID
+            // InternalMiniOCLCS.g:2394:3: (lv_elementName_0_0= RULE_ID )
+            // InternalMiniOCLCS.g:2395:4: lv_elementName_0_0= RULE_ID
             {
             lv_elementName_0_0=(Token)match(input,RULE_ID,FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -3841,31 +6789,312 @@
     }
     // $ANTLR end "rulePathElementCS"
 
+
+    // $ANTLR start "ruleCollectionKindCS"
+    // InternalMiniOCLCS.g:2414:1: ruleCollectionKindCS returns [Enumerator current=null] : (enumLiteral_0= 'Collection' ) ;
+    public final Enumerator ruleCollectionKindCS() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalMiniOCLCS.g:2420:2: ( (enumLiteral_0= 'Collection' ) )
+            // InternalMiniOCLCS.g:2421:2: (enumLiteral_0= 'Collection' )
+            {
+            // InternalMiniOCLCS.g:2421:2: (enumLiteral_0= 'Collection' )
+            // InternalMiniOCLCS.g:2422:3: enumLiteral_0= 'Collection'
+            {
+            enumLiteral_0=(Token)match(input,47,FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			current = grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration().getEnumLiteral().getInstance();
+              			newLeafNode(enumLiteral_0, grammarAccess.getCollectionKindCSAccess().getCollectionEnumLiteralDeclaration());
+              		
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCollectionKindCS"
+
+    // $ANTLR start synpred19_InternalMiniOCLCS
+    public final void synpred19_InternalMiniOCLCS_fragment() throws RecognitionException {   
+        Token lv_op_2_1=null;
+        Token lv_op_2_2=null;
+        EObject lv_right_3_0 = null;
+
+
+        // InternalMiniOCLCS.g:1039:4: ( () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) ) )
+        // InternalMiniOCLCS.g:1039:4: () ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) ) ( (lv_right_3_0= ruleCallExpCS ) )
+        {
+        // InternalMiniOCLCS.g:1039:4: ()
+        // InternalMiniOCLCS.g:1040:5: 
+        {
+        if ( state.backtracking==0 ) {
+
+          					/* */
+          				
+        }
+
+        }
+
+        // InternalMiniOCLCS.g:1049:4: ( ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) ) )
+        // InternalMiniOCLCS.g:1050:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
+        {
+        // InternalMiniOCLCS.g:1050:5: ( (lv_op_2_1= '=' | lv_op_2_2= '<>' ) )
+        // InternalMiniOCLCS.g:1051:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
+        {
+        // InternalMiniOCLCS.g:1051:6: (lv_op_2_1= '=' | lv_op_2_2= '<>' )
+        int alt34=2;
+        int LA34_0 = input.LA(1);
+
+        if ( (LA34_0==31) ) {
+            alt34=1;
+        }
+        else if ( (LA34_0==34) ) {
+            alt34=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 34, 0, input);
+
+            throw nvae;
+        }
+        switch (alt34) {
+            case 1 :
+                // InternalMiniOCLCS.g:1052:7: lv_op_2_1= '='
+                {
+                lv_op_2_1=(Token)match(input,31,FOLLOW_21); if (state.failed) return ;
+
+                }
+                break;
+            case 2 :
+                // InternalMiniOCLCS.g:1063:7: lv_op_2_2= '<>'
+                {
+                lv_op_2_2=(Token)match(input,34,FOLLOW_21); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+        // InternalMiniOCLCS.g:1076:4: ( (lv_right_3_0= ruleCallExpCS ) )
+        // InternalMiniOCLCS.g:1077:5: (lv_right_3_0= ruleCallExpCS )
+        {
+        // InternalMiniOCLCS.g:1077:5: (lv_right_3_0= ruleCallExpCS )
+        // InternalMiniOCLCS.g:1078:6: lv_right_3_0= ruleCallExpCS
+        {
+        if ( state.backtracking==0 ) {
+
+          						newCompositeNode(grammarAccess.getLogicExpCSAccess().getRightCallExpCSParserRuleCall_1_2_0());
+          					
+        }
+        pushFollow(FOLLOW_2);
+        lv_right_3_0=ruleCallExpCS();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred19_InternalMiniOCLCS
+
+    // $ANTLR start synpred21_InternalMiniOCLCS
+    public final void synpred21_InternalMiniOCLCS_fragment() throws RecognitionException {   
+        Token lv_op_2_1=null;
+        Token lv_op_2_2=null;
+        EObject lv_navExp_3_0 = null;
+
+
+        // InternalMiniOCLCS.g:1127:4: ( () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) ) )
+        // InternalMiniOCLCS.g:1127:4: () ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) ) ( (lv_navExp_3_0= ruleNavigationExpCS ) )
+        {
+        // InternalMiniOCLCS.g:1127:4: ()
+        // InternalMiniOCLCS.g:1128:5: 
+        {
+        if ( state.backtracking==0 ) {
+
+          					/* */
+          				
+        }
+
+        }
+
+        // InternalMiniOCLCS.g:1137:4: ( ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) ) )
+        // InternalMiniOCLCS.g:1138:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
+        {
+        // InternalMiniOCLCS.g:1138:5: ( (lv_op_2_1= '.' | lv_op_2_2= '->' ) )
+        // InternalMiniOCLCS.g:1139:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
+        {
+        // InternalMiniOCLCS.g:1139:6: (lv_op_2_1= '.' | lv_op_2_2= '->' )
+        int alt35=2;
+        int LA35_0 = input.LA(1);
+
+        if ( (LA35_0==35) ) {
+            alt35=1;
+        }
+        else if ( (LA35_0==36) ) {
+            alt35=2;
+        }
+        else {
+            if (state.backtracking>0) {state.failed=true; return ;}
+            NoViableAltException nvae =
+                new NoViableAltException("", 35, 0, input);
+
+            throw nvae;
+        }
+        switch (alt35) {
+            case 1 :
+                // InternalMiniOCLCS.g:1140:7: lv_op_2_1= '.'
+                {
+                lv_op_2_1=(Token)match(input,35,FOLLOW_25); if (state.failed) return ;
+
+                }
+                break;
+            case 2 :
+                // InternalMiniOCLCS.g:1151:7: lv_op_2_2= '->'
+                {
+                lv_op_2_2=(Token)match(input,36,FOLLOW_25); if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+
+        // InternalMiniOCLCS.g:1164:4: ( (lv_navExp_3_0= ruleNavigationExpCS ) )
+        // InternalMiniOCLCS.g:1165:5: (lv_navExp_3_0= ruleNavigationExpCS )
+        {
+        // InternalMiniOCLCS.g:1165:5: (lv_navExp_3_0= ruleNavigationExpCS )
+        // InternalMiniOCLCS.g:1166:6: lv_navExp_3_0= ruleNavigationExpCS
+        {
+        if ( state.backtracking==0 ) {
+
+          						newCompositeNode(grammarAccess.getCallExpCSAccess().getNavExpNavigationExpCSParserRuleCall_1_2_0());
+          					
+        }
+        pushFollow(FOLLOW_2);
+        lv_navExp_3_0=ruleNavigationExpCS();
+
+        state._fsp--;
+        if (state.failed) return ;
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred21_InternalMiniOCLCS
+
     // Delegated rules
 
+    public final boolean synpred19_InternalMiniOCLCS() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred19_InternalMiniOCLCS_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 synpred21_InternalMiniOCLCS() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred21_InternalMiniOCLCS_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 static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
     public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000001000802L});
+    public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000100000802L});
     public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000000000000010L});
     public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000001000L});
-    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000006800L});
+    public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000016800L});
     public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000009000L});
-    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000092000L});
+    public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000008382000L});
     public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000040000L});
-    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000100000L});
-    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000400010L});
-    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000600000L});
-    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000060000070L});
-    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000002002000L});
-    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000004800002L});
-    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000018000002L});
-    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000000100002L});
-    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000060400070L});
-    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000040000L});
+    public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000440000L});
+    public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000001800040L});
+    public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000000001000040L});
+    public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000040000010L});
+    public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000060000000L});
+    public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x00009E2000000050L});
+    public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000200002000L});
+    public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000480000002L});
+    public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000001800000002L});
+    public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000014000000010L});
+    public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000008000000000L});
+    public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000000080020000L});
+    public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000000010000002L});
+    public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x00009E2040000050L});
+    public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x00009E2000002050L});
+    public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000000002000002L});
+    public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000200020000000L});
+    public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000400000000002L});
 
 }
\ No newline at end of file
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSemanticSequencer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSemanticSequencer.java
index 3005541..2677ee0 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSemanticSequencer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSemanticSequencer.java
@@ -3,19 +3,30 @@
  */
 package org.eclipse.qvtd.doc.serializer;
 
-import com.google.inject.Inject;
 import java.util.Set;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.qvtd.doc.minioclcs.AccVarCS;
 import org.eclipse.qvtd.doc.minioclcs.BooleanExpCS;
 import org.eclipse.qvtd.doc.minioclcs.CallExpCS;
 import org.eclipse.qvtd.doc.minioclcs.ClassCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.CollectionLiteralPartCS;
 import org.eclipse.qvtd.doc.minioclcs.ConstraintsDefCS;
+import org.eclipse.qvtd.doc.minioclcs.DatatypeCS;
 import org.eclipse.qvtd.doc.minioclcs.IntLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.InvariantCS;
+import org.eclipse.qvtd.doc.minioclcs.IterateExpCS;
+import org.eclipse.qvtd.doc.minioclcs.IteratorVarCS;
+import org.eclipse.qvtd.doc.minioclcs.LetExpCS;
+import org.eclipse.qvtd.doc.minioclcs.LetVarCS;
 import org.eclipse.qvtd.doc.minioclcs.LogicExpCS;
 import org.eclipse.qvtd.doc.minioclcs.MinioclcsPackage;
+import org.eclipse.qvtd.doc.minioclcs.MultiplicityCS;
 import org.eclipse.qvtd.doc.minioclcs.NameExpCS;
+import org.eclipse.qvtd.doc.minioclcs.NullLiteralExpCS;
 import org.eclipse.qvtd.doc.minioclcs.OperationCS;
 import org.eclipse.qvtd.doc.minioclcs.PackageCS;
 import org.eclipse.qvtd.doc.minioclcs.ParameterCS;
@@ -24,7 +35,7 @@
 import org.eclipse.qvtd.doc.minioclcs.PropertyCS;
 import org.eclipse.qvtd.doc.minioclcs.RootCS;
 import org.eclipse.qvtd.doc.minioclcs.RoundedBracketClauseCS;
-import org.eclipse.qvtd.doc.minioclcs.StringLiteralExpCS;
+import org.eclipse.qvtd.doc.minioclcs.SelfExpCS;
 import org.eclipse.qvtd.doc.services.MiniOCLCSGrammarAccess;
 import org.eclipse.xtext.Action;
 import org.eclipse.xtext.Parameter;
@@ -34,6 +45,8 @@
 import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
 import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
 
+import com.google.inject.Inject;
+
 @SuppressWarnings("all")
 public class MiniOCLCSSemanticSequencer extends AbstractDelegatingSemanticSequencer {
 
@@ -48,6 +61,9 @@
 		Set<Parameter> parameters = context.getEnabledBooleanParameters();
 		if (epackage == MinioclcsPackage.eINSTANCE)
 			switch (semanticObject.eClass().getClassifierID()) {
+			case MinioclcsPackage.ACC_VAR_CS:
+				sequence_AccVarCS(context, (AccVarCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.BOOLEAN_EXP_CS:
 				sequence_BooleanLiteralExpCS(context, (BooleanExpCS) semanticObject); 
 				return; 
@@ -57,21 +73,51 @@
 			case MinioclcsPackage.CLASS_CS:
 				sequence_ClassCS(context, (ClassCS) semanticObject); 
 				return; 
+			case MinioclcsPackage.COLLECT_EXP_CS:
+				sequence_CollectExpCS(context, (CollectExpCS) semanticObject); 
+				return; 
+			case MinioclcsPackage.COLLECTION_LITERAL_EXP_CS:
+				sequence_CollectionLiteralExpCS(context, (CollectionLiteralExpCS) semanticObject); 
+				return; 
+			case MinioclcsPackage.COLLECTION_LITERAL_PART_CS:
+				sequence_CollectionLiteralPartCS(context, (CollectionLiteralPartCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.CONSTRAINTS_DEF_CS:
 				sequence_ConstraintsDefCS(context, (ConstraintsDefCS) semanticObject); 
 				return; 
+			case MinioclcsPackage.DATATYPE_CS:
+				sequence_DatatypeCS(context, (DatatypeCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.INT_LITERAL_EXP_CS:
 				sequence_IntLiteralExpCS(context, (IntLiteralExpCS) semanticObject); 
 				return; 
 			case MinioclcsPackage.INVARIANT_CS:
 				sequence_InvariantCS(context, (InvariantCS) semanticObject); 
 				return; 
+			case MinioclcsPackage.ITERATE_EXP_CS:
+				sequence_IterateExpCS(context, (IterateExpCS) semanticObject); 
+				return; 
+			case MinioclcsPackage.ITERATOR_VAR_CS:
+				sequence_IteratorVarCS(context, (IteratorVarCS) semanticObject); 
+				return; 
+			case MinioclcsPackage.LET_EXP_CS:
+				sequence_LetExpCS(context, (LetExpCS) semanticObject); 
+				return; 
+			case MinioclcsPackage.LET_VAR_CS:
+				sequence_LetVarCS(context, (LetVarCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.LOGIC_EXP_CS:
 				sequence_LogicExpCS(context, (LogicExpCS) semanticObject); 
 				return; 
+			case MinioclcsPackage.MULTIPLICITY_CS:
+				sequence_MultiplicityCS(context, (MultiplicityCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.NAME_EXP_CS:
 				sequence_NameExpCS(context, (NameExpCS) semanticObject); 
 				return; 
+			case MinioclcsPackage.NULL_LITERAL_EXP_CS:
+				sequence_NullLiteralExpCS(context, (NullLiteralExpCS) semanticObject); 
+				return; 
 			case MinioclcsPackage.OPERATION_CS:
 				sequence_OperationCS(context, (OperationCS) semanticObject); 
 				return; 
@@ -96,8 +142,8 @@
 			case MinioclcsPackage.ROUNDED_BRACKET_CLAUSE_CS:
 				sequence_RoundedBracketClauseCS(context, (RoundedBracketClauseCS) semanticObject); 
 				return; 
-			case MinioclcsPackage.STRING_LITERAL_EXP_CS:
-				sequence_StringLiteralExpCS(context, (StringLiteralExpCS) semanticObject); 
+			case MinioclcsPackage.SELF_EXP_CS:
+				sequence_SelfExpCS(context, (SelfExpCS) semanticObject); 
 				return; 
 			}
 		if (errorAcceptor != null)
@@ -106,6 +152,18 @@
 	
 	/**
 	 * Contexts:
+	 *     AccVarCS returns AccVarCS
+	 *
+	 * Constraint:
+	 *     (accName=ID accType=PathNameCS? accInitExp=ExpCS)
+	 */
+	protected void sequence_AccVarCS(ISerializationContext context, AccVarCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     ExpCS returns BooleanExpCS
 	 *     LogicExpCS returns BooleanExpCS
 	 *     LogicExpCS.LogicExpCS_1_0 returns BooleanExpCS
@@ -132,7 +190,7 @@
 	 *     CallExpCS.CallExpCS_1_0 returns CallExpCS
 	 *
 	 * Constraint:
-	 *     (source=CallExpCS_CallExpCS_1_0 (op='.' | op='->') nameExp=NameExpCS)
+	 *     (source=CallExpCS_CallExpCS_1_0 (op='.' | op='->') navExp=NavigationExpCS)
 	 */
 	protected void sequence_CallExpCS(ISerializationContext context, CallExpCS semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -141,6 +199,7 @@
 	
 	/**
 	 * Contexts:
+	 *     ClassifierCS returns ClassCS
 	 *     ClassCS returns ClassCS
 	 *
 	 * Constraint:
@@ -153,6 +212,51 @@
 	
 	/**
 	 * Contexts:
+	 *     NavigationExpCS returns CollectExpCS
+	 *     LoopExpCS returns CollectExpCS
+	 *     CollectExpCS returns CollectExpCS
+	 *
+	 * Constraint:
+	 *     (itVar=IteratorVarCS? exp=ExpCS)
+	 */
+	protected void sequence_CollectExpCS(ISerializationContext context, CollectExpCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     ExpCS returns CollectionLiteralExpCS
+	 *     LogicExpCS returns CollectionLiteralExpCS
+	 *     LogicExpCS.LogicExpCS_1_0 returns CollectionLiteralExpCS
+	 *     CallExpCS returns CollectionLiteralExpCS
+	 *     CallExpCS.CallExpCS_1_0 returns CollectionLiteralExpCS
+	 *     PrimaryExpCS returns CollectionLiteralExpCS
+	 *     LiteralExpCS returns CollectionLiteralExpCS
+	 *     CollectionLiteralExpCS returns CollectionLiteralExpCS
+	 *
+	 * Constraint:
+	 *     (kind=CollectionKindCS parts+=CollectionLiteralPartCS*)
+	 */
+	protected void sequence_CollectionLiteralExpCS(ISerializationContext context, CollectionLiteralExpCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     CollectionLiteralPartCS returns CollectionLiteralPartCS
+	 *
+	 * Constraint:
+	 *     (first=ExpCS last=ExpCS?)
+	 */
+	protected void sequence_CollectionLiteralPartCS(ISerializationContext context, CollectionLiteralPartCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     ConstraintsDefCS returns ConstraintsDefCS
 	 *
 	 * Constraint:
@@ -165,6 +269,28 @@
 	
 	/**
 	 * Contexts:
+	 *     ClassifierCS returns DatatypeCS
+	 *     DatatypeCS returns DatatypeCS
+	 *
+	 * Constraint:
+	 *     (name=ID typeName=STRING)
+	 */
+	protected void sequence_DatatypeCS(ISerializationContext context, DatatypeCS semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.CLASSIFIER_CS__NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.CLASSIFIER_CS__NAME));
+			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.DATATYPE_CS__TYPE_NAME) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.DATATYPE_CS__TYPE_NAME));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getDatatypeCSAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
+		feeder.accept(grammarAccess.getDatatypeCSAccess().getTypeNameSTRINGTerminalRuleCall_3_0(), semanticObject.getTypeName());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     ExpCS returns IntLiteralExpCS
 	 *     LogicExpCS returns IntLiteralExpCS
 	 *     LogicExpCS.LogicExpCS_1_0 returns IntLiteralExpCS
@@ -208,6 +334,74 @@
 	
 	/**
 	 * Contexts:
+	 *     NavigationExpCS returns IterateExpCS
+	 *     LoopExpCS returns IterateExpCS
+	 *     IterateExpCS returns IterateExpCS
+	 *
+	 * Constraint:
+	 *     (itVar=IteratorVarCS accVar=AccVarCS exp=ExpCS)
+	 */
+	protected void sequence_IterateExpCS(ISerializationContext context, IterateExpCS semanticObject) {
+		if (errorAcceptor != null) {
+			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.LOOP_EXP_CS__IT_VAR) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.LOOP_EXP_CS__IT_VAR));
+			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.ITERATE_EXP_CS__ACC_VAR) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.ITERATE_EXP_CS__ACC_VAR));
+			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.LOOP_EXP_CS__EXP) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.LOOP_EXP_CS__EXP));
+		}
+		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
+		feeder.accept(grammarAccess.getIterateExpCSAccess().getItVarIteratorVarCSParserRuleCall_2_0(), semanticObject.getItVar());
+		feeder.accept(grammarAccess.getIterateExpCSAccess().getAccVarAccVarCSParserRuleCall_4_0(), semanticObject.getAccVar());
+		feeder.accept(grammarAccess.getIterateExpCSAccess().getExpExpCSParserRuleCall_6_0(), semanticObject.getExp());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     IteratorVarCS returns IteratorVarCS
+	 *
+	 * Constraint:
+	 *     (itName=ID itType=PathNameCS?)
+	 */
+	protected void sequence_IteratorVarCS(ISerializationContext context, IteratorVarCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     ExpCS returns LetExpCS
+	 *     LogicExpCS returns LetExpCS
+	 *     LogicExpCS.LogicExpCS_1_0 returns LetExpCS
+	 *     CallExpCS returns LetExpCS
+	 *     CallExpCS.CallExpCS_1_0 returns LetExpCS
+	 *     PrimaryExpCS returns LetExpCS
+	 *     LetExpCS returns LetExpCS
+	 *
+	 * Constraint:
+	 *     (letVars+=LetVarCS letVars+=LetVarCS* inExp=ExpCS)
+	 */
+	protected void sequence_LetExpCS(ISerializationContext context, LetExpCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
+	 *     LetVarCS returns LetVarCS
+	 *
+	 * Constraint:
+	 *     (name=ID typeRef=PathNameCS? initExp=ExpCS)
+	 */
+	protected void sequence_LetVarCS(ISerializationContext context, LetVarCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     ExpCS returns LogicExpCS
 	 *     LogicExpCS returns LogicExpCS
 	 *     LogicExpCS.LogicExpCS_1_0 returns LogicExpCS
@@ -222,12 +416,25 @@
 	
 	/**
 	 * Contexts:
+	 *     MultiplicityCS returns MultiplicityCS
+	 *
+	 * Constraint:
+	 *     (opt?='?' | mult?='*' | (lower=INT (upperInt=INT | upperMult?='*')))
+	 */
+	protected void sequence_MultiplicityCS(ISerializationContext context, MultiplicityCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     ExpCS returns NameExpCS
 	 *     LogicExpCS returns NameExpCS
 	 *     LogicExpCS.LogicExpCS_1_0 returns NameExpCS
 	 *     CallExpCS returns NameExpCS
 	 *     CallExpCS.CallExpCS_1_0 returns NameExpCS
 	 *     PrimaryExpCS returns NameExpCS
+	 *     NavigationExpCS returns NameExpCS
 	 *     NameExpCS returns NameExpCS
 	 *
 	 * Constraint:
@@ -240,6 +447,25 @@
 	
 	/**
 	 * Contexts:
+	 *     ExpCS returns NullLiteralExpCS
+	 *     LogicExpCS returns NullLiteralExpCS
+	 *     LogicExpCS.LogicExpCS_1_0 returns NullLiteralExpCS
+	 *     CallExpCS returns NullLiteralExpCS
+	 *     CallExpCS.CallExpCS_1_0 returns NullLiteralExpCS
+	 *     PrimaryExpCS returns NullLiteralExpCS
+	 *     LiteralExpCS returns NullLiteralExpCS
+	 *     NullLiteralExpCS returns NullLiteralExpCS
+	 *
+	 * Constraint:
+	 *     {NullLiteralExpCS}
+	 */
+	protected void sequence_NullLiteralExpCS(ISerializationContext context, NullLiteralExpCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Contexts:
 	 *     OperationCS returns OperationCS
 	 *
 	 * Constraint:
@@ -255,7 +481,7 @@
 	 *     PackageCS returns PackageCS
 	 *
 	 * Constraint:
-	 *     (name=ID (packages+=PackageCS | classes+=ClassCS)*)
+	 *     (name=ID (packages+=PackageCS | classifiers+=ClassifierCS)*)
 	 */
 	protected void sequence_PackageCS(ISerializationContext context, PackageCS semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -306,7 +532,7 @@
 	 *     PathNameCS returns PathNameCS
 	 *
 	 * Constraint:
-	 *     (path+=PathElementCS pathElements+=PathElementCS*)
+	 *     (pathElements+=PathElementCS pathElements+=PathElementCS*)
 	 */
 	protected void sequence_PathNameCS(ISerializationContext context, PathNameCS semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -318,19 +544,10 @@
 	 *     PropertyCS returns PropertyCS
 	 *
 	 * Constraint:
-	 *     (name=ID typeRef=PathNameCS)
+	 *     (name=ID typeRef=PathNameCS multiplicity=MultiplicityCS?)
 	 */
 	protected void sequence_PropertyCS(ISerializationContext context, PropertyCS semanticObject) {
-		if (errorAcceptor != null) {
-			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.PROPERTY_CS__NAME) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.PROPERTY_CS__NAME));
-			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.PROPERTY_CS__TYPE_REF) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.PROPERTY_CS__TYPE_REF));
-		}
-		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
-		feeder.accept(grammarAccess.getPropertyCSAccess().getNameIDTerminalRuleCall_1_0(), semanticObject.getName());
-		feeder.accept(grammarAccess.getPropertyCSAccess().getTypeRefPathNameCSParserRuleCall_3_0(), semanticObject.getTypeRef());
-		feeder.finish();
+		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
@@ -360,26 +577,19 @@
 	
 	/**
 	 * Contexts:
-	 *     ExpCS returns StringLiteralExpCS
-	 *     LogicExpCS returns StringLiteralExpCS
-	 *     LogicExpCS.LogicExpCS_1_0 returns StringLiteralExpCS
-	 *     CallExpCS returns StringLiteralExpCS
-	 *     CallExpCS.CallExpCS_1_0 returns StringLiteralExpCS
-	 *     PrimaryExpCS returns StringLiteralExpCS
-	 *     LiteralExpCS returns StringLiteralExpCS
-	 *     StringLiteralExpCS returns StringLiteralExpCS
+	 *     ExpCS returns SelfExpCS
+	 *     LogicExpCS returns SelfExpCS
+	 *     LogicExpCS.LogicExpCS_1_0 returns SelfExpCS
+	 *     CallExpCS returns SelfExpCS
+	 *     CallExpCS.CallExpCS_1_0 returns SelfExpCS
+	 *     PrimaryExpCS returns SelfExpCS
+	 *     SelfExpCS returns SelfExpCS
 	 *
 	 * Constraint:
-	 *     stringSymbol=STRING
+	 *     {SelfExpCS}
 	 */
-	protected void sequence_StringLiteralExpCS(ISerializationContext context, StringLiteralExpCS semanticObject) {
-		if (errorAcceptor != null) {
-			if (transientValues.isValueTransient(semanticObject, MinioclcsPackage.Literals.STRING_LITERAL_EXP_CS__STRING_SYMBOL) == ValueTransient.YES)
-				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, MinioclcsPackage.Literals.STRING_LITERAL_EXP_CS__STRING_SYMBOL));
-		}
-		SequenceFeeder feeder = createSequencerFeeder(context, semanticObject);
-		feeder.accept(grammarAccess.getStringLiteralExpCSAccess().getStringSymbolSTRINGTerminalRuleCall_0(), semanticObject.getStringSymbol());
-		feeder.finish();
+	protected void sequence_SelfExpCS(ISerializationContext context, SelfExpCS semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
 	}
 	
 	
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSyntacticSequencer.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSyntacticSequencer.java
index 5a885ca..913f442 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSyntacticSequencer.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/serializer/MiniOCLCSSyntacticSequencer.java
@@ -3,25 +3,32 @@
  */
 package org.eclipse.qvtd.doc.serializer;
 
-import com.google.inject.Inject;
 import java.util.List;
+
 import org.eclipse.emf.ecore.EObject;
 import org.eclipse.qvtd.doc.services.MiniOCLCSGrammarAccess;
 import org.eclipse.xtext.IGrammarAccess;
 import org.eclipse.xtext.RuleCall;
 import org.eclipse.xtext.nodemodel.INode;
 import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.AlternativeAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
 import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
 import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
 
+import com.google.inject.Inject;
+
 @SuppressWarnings("all")
 public class MiniOCLCSSyntacticSequencer extends AbstractSyntacticSequencer {
 
 	protected MiniOCLCSGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_PropertyCS_AttributeKeyword_0_0_or_ContainmentKeyword_0_1_or_Cross_referenceKeyword_0_2;
 	
 	@Inject
 	protected void init(IGrammarAccess access) {
 		grammarAccess = (MiniOCLCSGrammarAccess) access;
+		match_PropertyCS_AttributeKeyword_0_0_or_ContainmentKeyword_0_1_or_Cross_referenceKeyword_0_2 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getPropertyCSAccess().getAttributeKeyword_0_0()), new TokenAlias(false, false, grammarAccess.getPropertyCSAccess().getContainmentKeyword_0_1()), new TokenAlias(false, false, grammarAccess.getPropertyCSAccess().getCross_referenceKeyword_0_2()));
 	}
 	
 	@Override
@@ -36,8 +43,21 @@
 		List<INode> transitionNodes = collectNodes(fromNode, toNode);
 		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
 			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
-			acceptNodes(getLastNavigableState(), syntaxNodes);
+			if (match_PropertyCS_AttributeKeyword_0_0_or_ContainmentKeyword_0_1_or_Cross_referenceKeyword_0_2.equals(syntax))
+				emit_PropertyCS_AttributeKeyword_0_0_or_ContainmentKeyword_0_1_or_Cross_referenceKeyword_0_2(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
 		}
 	}
 
+	/**
+	 * Ambiguous syntax:
+	 *     'attribute' | 'containment' | 'cross_reference'
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     (rule start) (ambiguity) name=ID
+	 */
+	protected void emit_PropertyCS_AttributeKeyword_0_0_or_ContainmentKeyword_0_1_or_Cross_referenceKeyword_0_2(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
 }
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/services/MiniOCLCSGrammarAccess.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/services/MiniOCLCSGrammarAccess.java
index 089eda5..50f307a 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/services/MiniOCLCSGrammarAccess.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/services/MiniOCLCSGrammarAccess.java
@@ -3,12 +3,13 @@
  */
 package org.eclipse.qvtd.doc.services;
 
-import com.google.inject.Inject;
-import com.google.inject.Singleton;
 import java.util.List;
+
 import org.eclipse.xtext.Action;
 import org.eclipse.xtext.Alternatives;
 import org.eclipse.xtext.Assignment;
+import org.eclipse.xtext.EnumLiteralDeclaration;
+import org.eclipse.xtext.EnumRule;
 import org.eclipse.xtext.Grammar;
 import org.eclipse.xtext.GrammarUtil;
 import org.eclipse.xtext.Group;
@@ -20,6 +21,9 @@
 import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
 import org.eclipse.xtext.service.GrammarProvider;
 
+import com.google.inject.Inject;
+import com.google.inject.Singleton;
+
 @Singleton
 public class MiniOCLCSGrammarAccess extends AbstractGrammarElementFinder {
 	
@@ -61,17 +65,17 @@
 		private final Alternatives cAlternatives_3 = (Alternatives)cGroup.eContents().get(3);
 		private final Assignment cPackagesAssignment_3_0 = (Assignment)cAlternatives_3.eContents().get(0);
 		private final RuleCall cPackagesPackageCSParserRuleCall_3_0_0 = (RuleCall)cPackagesAssignment_3_0.eContents().get(0);
-		private final Assignment cClassesAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
-		private final RuleCall cClassesClassCSParserRuleCall_3_1_0 = (RuleCall)cClassesAssignment_3_1.eContents().get(0);
+		private final Assignment cClassifiersAssignment_3_1 = (Assignment)cAlternatives_3.eContents().get(1);
+		private final RuleCall cClassifiersClassifierCSParserRuleCall_3_1_0 = (RuleCall)cClassifiersAssignment_3_1.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
 		//PackageCS:
 		//	'package' name=ID '{' (packages+=PackageCS
-		//	| classes+=ClassCS)*
+		//	| classifiers+=ClassifierCS)*
 		//	'}';
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'package' name=ID '{' (packages+=PackageCS | classes+=ClassCS)* '}'
+		//'package' name=ID '{' (packages+=PackageCS | classifiers+=ClassifierCS)* '}'
 		public Group getGroup() { return cGroup; }
 		
 		//'package'
@@ -86,7 +90,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 		
-		//(packages+=PackageCS | classes+=ClassCS)*
+		//(packages+=PackageCS | classifiers+=ClassifierCS)*
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
 		//packages+=PackageCS
@@ -95,15 +99,34 @@
 		//PackageCS
 		public RuleCall getPackagesPackageCSParserRuleCall_3_0_0() { return cPackagesPackageCSParserRuleCall_3_0_0; }
 		
-		//classes+=ClassCS
-		public Assignment getClassesAssignment_3_1() { return cClassesAssignment_3_1; }
+		//classifiers+=ClassifierCS
+		public Assignment getClassifiersAssignment_3_1() { return cClassifiersAssignment_3_1; }
 		
-		//ClassCS
-		public RuleCall getClassesClassCSParserRuleCall_3_1_0() { return cClassesClassCSParserRuleCall_3_1_0; }
+		//ClassifierCS
+		public RuleCall getClassifiersClassifierCSParserRuleCall_3_1_0() { return cClassifiersClassifierCSParserRuleCall_3_1_0; }
 		
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
 	}
+	public class ClassifierCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.ClassifierCS");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cClassCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cDatatypeCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//ClassifierCS:
+		//	ClassCS | DatatypeCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//ClassCS | DatatypeCS
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//ClassCS
+		public RuleCall getClassCSParserRuleCall_0() { return cClassCSParserRuleCall_0; }
+		
+		//DatatypeCS
+		public RuleCall getDatatypeCSParserRuleCall_1() { return cDatatypeCSParserRuleCall_1; }
+	}
 	public class ClassCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.ClassCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
@@ -173,26 +196,80 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
 	}
+	public class DatatypeCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.DatatypeCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cDatatypeKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cTypeNameAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cTypeNameSTRINGTerminalRuleCall_3_0 = (RuleCall)cTypeNameAssignment_3.eContents().get(0);
+		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//DatatypeCS:
+		//	'datatype' name=ID ':' typeName=STRING ';';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'datatype' name=ID ':' typeName=STRING ';'
+		public Group getGroup() { return cGroup; }
+		
+		//'datatype'
+		public Keyword getDatatypeKeyword_0() { return cDatatypeKeyword_0; }
+		
+		//name=ID
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+		
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
+		
+		//':'
+		public Keyword getColonKeyword_2() { return cColonKeyword_2; }
+		
+		//typeName=STRING
+		public Assignment getTypeNameAssignment_3() { return cTypeNameAssignment_3; }
+		
+		//STRING
+		public RuleCall getTypeNameSTRINGTerminalRuleCall_3_0() { return cTypeNameSTRINGTerminalRuleCall_3_0; }
+		
+		//';'
+		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
+	}
 	public class PropertyCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.PropertyCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Keyword cPropKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Keyword cAttributeKeyword_0_0 = (Keyword)cAlternatives_0.eContents().get(0);
+		private final Keyword cContainmentKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
+		private final Keyword cCross_referenceKeyword_0_2 = (Keyword)cAlternatives_0.eContents().get(2);
 		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
 		private final Keyword cColonKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		private final Assignment cTypeRefAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cTypeRefPathNameCSParserRuleCall_3_0 = (RuleCall)cTypeRefAssignment_3.eContents().get(0);
-		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Assignment cMultiplicityAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cMultiplicityMultiplicityCSParserRuleCall_4_0 = (RuleCall)cMultiplicityAssignment_4.eContents().get(0);
+		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
 		//PropertyCS:
-		//	'prop' name=ID ':' typeRef=PathNameCS ';';
+		//	('attribute' | 'containment' | 'cross_reference') name=ID ':' typeRef=PathNameCS
+		//	multiplicity=MultiplicityCS? ';';
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'prop' name=ID ':' typeRef=PathNameCS ';'
+		//('attribute' | 'containment' | 'cross_reference') name=ID ':' typeRef=PathNameCS multiplicity=MultiplicityCS? ';'
 		public Group getGroup() { return cGroup; }
 		
-		//'prop'
-		public Keyword getPropKeyword_0() { return cPropKeyword_0; }
+		//('attribute' | 'containment' | 'cross_reference')
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+		
+		//'attribute'
+		public Keyword getAttributeKeyword_0_0() { return cAttributeKeyword_0_0; }
+		
+		//'containment'
+		public Keyword getContainmentKeyword_0_1() { return cContainmentKeyword_0_1; }
+		
+		//'cross_reference'
+		public Keyword getCross_referenceKeyword_0_2() { return cCross_referenceKeyword_0_2; }
 		
 		//name=ID
 		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
@@ -209,8 +286,90 @@
 		//PathNameCS
 		public RuleCall getTypeRefPathNameCSParserRuleCall_3_0() { return cTypeRefPathNameCSParserRuleCall_3_0; }
 		
+		//multiplicity=MultiplicityCS?
+		public Assignment getMultiplicityAssignment_4() { return cMultiplicityAssignment_4; }
+		
+		//MultiplicityCS
+		public RuleCall getMultiplicityMultiplicityCSParserRuleCall_4_0() { return cMultiplicityMultiplicityCSParserRuleCall_4_0; }
+		
 		//';'
-		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
+		public Keyword getSemicolonKeyword_5() { return cSemicolonKeyword_5; }
+	}
+	public class MultiplicityCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.MultiplicityCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Alternatives cAlternatives_1 = (Alternatives)cGroup.eContents().get(1);
+		private final Assignment cOptAssignment_1_0 = (Assignment)cAlternatives_1.eContents().get(0);
+		private final Keyword cOptQuestionMarkKeyword_1_0_0 = (Keyword)cOptAssignment_1_0.eContents().get(0);
+		private final Assignment cMultAssignment_1_1 = (Assignment)cAlternatives_1.eContents().get(1);
+		private final Keyword cMultAsteriskKeyword_1_1_0 = (Keyword)cMultAssignment_1_1.eContents().get(0);
+		private final Group cGroup_1_2 = (Group)cAlternatives_1.eContents().get(2);
+		private final Assignment cLowerAssignment_1_2_0 = (Assignment)cGroup_1_2.eContents().get(0);
+		private final RuleCall cLowerINTTerminalRuleCall_1_2_0_0 = (RuleCall)cLowerAssignment_1_2_0.eContents().get(0);
+		private final Keyword cFullStopFullStopKeyword_1_2_1 = (Keyword)cGroup_1_2.eContents().get(1);
+		private final Alternatives cAlternatives_1_2_2 = (Alternatives)cGroup_1_2.eContents().get(2);
+		private final Assignment cUpperIntAssignment_1_2_2_0 = (Assignment)cAlternatives_1_2_2.eContents().get(0);
+		private final RuleCall cUpperIntINTTerminalRuleCall_1_2_2_0_0 = (RuleCall)cUpperIntAssignment_1_2_2_0.eContents().get(0);
+		private final Assignment cUpperMultAssignment_1_2_2_1 = (Assignment)cAlternatives_1_2_2.eContents().get(1);
+		private final Keyword cUpperMultAsteriskKeyword_1_2_2_1_0 = (Keyword)cUpperMultAssignment_1_2_2_1.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//MultiplicityCS:
+		//	'[' (opt?='?' | mult?='*' | lower=INT '..' (upperInt=INT | upperMult?='*'))
+		//	']';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'[' (opt?='?' | mult?='*' | lower=INT '..' (upperInt=INT | upperMult?='*')) ']'
+		public Group getGroup() { return cGroup; }
+		
+		//'['
+		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }
+		
+		//(opt?='?' | mult?='*' | lower=INT '..' (upperInt=INT | upperMult?='*'))
+		public Alternatives getAlternatives_1() { return cAlternatives_1; }
+		
+		//opt?='?'
+		public Assignment getOptAssignment_1_0() { return cOptAssignment_1_0; }
+		
+		//'?'
+		public Keyword getOptQuestionMarkKeyword_1_0_0() { return cOptQuestionMarkKeyword_1_0_0; }
+		
+		//mult?='*'
+		public Assignment getMultAssignment_1_1() { return cMultAssignment_1_1; }
+		
+		//'*'
+		public Keyword getMultAsteriskKeyword_1_1_0() { return cMultAsteriskKeyword_1_1_0; }
+		
+		//lower=INT '..' (upperInt=INT | upperMult?='*')
+		public Group getGroup_1_2() { return cGroup_1_2; }
+		
+		//lower=INT
+		public Assignment getLowerAssignment_1_2_0() { return cLowerAssignment_1_2_0; }
+		
+		//INT
+		public RuleCall getLowerINTTerminalRuleCall_1_2_0_0() { return cLowerINTTerminalRuleCall_1_2_0_0; }
+		
+		//'..'
+		public Keyword getFullStopFullStopKeyword_1_2_1() { return cFullStopFullStopKeyword_1_2_1; }
+		
+		//(upperInt=INT | upperMult?='*')
+		public Alternatives getAlternatives_1_2_2() { return cAlternatives_1_2_2; }
+		
+		//upperInt=INT
+		public Assignment getUpperIntAssignment_1_2_2_0() { return cUpperIntAssignment_1_2_2_0; }
+		
+		//INT
+		public RuleCall getUpperIntINTTerminalRuleCall_1_2_2_0_0() { return cUpperIntINTTerminalRuleCall_1_2_2_0_0; }
+		
+		//upperMult?='*'
+		public Assignment getUpperMultAssignment_1_2_2_1() { return cUpperMultAssignment_1_2_2_1; }
+		
+		//'*'
+		public Keyword getUpperMultAsteriskKeyword_1_2_2_1_0() { return cUpperMultAsteriskKeyword_1_2_2_1_0; }
+		
+		//']'
+		public Keyword getRightSquareBracketKeyword_2() { return cRightSquareBracketKeyword_2; }
 	}
 	public class OperationCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.OperationCS");
@@ -475,20 +634,20 @@
 		private final Alternatives cOpAlternatives_1_1_0 = (Alternatives)cOpAssignment_1_1.eContents().get(0);
 		private final Keyword cOpFullStopKeyword_1_1_0_0 = (Keyword)cOpAlternatives_1_1_0.eContents().get(0);
 		private final Keyword cOpHyphenMinusGreaterThanSignKeyword_1_1_0_1 = (Keyword)cOpAlternatives_1_1_0.eContents().get(1);
-		private final Assignment cNameExpAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
-		private final RuleCall cNameExpNameExpCSParserRuleCall_1_2_0 = (RuleCall)cNameExpAssignment_1_2.eContents().get(0);
+		private final Assignment cNavExpAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cNavExpNavigationExpCSParserRuleCall_1_2_0 = (RuleCall)cNavExpAssignment_1_2.eContents().get(0);
 		
 		//CallExpCS:
-		//	PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') nameExp=NameExpCS)*;
+		//	PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') navExp=NavigationExpCS)*;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') nameExp=NameExpCS)*
+		//PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') navExp=NavigationExpCS)*
 		public Group getGroup() { return cGroup; }
 		
 		//PrimaryExpCS
 		public RuleCall getPrimaryExpCSParserRuleCall_0() { return cPrimaryExpCSParserRuleCall_0; }
 		
-		//({CallExpCS.source=current} op=('.' | '->') nameExp=NameExpCS)*
+		//({CallExpCS.source=current} op=('.' | '->') navExp=NavigationExpCS)*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{CallExpCS.source=current}
@@ -506,30 +665,279 @@
 		//'->'
 		public Keyword getOpHyphenMinusGreaterThanSignKeyword_1_1_0_1() { return cOpHyphenMinusGreaterThanSignKeyword_1_1_0_1; }
 		
-		//nameExp=NameExpCS
-		public Assignment getNameExpAssignment_1_2() { return cNameExpAssignment_1_2; }
+		//navExp=NavigationExpCS
+		public Assignment getNavExpAssignment_1_2() { return cNavExpAssignment_1_2; }
 		
-		//NameExpCS
-		public RuleCall getNameExpNameExpCSParserRuleCall_1_2_0() { return cNameExpNameExpCSParserRuleCall_1_2_0; }
+		//NavigationExpCS
+		public RuleCall getNavExpNavigationExpCSParserRuleCall_1_2_0() { return cNavExpNavigationExpCSParserRuleCall_1_2_0; }
 	}
 	public class PrimaryExpCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.PrimaryExpCS");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
-		private final RuleCall cNameExpCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cLiteralExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cSelfExpCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cNameExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cLiteralExpCSParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cLetExpCSParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
 		//PrimaryExpCS:
-		//	NameExpCS | LiteralExpCS;
+		//	SelfExpCS | NameExpCS | LiteralExpCS | LetExpCS;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//NameExpCS | LiteralExpCS
+		//SelfExpCS | NameExpCS | LiteralExpCS | LetExpCS
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
+		//SelfExpCS
+		public RuleCall getSelfExpCSParserRuleCall_0() { return cSelfExpCSParserRuleCall_0; }
+		
 		//NameExpCS
-		public RuleCall getNameExpCSParserRuleCall_0() { return cNameExpCSParserRuleCall_0; }
+		public RuleCall getNameExpCSParserRuleCall_1() { return cNameExpCSParserRuleCall_1; }
 		
 		//LiteralExpCS
-		public RuleCall getLiteralExpCSParserRuleCall_1() { return cLiteralExpCSParserRuleCall_1; }
+		public RuleCall getLiteralExpCSParserRuleCall_2() { return cLiteralExpCSParserRuleCall_2; }
+		
+		//LetExpCS
+		public RuleCall getLetExpCSParserRuleCall_3() { return cLetExpCSParserRuleCall_3; }
+	}
+	public class SelfExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.SelfExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cSelfExpCSAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cSelfKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		
+		//SelfExpCS:
+		//	{SelfExpCS} 'self';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{SelfExpCS} 'self'
+		public Group getGroup() { return cGroup; }
+		
+		//{SelfExpCS}
+		public Action getSelfExpCSAction_0() { return cSelfExpCSAction_0; }
+		
+		//'self'
+		public Keyword getSelfKeyword_1() { return cSelfKeyword_1; }
+	}
+	public class NavigationExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.NavigationExpCS");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cLoopExpCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cNameExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//NavigationExpCS:
+		//	LoopExpCS | NameExpCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//LoopExpCS | NameExpCS
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//LoopExpCS
+		public RuleCall getLoopExpCSParserRuleCall_0() { return cLoopExpCSParserRuleCall_0; }
+		
+		//NameExpCS
+		public RuleCall getNameExpCSParserRuleCall_1() { return cNameExpCSParserRuleCall_1; }
+	}
+	public class LoopExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.LoopExpCS");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cCollectExpCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIterateExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//LoopExpCS:
+		//	CollectExpCS | IterateExpCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//CollectExpCS | IterateExpCS
+		public Alternatives getAlternatives() { return cAlternatives; }
+		
+		//CollectExpCS
+		public RuleCall getCollectExpCSParserRuleCall_0() { return cCollectExpCSParserRuleCall_0; }
+		
+		//IterateExpCS
+		public RuleCall getIterateExpCSParserRuleCall_1() { return cIterateExpCSParserRuleCall_1; }
+	}
+	public class CollectExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.CollectExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cCollectKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Assignment cItVarAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final RuleCall cItVarIteratorVarCSParserRuleCall_2_0_0 = (RuleCall)cItVarAssignment_2_0.eContents().get(0);
+		private final Keyword cVerticalLineKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		private final Assignment cExpAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cExpExpCSParserRuleCall_3_0 = (RuleCall)cExpAssignment_3.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//CollectExpCS:
+		//	'collect' '(' (itVar=IteratorVarCS '|')? exp=ExpCS ')';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'collect' '(' (itVar=IteratorVarCS '|')? exp=ExpCS ')'
+		public Group getGroup() { return cGroup; }
+		
+		//'collect'
+		public Keyword getCollectKeyword_0() { return cCollectKeyword_0; }
+		
+		//'('
+		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
+		
+		//(itVar=IteratorVarCS '|')?
+		public Group getGroup_2() { return cGroup_2; }
+		
+		//itVar=IteratorVarCS
+		public Assignment getItVarAssignment_2_0() { return cItVarAssignment_2_0; }
+		
+		//IteratorVarCS
+		public RuleCall getItVarIteratorVarCSParserRuleCall_2_0_0() { return cItVarIteratorVarCSParserRuleCall_2_0_0; }
+		
+		//'|'
+		public Keyword getVerticalLineKeyword_2_1() { return cVerticalLineKeyword_2_1; }
+		
+		//exp=ExpCS
+		public Assignment getExpAssignment_3() { return cExpAssignment_3; }
+		
+		//ExpCS
+		public RuleCall getExpExpCSParserRuleCall_3_0() { return cExpExpCSParserRuleCall_3_0; }
+		
+		//')'
+		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
+	}
+	public class IteratorVarCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.IteratorVarCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cItNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cItNameIDTerminalRuleCall_0_0 = (RuleCall)cItNameAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cItTypeAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cItTypePathNameCSParserRuleCall_1_1_0 = (RuleCall)cItTypeAssignment_1_1.eContents().get(0);
+		
+		//IteratorVarCS:
+		//	itName=ID (':' itType=PathNameCS)?;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//itName=ID (':' itType=PathNameCS)?
+		public Group getGroup() { return cGroup; }
+		
+		//itName=ID
+		public Assignment getItNameAssignment_0() { return cItNameAssignment_0; }
+		
+		//ID
+		public RuleCall getItNameIDTerminalRuleCall_0_0() { return cItNameIDTerminalRuleCall_0_0; }
+		
+		//(':' itType=PathNameCS)?
+		public Group getGroup_1() { return cGroup_1; }
+		
+		//':'
+		public Keyword getColonKeyword_1_0() { return cColonKeyword_1_0; }
+		
+		//itType=PathNameCS
+		public Assignment getItTypeAssignment_1_1() { return cItTypeAssignment_1_1; }
+		
+		//PathNameCS
+		public RuleCall getItTypePathNameCSParserRuleCall_1_1_0() { return cItTypePathNameCSParserRuleCall_1_1_0; }
+	}
+	public class IterateExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.IterateExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cIterateKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cItVarAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cItVarIteratorVarCSParserRuleCall_2_0 = (RuleCall)cItVarAssignment_2.eContents().get(0);
+		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cAccVarAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cAccVarAccVarCSParserRuleCall_4_0 = (RuleCall)cAccVarAssignment_4.eContents().get(0);
+		private final Keyword cVerticalLineKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cExpAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cExpExpCSParserRuleCall_6_0 = (RuleCall)cExpAssignment_6.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//IterateExpCS:
+		//	'iterate' '(' itVar=IteratorVarCS ';' accVar=AccVarCS '|' exp=ExpCS ')';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'iterate' '(' itVar=IteratorVarCS ';' accVar=AccVarCS '|' exp=ExpCS ')'
+		public Group getGroup() { return cGroup; }
+		
+		//'iterate'
+		public Keyword getIterateKeyword_0() { return cIterateKeyword_0; }
+		
+		//'('
+		public Keyword getLeftParenthesisKeyword_1() { return cLeftParenthesisKeyword_1; }
+		
+		//itVar=IteratorVarCS
+		public Assignment getItVarAssignment_2() { return cItVarAssignment_2; }
+		
+		//IteratorVarCS
+		public RuleCall getItVarIteratorVarCSParserRuleCall_2_0() { return cItVarIteratorVarCSParserRuleCall_2_0; }
+		
+		//';'
+		public Keyword getSemicolonKeyword_3() { return cSemicolonKeyword_3; }
+		
+		//accVar=AccVarCS
+		public Assignment getAccVarAssignment_4() { return cAccVarAssignment_4; }
+		
+		//AccVarCS
+		public RuleCall getAccVarAccVarCSParserRuleCall_4_0() { return cAccVarAccVarCSParserRuleCall_4_0; }
+		
+		//'|'
+		public Keyword getVerticalLineKeyword_5() { return cVerticalLineKeyword_5; }
+		
+		//exp=ExpCS
+		public Assignment getExpAssignment_6() { return cExpAssignment_6; }
+		
+		//ExpCS
+		public RuleCall getExpExpCSParserRuleCall_6_0() { return cExpExpCSParserRuleCall_6_0; }
+		
+		//')'
+		public Keyword getRightParenthesisKeyword_7() { return cRightParenthesisKeyword_7; }
+	}
+	public class AccVarCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.AccVarCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cAccNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cAccNameIDTerminalRuleCall_0_0 = (RuleCall)cAccNameAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cAccTypeAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cAccTypePathNameCSParserRuleCall_1_1_0 = (RuleCall)cAccTypeAssignment_1_1.eContents().get(0);
+		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cAccInitExpAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cAccInitExpExpCSParserRuleCall_3_0 = (RuleCall)cAccInitExpAssignment_3.eContents().get(0);
+		
+		//AccVarCS:
+		//	accName=ID (':' accType=PathNameCS)? '=' accInitExp=ExpCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//accName=ID (':' accType=PathNameCS)? '=' accInitExp=ExpCS
+		public Group getGroup() { return cGroup; }
+		
+		//accName=ID
+		public Assignment getAccNameAssignment_0() { return cAccNameAssignment_0; }
+		
+		//ID
+		public RuleCall getAccNameIDTerminalRuleCall_0_0() { return cAccNameIDTerminalRuleCall_0_0; }
+		
+		//(':' accType=PathNameCS)?
+		public Group getGroup_1() { return cGroup_1; }
+		
+		//':'
+		public Keyword getColonKeyword_1_0() { return cColonKeyword_1_0; }
+		
+		//accType=PathNameCS
+		public Assignment getAccTypeAssignment_1_1() { return cAccTypeAssignment_1_1; }
+		
+		//PathNameCS
+		public RuleCall getAccTypePathNameCSParserRuleCall_1_1_0() { return cAccTypePathNameCSParserRuleCall_1_1_0; }
+		
+		//'='
+		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
+		
+		//accInitExp=ExpCS
+		public Assignment getAccInitExpAssignment_3() { return cAccInitExpAssignment_3; }
+		
+		//ExpCS
+		public RuleCall getAccInitExpExpCSParserRuleCall_3_0() { return cAccInitExpExpCSParserRuleCall_3_0; }
 	}
 	public class NameExpCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.NameExpCS");
@@ -616,24 +1024,28 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.LiteralExpCS");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final RuleCall cIntLiteralExpCSParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
-		private final RuleCall cStringLiteralExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
-		private final RuleCall cBooleanLiteralExpCSParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cBooleanLiteralExpCSParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cNullLiteralExpCSParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cCollectionLiteralExpCSParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
 		//LiteralExpCS:
-		//	IntLiteralExpCS | StringLiteralExpCS | BooleanLiteralExpCS;
+		//	IntLiteralExpCS | BooleanLiteralExpCS | NullLiteralExpCS | CollectionLiteralExpCS;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//IntLiteralExpCS | StringLiteralExpCS | BooleanLiteralExpCS
+		//IntLiteralExpCS | BooleanLiteralExpCS | NullLiteralExpCS | CollectionLiteralExpCS
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//IntLiteralExpCS
 		public RuleCall getIntLiteralExpCSParserRuleCall_0() { return cIntLiteralExpCSParserRuleCall_0; }
 		
-		//StringLiteralExpCS
-		public RuleCall getStringLiteralExpCSParserRuleCall_1() { return cStringLiteralExpCSParserRuleCall_1; }
-		
 		//BooleanLiteralExpCS
-		public RuleCall getBooleanLiteralExpCSParserRuleCall_2() { return cBooleanLiteralExpCSParserRuleCall_2; }
+		public RuleCall getBooleanLiteralExpCSParserRuleCall_1() { return cBooleanLiteralExpCSParserRuleCall_1; }
+		
+		//NullLiteralExpCS
+		public RuleCall getNullLiteralExpCSParserRuleCall_2() { return cNullLiteralExpCSParserRuleCall_2; }
+		
+		//CollectionLiteralExpCS
+		public RuleCall getCollectionLiteralExpCSParserRuleCall_3() { return cCollectionLiteralExpCSParserRuleCall_3; }
 	}
 	public class IntLiteralExpCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.IntLiteralExpCS");
@@ -650,21 +1062,6 @@
 		//INT
 		public RuleCall getIntSymbolINTTerminalRuleCall_0() { return cIntSymbolINTTerminalRuleCall_0; }
 	}
-	public class StringLiteralExpCSElements extends AbstractParserRuleElementFinder {
-		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.StringLiteralExpCS");
-		private final Assignment cStringSymbolAssignment = (Assignment)rule.eContents().get(1);
-		private final RuleCall cStringSymbolSTRINGTerminalRuleCall_0 = (RuleCall)cStringSymbolAssignment.eContents().get(0);
-		
-		//StringLiteralExpCS:
-		//	stringSymbol=STRING;
-		@Override public ParserRule getRule() { return rule; }
-		
-		//stringSymbol=STRING
-		public Assignment getStringSymbolAssignment() { return cStringSymbolAssignment; }
-		
-		//STRING
-		public RuleCall getStringSymbolSTRINGTerminalRuleCall_0() { return cStringSymbolSTRINGTerminalRuleCall_0; }
-	}
 	public class BooleanLiteralExpCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.BooleanLiteralExpCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
@@ -697,28 +1094,219 @@
 		//'false'
 		public Keyword getFalseKeyword_1_1() { return cFalseKeyword_1_1; }
 	}
+	public class NullLiteralExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.NullLiteralExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cNullLiteralExpCSAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cNullKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		
+		//NullLiteralExpCS:
+		//	{NullLiteralExpCS}
+		//	'null';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//{NullLiteralExpCS} 'null'
+		public Group getGroup() { return cGroup; }
+		
+		//{NullLiteralExpCS}
+		public Action getNullLiteralExpCSAction_0() { return cNullLiteralExpCSAction_0; }
+		
+		//'null'
+		public Keyword getNullKeyword_1() { return cNullKeyword_1; }
+	}
+	public class CollectionLiteralExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.CollectionLiteralExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cKindAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cKindCollectionKindCSEnumRuleCall_0_0 = (RuleCall)cKindAssignment_0.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cPartsAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cPartsCollectionLiteralPartCSParserRuleCall_2_0 = (RuleCall)cPartsAssignment_2.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		
+		//CollectionLiteralExpCS:
+		//	kind=CollectionKindCS '{'
+		//	parts+=CollectionLiteralPartCS*
+		//	'}';
+		@Override public ParserRule getRule() { return rule; }
+		
+		//kind=CollectionKindCS '{' parts+=CollectionLiteralPartCS* '}'
+		public Group getGroup() { return cGroup; }
+		
+		//kind=CollectionKindCS
+		public Assignment getKindAssignment_0() { return cKindAssignment_0; }
+		
+		//CollectionKindCS
+		public RuleCall getKindCollectionKindCSEnumRuleCall_0_0() { return cKindCollectionKindCSEnumRuleCall_0_0; }
+		
+		//'{'
+		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
+		
+		//parts+=CollectionLiteralPartCS*
+		public Assignment getPartsAssignment_2() { return cPartsAssignment_2; }
+		
+		//CollectionLiteralPartCS
+		public RuleCall getPartsCollectionLiteralPartCSParserRuleCall_2_0() { return cPartsCollectionLiteralPartCSParserRuleCall_2_0; }
+		
+		//'}'
+		public Keyword getRightCurlyBracketKeyword_3() { return cRightCurlyBracketKeyword_3; }
+	}
+	public class CollectionLiteralPartCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.CollectionLiteralPartCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cFirstAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cFirstExpCSParserRuleCall_0_0 = (RuleCall)cFirstAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cFullStopFullStopKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cLastAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cLastExpCSParserRuleCall_1_1_0 = (RuleCall)cLastAssignment_1_1.eContents().get(0);
+		
+		//CollectionLiteralPartCS:
+		//	first=ExpCS ('..' last=ExpCS)?;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//first=ExpCS ('..' last=ExpCS)?
+		public Group getGroup() { return cGroup; }
+		
+		//first=ExpCS
+		public Assignment getFirstAssignment_0() { return cFirstAssignment_0; }
+		
+		//ExpCS
+		public RuleCall getFirstExpCSParserRuleCall_0_0() { return cFirstExpCSParserRuleCall_0_0; }
+		
+		//('..' last=ExpCS)?
+		public Group getGroup_1() { return cGroup_1; }
+		
+		//'..'
+		public Keyword getFullStopFullStopKeyword_1_0() { return cFullStopFullStopKeyword_1_0; }
+		
+		//last=ExpCS
+		public Assignment getLastAssignment_1_1() { return cLastAssignment_1_1; }
+		
+		//ExpCS
+		public RuleCall getLastExpCSParserRuleCall_1_1_0() { return cLastExpCSParserRuleCall_1_1_0; }
+	}
+	public class LetExpCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.LetExpCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLetKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cLetVarsAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cLetVarsLetVarCSParserRuleCall_1_0 = (RuleCall)cLetVarsAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cCommaKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Assignment cLetVarsAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cLetVarsLetVarCSParserRuleCall_2_1_0 = (RuleCall)cLetVarsAssignment_2_1.eContents().get(0);
+		private final Keyword cInKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cInExpAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cInExpExpCSParserRuleCall_4_0 = (RuleCall)cInExpAssignment_4.eContents().get(0);
+		
+		//LetExpCS:
+		//	'let' letVars+=LetVarCS (',' letVars+=LetVarCS)*
+		//	'in' inExp=ExpCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//'let' letVars+=LetVarCS (',' letVars+=LetVarCS)* 'in' inExp=ExpCS
+		public Group getGroup() { return cGroup; }
+		
+		//'let'
+		public Keyword getLetKeyword_0() { return cLetKeyword_0; }
+		
+		//letVars+=LetVarCS
+		public Assignment getLetVarsAssignment_1() { return cLetVarsAssignment_1; }
+		
+		//LetVarCS
+		public RuleCall getLetVarsLetVarCSParserRuleCall_1_0() { return cLetVarsLetVarCSParserRuleCall_1_0; }
+		
+		//(',' letVars+=LetVarCS)*
+		public Group getGroup_2() { return cGroup_2; }
+		
+		//','
+		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
+		
+		//letVars+=LetVarCS
+		public Assignment getLetVarsAssignment_2_1() { return cLetVarsAssignment_2_1; }
+		
+		//LetVarCS
+		public RuleCall getLetVarsLetVarCSParserRuleCall_2_1_0() { return cLetVarsLetVarCSParserRuleCall_2_1_0; }
+		
+		//'in'
+		public Keyword getInKeyword_3() { return cInKeyword_3; }
+		
+		//inExp=ExpCS
+		public Assignment getInExpAssignment_4() { return cInExpAssignment_4; }
+		
+		//ExpCS
+		public RuleCall getInExpExpCSParserRuleCall_4_0() { return cInExpExpCSParserRuleCall_4_0; }
+	}
+	public class LetVarCSElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.LetVarCS");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cNameAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cNameIDTerminalRuleCall_0_0 = (RuleCall)cNameAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cTypeRefAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cTypeRefPathNameCSParserRuleCall_1_1_0 = (RuleCall)cTypeRefAssignment_1_1.eContents().get(0);
+		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cInitExpAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cInitExpExpCSParserRuleCall_3_0 = (RuleCall)cInitExpAssignment_3.eContents().get(0);
+		
+		//LetVarCS:
+		//	name=ID (':' typeRef=PathNameCS)? '=' initExp=ExpCS;
+		@Override public ParserRule getRule() { return rule; }
+		
+		//name=ID (':' typeRef=PathNameCS)? '=' initExp=ExpCS
+		public Group getGroup() { return cGroup; }
+		
+		//name=ID
+		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
+		
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0_0() { return cNameIDTerminalRuleCall_0_0; }
+		
+		//(':' typeRef=PathNameCS)?
+		public Group getGroup_1() { return cGroup_1; }
+		
+		//':'
+		public Keyword getColonKeyword_1_0() { return cColonKeyword_1_0; }
+		
+		//typeRef=PathNameCS
+		public Assignment getTypeRefAssignment_1_1() { return cTypeRefAssignment_1_1; }
+		
+		//PathNameCS
+		public RuleCall getTypeRefPathNameCSParserRuleCall_1_1_0() { return cTypeRefPathNameCSParserRuleCall_1_1_0; }
+		
+		//'='
+		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
+		
+		//initExp=ExpCS
+		public Assignment getInitExpAssignment_3() { return cInitExpAssignment_3; }
+		
+		//ExpCS
+		public RuleCall getInitExpExpCSParserRuleCall_3_0() { return cInitExpExpCSParserRuleCall_3_0; }
+	}
 	public class PathNameCSElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.PathNameCS");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Assignment cPathAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final RuleCall cPathPathElementCSParserRuleCall_0_0 = (RuleCall)cPathAssignment_0.eContents().get(0);
+		private final Assignment cPathElementsAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cPathElementsPathElementCSParserRuleCall_0_0 = (RuleCall)cPathElementsAssignment_0.eContents().get(0);
 		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
 		private final Keyword cColonColonKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
 		private final Assignment cPathElementsAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cPathElementsPathElementCSParserRuleCall_1_1_0 = (RuleCall)cPathElementsAssignment_1_1.eContents().get(0);
 		
 		//PathNameCS:
-		//	path+=PathElementCS ('::' pathElements+=PathElementCS)*;
+		//	pathElements+=PathElementCS ('::' pathElements+=PathElementCS)*;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//path+=PathElementCS ('::' pathElements+=PathElementCS)*
+		//pathElements+=PathElementCS ('::' pathElements+=PathElementCS)*
 		public Group getGroup() { return cGroup; }
 		
-		//path+=PathElementCS
-		public Assignment getPathAssignment_0() { return cPathAssignment_0; }
+		//pathElements+=PathElementCS
+		public Assignment getPathElementsAssignment_0() { return cPathElementsAssignment_0; }
 		
 		//PathElementCS
-		public RuleCall getPathPathElementCSParserRuleCall_0_0() { return cPathPathElementCSParserRuleCall_0_0; }
+		public RuleCall getPathElementsPathElementCSParserRuleCall_0_0() { return cPathElementsPathElementCSParserRuleCall_0_0; }
 		
 		//('::' pathElements+=PathElementCS)*
 		public Group getGroup_1() { return cGroup_1; }
@@ -748,11 +1336,29 @@
 		public RuleCall getElementNameIDTerminalRuleCall_0() { return cElementNameIDTerminalRuleCall_0; }
 	}
 	
+	public class CollectionKindCSElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.qvtd.doc.MiniOCLCS.CollectionKindCS");
+		private final EnumLiteralDeclaration cCollectionEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
+		private final Keyword cCollectionCollectionKeyword_0 = (Keyword)cCollectionEnumLiteralDeclaration.eContents().get(0);
+		
+		//enum CollectionKindCS:
+		//	Collection;
+		public EnumRule getRule() { return rule; }
+		
+		//Collection
+		public EnumLiteralDeclaration getCollectionEnumLiteralDeclaration() { return cCollectionEnumLiteralDeclaration; }
+		
+		//'Collection'
+		public Keyword getCollectionCollectionKeyword_0() { return cCollectionCollectionKeyword_0; }
+	}
 	
 	private final RootCSElements pRootCS;
 	private final PackageCSElements pPackageCS;
+	private final ClassifierCSElements pClassifierCS;
 	private final ClassCSElements pClassCS;
+	private final DatatypeCSElements pDatatypeCS;
 	private final PropertyCSElements pPropertyCS;
+	private final MultiplicityCSElements pMultiplicityCS;
 	private final OperationCSElements pOperationCS;
 	private final ParameterCSElements pParameterCS;
 	private final ConstraintsDefCSElements pConstraintsDefCS;
@@ -761,12 +1367,24 @@
 	private final LogicExpCSElements pLogicExpCS;
 	private final CallExpCSElements pCallExpCS;
 	private final PrimaryExpCSElements pPrimaryExpCS;
+	private final SelfExpCSElements pSelfExpCS;
+	private final NavigationExpCSElements pNavigationExpCS;
+	private final LoopExpCSElements pLoopExpCS;
+	private final CollectExpCSElements pCollectExpCS;
+	private final IteratorVarCSElements pIteratorVarCS;
+	private final IterateExpCSElements pIterateExpCS;
+	private final AccVarCSElements pAccVarCS;
 	private final NameExpCSElements pNameExpCS;
 	private final RoundedBracketClauseCSElements pRoundedBracketClauseCS;
 	private final LiteralExpCSElements pLiteralExpCS;
 	private final IntLiteralExpCSElements pIntLiteralExpCS;
-	private final StringLiteralExpCSElements pStringLiteralExpCS;
 	private final BooleanLiteralExpCSElements pBooleanLiteralExpCS;
+	private final NullLiteralExpCSElements pNullLiteralExpCS;
+	private final CollectionKindCSElements eCollectionKindCS;
+	private final CollectionLiteralExpCSElements pCollectionLiteralExpCS;
+	private final CollectionLiteralPartCSElements pCollectionLiteralPartCS;
+	private final LetExpCSElements pLetExpCS;
+	private final LetVarCSElements pLetVarCS;
 	private final PathNameCSElements pPathNameCS;
 	private final PathElementCSElements pPathElementCS;
 	
@@ -781,8 +1399,11 @@
 		this.gaTerminals = gaTerminals;
 		this.pRootCS = new RootCSElements();
 		this.pPackageCS = new PackageCSElements();
+		this.pClassifierCS = new ClassifierCSElements();
 		this.pClassCS = new ClassCSElements();
+		this.pDatatypeCS = new DatatypeCSElements();
 		this.pPropertyCS = new PropertyCSElements();
+		this.pMultiplicityCS = new MultiplicityCSElements();
 		this.pOperationCS = new OperationCSElements();
 		this.pParameterCS = new ParameterCSElements();
 		this.pConstraintsDefCS = new ConstraintsDefCSElements();
@@ -791,12 +1412,24 @@
 		this.pLogicExpCS = new LogicExpCSElements();
 		this.pCallExpCS = new CallExpCSElements();
 		this.pPrimaryExpCS = new PrimaryExpCSElements();
+		this.pSelfExpCS = new SelfExpCSElements();
+		this.pNavigationExpCS = new NavigationExpCSElements();
+		this.pLoopExpCS = new LoopExpCSElements();
+		this.pCollectExpCS = new CollectExpCSElements();
+		this.pIteratorVarCS = new IteratorVarCSElements();
+		this.pIterateExpCS = new IterateExpCSElements();
+		this.pAccVarCS = new AccVarCSElements();
 		this.pNameExpCS = new NameExpCSElements();
 		this.pRoundedBracketClauseCS = new RoundedBracketClauseCSElements();
 		this.pLiteralExpCS = new LiteralExpCSElements();
 		this.pIntLiteralExpCS = new IntLiteralExpCSElements();
-		this.pStringLiteralExpCS = new StringLiteralExpCSElements();
 		this.pBooleanLiteralExpCS = new BooleanLiteralExpCSElements();
+		this.pNullLiteralExpCS = new NullLiteralExpCSElements();
+		this.eCollectionKindCS = new CollectionKindCSElements();
+		this.pCollectionLiteralExpCS = new CollectionLiteralExpCSElements();
+		this.pCollectionLiteralPartCS = new CollectionLiteralPartCSElements();
+		this.pLetExpCS = new LetExpCSElements();
+		this.pLetVarCS = new LetVarCSElements();
 		this.pPathNameCS = new PathNameCSElements();
 		this.pPathElementCS = new PathElementCSElements();
 	}
@@ -841,7 +1474,7 @@
 	
 	//PackageCS:
 	//	'package' name=ID '{' (packages+=PackageCS
-	//	| classes+=ClassCS)*
+	//	| classifiers+=ClassifierCS)*
 	//	'}';
 	public PackageCSElements getPackageCSAccess() {
 		return pPackageCS;
@@ -851,6 +1484,16 @@
 		return getPackageCSAccess().getRule();
 	}
 	
+	//ClassifierCS:
+	//	ClassCS | DatatypeCS;
+	public ClassifierCSElements getClassifierCSAccess() {
+		return pClassifierCS;
+	}
+	
+	public ParserRule getClassifierCSRule() {
+		return getClassifierCSAccess().getRule();
+	}
+	
 	//ClassCS:
 	//	'class' name=ID ('extends' extends=PathNameCS)? '{' (properties+=PropertyCS
 	//	| operations+=OperationCS)*
@@ -863,8 +1506,19 @@
 		return getClassCSAccess().getRule();
 	}
 	
+	//DatatypeCS:
+	//	'datatype' name=ID ':' typeName=STRING ';';
+	public DatatypeCSElements getDatatypeCSAccess() {
+		return pDatatypeCS;
+	}
+	
+	public ParserRule getDatatypeCSRule() {
+		return getDatatypeCSAccess().getRule();
+	}
+	
 	//PropertyCS:
-	//	'prop' name=ID ':' typeRef=PathNameCS ';';
+	//	('attribute' | 'containment' | 'cross_reference') name=ID ':' typeRef=PathNameCS
+	//	multiplicity=MultiplicityCS? ';';
 	public PropertyCSElements getPropertyCSAccess() {
 		return pPropertyCS;
 	}
@@ -873,6 +1527,17 @@
 		return getPropertyCSAccess().getRule();
 	}
 	
+	//MultiplicityCS:
+	//	'[' (opt?='?' | mult?='*' | lower=INT '..' (upperInt=INT | upperMult?='*'))
+	//	']';
+	public MultiplicityCSElements getMultiplicityCSAccess() {
+		return pMultiplicityCS;
+	}
+	
+	public ParserRule getMultiplicityCSRule() {
+		return getMultiplicityCSAccess().getRule();
+	}
+	
 	//OperationCS:
 	//	'op' name=ID
 	//	'(' (params+=ParameterCS (',' params+=ParameterCS)*)? ')'
@@ -941,7 +1606,7 @@
 	}
 	
 	//CallExpCS:
-	//	PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') nameExp=NameExpCS)*;
+	//	PrimaryExpCS ({CallExpCS.source=current} op=('.' | '->') navExp=NavigationExpCS)*;
 	public CallExpCSElements getCallExpCSAccess() {
 		return pCallExpCS;
 	}
@@ -951,7 +1616,7 @@
 	}
 	
 	//PrimaryExpCS:
-	//	NameExpCS | LiteralExpCS;
+	//	SelfExpCS | NameExpCS | LiteralExpCS | LetExpCS;
 	public PrimaryExpCSElements getPrimaryExpCSAccess() {
 		return pPrimaryExpCS;
 	}
@@ -960,6 +1625,76 @@
 		return getPrimaryExpCSAccess().getRule();
 	}
 	
+	//SelfExpCS:
+	//	{SelfExpCS} 'self';
+	public SelfExpCSElements getSelfExpCSAccess() {
+		return pSelfExpCS;
+	}
+	
+	public ParserRule getSelfExpCSRule() {
+		return getSelfExpCSAccess().getRule();
+	}
+	
+	//NavigationExpCS:
+	//	LoopExpCS | NameExpCS;
+	public NavigationExpCSElements getNavigationExpCSAccess() {
+		return pNavigationExpCS;
+	}
+	
+	public ParserRule getNavigationExpCSRule() {
+		return getNavigationExpCSAccess().getRule();
+	}
+	
+	//LoopExpCS:
+	//	CollectExpCS | IterateExpCS;
+	public LoopExpCSElements getLoopExpCSAccess() {
+		return pLoopExpCS;
+	}
+	
+	public ParserRule getLoopExpCSRule() {
+		return getLoopExpCSAccess().getRule();
+	}
+	
+	//CollectExpCS:
+	//	'collect' '(' (itVar=IteratorVarCS '|')? exp=ExpCS ')';
+	public CollectExpCSElements getCollectExpCSAccess() {
+		return pCollectExpCS;
+	}
+	
+	public ParserRule getCollectExpCSRule() {
+		return getCollectExpCSAccess().getRule();
+	}
+	
+	//IteratorVarCS:
+	//	itName=ID (':' itType=PathNameCS)?;
+	public IteratorVarCSElements getIteratorVarCSAccess() {
+		return pIteratorVarCS;
+	}
+	
+	public ParserRule getIteratorVarCSRule() {
+		return getIteratorVarCSAccess().getRule();
+	}
+	
+	//IterateExpCS:
+	//	'iterate' '(' itVar=IteratorVarCS ';' accVar=AccVarCS '|' exp=ExpCS ')';
+	public IterateExpCSElements getIterateExpCSAccess() {
+		return pIterateExpCS;
+	}
+	
+	public ParserRule getIterateExpCSRule() {
+		return getIterateExpCSAccess().getRule();
+	}
+	
+	//AccVarCS:
+	//	accName=ID (':' accType=PathNameCS)? '=' accInitExp=ExpCS;
+	public AccVarCSElements getAccVarCSAccess() {
+		return pAccVarCS;
+	}
+	
+	public ParserRule getAccVarCSRule() {
+		return getAccVarCSAccess().getRule();
+	}
+	
 	//NameExpCS:
 	//	expName=PathNameCS
 	//	roundedBrackets=RoundedBracketClauseCS?;
@@ -984,7 +1719,7 @@
 	}
 	
 	//LiteralExpCS:
-	//	IntLiteralExpCS | StringLiteralExpCS | BooleanLiteralExpCS;
+	//	IntLiteralExpCS | BooleanLiteralExpCS | NullLiteralExpCS | CollectionLiteralExpCS;
 	public LiteralExpCSElements getLiteralExpCSAccess() {
 		return pLiteralExpCS;
 	}
@@ -1003,16 +1738,6 @@
 		return getIntLiteralExpCSAccess().getRule();
 	}
 	
-	//StringLiteralExpCS:
-	//	stringSymbol=STRING;
-	public StringLiteralExpCSElements getStringLiteralExpCSAccess() {
-		return pStringLiteralExpCS;
-	}
-	
-	public ParserRule getStringLiteralExpCSRule() {
-		return getStringLiteralExpCSAccess().getRule();
-	}
-	
 	//BooleanLiteralExpCS:
 	//	{BooleanExpCS} (boolSymbol?='true'
 	//	| 'false');
@@ -1024,8 +1749,72 @@
 		return getBooleanLiteralExpCSAccess().getRule();
 	}
 	
+	//NullLiteralExpCS:
+	//	{NullLiteralExpCS}
+	//	'null';
+	public NullLiteralExpCSElements getNullLiteralExpCSAccess() {
+		return pNullLiteralExpCS;
+	}
+	
+	public ParserRule getNullLiteralExpCSRule() {
+		return getNullLiteralExpCSAccess().getRule();
+	}
+	
+	//enum CollectionKindCS:
+	//	Collection;
+	public CollectionKindCSElements getCollectionKindCSAccess() {
+		return eCollectionKindCS;
+	}
+	
+	public EnumRule getCollectionKindCSRule() {
+		return getCollectionKindCSAccess().getRule();
+	}
+	
+	//CollectionLiteralExpCS:
+	//	kind=CollectionKindCS '{'
+	//	parts+=CollectionLiteralPartCS*
+	//	'}';
+	public CollectionLiteralExpCSElements getCollectionLiteralExpCSAccess() {
+		return pCollectionLiteralExpCS;
+	}
+	
+	public ParserRule getCollectionLiteralExpCSRule() {
+		return getCollectionLiteralExpCSAccess().getRule();
+	}
+	
+	//CollectionLiteralPartCS:
+	//	first=ExpCS ('..' last=ExpCS)?;
+	public CollectionLiteralPartCSElements getCollectionLiteralPartCSAccess() {
+		return pCollectionLiteralPartCS;
+	}
+	
+	public ParserRule getCollectionLiteralPartCSRule() {
+		return getCollectionLiteralPartCSAccess().getRule();
+	}
+	
+	//LetExpCS:
+	//	'let' letVars+=LetVarCS (',' letVars+=LetVarCS)*
+	//	'in' inExp=ExpCS;
+	public LetExpCSElements getLetExpCSAccess() {
+		return pLetExpCS;
+	}
+	
+	public ParserRule getLetExpCSRule() {
+		return getLetExpCSAccess().getRule();
+	}
+	
+	//LetVarCS:
+	//	name=ID (':' typeRef=PathNameCS)? '=' initExp=ExpCS;
+	public LetVarCSElements getLetVarCSAccess() {
+		return pLetVarCS;
+	}
+	
+	public ParserRule getLetVarCSRule() {
+		return getLetVarCSAccess().getRule();
+	}
+	
 	//PathNameCS:
-	//	path+=PathElementCS ('::' pathElements+=PathElementCS)*;
+	//	pathElements+=PathElementCS ('::' pathElements+=PathElementCS)*;
 	public PathNameCSElements getPathNameCSAccess() {
 		return pPathNameCS;
 	}
diff --git a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/validation/AbstractMiniOCLCSValidator.java b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/validation/AbstractMiniOCLCSValidator.java
index 0e73c75..ce1b6f4 100644
--- a/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/validation/AbstractMiniOCLCSValidator.java
+++ b/doc/org.eclipse.qvtd.doc.minioclcs.xtext/src-gen/org/eclipse/qvtd/doc/validation/AbstractMiniOCLCSValidator.java
@@ -5,6 +5,7 @@
 
 import java.util.ArrayList;
 import java.util.List;
+
 import org.eclipse.emf.ecore.EPackage;
 import org.eclipse.xtext.validation.AbstractDeclarativeValidator;