diff --git a/org.xtext.example.mydslTest/.classpath b/org.xtext.example.mydslTest/.classpath
new file mode 100644
index 0000000000000000000000000000000000000000..3f1be5028577c15f387245557efec88746d8654c
--- /dev/null
+++ b/org.xtext.example.mydslTest/.classpath
@@ -0,0 +1,9 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/org.xtext.example.mydslTest/.project b/org.xtext.example.mydslTest/.project
new file mode 100644
index 0000000000000000000000000000000000000000..18f9543bd5c125902f31659929d7944fc50ef8e5
--- /dev/null
+++ b/org.xtext.example.mydslTest/.project
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.xtext.example.mydslTest</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
+	</natures>
+</projectDescription>
diff --git a/org.xtext.example.mydslTest/META-INF/MANIFEST.MF b/org.xtext.example.mydslTest/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000000000000000000000000000000000..4072b055618b77e104d40d9b37a338d59ecb704f
--- /dev/null
+++ b/org.xtext.example.mydslTest/META-INF/MANIFEST.MF
@@ -0,0 +1,29 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: org.xtext.example.mydslTest
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0
+Bundle-SymbolicName: org.xtext.example.mydslTest; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext;bundle-version="2.1.0";visibility:=reexport,
+ org.eclipse.xtext.xbase;bundle-version="2.1.0";resolution:=optional;visibility:=reexport,
+ org.apache.log4j;bundle-version="1.2.15";visibility:=reexport,
+ org.apache.commons.logging;bundle-version="1.0.4";resolution:=optional;visibility:=reexport,
+ org.eclipse.xtext.generator;resolution:=optional,
+ org.eclipse.emf.codegen.ecore;resolution:=optional,
+ org.eclipse.emf.mwe.utils;resolution:=optional,
+ org.eclipse.emf.mwe2.launch;resolution:=optional,
+ edu.kit.ipd.descartes.mm,
+ org.eclipse.xtext.util,
+ org.antlr.runtime
+Import-Package: org.apache.log4j,
+ org.apache.commons.logging
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: org.xtext.example.mydsl,
+ org.xtext.example.mydsl.services,
+ org.xtext.example.mydsl.parseTreeConstruction,
+ org.xtext.example.mydsl.parser.antlr,
+ org.xtext.example.mydsl.parser.antlr.internal,
+ org.xtext.example.mydsl.validation,
+ org.xtext.example.mydsl.scoping,
+ org.xtext.example.mydsl.formatting
diff --git a/org.xtext.example.mydslTest/build.properties b/org.xtext.example.mydslTest/build.properties
new file mode 100644
index 0000000000000000000000000000000000000000..31255ed05bc1242430be9f3e44440c2e42921649
--- /dev/null
+++ b/org.xtext.example.mydslTest/build.properties
@@ -0,0 +1,6 @@
+source.. = src/,\
+          src-gen/,\
+          xtend-gen/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
\ No newline at end of file
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/AbstractMyDslTestRuntimeModule.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/AbstractMyDslTestRuntimeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..4ddc3fee1d7d8a8ee75d9a7f9391ecd2ea674922
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/AbstractMyDslTestRuntimeModule.java
@@ -0,0 +1,142 @@
+/*
+ * generated by Xtext
+ */
+package org.xtext.example.mydsl;
+
+import java.util.Properties;
+
+import org.eclipse.xtext.Constants;
+import org.eclipse.xtext.service.DefaultRuntimeModule;
+
+import com.google.inject.Binder;
+import com.google.inject.name.Names;
+
+/**
+ * Manual modifications go to {org.xtext.example.mydsl.MyDslTestRuntimeModule}
+ */
+ @SuppressWarnings("all")
+public abstract class AbstractMyDslTestRuntimeModule extends DefaultRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "org/xtext/example/mydsl/MyDslTest.properties");
+		super.configure(binder);
+	}
+	
+	public void configureLanguageName(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("org.xtext.example.mydsl.MyDslTest");
+	}
+	
+	public void configureFileExtensions(Binder binder) {
+		if (properties == null || properties.getProperty(Constants.FILE_EXTENSIONS) == null)
+			binder.bind(String.class).annotatedWith(Names.named(Constants.FILE_EXTENSIONS)).toInstance("mydslTest");
+	}
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return org.xtext.example.mydsl.services.MyDslTestGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parseTreeConstructor.ParseTreeConstructorFragment
+	public Class<? extends org.eclipse.xtext.parsetree.reconstr.IParseTreeConstructor> bindIParseTreeConstructor() {
+		return org.xtext.example.mydsl.parseTreeConstruction.MyDslTestParsetreeConstructor.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return org.xtext.example.mydsl.parser.antlr.MyDslTestParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.ITokenToStringConverter> bindITokenToStringConverter() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenToStringConverter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider> bindIAntlrTokenFileProvider() {
+		return org.xtext.example.mydsl.parser.antlr.MyDslTestAntlrTokenFileProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestLexer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public com.google.inject.Provider<org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestLexer> provideInternalMyDslTestLexer() {
+		return org.eclipse.xtext.parser.antlr.LexerProvider.create(org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureRuntimeLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.parser.antlr.LexerBindings.RUNTIME)).to(org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.ITokenDefProvider> bindITokenDefProvider() {
+		return org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.ecore2xtext.Ecore2XtextValueConverterServiceFragment
+	public Class<? extends org.eclipse.xtext.conversion.IValueConverterService> bindIValueConverterService() {
+		return org.eclipse.xtext.common.services.Ecore2XtextTerminalConverters.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.validation.JavaValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.xtext.example.mydsl.validation.MyDslTestJavaValidator> bindMyDslTestJavaValidator() {
+		return org.xtext.example.mydsl.validation.MyDslTestJavaValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IScopeProvider> bindIScopeProvider() {
+		return org.xtext.example.mydsl.scoping.MyDslTestScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public void configureIScopeProviderDelegate(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.scoping.IScopeProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider.NAMED_DELEGATE)).to(org.eclipse.xtext.scoping.impl.SimpleLocalScopeProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IGlobalScopeProvider> bindIGlobalScopeProvider() {
+		return org.eclipse.xtext.scoping.impl.ImportUriGlobalScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public void configureIgnoreCaseLinking(com.google.inject.Binder binder) {
+		binder.bindConstant().annotatedWith(org.eclipse.xtext.scoping.IgnoreCaseLinking.class).to(false);
+	}
+
+	// contributed by org.eclipse.xtext.generator.exporting.SimpleNamesFragment
+	public Class<? extends org.eclipse.xtext.naming.IQualifiedNameProvider> bindIQualifiedNameProvider() {
+		return org.eclipse.xtext.naming.SimpleNameProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return org.xtext.example.mydsl.formatting.MyDslTestFormatter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.resource.IContainer.Manager> bindIContainer$Manager() {
+		return org.eclipse.xtext.resource.containers.StateBasedContainerManager.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.resource.containers.IAllContainersState.Provider> bindIAllContainersState$Provider() {
+		return org.eclipse.xtext.resource.containers.ResourceSetBasedAllContainersStateProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptions(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).to(org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptionsBuilderScope(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.resource.impl.ResourceDescriptionsProvider.NAMED_BUILDER_SCOPE)).to(org.eclipse.xtext.resource.impl.ResourceSetBasedResourceDescriptions.class);
+	}
+
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTest.xmi b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTest.xmi
new file mode 100644
index 0000000000000000000000000000000000000000..6f877586fa4d9d54d5813b2336de6776d2eadfc0
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTest.xmi
@@ -0,0 +1,1051 @@
+<?xml version="1.0" encoding="ASCII"?>
+<xmi:XMI xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore" xmlns:xtext="http://www.eclipse.org/2008/Xtext">
+  <xtext:Grammar name="org.xtext.example.mydsl.MyDslTest" usedGrammars="/1">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel">
+      <ePackage href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="servicebehavior">
+      <ePackage href="http://www.descartes-research.net/metamodel/servicebehavior/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="repository">
+      <ePackage href="http://www.descartes-research.net/metamodel/repository/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="repository_composites">
+      <ePackage href="http://www.descartes-research.net/metamodel/repository_composites/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="functions">
+      <ePackage href="http://www.descartes-research.net/metamodel/functions/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="system">
+      <ePackage href="http://www.descartes-research.net/metamodel/system/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="resourceconfiguration">
+      <ePackage href="http://www.descartes-research.net/metamodel/resourceconfiguration/0.1#/"/>
+    </metamodelDeclarations>
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="resourcetype">
+      <ePackage href="http://www.descartes-research.net/metamodel/resourcetype/0.1#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:ParserRule" name="Repository">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Repository"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="Repository"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="datatypes"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="datatypes" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="datatypes" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.1"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="interfaces"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="interfaces" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="interfaces" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.4"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="components"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="components" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="components" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.2"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="DataType">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//DataType"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.6"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.7"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.8"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RepositoryComponent">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RepositoryComponent"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.5"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.15"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.16"/>
+        <elements xsi:type="xtext:RuleCall" rule="/0/@rules.17"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="EString">
+      <type metamodel="/0/@metamodelDeclarations.2">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.2"/>
+        <elements xsi:type="xtext:RuleCall" rule="/1/@rules.0"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Interface">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Interface"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="Interface"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="parentInterfaces"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="parentInterfaces" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.3">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Interface"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="parentInterfaces" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.3">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Interface"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="signatures"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="signatures" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="signatures" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.11"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RepositoryComponent_Impl">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RepositoryComponent"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="RepositoryComponent"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="relationship"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.0">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.0">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="providedRoles"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="requiredRoles"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="CollectionDataType">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//CollectionDataType"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="CollectionDataType"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="innerType"/>
+        <elements xsi:type="xtext:Assignment" feature="innerType" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//DataType"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="CompositeDataType">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//CompositeDataType"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="CompositeDataType"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="parentTypes"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="parentTypes" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.3">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//CompositeDataType"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="parentTypes" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.3">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//CompositeDataType"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="innerDeclarations"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="innerDeclarations" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="innerDeclarations" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.9"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="PrimitiveDataType">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveDataType"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="PrimitiveDataType"/>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="type"/>
+        <elements xsi:type="xtext:Assignment" feature="type" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.10"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="ref"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="InnerDeclaration">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//InnerDeclaration"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="InnerDeclaration"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="dataType"/>
+        <elements xsi:type="xtext:Assignment" feature="dataType" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//DataType"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:EnumRule" name="PrimitiveTypeEnum">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EEnum" href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/INT"/>
+          <literal value="INT"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/STRING"/>
+          <literal value="STRING"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/BOOL"/>
+          <literal value="BOOL"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/DOUBLE"/>
+          <literal value="DOUBLE"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/CHAR"/>
+          <literal value="CHAR"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/BYTE"/>
+          <literal value="BYTE"/>
+        </elements>
+        <elements xsi:type="xtext:EnumLiteralDeclaration">
+          <enumLiteral href="http://www.descartes-research.net/metamodel/repository/0.1#//PrimitiveTypeEnum/LONG"/>
+          <literal value="LONG"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Signature">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Signature"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Alternatives">
+          <elements xsi:type="xtext:Assignment" feature="returnType" operator="=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.3">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//DataType"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="void"/>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="("/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="parameters" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="parameters" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.12"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value=")"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="Parameter">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Parameter"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Assignment" feature="dataType" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//DataType"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ProvidedRole">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//ProvidedRole"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="/0/@metamodelDeclarations.3">
+            <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//ProvidedRole"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="provides"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Assignment" feature="interface" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.3">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Interface"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RequiredRole">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RequiredRole"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="/0/@metamodelDeclarations.3">
+            <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RequiredRole"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="requires"/>
+        <elements xsi:type="xtext:Group" cardinality="*">
+          <elements xsi:type="xtext:Assignment" feature="interface" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.3">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//Interface"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Keyword" cardinality="?" value=","/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="BasicComponent">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//BasicComponent"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="BasicComponent"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="relationship"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.0">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.0">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="CompositeComponent">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//CompositeComponent"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="CompositeComponent"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="relationship"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.0">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.0">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="assembly"/>
+          <elements xsi:type="xtext:Assignment" feature="assembly" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="SubSystem">
+      <type metamodel="/0/@metamodelDeclarations.3">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//SubSystem"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="SubSystem"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="providedRoles"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="providedRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.13"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="requiredRoles"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="requiredRoles" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.14"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="relationship"/>
+          <elements xsi:type="xtext:Keyword" value="("/>
+          <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+            <terminal xsi:type="xtext:CrossReference">
+              <type metamodel="/0/@metamodelDeclarations.0">
+                <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+              </type>
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+            </terminal>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="relationship" operator="+=">
+              <terminal xsi:type="xtext:CrossReference">
+                <type metamodel="/0/@metamodelDeclarations.0">
+                  <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/parameterdependencies/0.1#//Relationship"/>
+                </type>
+                <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value=")"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="assembly"/>
+          <elements xsi:type="xtext:Assignment" feature="assembly" operator="=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.18"/>
+          </elements>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ComposedStructureAssembly">
+      <type metamodel="/0/@metamodelDeclarations.4">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//ComposedStructureAssembly"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="/0/@metamodelDeclarations.4">
+            <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//ComposedStructureAssembly"/>
+          </type>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="ComposedStructureAssembly"/>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="assemblyContexts"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="assemblyContexts" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="assemblyContexts" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.19"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="assemblyConnectors"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="assemblyConnectors" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="assemblyConnectors" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.20"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="providedDelegationConnectors"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="providedDelegationConnectors" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="providedDelegationConnectors" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.21"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" value="requiredDelegationConnectors"/>
+          <elements xsi:type="xtext:Keyword" value="{"/>
+          <elements xsi:type="xtext:Assignment" feature="requiredDelegationConnectors" operator="+=">
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.22"/>
+          </elements>
+          <elements xsi:type="xtext:Group" cardinality="*">
+            <elements xsi:type="xtext:Keyword" value=","/>
+            <elements xsi:type="xtext:Assignment" feature="requiredDelegationConnectors" operator="+=">
+              <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.22"/>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="}"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="AssemblyContext">
+      <type metamodel="/0/@metamodelDeclarations.4">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyContext"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="AssemblyContext"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="encapsulatedComponent"/>
+        <elements xsi:type="xtext:Assignment" feature="encapsulatedComponent" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RepositoryComponent"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="AssemblyConnector">
+      <type metamodel="/0/@metamodelDeclarations.4">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyConnector"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="AssemblyConnector"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="requiredRole"/>
+        <elements xsi:type="xtext:Assignment" feature="requiredRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RequiredRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="providedRole"/>
+        <elements xsi:type="xtext:Assignment" feature="providedRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//ProvidedRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="providingAssemblyContext"/>
+        <elements xsi:type="xtext:Assignment" feature="providingAssemblyContext" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.4">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyContext"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="requiringAssemblyContext"/>
+        <elements xsi:type="xtext:Assignment" feature="requiringAssemblyContext" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.4">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyContext"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="ProvidedDelegationConnector">
+      <type metamodel="/0/@metamodelDeclarations.4">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//ProvidedDelegationConnector"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="ProvidedDelegationConnector"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="assemblyContext"/>
+        <elements xsi:type="xtext:Assignment" feature="assemblyContext" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.4">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyContext"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="innerProvidedRole"/>
+        <elements xsi:type="xtext:Assignment" feature="innerProvidedRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//ProvidedRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="outerProvidedRole"/>
+        <elements xsi:type="xtext:Assignment" feature="outerProvidedRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//ProvidedRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:ParserRule" name="RequiredDelegationConnector">
+      <type metamodel="/0/@metamodelDeclarations.4">
+        <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//RequiredDelegationConnector"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="RequiredDelegationConnector"/>
+        <elements xsi:type="xtext:Assignment" feature="name" operator="=">
+          <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="{"/>
+        <elements xsi:type="xtext:Keyword" value="assemblyContext"/>
+        <elements xsi:type="xtext:Assignment" feature="assemblyContext" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.4">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository_composites/0.1#//AssemblyContext"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="innerRequiredRole"/>
+        <elements xsi:type="xtext:Assignment" feature="innerRequiredRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RequiredRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="outerRequiredRole"/>
+        <elements xsi:type="xtext:Assignment" feature="outerRequiredRole" operator="=">
+          <terminal xsi:type="xtext:CrossReference">
+            <type metamodel="/0/@metamodelDeclarations.3">
+              <classifier xsi:type="ecore:EClass" href="http://www.descartes-research.net/metamodel/repository/0.1#//RequiredRole"/>
+            </type>
+            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Keyword" value="}"/>
+      </alternatives>
+    </rules>
+  </xtext:Grammar>
+  <xtext:Grammar name="org.eclipse.xtext.common.Terminals" definesHiddenTokens="true" hiddenTokens="/1/@rules.5 /1/@rules.3 /1/@rules.4">
+    <metamodelDeclarations xsi:type="xtext:ReferencedMetamodel" alias="ecore">
+      <ePackage href="http://www.eclipse.org/emf/2002/Ecore#/"/>
+    </metamodelDeclarations>
+    <rules xsi:type="xtext:TerminalRule" name="ID">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" cardinality="?" value="^"/>
+        <elements xsi:type="xtext:Alternatives">
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </elements>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="_"/>
+        </elements>
+        <elements xsi:type="xtext:Alternatives" cardinality="*">
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="a"/>
+            <right value="z"/>
+          </elements>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="A"/>
+            <right value="Z"/>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="_"/>
+          <elements xsi:type="xtext:CharacterRange">
+            <left value="0"/>
+            <right value="9"/>
+          </elements>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="INT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+      </type>
+      <alternatives xsi:type="xtext:CharacterRange" cardinality="+">
+        <left value="0"/>
+        <right value="9"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="STRING">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives">
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="&quot;"/>
+          <elements xsi:type="xtext:Alternatives" cardinality="*">
+            <elements xsi:type="xtext:Group">
+              <elements xsi:type="xtext:Keyword" value="\"/>
+              <elements xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="b"/>
+                <elements xsi:type="xtext:Keyword" value="t"/>
+                <elements xsi:type="xtext:Keyword" value="n"/>
+                <elements xsi:type="xtext:Keyword" value="f"/>
+                <elements xsi:type="xtext:Keyword" value="r"/>
+                <elements xsi:type="xtext:Keyword" value="u"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+                <elements xsi:type="xtext:Keyword" value="\"/>
+              </elements>
+            </elements>
+            <elements xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="\"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="&quot;"/>
+        </elements>
+        <elements xsi:type="xtext:Group">
+          <elements xsi:type="xtext:Keyword" value="'"/>
+          <elements xsi:type="xtext:Alternatives" cardinality="*">
+            <elements xsi:type="xtext:Group">
+              <elements xsi:type="xtext:Keyword" value="\"/>
+              <elements xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="b"/>
+                <elements xsi:type="xtext:Keyword" value="t"/>
+                <elements xsi:type="xtext:Keyword" value="n"/>
+                <elements xsi:type="xtext:Keyword" value="f"/>
+                <elements xsi:type="xtext:Keyword" value="r"/>
+                <elements xsi:type="xtext:Keyword" value="u"/>
+                <elements xsi:type="xtext:Keyword" value="&quot;"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+                <elements xsi:type="xtext:Keyword" value="\"/>
+              </elements>
+            </elements>
+            <elements xsi:type="xtext:NegatedToken">
+              <terminal xsi:type="xtext:Alternatives">
+                <elements xsi:type="xtext:Keyword" value="\"/>
+                <elements xsi:type="xtext:Keyword" value="'"/>
+              </terminal>
+            </elements>
+          </elements>
+          <elements xsi:type="xtext:Keyword" value="'"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ML_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="/*"/>
+        <elements xsi:type="xtext:UntilToken">
+          <terminal xsi:type="xtext:Keyword" value="*/"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="SL_COMMENT">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Keyword" value="//"/>
+        <elements xsi:type="xtext:NegatedToken" cardinality="*">
+          <terminal xsi:type="xtext:Alternatives">
+            <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+            <elements xsi:type="xtext:Keyword" value="&#xD;"/>
+          </terminal>
+        </elements>
+        <elements xsi:type="xtext:Group" cardinality="?">
+          <elements xsi:type="xtext:Keyword" cardinality="?" value="&#xD;"/>
+          <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+        </elements>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="WS">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Alternatives" cardinality="+">
+        <elements xsi:type="xtext:Keyword" value=" "/>
+        <elements xsi:type="xtext:Keyword" value="&#x9;"/>
+        <elements xsi:type="xtext:Keyword" value="&#xD;"/>
+        <elements xsi:type="xtext:Keyword" value="&#xA;"/>
+      </alternatives>
+    </rules>
+    <rules xsi:type="xtext:TerminalRule" name="ANY_OTHER">
+      <type metamodel="/1/@metamodelDeclarations.0">
+        <classifier xsi:type="ecore:EDataType" href="http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+      </type>
+      <alternatives xsi:type="xtext:Wildcard"/>
+    </rules>
+  </xtext:Grammar>
+</xmi:XMI>
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTestStandaloneSetupGenerated.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTestStandaloneSetupGenerated.java
new file mode 100644
index 0000000000000000000000000000000000000000..aa3acd631bef5e711be9ceb5dab2a9a57a78d44b
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/MyDslTestStandaloneSetupGenerated.java
@@ -0,0 +1,40 @@
+
+package org.xtext.example.mydsl;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.ISetup;
+import org.eclipse.emf.ecore.resource.Resource;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+
+/**
+ * Generated from StandaloneSetup.xpt!
+ */
+@SuppressWarnings("all")
+public class MyDslTestStandaloneSetupGenerated implements ISetup {
+
+	public Injector createInjectorAndDoEMFRegistration() {
+		org.eclipse.xtext.common.TerminalsStandaloneSetup.doSetup();
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new org.xtext.example.mydsl.MyDslTestRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+
+		org.eclipse.xtext.resource.IResourceFactory resourceFactory = injector.getInstance(org.eclipse.xtext.resource.IResourceFactory.class);
+		org.eclipse.xtext.resource.IResourceServiceProvider serviceProvider = injector.getInstance(org.eclipse.xtext.resource.IResourceServiceProvider.class);
+		Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put("mydslTest", resourceFactory);
+		org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("mydslTest", serviceProvider);
+		
+
+
+
+	}
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parseTreeConstruction/MyDslTestParsetreeConstructor.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parseTreeConstruction/MyDslTestParsetreeConstructor.java
new file mode 100644
index 0000000000000000000000000000000000000000..18bb089d229e9ca71c2d7d5f3a9d6d9692ef5586
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parseTreeConstruction/MyDslTestParsetreeConstructor.java
@@ -0,0 +1,9268 @@
+/*
+* generated by Xtext
+*/
+package org.xtext.example.mydsl.parseTreeConstruction;
+
+import org.eclipse.emf.ecore.*;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.parsetree.reconstr.IEObjectConsumer;
+import org.eclipse.xtext.parsetree.reconstr.impl.AbstractParseTreeConstructor;
+
+import org.xtext.example.mydsl.services.MyDslTestGrammarAccess;
+
+import com.google.inject.Inject;
+
+@SuppressWarnings("all")
+public class MyDslTestParsetreeConstructor extends AbstractParseTreeConstructor {
+		
+	@Inject
+	private MyDslTestGrammarAccess grammarAccess;
+	
+	@Override
+	protected AbstractToken getRootToken(IEObjectConsumer inst) {
+		return new ThisRootNode(inst);	
+	}
+	
+protected class ThisRootNode extends RootToken {
+	public ThisRootNode(IEObjectConsumer inst) {
+		super(inst);
+	}
+	
+	@Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group(this, this, 0, inst);
+			case 1: return new DataType_Alternatives(this, this, 1, inst);
+			case 2: return new RepositoryComponent_Alternatives(this, this, 2, inst);
+			case 3: return new Interface_Group(this, this, 3, inst);
+			case 4: return new RepositoryComponent_Impl_Group(this, this, 4, inst);
+			case 5: return new CollectionDataType_Group(this, this, 5, inst);
+			case 6: return new CompositeDataType_Group(this, this, 6, inst);
+			case 7: return new PrimitiveDataType_Group(this, this, 7, inst);
+			case 8: return new InnerDeclaration_Group(this, this, 8, inst);
+			case 9: return new Signature_Group(this, this, 9, inst);
+			case 10: return new Parameter_Group(this, this, 10, inst);
+			case 11: return new ProvidedRole_Group(this, this, 11, inst);
+			case 12: return new RequiredRole_Group(this, this, 12, inst);
+			case 13: return new BasicComponent_Group(this, this, 13, inst);
+			case 14: return new CompositeComponent_Group(this, this, 14, inst);
+			case 15: return new SubSystem_Group(this, this, 15, inst);
+			case 16: return new ComposedStructureAssembly_Group(this, this, 16, inst);
+			case 17: return new AssemblyContext_Group(this, this, 17, inst);
+			case 18: return new AssemblyConnector_Group(this, this, 18, inst);
+			case 19: return new ProvidedDelegationConnector_Group(this, this, 19, inst);
+			case 20: return new RequiredDelegationConnector_Group(this, this, 20, inst);
+			default: return null;
+		}	
+	}	
+}
+	
+
+/************ begin Rule Repository ****************
+ *
+ * Repository returns repository::Repository:
+ * 	"Repository" name=EString "{" ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")? ("interfaces" "{"
+ * 	interfaces+=Interface ("," interfaces+=Interface)* "}")? ("components" "{" components+=RepositoryComponent (","
+ * 	components+=RepositoryComponent)* "}")? "}";
+ *
+ **/
+
+// "Repository" name=EString "{" ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")? ("interfaces" "{"
+// interfaces+=Interface ("," interfaces+=Interface)* "}")? ("components" "{" components+=RepositoryComponent (","
+// components+=RepositoryComponent)* "}")? "}"
+protected class Repository_Group extends GroupToken {
+	
+	public Repository_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getRepositoryRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "Repository"
+protected class Repository_RepositoryKeyword_0 extends KeywordToken  {
+	
+	public Repository_RepositoryKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getRepositoryKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class Repository_NameAssignment_1 extends AssignmentToken  {
+	
+	public Repository_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_RepositoryKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRepositoryAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getRepositoryAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class Repository_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public Repository_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")?
+protected class Repository_Group_3 extends GroupToken {
+	
+	public Repository_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_RightCurlyBracketKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "datatypes"
+protected class Repository_DatatypesKeyword_3_0 extends KeywordToken  {
+	
+	public Repository_DatatypesKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getDatatypesKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class Repository_LeftCurlyBracketKeyword_3_1 extends KeywordToken  {
+	
+	public Repository_LeftCurlyBracketKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_DatatypesKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// datatypes+=DataType
+protected class Repository_DatatypesAssignment_3_2 extends AssignmentToken  {
+	
+	public Repository_DatatypesAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getDatatypesAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new DataType_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("datatypes",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("datatypes");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getDataTypeRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_LeftCurlyBracketKeyword_3_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," datatypes+=DataType)*
+protected class Repository_Group_3_3 extends GroupToken {
+	
+	public Repository_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_DatatypesAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Repository_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public Repository_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_DatatypesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// datatypes+=DataType
+protected class Repository_DatatypesAssignment_3_3_1 extends AssignmentToken  {
+	
+	public Repository_DatatypesAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getDatatypesAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new DataType_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("datatypes",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("datatypes");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getDataTypeRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_CommaKeyword_3_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class Repository_RightCurlyBracketKeyword_3_4 extends KeywordToken  {
+	
+	public Repository_RightCurlyBracketKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_DatatypesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("interfaces" "{" interfaces+=Interface ("," interfaces+=Interface)* "}")?
+protected class Repository_Group_4 extends GroupToken {
+	
+	public Repository_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "interfaces"
+protected class Repository_InterfacesKeyword_4_0 extends KeywordToken  {
+	
+	public Repository_InterfacesKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getInterfacesKeyword_4_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class Repository_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
+	
+	public Repository_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_4_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_InterfacesKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// interfaces+=Interface
+protected class Repository_InterfacesAssignment_4_2 extends AssignmentToken  {
+	
+	public Repository_InterfacesAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getInterfacesAssignment_4_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("interfaces",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("interfaces");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInterfaceRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," interfaces+=Interface)*
+protected class Repository_Group_4_3 extends GroupToken {
+	
+	public Repository_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_4_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_InterfacesAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Repository_CommaKeyword_4_3_0 extends KeywordToken  {
+	
+	public Repository_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getCommaKeyword_4_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_InterfacesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// interfaces+=Interface
+protected class Repository_InterfacesAssignment_4_3_1 extends AssignmentToken  {
+	
+	public Repository_InterfacesAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getInterfacesAssignment_4_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("interfaces",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("interfaces");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInterfaceRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class Repository_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
+	
+	public Repository_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_4_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_InterfacesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("components" "{" components+=RepositoryComponent ("," components+=RepositoryComponent)* "}")?
+protected class Repository_Group_5 extends GroupToken {
+	
+	public Repository_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_RightCurlyBracketKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "components"
+protected class Repository_ComponentsKeyword_5_0 extends KeywordToken  {
+	
+	public Repository_ComponentsKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getComponentsKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_4(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_Group_3(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new Repository_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class Repository_LeftCurlyBracketKeyword_5_1 extends KeywordToken  {
+	
+	public Repository_LeftCurlyBracketKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_ComponentsKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// components+=RepositoryComponent
+protected class Repository_ComponentsAssignment_5_2 extends AssignmentToken  {
+	
+	public Repository_ComponentsAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getComponentsAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("components",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("components");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRepositoryComponentRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_LeftCurlyBracketKeyword_5_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," components+=RepositoryComponent)*
+protected class Repository_Group_5_3 extends GroupToken {
+	
+	public Repository_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_ComponentsAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Repository_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public Repository_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_ComponentsAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// components+=RepositoryComponent
+protected class Repository_ComponentsAssignment_5_3_1 extends AssignmentToken  {
+	
+	public Repository_ComponentsAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getComponentsAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Alternatives(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("components",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("components");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRepositoryComponentRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Repository_CommaKeyword_5_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class Repository_RightCurlyBracketKeyword_5_4 extends KeywordToken  {
+	
+	public Repository_RightCurlyBracketKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_ComponentsAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class Repository_RightCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public Repository_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Repository_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Repository_Group_4(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new Repository_Group_3(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new Repository_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 3, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule Repository ****************/
+
+
+/************ begin Rule DataType ****************
+ *
+ * DataType returns repository::DataType:
+ * 	CollectionDataType | CompositeDataType | PrimitiveDataType;
+ *
+ **/
+
+// CollectionDataType | CompositeDataType | PrimitiveDataType
+protected class DataType_Alternatives extends AlternativesToken {
+
+	public DataType_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getDataTypeAccess().getAlternatives();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new DataType_CollectionDataTypeParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new DataType_CompositeDataTypeParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new DataType_PrimitiveDataTypeParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCollectionDataTypeRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getCompositeDataTypeRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getPrimitiveDataTypeRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// CollectionDataType
+protected class DataType_CollectionDataTypeParserRuleCall_0 extends RuleCallToken {
+	
+	public DataType_CollectionDataTypeParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getDataTypeAccess().getCollectionDataTypeParserRuleCall_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCollectionDataTypeRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(CollectionDataType_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// CompositeDataType
+protected class DataType_CompositeDataTypeParserRuleCall_1 extends RuleCallToken {
+	
+	public DataType_CompositeDataTypeParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getDataTypeAccess().getCompositeDataTypeParserRuleCall_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompositeDataTypeRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(CompositeDataType_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// PrimitiveDataType
+protected class DataType_PrimitiveDataTypeParserRuleCall_2 extends RuleCallToken {
+	
+	public DataType_PrimitiveDataTypeParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getDataTypeAccess().getPrimitiveDataTypeParserRuleCall_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getPrimitiveDataTypeRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(PrimitiveDataType_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule DataType ****************/
+
+
+/************ begin Rule RepositoryComponent ****************
+ *
+ * RepositoryComponent returns repository::RepositoryComponent:
+ * 	RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem;
+ *
+ **/
+
+// RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem
+protected class RepositoryComponent_Alternatives extends AlternativesToken {
+
+	public RepositoryComponent_Alternatives(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getRepositoryComponentAccess().getAlternatives();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_RepositoryComponent_ImplParserRuleCall_0(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_BasicComponentParserRuleCall_1(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new RepositoryComponent_CompositeComponentParserRuleCall_2(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new RepositoryComponent_SubSystemParserRuleCall_3(lastRuleCallOrigin, this, 3, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getBasicComponentRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getCompositeComponentRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getRepositoryComponent_ImplRule().getType().getClassifier() && 
+		   getEObject().eClass() != grammarAccess.getSubSystemRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// RepositoryComponent_Impl
+protected class RepositoryComponent_RepositoryComponent_ImplParserRuleCall_0 extends RuleCallToken {
+	
+	public RepositoryComponent_RepositoryComponent_ImplParserRuleCall_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getRepositoryComponentAccess().getRepositoryComponent_ImplParserRuleCall_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getRepositoryComponent_ImplRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(RepositoryComponent_Impl_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// BasicComponent
+protected class RepositoryComponent_BasicComponentParserRuleCall_1 extends RuleCallToken {
+	
+	public RepositoryComponent_BasicComponentParserRuleCall_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getRepositoryComponentAccess().getBasicComponentParserRuleCall_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getBasicComponentRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(BasicComponent_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// CompositeComponent
+protected class RepositoryComponent_CompositeComponentParserRuleCall_2 extends RuleCallToken {
+	
+	public RepositoryComponent_CompositeComponentParserRuleCall_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getRepositoryComponentAccess().getCompositeComponentParserRuleCall_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompositeComponentRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(CompositeComponent_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+// SubSystem
+protected class RepositoryComponent_SubSystemParserRuleCall_3 extends RuleCallToken {
+	
+	public RepositoryComponent_SubSystemParserRuleCall_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public RuleCall getGrammarElement() {
+		return grammarAccess.getRepositoryComponentAccess().getSubSystemParserRuleCall_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getSubSystemRule().getType().getClassifier())
+			return null;
+		if(checkForRecursion(SubSystem_Group.class, eObjectConsumer)) return null;
+		return eObjectConsumer;
+	}
+	
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(next, actIndex , index, inst);
+		}	
+	}	
+}
+
+
+/************ end Rule RepositoryComponent ****************/
+
+
+
+/************ begin Rule Interface ****************
+ *
+ * Interface returns repository::Interface:
+ * 	"Interface" name=EString "{" ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+ * 	parentInterfaces+=[repository::Interface|EString])* ")")? ("signatures" "{" signatures+=Signature (","
+ * 	signatures+=Signature)* "}")? "}";
+ *
+ **/
+
+// "Interface" name=EString "{" ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+// parentInterfaces+=[repository::Interface|EString])* ")")? ("signatures" "{" signatures+=Signature (","
+// signatures+=Signature)* "}")? "}"
+protected class Interface_Group extends GroupToken {
+	
+	public Interface_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getInterfaceRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "Interface"
+protected class Interface_InterfaceKeyword_0 extends KeywordToken  {
+	
+	public Interface_InterfaceKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getInterfaceKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class Interface_NameAssignment_1 extends AssignmentToken  {
+	
+	public Interface_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_InterfaceKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInterfaceAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getInterfaceAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class Interface_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public Interface_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+// parentInterfaces+=[repository::Interface|EString])* ")")?
+protected class Interface_Group_3 extends GroupToken {
+	
+	public Interface_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_RightParenthesisKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "parentInterfaces"
+protected class Interface_ParentInterfacesKeyword_3_0 extends KeywordToken  {
+	
+	public Interface_ParentInterfacesKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getParentInterfacesKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class Interface_LeftParenthesisKeyword_3_1 extends KeywordToken  {
+	
+	public Interface_LeftParenthesisKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getLeftParenthesisKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_ParentInterfacesKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parentInterfaces+=[repository::Interface|EString]
+protected class Interface_ParentInterfacesAssignment_3_2 extends AssignmentToken  {
+	
+	public Interface_ParentInterfacesAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getParentInterfacesAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_LeftParenthesisKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parentInterfaces",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parentInterfaces");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," parentInterfaces+=[repository::Interface|EString])*
+protected class Interface_Group_3_3 extends GroupToken {
+	
+	public Interface_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_ParentInterfacesAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Interface_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public Interface_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_ParentInterfacesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parentInterfaces+=[repository::Interface|EString]
+protected class Interface_ParentInterfacesAssignment_3_3_1 extends AssignmentToken  {
+	
+	public Interface_ParentInterfacesAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getParentInterfacesAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_CommaKeyword_3_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parentInterfaces",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parentInterfaces");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class Interface_RightParenthesisKeyword_3_4 extends KeywordToken  {
+	
+	public Interface_RightParenthesisKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getRightParenthesisKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_ParentInterfacesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("signatures" "{" signatures+=Signature ("," signatures+=Signature)* "}")?
+protected class Interface_Group_4 extends GroupToken {
+	
+	public Interface_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getGroup_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "signatures"
+protected class Interface_SignaturesKeyword_4_0 extends KeywordToken  {
+	
+	public Interface_SignaturesKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getSignaturesKeyword_4_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class Interface_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
+	
+	public Interface_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_4_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_SignaturesKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// signatures+=Signature
+protected class Interface_SignaturesAssignment_4_2 extends AssignmentToken  {
+	
+	public Interface_SignaturesAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getSignaturesAssignment_4_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("signatures",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("signatures");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getSignatureRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Interface_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," signatures+=Signature)*
+protected class Interface_Group_4_3 extends GroupToken {
+	
+	public Interface_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getGroup_4_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_SignaturesAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Interface_CommaKeyword_4_3_0 extends KeywordToken  {
+	
+	public Interface_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getCommaKeyword_4_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_SignaturesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// signatures+=Signature
+protected class Interface_SignaturesAssignment_4_3_1 extends AssignmentToken  {
+	
+	public Interface_SignaturesAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getSignaturesAssignment_4_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("signatures",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("signatures");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getSignatureRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Interface_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class Interface_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
+	
+	public Interface_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_4_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_SignaturesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class Interface_RightCurlyBracketKeyword_5 extends KeywordToken  {
+	
+	public Interface_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Interface_Group_4(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Interface_Group_3(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new Interface_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule Interface ****************/
+
+
+/************ begin Rule RepositoryComponent_Impl ****************
+ *
+ * RepositoryComponent_Impl returns repository::RepositoryComponent:
+ * 	"RepositoryComponent" name=EString "{" ("relationship" "(" relationship+=[Relationship|EString] (","
+ * 	relationship+=[Relationship|EString])* ")")? ("providedRoles" "{" providedRoles+=ProvidedRole (","
+ * 	providedRoles+=ProvidedRole)* "}")? ("requiredRoles" "{" requiredRoles+=RequiredRole (","
+ * 	requiredRoles+=RequiredRole)* "}")? "}";
+ *
+ **/
+
+// "RepositoryComponent" name=EString "{" ("relationship" "(" relationship+=[Relationship|EString] (","
+// relationship+=[Relationship|EString])* ")")? ("providedRoles" "{" providedRoles+=ProvidedRole (","
+// providedRoles+=ProvidedRole)* "}")? ("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*
+// "}")? "}"
+protected class RepositoryComponent_Impl_Group extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getRepositoryComponent_ImplRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "RepositoryComponent"
+protected class RepositoryComponent_Impl_RepositoryComponentKeyword_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RepositoryComponentKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRepositoryComponentKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class RepositoryComponent_Impl_NameAssignment_1 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RepositoryComponentKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRepositoryComponent_ImplAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getRepositoryComponent_ImplAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class RepositoryComponent_Impl_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+protected class RepositoryComponent_Impl_Group_3 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RightParenthesisKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "relationship"
+protected class RepositoryComponent_Impl_RelationshipKeyword_3_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RelationshipKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class RepositoryComponent_Impl_LeftParenthesisKeyword_3_1 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_LeftParenthesisKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getLeftParenthesisKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RelationshipKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class RepositoryComponent_Impl_RelationshipAssignment_3_2 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_RelationshipAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_LeftParenthesisKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," relationship+=[Relationship|EString])*
+protected class RepositoryComponent_Impl_Group_3_3 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RelationshipAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class RepositoryComponent_Impl_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_RelationshipAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class RepositoryComponent_Impl_RelationshipAssignment_3_3_1 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_RelationshipAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_CommaKeyword_3_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class RepositoryComponent_Impl_RightParenthesisKeyword_3_4 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RightParenthesisKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRightParenthesisKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_RelationshipAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+protected class RepositoryComponent_Impl_Group_4 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "providedRoles"
+protected class RepositoryComponent_Impl_ProvidedRolesKeyword_4_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_ProvidedRolesKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesKeyword_4_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class RepositoryComponent_Impl_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_4_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_ProvidedRolesKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class RepositoryComponent_Impl_ProvidedRolesAssignment_4_2 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_ProvidedRolesAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesAssignment_4_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," providedRoles+=ProvidedRole)*
+protected class RepositoryComponent_Impl_Group_4_3 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_4_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_ProvidedRolesAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class RepositoryComponent_Impl_CommaKeyword_4_3_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_4_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_ProvidedRolesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class RepositoryComponent_Impl_ProvidedRolesAssignment_4_3_1 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_ProvidedRolesAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesAssignment_4_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class RepositoryComponent_Impl_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_4_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_ProvidedRolesAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")?
+protected class RepositoryComponent_Impl_Group_5 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RightCurlyBracketKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "requiredRoles"
+protected class RepositoryComponent_Impl_RequiredRolesKeyword_5_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RequiredRolesKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_4(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_Group_3(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class RepositoryComponent_Impl_LeftCurlyBracketKeyword_5_1 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_LeftCurlyBracketKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RequiredRolesKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class RepositoryComponent_Impl_RequiredRolesAssignment_5_2 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_RequiredRolesAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_5_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," requiredRoles+=RequiredRole)*
+protected class RepositoryComponent_Impl_Group_5_3 extends GroupToken {
+	
+	public RepositoryComponent_Impl_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_RequiredRolesAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class RepositoryComponent_Impl_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_RequiredRolesAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class RepositoryComponent_Impl_RequiredRolesAssignment_5_3_1 extends AssignmentToken  {
+	
+	public RepositoryComponent_Impl_RequiredRolesAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_CommaKeyword_5_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class RepositoryComponent_Impl_RightCurlyBracketKeyword_5_4 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RightCurlyBracketKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_RequiredRolesAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class RepositoryComponent_Impl_RightCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public RepositoryComponent_Impl_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RepositoryComponent_Impl_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RepositoryComponent_Impl_Group_4(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new RepositoryComponent_Impl_Group_3(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new RepositoryComponent_Impl_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 3, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule RepositoryComponent_Impl ****************/
+
+
+/************ begin Rule CollectionDataType ****************
+ *
+ * CollectionDataType returns repository::CollectionDataType:
+ * 	"CollectionDataType" name=EString "{" "innerType" innerType=[repository::DataType|EString] "}";
+ *
+ **/
+
+// "CollectionDataType" name=EString "{" "innerType" innerType=[repository::DataType|EString] "}"
+protected class CollectionDataType_Group extends GroupToken {
+	
+	public CollectionDataType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCollectionDataTypeRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "CollectionDataType"
+protected class CollectionDataType_CollectionDataTypeKeyword_0 extends KeywordToken  {
+	
+	public CollectionDataType_CollectionDataTypeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getCollectionDataTypeKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class CollectionDataType_NameAssignment_1 extends AssignmentToken  {
+	
+	public CollectionDataType_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_CollectionDataTypeKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCollectionDataTypeAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getCollectionDataTypeAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class CollectionDataType_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public CollectionDataType_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "innerType"
+protected class CollectionDataType_InnerTypeKeyword_3 extends KeywordToken  {
+	
+	public CollectionDataType_InnerTypeKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getInnerTypeKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// innerType=[repository::DataType|EString]
+protected class CollectionDataType_InnerTypeAssignment_4 extends AssignmentToken  {
+	
+	public CollectionDataType_InnerTypeAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getInnerTypeAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_InnerTypeKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("innerType",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("innerType");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCollectionDataTypeAccess().getInnerTypeDataTypeCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCollectionDataTypeAccess().getInnerTypeDataTypeCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class CollectionDataType_RightCurlyBracketKeyword_5 extends KeywordToken  {
+	
+	public CollectionDataType_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCollectionDataTypeAccess().getRightCurlyBracketKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CollectionDataType_InnerTypeAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule CollectionDataType ****************/
+
+
+/************ begin Rule CompositeDataType ****************
+ *
+ * CompositeDataType returns repository::CompositeDataType:
+ * 	"CompositeDataType" name=EString "{" ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+ * 	parentTypes+=[repository::CompositeDataType|EString])* ")")? ("innerDeclarations" "{"
+ * 	innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")? "}";
+ *
+ **/
+
+// "CompositeDataType" name=EString "{" ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+// parentTypes+=[repository::CompositeDataType|EString])* ")")? ("innerDeclarations" "{"
+// innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")? "}"
+protected class CompositeDataType_Group extends GroupToken {
+	
+	public CompositeDataType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompositeDataTypeRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "CompositeDataType"
+protected class CompositeDataType_CompositeDataTypeKeyword_0 extends KeywordToken  {
+	
+	public CompositeDataType_CompositeDataTypeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getCompositeDataTypeKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class CompositeDataType_NameAssignment_1 extends AssignmentToken  {
+	
+	public CompositeDataType_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_CompositeDataTypeKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCompositeDataTypeAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getCompositeDataTypeAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class CompositeDataType_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public CompositeDataType_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+// parentTypes+=[repository::CompositeDataType|EString])* ")")?
+protected class CompositeDataType_Group_3 extends GroupToken {
+	
+	public CompositeDataType_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_RightParenthesisKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "parentTypes"
+protected class CompositeDataType_ParentTypesKeyword_3_0 extends KeywordToken  {
+	
+	public CompositeDataType_ParentTypesKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getParentTypesKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class CompositeDataType_LeftParenthesisKeyword_3_1 extends KeywordToken  {
+	
+	public CompositeDataType_LeftParenthesisKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getLeftParenthesisKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_ParentTypesKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parentTypes+=[repository::CompositeDataType|EString]
+protected class CompositeDataType_ParentTypesAssignment_3_2 extends AssignmentToken  {
+	
+	public CompositeDataType_ParentTypesAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getParentTypesAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_LeftParenthesisKeyword_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parentTypes",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parentTypes");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," parentTypes+=[repository::CompositeDataType|EString])*
+protected class CompositeDataType_Group_3_3 extends GroupToken {
+	
+	public CompositeDataType_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_ParentTypesAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class CompositeDataType_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public CompositeDataType_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_ParentTypesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parentTypes+=[repository::CompositeDataType|EString]
+protected class CompositeDataType_ParentTypesAssignment_3_3_1 extends AssignmentToken  {
+	
+	public CompositeDataType_ParentTypesAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getParentTypesAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_CommaKeyword_3_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parentTypes",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parentTypes");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class CompositeDataType_RightParenthesisKeyword_3_4 extends KeywordToken  {
+	
+	public CompositeDataType_RightParenthesisKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getRightParenthesisKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_ParentTypesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("innerDeclarations" "{" innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")?
+protected class CompositeDataType_Group_4 extends GroupToken {
+	
+	public CompositeDataType_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getGroup_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "innerDeclarations"
+protected class CompositeDataType_InnerDeclarationsKeyword_4_0 extends KeywordToken  {
+	
+	public CompositeDataType_InnerDeclarationsKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsKeyword_4_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class CompositeDataType_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
+	
+	public CompositeDataType_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_4_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_InnerDeclarationsKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// innerDeclarations+=InnerDeclaration
+protected class CompositeDataType_InnerDeclarationsAssignment_4_2 extends AssignmentToken  {
+	
+	public CompositeDataType_InnerDeclarationsAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsAssignment_4_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("innerDeclarations",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("innerDeclarations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInnerDeclarationRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeDataType_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," innerDeclarations+=InnerDeclaration)*
+protected class CompositeDataType_Group_4_3 extends GroupToken {
+	
+	public CompositeDataType_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getGroup_4_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_InnerDeclarationsAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class CompositeDataType_CommaKeyword_4_3_0 extends KeywordToken  {
+	
+	public CompositeDataType_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_4_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_InnerDeclarationsAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// innerDeclarations+=InnerDeclaration
+protected class CompositeDataType_InnerDeclarationsAssignment_4_3_1 extends AssignmentToken  {
+	
+	public CompositeDataType_InnerDeclarationsAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsAssignment_4_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("innerDeclarations",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("innerDeclarations");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInnerDeclarationRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeDataType_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class CompositeDataType_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
+	
+	public CompositeDataType_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_4_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_InnerDeclarationsAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class CompositeDataType_RightCurlyBracketKeyword_5 extends KeywordToken  {
+	
+	public CompositeDataType_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeDataType_Group_4(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeDataType_Group_3(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new CompositeDataType_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule CompositeDataType ****************/
+
+
+/************ begin Rule PrimitiveDataType ****************
+ *
+ * PrimitiveDataType returns repository::PrimitiveDataType:
+ * 	"PrimitiveDataType" "{" "type" type=PrimitiveTypeEnum "ref" name=EString "}";
+ *
+ **/
+
+// "PrimitiveDataType" "{" "type" type=PrimitiveTypeEnum "ref" name=EString "}"
+protected class PrimitiveDataType_Group extends GroupToken {
+	
+	public PrimitiveDataType_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getPrimitiveDataTypeRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "PrimitiveDataType"
+protected class PrimitiveDataType_PrimitiveDataTypeKeyword_0 extends KeywordToken  {
+	
+	public PrimitiveDataType_PrimitiveDataTypeKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getPrimitiveDataTypeKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// "{"
+protected class PrimitiveDataType_LeftCurlyBracketKeyword_1 extends KeywordToken  {
+	
+	public PrimitiveDataType_LeftCurlyBracketKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getLeftCurlyBracketKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_PrimitiveDataTypeKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "type"
+protected class PrimitiveDataType_TypeKeyword_2 extends KeywordToken  {
+	
+	public PrimitiveDataType_TypeKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getTypeKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_LeftCurlyBracketKeyword_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// type=PrimitiveTypeEnum
+protected class PrimitiveDataType_TypeAssignment_3 extends AssignmentToken  {
+	
+	public PrimitiveDataType_TypeAssignment_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getTypeAssignment_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_TypeKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("type",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("type");
+		if(enumLitSerializer.isValid(obj.getEObject(), grammarAccess.getPrimitiveDataTypeAccess().getTypePrimitiveTypeEnumEnumRuleCall_3_0(), value, null)) { 
+			type = AssignmentType.ENUM_RULE_CALL;
+			element = grammarAccess.getPrimitiveDataTypeAccess().getTypePrimitiveTypeEnumEnumRuleCall_3_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "ref"
+protected class PrimitiveDataType_RefKeyword_4 extends KeywordToken  {
+	
+	public PrimitiveDataType_RefKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getRefKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_TypeAssignment_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// name=EString
+protected class PrimitiveDataType_NameAssignment_5 extends AssignmentToken  {
+	
+	public PrimitiveDataType_NameAssignment_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getNameAssignment_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_RefKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getPrimitiveDataTypeAccess().getNameEStringParserRuleCall_5_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getPrimitiveDataTypeAccess().getNameEStringParserRuleCall_5_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class PrimitiveDataType_RightCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public PrimitiveDataType_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getPrimitiveDataTypeAccess().getRightCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new PrimitiveDataType_NameAssignment_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule PrimitiveDataType ****************/
+
+
+/************ begin Rule InnerDeclaration ****************
+ *
+ * InnerDeclaration returns repository::InnerDeclaration:
+ * 	"InnerDeclaration" name=EString "{" "dataType" dataType=[repository::DataType|EString] "}";
+ *
+ **/
+
+// "InnerDeclaration" name=EString "{" "dataType" dataType=[repository::DataType|EString] "}"
+protected class InnerDeclaration_Group extends GroupToken {
+	
+	public InnerDeclaration_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getInnerDeclarationRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "InnerDeclaration"
+protected class InnerDeclaration_InnerDeclarationKeyword_0 extends KeywordToken  {
+	
+	public InnerDeclaration_InnerDeclarationKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getInnerDeclarationKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class InnerDeclaration_NameAssignment_1 extends AssignmentToken  {
+	
+	public InnerDeclaration_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_InnerDeclarationKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getInnerDeclarationAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getInnerDeclarationAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class InnerDeclaration_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public InnerDeclaration_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "dataType"
+protected class InnerDeclaration_DataTypeKeyword_3 extends KeywordToken  {
+	
+	public InnerDeclaration_DataTypeKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getDataTypeKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// dataType=[repository::DataType|EString]
+protected class InnerDeclaration_DataTypeAssignment_4 extends AssignmentToken  {
+	
+	public InnerDeclaration_DataTypeAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getDataTypeAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_DataTypeKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dataType",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataType");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getInnerDeclarationAccess().getDataTypeDataTypeCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getInnerDeclarationAccess().getDataTypeDataTypeCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class InnerDeclaration_RightCurlyBracketKeyword_5 extends KeywordToken  {
+	
+	public InnerDeclaration_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getInnerDeclarationAccess().getRightCurlyBracketKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new InnerDeclaration_DataTypeAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule InnerDeclaration ****************/
+
+
+/************ begin Rule Signature ****************
+ *
+ * Signature returns repository::Signature:
+ * 	(returnType=[repository::DataType|EString] | "void") name=EString "(" (parameters+=Parameter (","
+ * 	parameters+=Parameter)*)? ")";
+ *
+ **/
+
+// (returnType=[repository::DataType|EString] | "void") name=EString "(" (parameters+=Parameter (","
+// parameters+=Parameter)*)? ")"
+protected class Signature_Group extends GroupToken {
+	
+	public Signature_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_RightParenthesisKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getSignatureRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// returnType=[repository::DataType|EString] | "void"
+protected class Signature_Alternatives_0 extends AlternativesToken {
+
+	public Signature_Alternatives_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Alternatives getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getAlternatives_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_ReturnTypeAssignment_0_0(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Signature_VoidKeyword_0_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// returnType=[repository::DataType|EString]
+protected class Signature_ReturnTypeAssignment_0_0 extends AssignmentToken  {
+	
+	public Signature_ReturnTypeAssignment_0_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getReturnTypeAssignment_0_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("returnType",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("returnType");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getSignatureAccess().getReturnTypeDataTypeCrossReference_0_0_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getSignatureAccess().getReturnTypeDataTypeCrossReference_0_0_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "void"
+protected class Signature_VoidKeyword_0_1 extends KeywordToken  {
+	
+	public Signature_VoidKeyword_0_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getVoidKeyword_0_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+
+// name=EString
+protected class Signature_NameAssignment_1 extends AssignmentToken  {
+	
+	public Signature_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Alternatives_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSignatureAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getSignatureAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "("
+protected class Signature_LeftParenthesisKeyword_2 extends KeywordToken  {
+	
+	public Signature_LeftParenthesisKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getLeftParenthesisKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// (parameters+=Parameter ("," parameters+=Parameter)*)?
+protected class Signature_Group_3 extends GroupToken {
+	
+	public Signature_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Signature_ParametersAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parameters+=Parameter
+protected class Signature_ParametersAssignment_3_0 extends AssignmentToken  {
+	
+	public Signature_ParametersAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getParametersAssignment_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Parameter_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parameters",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameters");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getParameterRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Signature_LeftParenthesisKeyword_2(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," parameters+=Parameter)*
+protected class Signature_Group_3_1 extends GroupToken {
+	
+	public Signature_Group_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getGroup_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_ParametersAssignment_3_1_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class Signature_CommaKeyword_3_1_0 extends KeywordToken  {
+	
+	public Signature_CommaKeyword_3_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getCommaKeyword_3_1_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Signature_ParametersAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// parameters+=Parameter
+protected class Signature_ParametersAssignment_3_1_1 extends AssignmentToken  {
+	
+	public Signature_ParametersAssignment_3_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getParametersAssignment_3_1_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Parameter_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("parameters",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("parameters");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getParameterRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new Signature_CommaKeyword_3_1_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// ")"
+protected class Signature_RightParenthesisKeyword_4 extends KeywordToken  {
+	
+	public Signature_RightParenthesisKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSignatureAccess().getRightParenthesisKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Signature_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new Signature_LeftParenthesisKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule Signature ****************/
+
+
+/************ begin Rule Parameter ****************
+ *
+ * Parameter returns repository::Parameter:
+ * 	dataType=[repository::DataType|EString] name=EString;
+ *
+ **/
+
+// dataType=[repository::DataType|EString] name=EString
+protected class Parameter_Group extends GroupToken {
+	
+	public Parameter_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getParameterAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Parameter_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getParameterRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// dataType=[repository::DataType|EString]
+protected class Parameter_DataTypeAssignment_0 extends AssignmentToken  {
+	
+	public Parameter_DataTypeAssignment_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getParameterAccess().getDataTypeAssignment_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("dataType",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("dataType");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getParameterAccess().getDataTypeDataTypeCrossReference_0_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getParameterAccess().getDataTypeDataTypeCrossReference_0_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// name=EString
+protected class Parameter_NameAssignment_1 extends AssignmentToken  {
+	
+	public Parameter_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getParameterAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new Parameter_DataTypeAssignment_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getParameterAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getParameterAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+
+/************ end Rule Parameter ****************/
+
+
+/************ begin Rule ProvidedRole ****************
+ *
+ * ProvidedRole returns repository::ProvidedRole:
+ * 	{repository::ProvidedRole} "provides" (interface+=[repository::Interface|EString] ","?)*;
+ *
+ **/
+
+// {repository::ProvidedRole} "provides" (interface+=[repository::Interface|EString] ","?)*
+protected class ProvidedRole_Group extends GroupToken {
+	
+	public ProvidedRole_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getProvidedRoleAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ProvidedRole_ProvidesKeyword_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getProvidedRoleAccess().getProvidedRoleAction_0().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// {repository::ProvidedRole}
+protected class ProvidedRole_ProvidedRoleAction_0 extends ActionToken  {
+
+	public ProvidedRole_ProvidedRoleAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Action getGrammarElement() {
+		return grammarAccess.getProvidedRoleAccess().getProvidedRoleAction_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(!eObjectConsumer.isConsumed()) return null;
+		return eObjectConsumer;
+	}
+}
+
+// "provides"
+protected class ProvidedRole_ProvidesKeyword_1 extends KeywordToken  {
+	
+	public ProvidedRole_ProvidesKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedRoleAccess().getProvidesKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_ProvidedRoleAction_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// (interface+=[repository::Interface|EString] ","?)*
+protected class ProvidedRole_Group_2 extends GroupToken {
+	
+	public ProvidedRole_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getProvidedRoleAccess().getGroup_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_InterfaceAssignment_2_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// interface+=[repository::Interface|EString]
+protected class ProvidedRole_InterfaceAssignment_2_0 extends AssignmentToken  {
+	
+	public ProvidedRole_InterfaceAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getProvidedRoleAccess().getInterfaceAssignment_2_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ProvidedRole_ProvidesKeyword_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("interface",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("interface");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleAccess().getInterfaceInterfaceCrossReference_2_0_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getProvidedRoleAccess().getInterfaceInterfaceCrossReference_2_0_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule ProvidedRole ****************/
+
+
+/************ begin Rule RequiredRole ****************
+ *
+ * RequiredRole returns repository::RequiredRole:
+ * 	{repository::RequiredRole} "requires" (interface+=[repository::Interface|EString] ","?)*;
+ *
+ **/
+
+// {repository::RequiredRole} "requires" (interface+=[repository::Interface|EString] ","?)*
+protected class RequiredRole_Group extends GroupToken {
+	
+	public RequiredRole_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRequiredRoleAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RequiredRole_RequiresKeyword_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getRequiredRoleAccess().getRequiredRoleAction_0().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// {repository::RequiredRole}
+protected class RequiredRole_RequiredRoleAction_0 extends ActionToken  {
+
+	public RequiredRole_RequiredRoleAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Action getGrammarElement() {
+		return grammarAccess.getRequiredRoleAccess().getRequiredRoleAction_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(!eObjectConsumer.isConsumed()) return null;
+		return eObjectConsumer;
+	}
+}
+
+// "requires"
+protected class RequiredRole_RequiresKeyword_1 extends KeywordToken  {
+	
+	public RequiredRole_RequiresKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredRoleAccess().getRequiresKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_RequiredRoleAction_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// (interface+=[repository::Interface|EString] ","?)*
+protected class RequiredRole_Group_2 extends GroupToken {
+	
+	public RequiredRole_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRequiredRoleAccess().getGroup_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_InterfaceAssignment_2_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// interface+=[repository::Interface|EString]
+protected class RequiredRole_InterfaceAssignment_2_0 extends AssignmentToken  {
+	
+	public RequiredRole_InterfaceAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRequiredRoleAccess().getInterfaceAssignment_2_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new RequiredRole_RequiresKeyword_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("interface",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("interface");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleAccess().getInterfaceInterfaceCrossReference_2_0_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRequiredRoleAccess().getInterfaceInterfaceCrossReference_2_0_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+
+/************ end Rule RequiredRole ****************/
+
+
+/************ begin Rule BasicComponent ****************
+ *
+ * BasicComponent returns repository::BasicComponent:
+ * 	"BasicComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+ * 	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+ * 	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? "}";
+ *
+ **/
+
+// "BasicComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+// (requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+// relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? "}"
+protected class BasicComponent_Group extends GroupToken {
+	
+	public BasicComponent_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_RightCurlyBracketKeyword_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getBasicComponentRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "BasicComponent"
+protected class BasicComponent_BasicComponentKeyword_0 extends KeywordToken  {
+	
+	public BasicComponent_BasicComponentKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getBasicComponentKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class BasicComponent_NameAssignment_1 extends AssignmentToken  {
+	
+	public BasicComponent_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_BasicComponentKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getBasicComponentAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getBasicComponentAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+protected class BasicComponent_Group_2 extends GroupToken {
+	
+	public BasicComponent_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_2_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_ProvidedRolesAssignment_2_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class BasicComponent_ProvidedRolesAssignment_2_0 extends AssignmentToken  {
+	
+	public BasicComponent_ProvidedRolesAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getProvidedRolesAssignment_2_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new BasicComponent_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," providedRoles+=ProvidedRole)*
+protected class BasicComponent_Group_2_1 extends GroupToken {
+	
+	public BasicComponent_Group_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_2_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_ProvidedRolesAssignment_2_1_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class BasicComponent_CommaKeyword_2_1_0 extends KeywordToken  {
+	
+	public BasicComponent_CommaKeyword_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getCommaKeyword_2_1_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_2_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_ProvidedRolesAssignment_2_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class BasicComponent_ProvidedRolesAssignment_2_1_1 extends AssignmentToken  {
+	
+	public BasicComponent_ProvidedRolesAssignment_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getProvidedRolesAssignment_2_1_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new BasicComponent_CommaKeyword_2_1_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// (requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)?
+protected class BasicComponent_Group_3 extends GroupToken {
+	
+	public BasicComponent_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_RequiredRolesAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class BasicComponent_RequiredRolesAssignment_3_0 extends AssignmentToken  {
+	
+	public BasicComponent_RequiredRolesAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRequiredRolesAssignment_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new BasicComponent_Group_2(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new BasicComponent_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," requiredRoles+=RequiredRole)*
+protected class BasicComponent_Group_3_1 extends GroupToken {
+	
+	public BasicComponent_Group_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_RequiredRolesAssignment_3_1_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class BasicComponent_CommaKeyword_3_1_0 extends KeywordToken  {
+	
+	public BasicComponent_CommaKeyword_3_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getCommaKeyword_3_1_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_RequiredRolesAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class BasicComponent_RequiredRolesAssignment_3_1_1 extends AssignmentToken  {
+	
+	public BasicComponent_RequiredRolesAssignment_3_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRequiredRolesAssignment_3_1_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new BasicComponent_CommaKeyword_3_1_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// "{"
+protected class BasicComponent_LeftCurlyBracketKeyword_4 extends KeywordToken  {
+	
+	public BasicComponent_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getLeftCurlyBracketKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_Group_2(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new BasicComponent_NameAssignment_1(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+protected class BasicComponent_Group_5 extends GroupToken {
+	
+	public BasicComponent_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_RightParenthesisKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "relationship"
+protected class BasicComponent_RelationshipKeyword_5_0 extends KeywordToken  {
+	
+	public BasicComponent_RelationshipKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRelationshipKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class BasicComponent_LeftParenthesisKeyword_5_1 extends KeywordToken  {
+	
+	public BasicComponent_LeftParenthesisKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getLeftParenthesisKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_RelationshipKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class BasicComponent_RelationshipAssignment_5_2 extends AssignmentToken  {
+	
+	public BasicComponent_RelationshipAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRelationshipAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_LeftParenthesisKeyword_5_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," relationship+=[Relationship|EString])*
+protected class BasicComponent_Group_5_3 extends GroupToken {
+	
+	public BasicComponent_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_RelationshipAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class BasicComponent_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public BasicComponent_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class BasicComponent_RelationshipAssignment_5_3_1 extends AssignmentToken  {
+	
+	public BasicComponent_RelationshipAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRelationshipAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_CommaKeyword_5_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class BasicComponent_RightParenthesisKeyword_5_4 extends KeywordToken  {
+	
+	public BasicComponent_RightParenthesisKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRightParenthesisKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class BasicComponent_RightCurlyBracketKeyword_6 extends KeywordToken  {
+	
+	public BasicComponent_RightCurlyBracketKeyword_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getBasicComponentAccess().getRightCurlyBracketKeyword_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new BasicComponent_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new BasicComponent_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule BasicComponent ****************/
+
+
+/************ begin Rule CompositeComponent ****************
+ *
+ * CompositeComponent returns repository::CompositeComponent:
+ * 	"CompositeComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+ * 	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+ * 	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+ * 	assembly=ComposedStructureAssembly)? "}";
+ *
+ **/
+
+// "CompositeComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+// (requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+// relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+// assembly=ComposedStructureAssembly)? "}"
+protected class CompositeComponent_Group extends GroupToken {
+	
+	public CompositeComponent_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_RightCurlyBracketKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getCompositeComponentRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "CompositeComponent"
+protected class CompositeComponent_CompositeComponentKeyword_0 extends KeywordToken  {
+	
+	public CompositeComponent_CompositeComponentKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getCompositeComponentKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class CompositeComponent_NameAssignment_1 extends AssignmentToken  {
+	
+	public CompositeComponent_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_CompositeComponentKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getCompositeComponentAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getCompositeComponentAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+protected class CompositeComponent_Group_2 extends GroupToken {
+	
+	public CompositeComponent_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_2_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_ProvidedRolesAssignment_2_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class CompositeComponent_ProvidedRolesAssignment_2_0 extends AssignmentToken  {
+	
+	public CompositeComponent_ProvidedRolesAssignment_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getProvidedRolesAssignment_2_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeComponent_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," providedRoles+=ProvidedRole)*
+protected class CompositeComponent_Group_2_1 extends GroupToken {
+	
+	public CompositeComponent_Group_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_2_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_ProvidedRolesAssignment_2_1_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class CompositeComponent_CommaKeyword_2_1_0 extends KeywordToken  {
+	
+	public CompositeComponent_CommaKeyword_2_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getCommaKeyword_2_1_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_2_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_ProvidedRolesAssignment_2_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class CompositeComponent_ProvidedRolesAssignment_2_1_1 extends AssignmentToken  {
+	
+	public CompositeComponent_ProvidedRolesAssignment_2_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getProvidedRolesAssignment_2_1_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeComponent_CommaKeyword_2_1_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// (requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)?
+protected class CompositeComponent_Group_3 extends GroupToken {
+	
+	public CompositeComponent_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_RequiredRolesAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class CompositeComponent_RequiredRolesAssignment_3_0 extends AssignmentToken  {
+	
+	public CompositeComponent_RequiredRolesAssignment_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRequiredRolesAssignment_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeComponent_Group_2(lastRuleCallOrigin, next, actIndex, consumed);
+			case 1: return new CompositeComponent_NameAssignment_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," requiredRoles+=RequiredRole)*
+protected class CompositeComponent_Group_3_1 extends GroupToken {
+	
+	public CompositeComponent_Group_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_RequiredRolesAssignment_3_1_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class CompositeComponent_CommaKeyword_3_1_0 extends KeywordToken  {
+	
+	public CompositeComponent_CommaKeyword_3_1_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getCommaKeyword_3_1_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_3_1(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_RequiredRolesAssignment_3_0(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class CompositeComponent_RequiredRolesAssignment_3_1_1 extends AssignmentToken  {
+	
+	public CompositeComponent_RequiredRolesAssignment_3_1_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRequiredRolesAssignment_3_1_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeComponent_CommaKeyword_3_1_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+
+// "{"
+protected class CompositeComponent_LeftCurlyBracketKeyword_4 extends KeywordToken  {
+	
+	public CompositeComponent_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getLeftCurlyBracketKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_Group_2(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new CompositeComponent_NameAssignment_1(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+protected class CompositeComponent_Group_5 extends GroupToken {
+	
+	public CompositeComponent_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_RightParenthesisKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "relationship"
+protected class CompositeComponent_RelationshipKeyword_5_0 extends KeywordToken  {
+	
+	public CompositeComponent_RelationshipKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRelationshipKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class CompositeComponent_LeftParenthesisKeyword_5_1 extends KeywordToken  {
+	
+	public CompositeComponent_LeftParenthesisKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getLeftParenthesisKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_RelationshipKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class CompositeComponent_RelationshipAssignment_5_2 extends AssignmentToken  {
+	
+	public CompositeComponent_RelationshipAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRelationshipAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_LeftParenthesisKeyword_5_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," relationship+=[Relationship|EString])*
+protected class CompositeComponent_Group_5_3 extends GroupToken {
+	
+	public CompositeComponent_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_RelationshipAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class CompositeComponent_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public CompositeComponent_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class CompositeComponent_RelationshipAssignment_5_3_1 extends AssignmentToken  {
+	
+	public CompositeComponent_RelationshipAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRelationshipAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_CommaKeyword_5_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class CompositeComponent_RightParenthesisKeyword_5_4 extends KeywordToken  {
+	
+	public CompositeComponent_RightParenthesisKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRightParenthesisKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("assembly" assembly=ComposedStructureAssembly)?
+protected class CompositeComponent_Group_6 extends GroupToken {
+	
+	public CompositeComponent_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getGroup_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_AssemblyAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assembly"
+protected class CompositeComponent_AssemblyKeyword_6_0 extends KeywordToken  {
+	
+	public CompositeComponent_AssemblyKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getAssemblyKeyword_6_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assembly=ComposedStructureAssembly
+protected class CompositeComponent_AssemblyAssignment_6_1 extends AssignmentToken  {
+	
+	public CompositeComponent_AssemblyAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getAssemblyAssignment_6_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assembly",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assembly");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getComposedStructureAssemblyRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getCompositeComponentAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new CompositeComponent_AssemblyKeyword_6_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class CompositeComponent_RightCurlyBracketKeyword_7 extends KeywordToken  {
+	
+	public CompositeComponent_RightCurlyBracketKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getCompositeComponentAccess().getRightCurlyBracketKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new CompositeComponent_Group_6(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new CompositeComponent_Group_5(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new CompositeComponent_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule CompositeComponent ****************/
+
+
+/************ begin Rule SubSystem ****************
+ *
+ * SubSystem returns repository::SubSystem:
+ * 	"SubSystem" name=EString ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+ * 	("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")? "{" ("relationship" "("
+ * 	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+ * 	assembly=ComposedStructureAssembly)? "}";
+ *
+ **/
+
+// "SubSystem" name=EString ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+// ("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")? "{" ("relationship" "("
+// relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+// assembly=ComposedStructureAssembly)? "}"
+protected class SubSystem_Group extends GroupToken {
+	
+	public SubSystem_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RightCurlyBracketKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getSubSystemRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "SubSystem"
+protected class SubSystem_SubSystemKeyword_0 extends KeywordToken  {
+	
+	public SubSystem_SubSystemKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getSubSystemKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class SubSystem_NameAssignment_1 extends AssignmentToken  {
+	
+	public SubSystem_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_SubSystemKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getSubSystemAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getSubSystemAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+protected class SubSystem_Group_2 extends GroupToken {
+	
+	public SubSystem_Group_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RightCurlyBracketKeyword_2_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "providedRoles"
+protected class SubSystem_ProvidedRolesKeyword_2_0 extends KeywordToken  {
+	
+	public SubSystem_ProvidedRolesKeyword_2_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getProvidedRolesKeyword_2_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class SubSystem_LeftCurlyBracketKeyword_2_1 extends KeywordToken  {
+	
+	public SubSystem_LeftCurlyBracketKeyword_2_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_2_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_ProvidedRolesKeyword_2_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class SubSystem_ProvidedRolesAssignment_2_2 extends AssignmentToken  {
+	
+	public SubSystem_ProvidedRolesAssignment_2_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getProvidedRolesAssignment_2_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SubSystem_LeftCurlyBracketKeyword_2_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," providedRoles+=ProvidedRole)*
+protected class SubSystem_Group_2_3 extends GroupToken {
+	
+	public SubSystem_Group_2_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_2_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_ProvidedRolesAssignment_2_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class SubSystem_CommaKeyword_2_3_0 extends KeywordToken  {
+	
+	public SubSystem_CommaKeyword_2_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getCommaKeyword_2_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_2_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_ProvidedRolesAssignment_2_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRoles+=ProvidedRole
+protected class SubSystem_ProvidedRolesAssignment_2_3_1 extends AssignmentToken  {
+	
+	public SubSystem_ProvidedRolesAssignment_2_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getProvidedRolesAssignment_2_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SubSystem_CommaKeyword_2_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class SubSystem_RightCurlyBracketKeyword_2_4 extends KeywordToken  {
+	
+	public SubSystem_RightCurlyBracketKeyword_2_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_2_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_2_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_ProvidedRolesAssignment_2_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")?
+protected class SubSystem_Group_3 extends GroupToken {
+	
+	public SubSystem_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RightCurlyBracketKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "requiredRoles"
+protected class SubSystem_RequiredRolesKeyword_3_0 extends KeywordToken  {
+	
+	public SubSystem_RequiredRolesKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRequiredRolesKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_2(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_NameAssignment_1(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class SubSystem_LeftCurlyBracketKeyword_3_1 extends KeywordToken  {
+	
+	public SubSystem_LeftCurlyBracketKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RequiredRolesKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class SubSystem_RequiredRolesAssignment_3_2 extends AssignmentToken  {
+	
+	public SubSystem_RequiredRolesAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRequiredRolesAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SubSystem_LeftCurlyBracketKeyword_3_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," requiredRoles+=RequiredRole)*
+protected class SubSystem_Group_3_3 extends GroupToken {
+	
+	public SubSystem_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RequiredRolesAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class SubSystem_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public SubSystem_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_RequiredRolesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRoles+=RequiredRole
+protected class SubSystem_RequiredRolesAssignment_3_3_1 extends AssignmentToken  {
+	
+	public SubSystem_RequiredRolesAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRequiredRolesAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredRole_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRoles",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRoles");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredRoleRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SubSystem_CommaKeyword_3_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class SubSystem_RightCurlyBracketKeyword_3_4 extends KeywordToken  {
+	
+	public SubSystem_RightCurlyBracketKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_RequiredRolesAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "{"
+protected class SubSystem_LeftCurlyBracketKeyword_4 extends KeywordToken  {
+	
+	public SubSystem_LeftCurlyBracketKeyword_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_Group_2(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new SubSystem_NameAssignment_1(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+protected class SubSystem_Group_5 extends GroupToken {
+	
+	public SubSystem_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RightParenthesisKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "relationship"
+protected class SubSystem_RelationshipKeyword_5_0 extends KeywordToken  {
+	
+	public SubSystem_RelationshipKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRelationshipKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "("
+protected class SubSystem_LeftParenthesisKeyword_5_1 extends KeywordToken  {
+	
+	public SubSystem_LeftParenthesisKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getLeftParenthesisKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RelationshipKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class SubSystem_RelationshipAssignment_5_2 extends AssignmentToken  {
+	
+	public SubSystem_RelationshipAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRelationshipAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_LeftParenthesisKeyword_5_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_2_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_2_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// ("," relationship+=[Relationship|EString])*
+protected class SubSystem_Group_5_3 extends GroupToken {
+	
+	public SubSystem_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_RelationshipAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class SubSystem_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public SubSystem_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// relationship+=[Relationship|EString]
+protected class SubSystem_RelationshipAssignment_5_3_1 extends AssignmentToken  {
+	
+	public SubSystem_RelationshipAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRelationshipAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_CommaKeyword_5_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("relationship",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("relationship");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_3_1_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_3_1_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+
+// ")"
+protected class SubSystem_RightParenthesisKeyword_5_4 extends KeywordToken  {
+	
+	public SubSystem_RightParenthesisKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRightParenthesisKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_RelationshipAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("assembly" assembly=ComposedStructureAssembly)?
+protected class SubSystem_Group_6 extends GroupToken {
+	
+	public SubSystem_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getGroup_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_AssemblyAssignment_6_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assembly"
+protected class SubSystem_AssemblyKeyword_6_0 extends KeywordToken  {
+	
+	public SubSystem_AssemblyKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getAssemblyKeyword_6_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assembly=ComposedStructureAssembly
+protected class SubSystem_AssemblyAssignment_6_1 extends AssignmentToken  {
+	
+	public SubSystem_AssemblyAssignment_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getAssemblyAssignment_6_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assembly",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assembly");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getComposedStructureAssemblyRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getSubSystemAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new SubSystem_AssemblyKeyword_6_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class SubSystem_RightCurlyBracketKeyword_7 extends KeywordToken  {
+	
+	public SubSystem_RightCurlyBracketKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new SubSystem_Group_6(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new SubSystem_Group_5(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new SubSystem_LeftCurlyBracketKeyword_4(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule SubSystem ****************/
+
+
+/************ begin Rule ComposedStructureAssembly ****************
+ *
+ * ComposedStructureAssembly returns repository_composites::ComposedStructureAssembly:
+ * 	{repository_composites::ComposedStructureAssembly} "ComposedStructureAssembly" "{" ("assemblyContexts" "{"
+ * 	assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")? ("assemblyConnectors" "{"
+ * 	assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+ * 	("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+ * 	providedDelegationConnectors+=ProvidedDelegationConnector)* "}")? ("requiredDelegationConnectors" "{"
+ * 	requiredDelegationConnectors+=RequiredDelegationConnector (","
+ * 	requiredDelegationConnectors+=RequiredDelegationConnector)* "}")? "}";
+ *
+ **/
+
+// {repository_composites::ComposedStructureAssembly} "ComposedStructureAssembly" "{" ("assemblyContexts" "{"
+// assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")? ("assemblyConnectors" "{"
+// assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+// ("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+// providedDelegationConnectors+=ProvidedDelegationConnector)* "}")? ("requiredDelegationConnectors" "{"
+// requiredDelegationConnectors+=RequiredDelegationConnector (","
+// requiredDelegationConnectors+=RequiredDelegationConnector)* "}")? "}"
+protected class ComposedStructureAssembly_Group extends GroupToken {
+	
+	public ComposedStructureAssembly_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RightCurlyBracketKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyAction_0().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// {repository_composites::ComposedStructureAssembly}
+protected class ComposedStructureAssembly_ComposedStructureAssemblyAction_0 extends ActionToken  {
+
+	public ComposedStructureAssembly_ComposedStructureAssemblyAction_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Action getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyAction_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(!eObjectConsumer.isConsumed()) return null;
+		return eObjectConsumer;
+	}
+}
+
+// "ComposedStructureAssembly"
+protected class ComposedStructureAssembly_ComposedStructureAssemblyKeyword_1 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_ComposedStructureAssemblyKeyword_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyKeyword_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_ComposedStructureAssemblyAction_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class ComposedStructureAssembly_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_ComposedStructureAssemblyKeyword_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ("assemblyContexts" "{" assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")?
+protected class ComposedStructureAssembly_Group_3 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RightCurlyBracketKeyword_3_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assemblyContexts"
+protected class ComposedStructureAssembly_AssemblyContextsKeyword_3_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_AssemblyContextsKeyword_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsKeyword_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class ComposedStructureAssembly_LeftCurlyBracketKeyword_3_1 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_LeftCurlyBracketKeyword_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_AssemblyContextsKeyword_3_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyContexts+=AssemblyContext
+protected class ComposedStructureAssembly_AssemblyContextsAssignment_3_2 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_AssemblyContextsAssignment_3_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssignment_3_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyContexts",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyContexts");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyContextRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_3_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," assemblyContexts+=AssemblyContext)*
+protected class ComposedStructureAssembly_Group_3_3 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_3_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_3_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_AssemblyContextsAssignment_3_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class ComposedStructureAssembly_CommaKeyword_3_3_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_CommaKeyword_3_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_3_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_AssemblyContextsAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyContexts+=AssemblyContext
+protected class ComposedStructureAssembly_AssemblyContextsAssignment_3_3_1 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_AssemblyContextsAssignment_3_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssignment_3_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyContexts",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyContexts");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyContextRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_CommaKeyword_3_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class ComposedStructureAssembly_RightCurlyBracketKeyword_3_4 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RightCurlyBracketKeyword_3_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_3_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_3_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_AssemblyContextsAssignment_3_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("assemblyConnectors" "{" assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+protected class ComposedStructureAssembly_Group_4 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RightCurlyBracketKeyword_4_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assemblyConnectors"
+protected class ComposedStructureAssembly_AssemblyConnectorsKeyword_4_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_AssemblyConnectorsKeyword_4_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsKeyword_4_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class ComposedStructureAssembly_LeftCurlyBracketKeyword_4_1 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_LeftCurlyBracketKeyword_4_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_4_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_AssemblyConnectorsKeyword_4_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyConnectors+=AssemblyConnector
+protected class ComposedStructureAssembly_AssemblyConnectorsAssignment_4_2 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_AssemblyConnectorsAssignment_4_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssignment_4_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyConnectors",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_4_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," assemblyConnectors+=AssemblyConnector)*
+protected class ComposedStructureAssembly_Group_4_3 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_4_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_4_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_AssemblyConnectorsAssignment_4_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class ComposedStructureAssembly_CommaKeyword_4_3_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_CommaKeyword_4_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_4_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_AssemblyConnectorsAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyConnectors+=AssemblyConnector
+protected class ComposedStructureAssembly_AssemblyConnectorsAssignment_4_3_1 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_AssemblyConnectorsAssignment_4_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssignment_4_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyConnectors",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_CommaKeyword_4_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class ComposedStructureAssembly_RightCurlyBracketKeyword_4_4 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RightCurlyBracketKeyword_4_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_4_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_4_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_AssemblyConnectorsAssignment_4_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+// providedDelegationConnectors+=ProvidedDelegationConnector)* "}")?
+protected class ComposedStructureAssembly_Group_5 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RightCurlyBracketKeyword_5_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "providedDelegationConnectors"
+protected class ComposedStructureAssembly_ProvidedDelegationConnectorsKeyword_5_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_ProvidedDelegationConnectorsKeyword_5_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsKeyword_5_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_4(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_Group_3(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 2, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class ComposedStructureAssembly_LeftCurlyBracketKeyword_5_1 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_LeftCurlyBracketKeyword_5_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_5_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_ProvidedDelegationConnectorsKeyword_5_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedDelegationConnectors+=ProvidedDelegationConnector
+protected class ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_2 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsAssignment_5_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedDelegationConnectors",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedDelegationConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedDelegationConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_5_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," providedDelegationConnectors+=ProvidedDelegationConnector)*
+protected class ComposedStructureAssembly_Group_5_3 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_5_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_5_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class ComposedStructureAssembly_CommaKeyword_5_3_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_CommaKeyword_5_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_5_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedDelegationConnectors+=ProvidedDelegationConnector
+protected class ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_3_1 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsAssignment_5_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedDelegationConnectors",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedDelegationConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedDelegationConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_CommaKeyword_5_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class ComposedStructureAssembly_RightCurlyBracketKeyword_5_4 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RightCurlyBracketKeyword_5_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_5_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_5_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_ProvidedDelegationConnectorsAssignment_5_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// ("requiredDelegationConnectors" "{" requiredDelegationConnectors+=RequiredDelegationConnector (","
+// requiredDelegationConnectors+=RequiredDelegationConnector)* "}")?
+protected class ComposedStructureAssembly_Group_6 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RightCurlyBracketKeyword_6_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "requiredDelegationConnectors"
+protected class ComposedStructureAssembly_RequiredDelegationConnectorsKeyword_6_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RequiredDelegationConnectorsKeyword_6_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsKeyword_6_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_5(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_Group_4(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new ComposedStructureAssembly_Group_3(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 3, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "{"
+protected class ComposedStructureAssembly_LeftCurlyBracketKeyword_6_1 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_LeftCurlyBracketKeyword_6_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_6_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RequiredDelegationConnectorsKeyword_6_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredDelegationConnectors+=RequiredDelegationConnector
+protected class ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_2 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsAssignment_6_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredDelegationConnectors",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredDelegationConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredDelegationConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_6_1(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+// ("," requiredDelegationConnectors+=RequiredDelegationConnector)*
+protected class ComposedStructureAssembly_Group_6_3 extends GroupToken {
+	
+	public ComposedStructureAssembly_Group_6_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getGroup_6_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_3_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// ","
+protected class ComposedStructureAssembly_CommaKeyword_6_3_0 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_CommaKeyword_6_3_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_6_3_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_6_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredDelegationConnectors+=RequiredDelegationConnector
+protected class ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_3_1 extends AssignmentToken  {
+	
+	public ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_3_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsAssignment_6_3_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_Group(this, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredDelegationConnectors",false)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredDelegationConnectors");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::RuleCallImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredDelegationConnectorRule().getType().getClassifier())) {
+				type = AssignmentType.PARSER_RULE_CALL;
+				element = grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0(); 
+				consumed = obj;
+				return param;
+			}
+		}
+		return null;
+	}
+
+    @Override
+	public AbstractToken createFollowerAfterReturn(AbstractToken next,	int actIndex, int index, IEObjectConsumer inst) {
+		if(value == inst.getEObject() && !inst.isConsumed()) return null;
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_CommaKeyword_6_3_0(lastRuleCallOrigin, next, actIndex, consumed);
+			default: return null;
+		}	
+	}	
+}
+
+
+// "}"
+protected class ComposedStructureAssembly_RightCurlyBracketKeyword_6_4 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RightCurlyBracketKeyword_6_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_6_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_6_3(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_RequiredDelegationConnectorsAssignment_6_2(lastRuleCallOrigin, this, 1, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+// "}"
+protected class ComposedStructureAssembly_RightCurlyBracketKeyword_7 extends KeywordToken  {
+	
+	public ComposedStructureAssembly_RightCurlyBracketKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ComposedStructureAssembly_Group_6(lastRuleCallOrigin, this, 0, inst);
+			case 1: return new ComposedStructureAssembly_Group_5(lastRuleCallOrigin, this, 1, inst);
+			case 2: return new ComposedStructureAssembly_Group_4(lastRuleCallOrigin, this, 2, inst);
+			case 3: return new ComposedStructureAssembly_Group_3(lastRuleCallOrigin, this, 3, inst);
+			case 4: return new ComposedStructureAssembly_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 4, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule ComposedStructureAssembly ****************/
+
+
+/************ begin Rule AssemblyContext ****************
+ *
+ * AssemblyContext returns repository_composites::AssemblyContext:
+ * 	"AssemblyContext" name=EString "{" "encapsulatedComponent"
+ * 	encapsulatedComponent=[repository::RepositoryComponent|EString] "}";
+ *
+ **/
+
+// "AssemblyContext" name=EString "{" "encapsulatedComponent"
+// encapsulatedComponent=[repository::RepositoryComponent|EString] "}"
+protected class AssemblyContext_Group extends GroupToken {
+	
+	public AssemblyContext_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_RightCurlyBracketKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getAssemblyContextRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "AssemblyContext"
+protected class AssemblyContext_AssemblyContextKeyword_0 extends KeywordToken  {
+	
+	public AssemblyContext_AssemblyContextKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getAssemblyContextKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class AssemblyContext_NameAssignment_1 extends AssignmentToken  {
+	
+	public AssemblyContext_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_AssemblyContextKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAssemblyContextAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getAssemblyContextAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class AssemblyContext_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public AssemblyContext_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "encapsulatedComponent"
+protected class AssemblyContext_EncapsulatedComponentKeyword_3 extends KeywordToken  {
+	
+	public AssemblyContext_EncapsulatedComponentKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// encapsulatedComponent=[repository::RepositoryComponent|EString]
+protected class AssemblyContext_EncapsulatedComponentAssignment_4 extends AssignmentToken  {
+	
+	public AssemblyContext_EncapsulatedComponentAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_EncapsulatedComponentKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("encapsulatedComponent",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("encapsulatedComponent");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentRepositoryComponentCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentRepositoryComponentCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class AssemblyContext_RightCurlyBracketKeyword_5 extends KeywordToken  {
+	
+	public AssemblyContext_RightCurlyBracketKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyContextAccess().getRightCurlyBracketKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyContext_EncapsulatedComponentAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule AssemblyContext ****************/
+
+
+/************ begin Rule AssemblyConnector ****************
+ *
+ * AssemblyConnector returns repository_composites::AssemblyConnector:
+ * 	"AssemblyConnector" name=EString "{" "requiredRole" requiredRole=[repository::RequiredRole|EString] "providedRole"
+ * 	providedRole=[repository::ProvidedRole|EString] "providingAssemblyContext"
+ * 	providingAssemblyContext=[repository_composites::AssemblyContext|EString] "requiringAssemblyContext"
+ * 	requiringAssemblyContext=[repository_composites::AssemblyContext|EString] "}";
+ *
+ **/
+
+// "AssemblyConnector" name=EString "{" "requiredRole" requiredRole=[repository::RequiredRole|EString] "providedRole"
+// providedRole=[repository::ProvidedRole|EString] "providingAssemblyContext"
+// providingAssemblyContext=[repository_composites::AssemblyContext|EString] "requiringAssemblyContext"
+// requiringAssemblyContext=[repository_composites::AssemblyContext|EString] "}"
+protected class AssemblyConnector_Group extends GroupToken {
+	
+	public AssemblyConnector_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_RightCurlyBracketKeyword_11(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getAssemblyConnectorRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "AssemblyConnector"
+protected class AssemblyConnector_AssemblyConnectorKeyword_0 extends KeywordToken  {
+	
+	public AssemblyConnector_AssemblyConnectorKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getAssemblyConnectorKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class AssemblyConnector_NameAssignment_1 extends AssignmentToken  {
+	
+	public AssemblyConnector_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_AssemblyConnectorKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getAssemblyConnectorAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getAssemblyConnectorAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class AssemblyConnector_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public AssemblyConnector_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "requiredRole"
+protected class AssemblyConnector_RequiredRoleKeyword_3 extends KeywordToken  {
+	
+	public AssemblyConnector_RequiredRoleKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getRequiredRoleKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiredRole=[repository::RequiredRole|EString]
+protected class AssemblyConnector_RequiredRoleAssignment_4 extends AssignmentToken  {
+	
+	public AssemblyConnector_RequiredRoleAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getRequiredRoleAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_RequiredRoleKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiredRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiredRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorAccess().getRequiredRoleRequiredRoleCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getAssemblyConnectorAccess().getRequiredRoleRequiredRoleCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "providedRole"
+protected class AssemblyConnector_ProvidedRoleKeyword_5 extends KeywordToken  {
+	
+	public AssemblyConnector_ProvidedRoleKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getProvidedRoleKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_RequiredRoleAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providedRole=[repository::ProvidedRole|EString]
+protected class AssemblyConnector_ProvidedRoleAssignment_6 extends AssignmentToken  {
+	
+	public AssemblyConnector_ProvidedRoleAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getProvidedRoleAssignment_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_ProvidedRoleKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providedRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providedRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorAccess().getProvidedRoleProvidedRoleCrossReference_6_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getAssemblyConnectorAccess().getProvidedRoleProvidedRoleCrossReference_6_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "providingAssemblyContext"
+protected class AssemblyConnector_ProvidingAssemblyContextKeyword_7 extends KeywordToken  {
+	
+	public AssemblyConnector_ProvidingAssemblyContextKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_ProvidedRoleAssignment_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// providingAssemblyContext=[repository_composites::AssemblyContext|EString]
+protected class AssemblyConnector_ProvidingAssemblyContextAssignment_8 extends AssignmentToken  {
+	
+	public AssemblyConnector_ProvidingAssemblyContextAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextAssignment_8();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_ProvidingAssemblyContextKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("providingAssemblyContext",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("providingAssemblyContext");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextAssemblyContextCrossReference_8_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextAssemblyContextCrossReference_8_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "requiringAssemblyContext"
+protected class AssemblyConnector_RequiringAssemblyContextKeyword_9 extends KeywordToken  {
+	
+	public AssemblyConnector_RequiringAssemblyContextKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextKeyword_9();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_ProvidingAssemblyContextAssignment_8(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// requiringAssemblyContext=[repository_composites::AssemblyContext|EString]
+protected class AssemblyConnector_RequiringAssemblyContextAssignment_10 extends AssignmentToken  {
+	
+	public AssemblyConnector_RequiringAssemblyContextAssignment_10(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextAssignment_10();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_RequiringAssemblyContextKeyword_9(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("requiringAssemblyContext",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("requiringAssemblyContext");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextAssemblyContextCrossReference_10_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextAssemblyContextCrossReference_10_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class AssemblyConnector_RightCurlyBracketKeyword_11 extends KeywordToken  {
+	
+	public AssemblyConnector_RightCurlyBracketKeyword_11(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getAssemblyConnectorAccess().getRightCurlyBracketKeyword_11();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new AssemblyConnector_RequiringAssemblyContextAssignment_10(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule AssemblyConnector ****************/
+
+
+/************ begin Rule ProvidedDelegationConnector ****************
+ *
+ * ProvidedDelegationConnector returns repository_composites::ProvidedDelegationConnector:
+ * 	"ProvidedDelegationConnector" name=EString "{" "assemblyContext"
+ * 	assemblyContext=[repository_composites::AssemblyContext|EString] "innerProvidedRole"
+ * 	innerProvidedRole=[repository::ProvidedRole|EString] "outerProvidedRole"
+ * 	outerProvidedRole=[repository::ProvidedRole|EString] "}";
+ *
+ **/
+
+// "ProvidedDelegationConnector" name=EString "{" "assemblyContext"
+// assemblyContext=[repository_composites::AssemblyContext|EString] "innerProvidedRole"
+// innerProvidedRole=[repository::ProvidedRole|EString] "outerProvidedRole"
+// outerProvidedRole=[repository::ProvidedRole|EString] "}"
+protected class ProvidedDelegationConnector_Group extends GroupToken {
+	
+	public ProvidedDelegationConnector_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_RightCurlyBracketKeyword_9(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getProvidedDelegationConnectorRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "ProvidedDelegationConnector"
+protected class ProvidedDelegationConnector_ProvidedDelegationConnectorKeyword_0 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_ProvidedDelegationConnectorKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getProvidedDelegationConnectorKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class ProvidedDelegationConnector_NameAssignment_1 extends AssignmentToken  {
+	
+	public ProvidedDelegationConnector_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_ProvidedDelegationConnectorKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getProvidedDelegationConnectorAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getProvidedDelegationConnectorAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class ProvidedDelegationConnector_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assemblyContext"
+protected class ProvidedDelegationConnector_AssemblyContextKeyword_3 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_AssemblyContextKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyContext=[repository_composites::AssemblyContext|EString]
+protected class ProvidedDelegationConnector_AssemblyContextAssignment_4 extends AssignmentToken  {
+	
+	public ProvidedDelegationConnector_AssemblyContextAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_AssemblyContextKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyContext",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyContext");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "innerProvidedRole"
+protected class ProvidedDelegationConnector_InnerProvidedRoleKeyword_5 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_InnerProvidedRoleKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_AssemblyContextAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// innerProvidedRole=[repository::ProvidedRole|EString]
+protected class ProvidedDelegationConnector_InnerProvidedRoleAssignment_6 extends AssignmentToken  {
+	
+	public ProvidedDelegationConnector_InnerProvidedRoleAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleAssignment_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_InnerProvidedRoleKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("innerProvidedRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("innerProvidedRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleProvidedRoleCrossReference_6_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleProvidedRoleCrossReference_6_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "outerProvidedRole"
+protected class ProvidedDelegationConnector_OuterProvidedRoleKeyword_7 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_OuterProvidedRoleKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_InnerProvidedRoleAssignment_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// outerProvidedRole=[repository::ProvidedRole|EString]
+protected class ProvidedDelegationConnector_OuterProvidedRoleAssignment_8 extends AssignmentToken  {
+	
+	public ProvidedDelegationConnector_OuterProvidedRoleAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleAssignment_8();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_OuterProvidedRoleKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("outerProvidedRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("outerProvidedRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleProvidedRoleCrossReference_8_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleProvidedRoleCrossReference_8_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class ProvidedDelegationConnector_RightCurlyBracketKeyword_9 extends KeywordToken  {
+	
+	public ProvidedDelegationConnector_RightCurlyBracketKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getProvidedDelegationConnectorAccess().getRightCurlyBracketKeyword_9();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new ProvidedDelegationConnector_OuterProvidedRoleAssignment_8(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule ProvidedDelegationConnector ****************/
+
+
+/************ begin Rule RequiredDelegationConnector ****************
+ *
+ * RequiredDelegationConnector returns repository_composites::RequiredDelegationConnector:
+ * 	"RequiredDelegationConnector" name=EString "{" "assemblyContext"
+ * 	assemblyContext=[repository_composites::AssemblyContext|EString] "innerRequiredRole"
+ * 	innerRequiredRole=[repository::RequiredRole|EString] "outerRequiredRole"
+ * 	outerRequiredRole=[repository::RequiredRole|EString] "}";
+ *
+ **/
+
+// "RequiredDelegationConnector" name=EString "{" "assemblyContext"
+// assemblyContext=[repository_composites::AssemblyContext|EString] "innerRequiredRole"
+// innerRequiredRole=[repository::RequiredRole|EString] "outerRequiredRole"
+// outerRequiredRole=[repository::RequiredRole|EString] "}"
+protected class RequiredDelegationConnector_Group extends GroupToken {
+	
+	public RequiredDelegationConnector_Group(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Group getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getGroup();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_RightCurlyBracketKeyword_9(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override
+	public IEObjectConsumer tryConsume() {
+		if(getEObject().eClass() != grammarAccess.getRequiredDelegationConnectorRule().getType().getClassifier())
+			return null;
+		return eObjectConsumer;
+	}
+
+}
+
+// "RequiredDelegationConnector"
+protected class RequiredDelegationConnector_RequiredDelegationConnectorKeyword_0 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_RequiredDelegationConnectorKeyword_0(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getRequiredDelegationConnectorKeyword_0();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			default: return lastRuleCallOrigin.createFollowerAfterReturn(this, index, index, inst);
+		}	
+	}
+
+}
+
+// name=EString
+protected class RequiredDelegationConnector_NameAssignment_1 extends AssignmentToken  {
+	
+	public RequiredDelegationConnector_NameAssignment_1(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getNameAssignment_1();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_RequiredDelegationConnectorKeyword_0(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("name",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("name");
+		if(valueSerializer.isValid(obj.getEObject(), grammarAccess.getRequiredDelegationConnectorAccess().getNameEStringParserRuleCall_1_0(), value, null)) {
+			type = AssignmentType.DATATYPE_RULE_CALL;
+			element = grammarAccess.getRequiredDelegationConnectorAccess().getNameEStringParserRuleCall_1_0();
+			return obj;
+		}
+		return null;
+	}
+
+}
+
+// "{"
+protected class RequiredDelegationConnector_LeftCurlyBracketKeyword_2 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_LeftCurlyBracketKeyword_2(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getLeftCurlyBracketKeyword_2();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_NameAssignment_1(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// "assemblyContext"
+protected class RequiredDelegationConnector_AssemblyContextKeyword_3 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_AssemblyContextKeyword_3(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextKeyword_3();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_LeftCurlyBracketKeyword_2(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// assemblyContext=[repository_composites::AssemblyContext|EString]
+protected class RequiredDelegationConnector_AssemblyContextAssignment_4 extends AssignmentToken  {
+	
+	public RequiredDelegationConnector_AssemblyContextAssignment_4(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextAssignment_4();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_AssemblyContextKeyword_3(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("assemblyContext",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("assemblyContext");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "innerRequiredRole"
+protected class RequiredDelegationConnector_InnerRequiredRoleKeyword_5 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_InnerRequiredRoleKeyword_5(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleKeyword_5();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_AssemblyContextAssignment_4(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// innerRequiredRole=[repository::RequiredRole|EString]
+protected class RequiredDelegationConnector_InnerRequiredRoleAssignment_6 extends AssignmentToken  {
+	
+	public RequiredDelegationConnector_InnerRequiredRoleAssignment_6(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleAssignment_6();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_InnerRequiredRoleKeyword_5(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("innerRequiredRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("innerRequiredRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleRequiredRoleCrossReference_6_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleRequiredRoleCrossReference_6_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "outerRequiredRole"
+protected class RequiredDelegationConnector_OuterRequiredRoleKeyword_7 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_OuterRequiredRoleKeyword_7(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleKeyword_7();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_InnerRequiredRoleAssignment_6(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+// outerRequiredRole=[repository::RequiredRole|EString]
+protected class RequiredDelegationConnector_OuterRequiredRoleAssignment_8 extends AssignmentToken  {
+	
+	public RequiredDelegationConnector_OuterRequiredRoleAssignment_8(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Assignment getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleAssignment_8();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_OuterRequiredRoleKeyword_7(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+    @Override	
+	public IEObjectConsumer tryConsume() {
+		if((value = eObjectConsumer.getConsumable("outerRequiredRole",true)) == null) return null;
+		IEObjectConsumer obj = eObjectConsumer.cloneAndConsume("outerRequiredRole");
+		if(value instanceof EObject) { // org::eclipse::xtext::impl::CrossReferenceImpl
+			IEObjectConsumer param = createEObjectConsumer((EObject)value);
+			if(param.isInstanceOf(grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleRequiredRoleCrossReference_8_0().getType().getClassifier())) {
+				type = AssignmentType.CROSS_REFERENCE;
+				element = grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleRequiredRoleCrossReference_8_0(); 
+				return obj;
+			}
+		}
+		return null;
+	}
+
+}
+
+// "}"
+protected class RequiredDelegationConnector_RightCurlyBracketKeyword_9 extends KeywordToken  {
+	
+	public RequiredDelegationConnector_RightCurlyBracketKeyword_9(AbstractToken lastRuleCallOrigin, AbstractToken next, int transitionIndex, IEObjectConsumer eObjectConsumer) {
+		super(lastRuleCallOrigin, next, transitionIndex, eObjectConsumer);
+	}
+	
+	@Override
+	public Keyword getGrammarElement() {
+		return grammarAccess.getRequiredDelegationConnectorAccess().getRightCurlyBracketKeyword_9();
+	}
+
+    @Override
+	public AbstractToken createFollower(int index, IEObjectConsumer inst) {
+		switch(index) {
+			case 0: return new RequiredDelegationConnector_OuterRequiredRoleAssignment_8(lastRuleCallOrigin, this, 0, inst);
+			default: return null;
+		}	
+	}
+
+}
+
+
+/************ end Rule RequiredDelegationConnector ****************/
+
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestAntlrTokenFileProvider.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestAntlrTokenFileProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..a59a10eed96f01761f39a0c66f82efe76609fe7f
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestAntlrTokenFileProvider.java
@@ -0,0 +1,15 @@
+/*
+* generated by Xtext
+*/
+package org.xtext.example.mydsl.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class MyDslTestAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.tokens");
+	}
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestParser.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..1cb8e6619dc9f00e92683b4e315cbb927980a913
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/MyDslTestParser.java
@@ -0,0 +1,39 @@
+/*
+* generated by Xtext
+*/
+package org.xtext.example.mydsl.parser.antlr;
+
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import org.xtext.example.mydsl.services.MyDslTestGrammarAccess;
+
+public class MyDslTestParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject
+	private MyDslTestGrammarAccess grammarAccess;
+	
+	@Override
+	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
+		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+	}
+	
+	@Override
+	protected org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestParser createParser(XtextTokenStream stream) {
+		return new org.xtext.example.mydsl.parser.antlr.internal.InternalMyDslTestParser(stream, getGrammarAccess());
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "Repository";
+	}
+	
+	public MyDslTestGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(MyDslTestGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g
new file mode 100644
index 0000000000000000000000000000000000000000..88356f220e08bc76039adfd1519042c6bdecefac
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g
@@ -0,0 +1,2719 @@
+/*
+* generated by Xtext
+*/
+grammar InternalMyDslTest;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package org.xtext.example.mydsl.parser.antlr.internal;
+
+// 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;
+}
+
+@parser::header {
+package org.xtext.example.mydsl.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.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;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.xtext.example.mydsl.services.MyDslTestGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private MyDslTestGrammarAccess grammarAccess;
+ 	
+    public InternalMyDslTestParser(TokenStream input, MyDslTestGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "Repository";	
+   	}
+   	
+   	@Override
+   	protected MyDslTestGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleRepository
+entryRuleRepository returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRepositoryRule()); }
+	 iv_ruleRepository=ruleRepository 
+	 { $current=$iv_ruleRepository.current; } 
+	 EOF 
+;
+
+// Rule Repository
+ruleRepository returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='Repository' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getRepositoryAccess().getRepositoryKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_2());
+    }
+(	otherlv_3='datatypes' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getRepositoryAccess().getDatatypesKeyword_3_0());
+    }
+	otherlv_4='{' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_3_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_2_0()); 
+	    }
+		lv_datatypes_5_0=ruleDataType		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"datatypes",
+        		lv_datatypes_5_0, 
+        		"DataType");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getRepositoryAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_3_1_0()); 
+	    }
+		lv_datatypes_7_0=ruleDataType		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"datatypes",
+        		lv_datatypes_7_0, 
+        		"DataType");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_8='}' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_3_4());
+    }
+)?(	otherlv_9='interfaces' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getRepositoryAccess().getInterfacesKeyword_4_0());
+    }
+	otherlv_10='{' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_4_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_2_0()); 
+	    }
+		lv_interfaces_11_0=ruleInterface		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"interfaces",
+        		lv_interfaces_11_0, 
+        		"Interface");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getRepositoryAccess().getCommaKeyword_4_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_3_1_0()); 
+	    }
+		lv_interfaces_13_0=ruleInterface		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"interfaces",
+        		lv_interfaces_13_0, 
+        		"Interface");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14='}' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_4_4());
+    }
+)?(	otherlv_15='components' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getRepositoryAccess().getComponentsKeyword_5_0());
+    }
+	otherlv_16='{' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_5_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_2_0()); 
+	    }
+		lv_components_17_0=ruleRepositoryComponent		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"components",
+        		lv_components_17_0, 
+        		"RepositoryComponent");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_18=',' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getRepositoryAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_3_1_0()); 
+	    }
+		lv_components_19_0=ruleRepositoryComponent		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryRule());
+	        }
+       		add(
+       			$current, 
+       			"components",
+        		lv_components_19_0, 
+        		"RepositoryComponent");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_20='}' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_5_4());
+    }
+)?	otherlv_21='}' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_6());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleDataType
+entryRuleDataType returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getDataTypeRule()); }
+	 iv_ruleDataType=ruleDataType 
+	 { $current=$iv_ruleDataType.current; } 
+	 EOF 
+;
+
+// Rule DataType
+ruleDataType returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getDataTypeAccess().getCollectionDataTypeParserRuleCall_0()); 
+    }
+    this_CollectionDataType_0=ruleCollectionDataType
+    { 
+        $current = $this_CollectionDataType_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getDataTypeAccess().getCompositeDataTypeParserRuleCall_1()); 
+    }
+    this_CompositeDataType_1=ruleCompositeDataType
+    { 
+        $current = $this_CompositeDataType_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getDataTypeAccess().getPrimitiveDataTypeParserRuleCall_2()); 
+    }
+    this_PrimitiveDataType_2=rulePrimitiveDataType
+    { 
+        $current = $this_PrimitiveDataType_2.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleRepositoryComponent
+entryRuleRepositoryComponent returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRepositoryComponentRule()); }
+	 iv_ruleRepositoryComponent=ruleRepositoryComponent 
+	 { $current=$iv_ruleRepositoryComponent.current; } 
+	 EOF 
+;
+
+// Rule RepositoryComponent
+ruleRepositoryComponent returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getRepositoryComponentAccess().getRepositoryComponent_ImplParserRuleCall_0()); 
+    }
+    this_RepositoryComponent_Impl_0=ruleRepositoryComponent_Impl
+    { 
+        $current = $this_RepositoryComponent_Impl_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getRepositoryComponentAccess().getBasicComponentParserRuleCall_1()); 
+    }
+    this_BasicComponent_1=ruleBasicComponent
+    { 
+        $current = $this_BasicComponent_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getRepositoryComponentAccess().getCompositeComponentParserRuleCall_2()); 
+    }
+    this_CompositeComponent_2=ruleCompositeComponent
+    { 
+        $current = $this_CompositeComponent_2.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getRepositoryComponentAccess().getSubSystemParserRuleCall_3()); 
+    }
+    this_SubSystem_3=ruleSubSystem
+    { 
+        $current = $this_SubSystem_3.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleEString
+entryRuleEString returns [String current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getEStringRule()); } 
+	 iv_ruleEString=ruleEString 
+	 { $current=$iv_ruleEString.current.getText(); }  
+	 EOF 
+;
+
+// Rule EString
+ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(    this_STRING_0=RULE_STRING    {
+		$current.merge(this_STRING_0);
+    }
+
+    { 
+    newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+    }
+
+    |    this_ID_1=RULE_ID    {
+		$current.merge(this_ID_1);
+    }
+
+    { 
+    newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+    }
+)
+    ;
+
+
+
+
+
+// Entry rule entryRuleInterface
+entryRuleInterface returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getInterfaceRule()); }
+	 iv_ruleInterface=ruleInterface 
+	 { $current=$iv_ruleInterface.current; } 
+	 EOF 
+;
+
+// Rule Interface
+ruleInterface returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='Interface' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getInterfaceAccess().getInterfaceKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInterfaceAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInterfaceRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_2());
+    }
+(	otherlv_3='parentInterfaces' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getInterfaceAccess().getParentInterfacesKeyword_3_0());
+    }
+	otherlv_4='(' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getInterfaceAccess().getLeftParenthesisKeyword_3_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getInterfaceRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getInterfaceAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getInterfaceRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_8=')' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getInterfaceAccess().getRightParenthesisKeyword_3_4());
+    }
+)?(	otherlv_9='signatures' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getInterfaceAccess().getSignaturesKeyword_4_0());
+    }
+	otherlv_10='{' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_4_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_2_0()); 
+	    }
+		lv_signatures_11_0=ruleSignature		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInterfaceRule());
+	        }
+       		add(
+       			$current, 
+       			"signatures",
+        		lv_signatures_11_0, 
+        		"Signature");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getInterfaceAccess().getCommaKeyword_4_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_3_1_0()); 
+	    }
+		lv_signatures_13_0=ruleSignature		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInterfaceRule());
+	        }
+       		add(
+       			$current, 
+       			"signatures",
+        		lv_signatures_13_0, 
+        		"Signature");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14='}' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_4_4());
+    }
+)?	otherlv_15='}' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_5());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleRepositoryComponent_Impl
+entryRuleRepositoryComponent_Impl returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRepositoryComponent_ImplRule()); }
+	 iv_ruleRepositoryComponent_Impl=ruleRepositoryComponent_Impl 
+	 { $current=$iv_ruleRepositoryComponent_Impl.current; } 
+	 EOF 
+;
+
+// Rule RepositoryComponent_Impl
+ruleRepositoryComponent_Impl returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='RepositoryComponent' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getRepositoryComponent_ImplAccess().getRepositoryComponentKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_2());
+    }
+(	otherlv_3='relationship' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipKeyword_3_0());
+    }
+	otherlv_4='(' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getRepositoryComponent_ImplAccess().getLeftParenthesisKeyword_3_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_8=')' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getRepositoryComponent_ImplAccess().getRightParenthesisKeyword_3_4());
+    }
+)?(	otherlv_9='providedRoles' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesKeyword_4_0());
+    }
+	otherlv_10='{' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_4_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_2_0()); 
+	    }
+		lv_providedRoles_11_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_11_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_4_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_3_1_0()); 
+	    }
+		lv_providedRoles_13_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_13_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14='}' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_4_4());
+    }
+)?(	otherlv_15='requiredRoles' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesKeyword_5_0());
+    }
+	otherlv_16='{' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_5_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_2_0()); 
+	    }
+		lv_requiredRoles_17_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_17_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_18=',' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_3_1_0()); 
+	    }
+		lv_requiredRoles_19_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_19_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_20='}' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_5_4());
+    }
+)?	otherlv_21='}' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_6());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleCollectionDataType
+entryRuleCollectionDataType returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getCollectionDataTypeRule()); }
+	 iv_ruleCollectionDataType=ruleCollectionDataType 
+	 { $current=$iv_ruleCollectionDataType.current; } 
+	 EOF 
+;
+
+// Rule CollectionDataType
+ruleCollectionDataType returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='CollectionDataType' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getCollectionDataTypeAccess().getCollectionDataTypeKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCollectionDataTypeAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCollectionDataTypeRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getCollectionDataTypeAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='innerType' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getCollectionDataTypeAccess().getInnerTypeKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCollectionDataTypeRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getCollectionDataTypeAccess().getInnerTypeDataTypeCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='}' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getCollectionDataTypeAccess().getRightCurlyBracketKeyword_5());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleCompositeDataType
+entryRuleCompositeDataType returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getCompositeDataTypeRule()); }
+	 iv_ruleCompositeDataType=ruleCompositeDataType 
+	 { $current=$iv_ruleCompositeDataType.current; } 
+	 EOF 
+;
+
+// Rule CompositeDataType
+ruleCompositeDataType returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='CompositeDataType' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getCompositeDataTypeAccess().getCompositeDataTypeKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_2());
+    }
+(	otherlv_3='parentTypes' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getCompositeDataTypeAccess().getParentTypesKeyword_3_0());
+    }
+	otherlv_4='(' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getCompositeDataTypeAccess().getLeftParenthesisKeyword_3_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompositeDataTypeRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompositeDataTypeRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_8=')' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getCompositeDataTypeAccess().getRightParenthesisKeyword_3_4());
+    }
+)?(	otherlv_9='innerDeclarations' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsKeyword_4_0());
+    }
+	otherlv_10='{' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_4_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0()); 
+	    }
+		lv_innerDeclarations_11_0=ruleInnerDeclaration		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+	        }
+       		add(
+       			$current, 
+       			"innerDeclarations",
+        		lv_innerDeclarations_11_0, 
+        		"InnerDeclaration");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_4_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0()); 
+	    }
+		lv_innerDeclarations_13_0=ruleInnerDeclaration		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+	        }
+       		add(
+       			$current, 
+       			"innerDeclarations",
+        		lv_innerDeclarations_13_0, 
+        		"InnerDeclaration");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14='}' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_4_4());
+    }
+)?	otherlv_15='}' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_5());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRulePrimitiveDataType
+entryRulePrimitiveDataType returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getPrimitiveDataTypeRule()); }
+	 iv_rulePrimitiveDataType=rulePrimitiveDataType 
+	 { $current=$iv_rulePrimitiveDataType.current; } 
+	 EOF 
+;
+
+// Rule PrimitiveDataType
+rulePrimitiveDataType returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='PrimitiveDataType' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getPrimitiveDataTypeAccess().getPrimitiveDataTypeKeyword_0());
+    }
+	otherlv_1='{' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getPrimitiveDataTypeAccess().getLeftCurlyBracketKeyword_1());
+    }
+	otherlv_2='type' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getPrimitiveDataTypeAccess().getTypeKeyword_2());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getPrimitiveDataTypeAccess().getTypePrimitiveTypeEnumEnumRuleCall_3_0()); 
+	    }
+		lv_type_3_0=rulePrimitiveTypeEnum		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getPrimitiveDataTypeRule());
+	        }
+       		set(
+       			$current, 
+       			"type",
+        		lv_type_3_0, 
+        		"PrimitiveTypeEnum");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_4='ref' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getPrimitiveDataTypeAccess().getRefKeyword_4());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getPrimitiveDataTypeAccess().getNameEStringParserRuleCall_5_0()); 
+	    }
+		lv_name_5_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getPrimitiveDataTypeRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_5_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_6='}' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getPrimitiveDataTypeAccess().getRightCurlyBracketKeyword_6());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleInnerDeclaration
+entryRuleInnerDeclaration returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getInnerDeclarationRule()); }
+	 iv_ruleInnerDeclaration=ruleInnerDeclaration 
+	 { $current=$iv_ruleInnerDeclaration.current; } 
+	 EOF 
+;
+
+// Rule InnerDeclaration
+ruleInnerDeclaration returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='InnerDeclaration' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getInnerDeclarationAccess().getInnerDeclarationKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getInnerDeclarationAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getInnerDeclarationRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getInnerDeclarationAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='dataType' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getInnerDeclarationAccess().getDataTypeKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getInnerDeclarationRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getInnerDeclarationAccess().getDataTypeDataTypeCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='}' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getInnerDeclarationAccess().getRightCurlyBracketKeyword_5());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleSignature
+entryRuleSignature returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getSignatureRule()); }
+	 iv_ruleSignature=ruleSignature 
+	 { $current=$iv_ruleSignature.current; } 
+	 EOF 
+;
+
+// Rule Signature
+ruleSignature returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSignatureRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getSignatureAccess().getReturnTypeDataTypeCrossReference_0_0_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |	otherlv_1='void' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getSignatureAccess().getVoidKeyword_0_1());
+    }
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSignatureAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_2_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSignatureRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_2_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_3='(' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getSignatureAccess().getLeftParenthesisKeyword_2());
+    }
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_0_0()); 
+	    }
+		lv_parameters_4_0=ruleParameter		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSignatureRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_4_0, 
+        		"Parameter");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_5=',' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getSignatureAccess().getCommaKeyword_3_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_1_1_0()); 
+	    }
+		lv_parameters_6_0=ruleParameter		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSignatureRule());
+	        }
+       		add(
+       			$current, 
+       			"parameters",
+        		lv_parameters_6_0, 
+        		"Parameter");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?	otherlv_7=')' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getSignatureAccess().getRightParenthesisKeyword_4());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleParameter
+entryRuleParameter returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getParameterRule()); }
+	 iv_ruleParameter=ruleParameter 
+	 { $current=$iv_ruleParameter.current; } 
+	 EOF 
+;
+
+// Rule Parameter
+ruleParameter returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getParameterRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getParameterAccess().getDataTypeDataTypeCrossReference_0_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getParameterAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getParameterRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleProvidedRole
+entryRuleProvidedRole returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getProvidedRoleRule()); }
+	 iv_ruleProvidedRole=ruleProvidedRole 
+	 { $current=$iv_ruleProvidedRole.current; } 
+	 EOF 
+;
+
+// Rule ProvidedRole
+ruleProvidedRole returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getProvidedRoleAccess().getProvidedRoleAction_0(),
+            $current);
+    }
+)	otherlv_1='provides' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getProvidedRoleAccess().getProvidesKeyword_1());
+    }
+((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getProvidedRoleRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getProvidedRoleAccess().getInterfaceInterfaceCrossReference_2_0_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getProvidedRoleAccess().getCommaKeyword_2_1());
+    }
+)?)*)
+;
+
+
+
+
+
+// Entry rule entryRuleRequiredRole
+entryRuleRequiredRole returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRequiredRoleRule()); }
+	 iv_ruleRequiredRole=ruleRequiredRole 
+	 { $current=$iv_ruleRequiredRole.current; } 
+	 EOF 
+;
+
+// Rule RequiredRole
+ruleRequiredRole returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getRequiredRoleAccess().getRequiredRoleAction_0(),
+            $current);
+    }
+)	otherlv_1='requires' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getRequiredRoleAccess().getRequiresKeyword_1());
+    }
+((
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRequiredRoleRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRequiredRoleAccess().getInterfaceInterfaceCrossReference_2_0_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getRequiredRoleAccess().getCommaKeyword_2_1());
+    }
+)?)*)
+;
+
+
+
+
+
+// Entry rule entryRuleBasicComponent
+entryRuleBasicComponent returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getBasicComponentRule()); }
+	 iv_ruleBasicComponent=ruleBasicComponent 
+	 { $current=$iv_ruleBasicComponent.current; } 
+	 EOF 
+;
+
+// Rule BasicComponent
+ruleBasicComponent returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='BasicComponent' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getBasicComponentAccess().getBasicComponentKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0()); 
+	    }
+		lv_providedRoles_2_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_2_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getBasicComponentAccess().getCommaKeyword_2_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0()); 
+	    }
+		lv_providedRoles_4_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_4_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0()); 
+	    }
+		lv_requiredRoles_5_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_5_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getBasicComponentAccess().getCommaKeyword_3_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0()); 
+	    }
+		lv_requiredRoles_7_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_7_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?	otherlv_8='{' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getBasicComponentAccess().getLeftCurlyBracketKeyword_4());
+    }
+(	otherlv_9='relationship' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getBasicComponentAccess().getRelationshipKeyword_5_0());
+    }
+	otherlv_10='(' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getBasicComponentAccess().getLeftParenthesisKeyword_5_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getBasicComponentRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getBasicComponentAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getBasicComponentRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14=')' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getBasicComponentAccess().getRightParenthesisKeyword_5_4());
+    }
+)?	otherlv_15='}' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getBasicComponentAccess().getRightCurlyBracketKeyword_6());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleCompositeComponent
+entryRuleCompositeComponent returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getCompositeComponentRule()); }
+	 iv_ruleCompositeComponent=ruleCompositeComponent 
+	 { $current=$iv_ruleCompositeComponent.current; } 
+	 EOF 
+;
+
+// Rule CompositeComponent
+ruleCompositeComponent returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='CompositeComponent' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getCompositeComponentAccess().getCompositeComponentKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0()); 
+	    }
+		lv_providedRoles_2_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_2_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_3=',' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getCompositeComponentAccess().getCommaKeyword_2_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0()); 
+	    }
+		lv_providedRoles_4_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_4_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0()); 
+	    }
+		lv_requiredRoles_5_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_5_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getCompositeComponentAccess().getCommaKeyword_3_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0()); 
+	    }
+		lv_requiredRoles_7_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_7_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)?	otherlv_8='{' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getCompositeComponentAccess().getLeftCurlyBracketKeyword_4());
+    }
+(	otherlv_9='relationship' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getCompositeComponentAccess().getRelationshipKeyword_5_0());
+    }
+	otherlv_10='(' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getCompositeComponentAccess().getLeftParenthesisKeyword_5_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompositeComponentRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getCompositeComponentAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getCompositeComponentRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14=')' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getCompositeComponentAccess().getRightParenthesisKeyword_5_4());
+    }
+)?(	otherlv_15='assembly' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getCompositeComponentAccess().getAssemblyKeyword_6_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0()); 
+	    }
+		lv_assembly_16_0=ruleComposedStructureAssembly		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+	        }
+       		set(
+       			$current, 
+       			"assembly",
+        		lv_assembly_16_0, 
+        		"ComposedStructureAssembly");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))?	otherlv_17='}' 
+    {
+    	newLeafNode(otherlv_17, grammarAccess.getCompositeComponentAccess().getRightCurlyBracketKeyword_7());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleSubSystem
+entryRuleSubSystem returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getSubSystemRule()); }
+	 iv_ruleSubSystem=ruleSubSystem 
+	 { $current=$iv_ruleSubSystem.current; } 
+	 EOF 
+;
+
+// Rule SubSystem
+ruleSubSystem returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='SubSystem' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getSubSystemAccess().getSubSystemKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_2='providedRoles' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getSubSystemAccess().getProvidedRolesKeyword_2_0());
+    }
+	otherlv_3='{' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_2_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_2_0()); 
+	    }
+		lv_providedRoles_4_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_4_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_5=',' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getSubSystemAccess().getCommaKeyword_2_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_3_1_0()); 
+	    }
+		lv_providedRoles_6_0=ruleProvidedRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		add(
+       			$current, 
+       			"providedRoles",
+        		lv_providedRoles_6_0, 
+        		"ProvidedRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_7='}' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_2_4());
+    }
+)?(	otherlv_8='requiredRoles' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getSubSystemAccess().getRequiredRolesKeyword_3_0());
+    }
+	otherlv_9='{' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_3_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_2_0()); 
+	    }
+		lv_requiredRoles_10_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_10_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_11=',' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getSubSystemAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_3_1_0()); 
+	    }
+		lv_requiredRoles_12_0=ruleRequiredRole		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredRoles",
+        		lv_requiredRoles_12_0, 
+        		"RequiredRole");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_13='}' 
+    {
+    	newLeafNode(otherlv_13, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_3_4());
+    }
+)?	otherlv_14='{' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_4());
+    }
+(	otherlv_15='relationship' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getSubSystemAccess().getRelationshipKeyword_5_0());
+    }
+	otherlv_16='(' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getSubSystemAccess().getLeftParenthesisKeyword_5_1());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSubSystemRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_18=',' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getSubSystemAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSubSystemRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_20=')' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getSubSystemAccess().getRightParenthesisKeyword_5_4());
+    }
+)?(	otherlv_21='assembly' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getSubSystemAccess().getAssemblyKeyword_6_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSubSystemAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0()); 
+	    }
+		lv_assembly_22_0=ruleComposedStructureAssembly		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSubSystemRule());
+	        }
+       		set(
+       			$current, 
+       			"assembly",
+        		lv_assembly_22_0, 
+        		"ComposedStructureAssembly");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))?	otherlv_23='}' 
+    {
+    	newLeafNode(otherlv_23, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_7());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleComposedStructureAssembly
+entryRuleComposedStructureAssembly returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getComposedStructureAssemblyRule()); }
+	 iv_ruleComposedStructureAssembly=ruleComposedStructureAssembly 
+	 { $current=$iv_ruleComposedStructureAssembly.current; } 
+	 EOF 
+;
+
+// Rule ComposedStructureAssembly
+ruleComposedStructureAssembly returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyAction_0(),
+            $current);
+    }
+)	otherlv_1='ComposedStructureAssembly' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyKeyword_1());
+    }
+	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_2());
+    }
+(	otherlv_3='assemblyContexts' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsKeyword_3_0());
+    }
+	otherlv_4='{' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_3_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_2_0()); 
+	    }
+		lv_assemblyContexts_5_0=ruleAssemblyContext		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"assemblyContexts",
+        		lv_assemblyContexts_5_0, 
+        		"AssemblyContext");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_6=',' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_3_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0()); 
+	    }
+		lv_assemblyContexts_7_0=ruleAssemblyContext		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"assemblyContexts",
+        		lv_assemblyContexts_7_0, 
+        		"AssemblyContext");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_8='}' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_3_4());
+    }
+)?(	otherlv_9='assemblyConnectors' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsKeyword_4_0());
+    }
+	otherlv_10='{' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_4_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0()); 
+	    }
+		lv_assemblyConnectors_11_0=ruleAssemblyConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"assemblyConnectors",
+        		lv_assemblyConnectors_11_0, 
+        		"AssemblyConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_12=',' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_4_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0()); 
+	    }
+		lv_assemblyConnectors_13_0=ruleAssemblyConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"assemblyConnectors",
+        		lv_assemblyConnectors_13_0, 
+        		"AssemblyConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_14='}' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_4_4());
+    }
+)?(	otherlv_15='providedDelegationConnectors' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsKeyword_5_0());
+    }
+	otherlv_16='{' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_5_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0()); 
+	    }
+		lv_providedDelegationConnectors_17_0=ruleProvidedDelegationConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"providedDelegationConnectors",
+        		lv_providedDelegationConnectors_17_0, 
+        		"ProvidedDelegationConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_18=',' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_5_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0()); 
+	    }
+		lv_providedDelegationConnectors_19_0=ruleProvidedDelegationConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"providedDelegationConnectors",
+        		lv_providedDelegationConnectors_19_0, 
+        		"ProvidedDelegationConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_20='}' 
+    {
+    	newLeafNode(otherlv_20, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_5_4());
+    }
+)?(	otherlv_21='requiredDelegationConnectors' 
+    {
+    	newLeafNode(otherlv_21, grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsKeyword_6_0());
+    }
+	otherlv_22='{' 
+    {
+    	newLeafNode(otherlv_22, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_6_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0()); 
+	    }
+		lv_requiredDelegationConnectors_23_0=ruleRequiredDelegationConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredDelegationConnectors",
+        		lv_requiredDelegationConnectors_23_0, 
+        		"RequiredDelegationConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_24=',' 
+    {
+    	newLeafNode(otherlv_24, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_6_3_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0()); 
+	    }
+		lv_requiredDelegationConnectors_25_0=ruleRequiredDelegationConnector		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+	        }
+       		add(
+       			$current, 
+       			"requiredDelegationConnectors",
+        		lv_requiredDelegationConnectors_25_0, 
+        		"RequiredDelegationConnector");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*	otherlv_26='}' 
+    {
+    	newLeafNode(otherlv_26, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_6_4());
+    }
+)?	otherlv_27='}' 
+    {
+    	newLeafNode(otherlv_27, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_7());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleAssemblyContext
+entryRuleAssemblyContext returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getAssemblyContextRule()); }
+	 iv_ruleAssemblyContext=ruleAssemblyContext 
+	 { $current=$iv_ruleAssemblyContext.current; } 
+	 EOF 
+;
+
+// Rule AssemblyContext
+ruleAssemblyContext returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='AssemblyContext' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getAssemblyContextAccess().getAssemblyContextKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyContextAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAssemblyContextRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getAssemblyContextAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='encapsulatedComponent' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getAssemblyContextRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentRepositoryComponentCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='}' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getAssemblyContextAccess().getRightCurlyBracketKeyword_5());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleAssemblyConnector
+entryRuleAssemblyConnector returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getAssemblyConnectorRule()); }
+	 iv_ruleAssemblyConnector=ruleAssemblyConnector 
+	 { $current=$iv_ruleAssemblyConnector.current; } 
+	 EOF 
+;
+
+// Rule AssemblyConnector
+ruleAssemblyConnector returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='AssemblyConnector' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getAssemblyConnectorAccess().getAssemblyConnectorKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAssemblyConnectorRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getAssemblyConnectorAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='requiredRole' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getAssemblyConnectorAccess().getRequiredRoleKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getRequiredRoleRequiredRoleCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='providedRole' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getAssemblyConnectorAccess().getProvidedRoleKeyword_5());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getProvidedRoleProvidedRoleCrossReference_6_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_7='providingAssemblyContext' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextKeyword_7());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextAssemblyContextCrossReference_8_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_9='requiringAssemblyContext' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextKeyword_9());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextAssemblyContextCrossReference_10_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_11='}' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getAssemblyConnectorAccess().getRightCurlyBracketKeyword_11());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleProvidedDelegationConnector
+entryRuleProvidedDelegationConnector returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getProvidedDelegationConnectorRule()); }
+	 iv_ruleProvidedDelegationConnector=ruleProvidedDelegationConnector 
+	 { $current=$iv_ruleProvidedDelegationConnector.current; } 
+	 EOF 
+;
+
+// Rule ProvidedDelegationConnector
+ruleProvidedDelegationConnector returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='ProvidedDelegationConnector' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getProvidedDelegationConnectorAccess().getProvidedDelegationConnectorKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getProvidedDelegationConnectorRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getProvidedDelegationConnectorAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='assemblyContext' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='innerProvidedRole' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleKeyword_5());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleProvidedRoleCrossReference_6_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_7='outerProvidedRole' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleKeyword_7());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleProvidedRoleCrossReference_8_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_9='}' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getProvidedDelegationConnectorAccess().getRightCurlyBracketKeyword_9());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleRequiredDelegationConnector
+entryRuleRequiredDelegationConnector returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRequiredDelegationConnectorRule()); }
+	 iv_ruleRequiredDelegationConnector=ruleRequiredDelegationConnector 
+	 { $current=$iv_ruleRequiredDelegationConnector.current; } 
+	 EOF 
+;
+
+// Rule RequiredDelegationConnector
+ruleRequiredDelegationConnector returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='RequiredDelegationConnector' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getRequiredDelegationConnectorAccess().getRequiredDelegationConnectorKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+	    }
+		lv_name_1_0=ruleEString		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRequiredDelegationConnectorRule());
+	        }
+       		set(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"EString");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='{' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRequiredDelegationConnectorAccess().getLeftCurlyBracketKeyword_2());
+    }
+	otherlv_3='assemblyContext' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextKeyword_3());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_5='innerRequiredRole' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleKeyword_5());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleRequiredRoleCrossReference_6_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_7='outerRequiredRole' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleKeyword_7());
+    }
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+	        }
+        }
+		{ 
+	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleRequiredRoleCrossReference_8_0()); 
+	    }
+		ruleEString		{ 
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_9='}' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getRequiredDelegationConnectorAccess().getRightCurlyBracketKeyword_9());
+    }
+)
+;
+
+
+
+
+
+// Rule PrimitiveTypeEnum
+rulePrimitiveTypeEnum returns [Enumerator current=null] 
+    @init { enterRule(); }
+    @after { leaveRule(); }:
+((	enumLiteral_0='INT' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getINTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_0, grammarAccess.getPrimitiveTypeEnumAccess().getINTEnumLiteralDeclaration_0()); 
+    }
+)
+    |(	enumLiteral_1='STRING' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getSTRINGEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_1, grammarAccess.getPrimitiveTypeEnumAccess().getSTRINGEnumLiteralDeclaration_1()); 
+    }
+)
+    |(	enumLiteral_2='BOOL' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getBOOLEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_2, grammarAccess.getPrimitiveTypeEnumAccess().getBOOLEnumLiteralDeclaration_2()); 
+    }
+)
+    |(	enumLiteral_3='DOUBLE' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getDOUBLEEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_3, grammarAccess.getPrimitiveTypeEnumAccess().getDOUBLEEnumLiteralDeclaration_3()); 
+    }
+)
+    |(	enumLiteral_4='CHAR' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getCHAREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_4, grammarAccess.getPrimitiveTypeEnumAccess().getCHAREnumLiteralDeclaration_4()); 
+    }
+)
+    |(	enumLiteral_5='BYTE' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getBYTEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_5, grammarAccess.getPrimitiveTypeEnumAccess().getBYTEEnumLiteralDeclaration_5()); 
+    }
+)
+    |(	enumLiteral_6='LONG' 
+	{
+        $current = grammarAccess.getPrimitiveTypeEnumAccess().getLONGEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
+        newLeafNode(enumLiteral_6, grammarAccess.getPrimitiveTypeEnumAccess().getLONGEnumLiteralDeclaration_6()); 
+    }
+));
+
+
+
+RULE_ID : '^'? ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_STRING : ('"' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'"')))* '"'|'\'' ('\\' ('b'|'t'|'n'|'f'|'r'|'u'|'"'|'\''|'\\')|~(('\\'|'\'')))* '\'');
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_WS : (' '|'\t'|'\r'|'\n')+;
+
+RULE_ANY_OTHER : .;
+
+
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.tokens b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.tokens
new file mode 100644
index 0000000000000000000000000000000000000000..fbac6981da0a14341e8d8ce818c441c761e8e35b
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.tokens
@@ -0,0 +1,125 @@
+T__68=68
+T__69=69
+RULE_ID=5
+T__66=66
+T__67=67
+T__64=64
+T__29=29
+T__65=65
+T__28=28
+T__62=62
+T__27=27
+T__63=63
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+RULE_ANY_OTHER=10
+T__21=21
+T__20=20
+T__61=61
+T__60=60
+T__55=55
+T__56=56
+T__19=19
+T__57=57
+T__58=58
+T__51=51
+T__16=16
+T__52=52
+T__15=15
+T__53=53
+T__18=18
+T__54=54
+T__17=17
+T__12=12
+T__11=11
+T__14=14
+T__13=13
+T__59=59
+RULE_INT=6
+T__50=50
+T__42=42
+T__43=43
+T__40=40
+T__41=41
+T__46=46
+T__47=47
+T__44=44
+T__45=45
+T__48=48
+T__49=49
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
+T__30=30
+T__31=31
+RULE_STRING=4
+T__32=32
+T__33=33
+T__34=34
+T__35=35
+T__36=36
+T__37=37
+T__38=38
+T__39=39
+RULE_WS=9
+'requiredRole'=52
+'type'=33
+'DOUBLE'=66
+'providedRoles'=25
+'requiringAssemblyContext'=55
+'outerProvidedRole'=59
+'BasicComponent'=40
+'innerType'=28
+'CompositeComponent'=41
+'InnerDeclaration'=35
+'CompositeDataType'=29
+'components'=17
+'innerRequiredRole'=61
+'assembly'=42
+'encapsulatedComponent'=50
+'RequiredDelegationConnector'=60
+'{'=12
+'assemblyConnectors'=46
+'Interface'=18
+'void'=37
+'parentInterfaces'=19
+'ref'=34
+'('=20
+'innerProvidedRole'=58
+','=14
+'SubSystem'=43
+'BOOL'=65
+'INT'=63
+'ComposedStructureAssembly'=44
+'providedRole'=53
+'providingAssemblyContext'=54
+'PrimitiveDataType'=32
+'relationship'=24
+'assemblyContexts'=45
+'dataType'=36
+'requires'=39
+'requiredRoles'=26
+'Repository'=11
+'interfaces'=16
+'CHAR'=67
+')'=21
+'LONG'=69
+'outerRequiredRole'=62
+'parentTypes'=30
+'AssemblyContext'=49
+'innerDeclarations'=31
+'}'=15
+'datatypes'=13
+'AssemblyConnector'=51
+'CollectionDataType'=27
+'ProvidedDelegationConnector'=56
+'STRING'=64
+'RepositoryComponent'=23
+'signatures'=22
+'provides'=38
+'providedDelegationConnectors'=47
+'assemblyContext'=57
+'BYTE'=68
+'requiredDelegationConnectors'=48
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestLexer.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestLexer.java
new file mode 100644
index 0000000000000000000000000000000000000000..fb8b6b58ad8abee53b492eafeabe9c1acde4e6f9
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestLexer.java
@@ -0,0 +1,3233 @@
+package org.xtext.example.mydsl.parser.antlr.internal;
+
+// 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 InternalMyDslTestLexer extends Lexer {
+    public static final int T__68=68;
+    public static final int T__69=69;
+    public static final int RULE_ID=5;
+    public static final int T__66=66;
+    public static final int T__67=67;
+    public static final int T__29=29;
+    public static final int T__64=64;
+    public static final int T__28=28;
+    public static final int T__65=65;
+    public static final int T__27=27;
+    public static final int T__62=62;
+    public static final int T__26=26;
+    public static final int T__63=63;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int T__61=61;
+    public static final int EOF=-1;
+    public static final int T__60=60;
+    public static final int T__55=55;
+    public static final int T__56=56;
+    public static final int T__19=19;
+    public static final int T__57=57;
+    public static final int T__58=58;
+    public static final int T__51=51;
+    public static final int T__16=16;
+    public static final int T__52=52;
+    public static final int T__15=15;
+    public static final int T__53=53;
+    public static final int T__18=18;
+    public static final int T__54=54;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int T__59=59;
+    public static final int RULE_INT=6;
+    public static final int T__50=50;
+    public static final int T__42=42;
+    public static final int T__43=43;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__48=48;
+    public static final int T__49=49;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int RULE_ML_COMMENT=7;
+    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_STRING=4;
+    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 T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+    public InternalMyDslTestLexer() {;} 
+    public InternalMyDslTestLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalMyDslTestLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g"; }
+
+    // $ANTLR start "T__11"
+    public final void mT__11() throws RecognitionException {
+        try {
+            int _type = T__11;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:11:7: ( 'Repository' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:11:9: 'Repository'
+            {
+            match("Repository"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__11"
+
+    // $ANTLR start "T__12"
+    public final void mT__12() throws RecognitionException {
+        try {
+            int _type = T__12;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:12:7: ( '{' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:12:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__12"
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:13:7: ( 'datatypes' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:13:9: 'datatypes'
+            {
+            match("datatypes"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__13"
+
+    // $ANTLR start "T__14"
+    public final void mT__14() throws RecognitionException {
+        try {
+            int _type = T__14;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:14:7: ( ',' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:14:9: ','
+            {
+            match(','); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__14"
+
+    // $ANTLR start "T__15"
+    public final void mT__15() throws RecognitionException {
+        try {
+            int _type = T__15;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:15:7: ( '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:15:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__15"
+
+    // $ANTLR start "T__16"
+    public final void mT__16() throws RecognitionException {
+        try {
+            int _type = T__16;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:16:7: ( 'interfaces' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:16:9: 'interfaces'
+            {
+            match("interfaces"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__16"
+
+    // $ANTLR start "T__17"
+    public final void mT__17() throws RecognitionException {
+        try {
+            int _type = T__17;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:17:7: ( 'components' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:17:9: 'components'
+            {
+            match("components"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__17"
+
+    // $ANTLR start "T__18"
+    public final void mT__18() throws RecognitionException {
+        try {
+            int _type = T__18;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:18:7: ( 'Interface' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:18:9: 'Interface'
+            {
+            match("Interface"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__18"
+
+    // $ANTLR start "T__19"
+    public final void mT__19() throws RecognitionException {
+        try {
+            int _type = T__19;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:19:7: ( 'parentInterfaces' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:19:9: 'parentInterfaces'
+            {
+            match("parentInterfaces"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__19"
+
+    // $ANTLR start "T__20"
+    public final void mT__20() throws RecognitionException {
+        try {
+            int _type = T__20;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:20:7: ( '(' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:20:9: '('
+            {
+            match('('); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__20"
+
+    // $ANTLR start "T__21"
+    public final void mT__21() throws RecognitionException {
+        try {
+            int _type = T__21;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:21:7: ( ')' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:21:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__21"
+
+    // $ANTLR start "T__22"
+    public final void mT__22() throws RecognitionException {
+        try {
+            int _type = T__22;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:22:7: ( 'signatures' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:22:9: 'signatures'
+            {
+            match("signatures"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__22"
+
+    // $ANTLR start "T__23"
+    public final void mT__23() throws RecognitionException {
+        try {
+            int _type = T__23;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:23:7: ( 'RepositoryComponent' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:23:9: 'RepositoryComponent'
+            {
+            match("RepositoryComponent"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__23"
+
+    // $ANTLR start "T__24"
+    public final void mT__24() throws RecognitionException {
+        try {
+            int _type = T__24;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:24:7: ( 'relationship' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:24:9: 'relationship'
+            {
+            match("relationship"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__24"
+
+    // $ANTLR start "T__25"
+    public final void mT__25() throws RecognitionException {
+        try {
+            int _type = T__25;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:25:7: ( 'providedRoles' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:25:9: 'providedRoles'
+            {
+            match("providedRoles"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__25"
+
+    // $ANTLR start "T__26"
+    public final void mT__26() throws RecognitionException {
+        try {
+            int _type = T__26;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:26:7: ( 'requiredRoles' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:26:9: 'requiredRoles'
+            {
+            match("requiredRoles"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__26"
+
+    // $ANTLR start "T__27"
+    public final void mT__27() throws RecognitionException {
+        try {
+            int _type = T__27;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:27:7: ( 'CollectionDataType' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:27:9: 'CollectionDataType'
+            {
+            match("CollectionDataType"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__27"
+
+    // $ANTLR start "T__28"
+    public final void mT__28() throws RecognitionException {
+        try {
+            int _type = T__28;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:28:7: ( 'innerType' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:28:9: 'innerType'
+            {
+            match("innerType"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__28"
+
+    // $ANTLR start "T__29"
+    public final void mT__29() throws RecognitionException {
+        try {
+            int _type = T__29;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:29:7: ( 'CompositeDataType' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:29:9: 'CompositeDataType'
+            {
+            match("CompositeDataType"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__29"
+
+    // $ANTLR start "T__30"
+    public final void mT__30() throws RecognitionException {
+        try {
+            int _type = T__30;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:30:7: ( 'parentTypes' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:30:9: 'parentTypes'
+            {
+            match("parentTypes"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__30"
+
+    // $ANTLR start "T__31"
+    public final void mT__31() throws RecognitionException {
+        try {
+            int _type = T__31;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:31:7: ( 'innerDeclarations' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:31:9: 'innerDeclarations'
+            {
+            match("innerDeclarations"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:32:7: ( 'PrimitiveDataType' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:32:9: 'PrimitiveDataType'
+            {
+            match("PrimitiveDataType"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:33:7: ( 'type' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:33:9: 'type'
+            {
+            match("type"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:34:7: ( 'ref' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:34:9: 'ref'
+            {
+            match("ref"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:35:7: ( 'InnerDeclaration' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:35:9: 'InnerDeclaration'
+            {
+            match("InnerDeclaration"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:36:7: ( 'dataType' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:36:9: 'dataType'
+            {
+            match("dataType"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:37:7: ( 'void' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:37:9: 'void'
+            {
+            match("void"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:38:7: ( 'provides' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:38:9: 'provides'
+            {
+            match("provides"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:39:7: ( 'requires' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:39:9: 'requires'
+            {
+            match("requires"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:40:7: ( 'BasicComponent' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:40:9: 'BasicComponent'
+            {
+            match("BasicComponent"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:41:7: ( 'CompositeComponent' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:41:9: 'CompositeComponent'
+            {
+            match("CompositeComponent"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:42:7: ( 'assembly' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:42:9: 'assembly'
+            {
+            match("assembly"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:43:7: ( 'SubSystem' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:43:9: 'SubSystem'
+            {
+            match("SubSystem"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:44:7: ( 'ComposedStructureAssembly' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:44:9: 'ComposedStructureAssembly'
+            {
+            match("ComposedStructureAssembly"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:45:7: ( 'assemblyContexts' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:45:9: 'assemblyContexts'
+            {
+            match("assemblyContexts"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:46:7: ( 'assemblyConnectors' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:46:9: 'assemblyConnectors'
+            {
+            match("assemblyConnectors"); 
+
+
+            }
+
+            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;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:47:7: ( 'providedDelegationConnectors' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:47:9: 'providedDelegationConnectors'
+            {
+            match("providedDelegationConnectors"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__47"
+
+    // $ANTLR start "T__48"
+    public final void mT__48() throws RecognitionException {
+        try {
+            int _type = T__48;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:48:7: ( 'requiredDelegationConnectors' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:48:9: 'requiredDelegationConnectors'
+            {
+            match("requiredDelegationConnectors"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__48"
+
+    // $ANTLR start "T__49"
+    public final void mT__49() throws RecognitionException {
+        try {
+            int _type = T__49;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:49:7: ( 'AssemblyContext' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:49:9: 'AssemblyContext'
+            {
+            match("AssemblyContext"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__49"
+
+    // $ANTLR start "T__50"
+    public final void mT__50() throws RecognitionException {
+        try {
+            int _type = T__50;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:50:7: ( 'encapsulatedComponent' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:50:9: 'encapsulatedComponent'
+            {
+            match("encapsulatedComponent"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__50"
+
+    // $ANTLR start "T__51"
+    public final void mT__51() throws RecognitionException {
+        try {
+            int _type = T__51;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:51:7: ( 'AssemblyConnector' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:51:9: 'AssemblyConnector'
+            {
+            match("AssemblyConnector"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__51"
+
+    // $ANTLR start "T__52"
+    public final void mT__52() throws RecognitionException {
+        try {
+            int _type = T__52;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:52:7: ( 'requiredRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:52:9: 'requiredRole'
+            {
+            match("requiredRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__52"
+
+    // $ANTLR start "T__53"
+    public final void mT__53() throws RecognitionException {
+        try {
+            int _type = T__53;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:53:7: ( 'providedRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:53:9: 'providedRole'
+            {
+            match("providedRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__53"
+
+    // $ANTLR start "T__54"
+    public final void mT__54() throws RecognitionException {
+        try {
+            int _type = T__54;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:54:7: ( 'providingAssemblyContext' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:54:9: 'providingAssemblyContext'
+            {
+            match("providingAssemblyContext"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__54"
+
+    // $ANTLR start "T__55"
+    public final void mT__55() throws RecognitionException {
+        try {
+            int _type = T__55;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:55:7: ( 'requiringAssemblyContext' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:55:9: 'requiringAssemblyContext'
+            {
+            match("requiringAssemblyContext"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__55"
+
+    // $ANTLR start "T__56"
+    public final void mT__56() throws RecognitionException {
+        try {
+            int _type = T__56;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:56:7: ( 'ProvidedDelegationConnector' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:56:9: 'ProvidedDelegationConnector'
+            {
+            match("ProvidedDelegationConnector"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__56"
+
+    // $ANTLR start "T__57"
+    public final void mT__57() throws RecognitionException {
+        try {
+            int _type = T__57;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:57:7: ( 'assemblyContext' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:57:9: 'assemblyContext'
+            {
+            match("assemblyContext"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__57"
+
+    // $ANTLR start "T__58"
+    public final void mT__58() throws RecognitionException {
+        try {
+            int _type = T__58;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:58:7: ( 'innerProvidedRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:58:9: 'innerProvidedRole'
+            {
+            match("innerProvidedRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__58"
+
+    // $ANTLR start "T__59"
+    public final void mT__59() throws RecognitionException {
+        try {
+            int _type = T__59;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:59:7: ( 'outerProvidedRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:59:9: 'outerProvidedRole'
+            {
+            match("outerProvidedRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__59"
+
+    // $ANTLR start "T__60"
+    public final void mT__60() throws RecognitionException {
+        try {
+            int _type = T__60;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:60:7: ( 'RequiredDelegationConnector' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:60:9: 'RequiredDelegationConnector'
+            {
+            match("RequiredDelegationConnector"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__60"
+
+    // $ANTLR start "T__61"
+    public final void mT__61() throws RecognitionException {
+        try {
+            int _type = T__61;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:61:7: ( 'innerRequiredRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:61:9: 'innerRequiredRole'
+            {
+            match("innerRequiredRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__61"
+
+    // $ANTLR start "T__62"
+    public final void mT__62() throws RecognitionException {
+        try {
+            int _type = T__62;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:62:7: ( 'outerRequiredRole' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:62:9: 'outerRequiredRole'
+            {
+            match("outerRequiredRole"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__62"
+
+    // $ANTLR start "T__63"
+    public final void mT__63() throws RecognitionException {
+        try {
+            int _type = T__63;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:63:7: ( 'INT' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:63:9: 'INT'
+            {
+            match("INT"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__63"
+
+    // $ANTLR start "T__64"
+    public final void mT__64() throws RecognitionException {
+        try {
+            int _type = T__64;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:64:7: ( 'STRING' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:64:9: 'STRING'
+            {
+            match("STRING"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__64"
+
+    // $ANTLR start "T__65"
+    public final void mT__65() throws RecognitionException {
+        try {
+            int _type = T__65;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:65:7: ( 'BOOL' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:65:9: 'BOOL'
+            {
+            match("BOOL"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__65"
+
+    // $ANTLR start "T__66"
+    public final void mT__66() throws RecognitionException {
+        try {
+            int _type = T__66;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:66:7: ( 'DOUBLE' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:66:9: 'DOUBLE'
+            {
+            match("DOUBLE"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__66"
+
+    // $ANTLR start "T__67"
+    public final void mT__67() throws RecognitionException {
+        try {
+            int _type = T__67;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:67:7: ( 'CHAR' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:67:9: 'CHAR'
+            {
+            match("CHAR"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__67"
+
+    // $ANTLR start "T__68"
+    public final void mT__68() throws RecognitionException {
+        try {
+            int _type = T__68;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:68:7: ( 'BYTE' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:68:9: 'BYTE'
+            {
+            match("BYTE"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__68"
+
+    // $ANTLR start "T__69"
+    public final void mT__69() throws RecognitionException {
+        try {
+            int _type = T__69;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:69:7: ( 'LONG' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:69:9: 'LONG'
+            {
+            match("LONG"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__69"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2705:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2705:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2705:11: ( '^' )?
+            int alt1=2;
+            int LA1_0 = input.LA(1);
+
+            if ( (LA1_0=='^') ) {
+                alt1=1;
+            }
+            switch (alt1) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2705:11: '^'
+                    {
+                    match('^'); 
+
+                    }
+                    break;
+
+            }
+
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2705:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')||(LA2_0>='A' && LA2_0<='Z')||LA2_0=='_'||(LA2_0>='a' && LA2_0<='z')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:
+            	    {
+            	    if ( (input.LA(1)>='0' && input.LA(1)<='9')||(input.LA(1)>='A' && input.LA(1)<='Z')||input.LA(1)=='_'||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ID"
+
+    // $ANTLR start "RULE_INT"
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2707:10: ( ( '0' .. '9' )+ )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2707:12: ( '0' .. '9' )+
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2707:12: ( '0' .. '9' )+
+            int cnt3=0;
+            loop3:
+            do {
+                int alt3=2;
+                int LA3_0 = input.LA(1);
+
+                if ( ((LA3_0>='0' && LA3_0<='9')) ) {
+                    alt3=1;
+                }
+
+
+                switch (alt3) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2707:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
+                }
+                cnt3++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0=='\"') ) {
+                alt6=1;
+            }
+            else if ( (LA6_0=='\'') ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    loop4:
+                    do {
+                        int alt4=3;
+                        int LA4_0 = input.LA(1);
+
+                        if ( (LA4_0=='\\') ) {
+                            alt4=1;
+                        }
+                        else if ( ((LA4_0>='\u0000' && LA4_0<='!')||(LA4_0>='#' && LA4_0<='[')||(LA4_0>=']' && LA4_0<='\uFFFF')) ) {
+                            alt4=2;
+                        }
+
+
+                        switch (alt4) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:66: ~ ( ( '\\\\' | '\"' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop4;
+                        }
+                    } while (true);
+
+                    match('\"'); 
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    loop5:
+                    do {
+                        int alt5=3;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0=='\\') ) {
+                            alt5=1;
+                        }
+                        else if ( ((LA5_0>='\u0000' && LA5_0<='&')||(LA5_0>='(' && LA5_0<='[')||(LA5_0>=']' && LA5_0<='\uFFFF')) ) {
+                            alt5=2;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    {
+                    	    match('\\'); 
+                    	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+                    	case 2 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2709:137: ~ ( ( '\\\\' | '\\'' ) )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse = new MismatchedSetException(null,input);
+                    	        recover(mse);
+                    	        throw mse;}
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2711:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2711:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2711:24: ( options {greedy=false; } : . )*
+            loop7:
+            do {
+                int alt7=2;
+                int LA7_0 = input.LA(1);
+
+                if ( (LA7_0=='*') ) {
+                    int LA7_1 = input.LA(2);
+
+                    if ( (LA7_1=='/') ) {
+                        alt7=2;
+                    }
+                    else if ( ((LA7_1>='\u0000' && LA7_1<='.')||(LA7_1>='0' && LA7_1<='\uFFFF')) ) {
+                        alt7=1;
+                    }
+
+
+                }
+                else if ( ((LA7_0>='\u0000' && LA7_0<=')')||(LA7_0>='+' && LA7_0<='\uFFFF')) ) {
+                    alt7=1;
+                }
+
+
+                switch (alt7) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2711:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop7;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( ((LA8_0>='\u0000' && LA8_0<='\t')||(LA8_0>='\u000B' && LA8_0<='\f')||(LA8_0>='\u000E' && LA8_0<='\uFFFF')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713: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();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop8;
+                }
+            } while (true);
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:40: ( ( '\\r' )? '\\n' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\n'||LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:41: ( '\\r' )? '\\n'
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:41: ( '\\r' )?
+                    int alt9=2;
+                    int LA9_0 = input.LA(1);
+
+                    if ( (LA9_0=='\r') ) {
+                        alt9=1;
+                    }
+                    switch (alt9) {
+                        case 1 :
+                            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2713:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2715:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2715:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2715:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            int cnt11=0;
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\t' && LA11_0<='\n')||LA11_0=='\r'||LA11_0==' ') ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:
+            	    {
+            	    if ( (input.LA(1)>='\t' && input.LA(1)<='\n')||input.LA(1)=='\r'||input.LA(1)==' ' ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt11 >= 1 ) break loop11;
+                        EarlyExitException eee =
+                            new EarlyExitException(11, input);
+                        throw eee;
+                }
+                cnt11++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_ANY_OTHER"
+    public final void mRULE_ANY_OTHER() throws RecognitionException {
+        try {
+            int _type = RULE_ANY_OTHER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2717:16: ( . )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2717:18: .
+            {
+            matchAny(); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ANY_OTHER"
+
+    public void mTokens() throws RecognitionException {
+        // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.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 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=66;
+        alt12 = dfa12.predict(input);
+        switch (alt12) {
+            case 1 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:10: T__11
+                {
+                mT__11(); 
+
+                }
+                break;
+            case 2 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:16: T__12
+                {
+                mT__12(); 
+
+                }
+                break;
+            case 3 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:22: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 4 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:28: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 5 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:34: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 6 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:40: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 7 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:46: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 8 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:52: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 9 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:58: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 10 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:64: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 11 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:70: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 12 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:76: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 13 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:82: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 14 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:88: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 15 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:94: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 16 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:100: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 17 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:106: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 18 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:112: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 19 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:118: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 20 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:124: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 21 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:130: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 22 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:136: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 23 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:142: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 24 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:148: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 25 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:154: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 26 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:160: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 27 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:166: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 28 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:172: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 29 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:178: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 30 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:184: T__40
+                {
+                mT__40(); 
+
+                }
+                break;
+            case 31 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:190: T__41
+                {
+                mT__41(); 
+
+                }
+                break;
+            case 32 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:196: T__42
+                {
+                mT__42(); 
+
+                }
+                break;
+            case 33 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:202: T__43
+                {
+                mT__43(); 
+
+                }
+                break;
+            case 34 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:208: T__44
+                {
+                mT__44(); 
+
+                }
+                break;
+            case 35 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:214: T__45
+                {
+                mT__45(); 
+
+                }
+                break;
+            case 36 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:220: T__46
+                {
+                mT__46(); 
+
+                }
+                break;
+            case 37 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:226: T__47
+                {
+                mT__47(); 
+
+                }
+                break;
+            case 38 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:232: T__48
+                {
+                mT__48(); 
+
+                }
+                break;
+            case 39 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:238: T__49
+                {
+                mT__49(); 
+
+                }
+                break;
+            case 40 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:244: T__50
+                {
+                mT__50(); 
+
+                }
+                break;
+            case 41 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:250: T__51
+                {
+                mT__51(); 
+
+                }
+                break;
+            case 42 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:256: T__52
+                {
+                mT__52(); 
+
+                }
+                break;
+            case 43 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:262: T__53
+                {
+                mT__53(); 
+
+                }
+                break;
+            case 44 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:268: T__54
+                {
+                mT__54(); 
+
+                }
+                break;
+            case 45 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:274: T__55
+                {
+                mT__55(); 
+
+                }
+                break;
+            case 46 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:280: T__56
+                {
+                mT__56(); 
+
+                }
+                break;
+            case 47 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:286: T__57
+                {
+                mT__57(); 
+
+                }
+                break;
+            case 48 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:292: T__58
+                {
+                mT__58(); 
+
+                }
+                break;
+            case 49 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:298: T__59
+                {
+                mT__59(); 
+
+                }
+                break;
+            case 50 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:304: T__60
+                {
+                mT__60(); 
+
+                }
+                break;
+            case 51 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:310: T__61
+                {
+                mT__61(); 
+
+                }
+                break;
+            case 52 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:316: T__62
+                {
+                mT__62(); 
+
+                }
+                break;
+            case 53 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:322: T__63
+                {
+                mT__63(); 
+
+                }
+                break;
+            case 54 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:328: T__64
+                {
+                mT__64(); 
+
+                }
+                break;
+            case 55 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:334: T__65
+                {
+                mT__65(); 
+
+                }
+                break;
+            case 56 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:340: T__66
+                {
+                mT__66(); 
+
+                }
+                break;
+            case 57 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:346: T__67
+                {
+                mT__67(); 
+
+                }
+                break;
+            case 58 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:352: T__68
+                {
+                mT__68(); 
+
+                }
+                break;
+            case 59 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:358: T__69
+                {
+                mT__69(); 
+
+                }
+                break;
+            case 60 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:364: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 61 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:372: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 62 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:381: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 63 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:393: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 64 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:409: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 65 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:425: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 66 :
+                // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1:433: RULE_ANY_OTHER
+                {
+                mRULE_ANY_OTHER(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA12 dfa12 = new DFA12(this);
+    static final String DFA12_eotS =
+        "\1\uffff\1\43\1\uffff\1\43\2\uffff\4\43\2\uffff\16\43\1\41\2\uffff"+
+        "\3\41\2\uffff\1\43\2\uffff\1\43\2\uffff\6\43\2\uffff\22\43\5\uffff"+
+        "\10\43\1\160\5\43\1\166\32\43\1\uffff\5\43\1\uffff\2\43\1\u0099"+
+        "\2\43\1\u009c\1\u009d\1\43\1\u009f\1\u00a0\7\43\1\u00a8\20\43\1"+
+        "\uffff\2\43\2\uffff\1\43\2\uffff\7\43\1\uffff\30\43\1\u00e3\4\43"+
+        "\1\u00e8\34\43\1\uffff\4\43\1\uffff\3\43\1\u010e\13\43\1\u011b\4"+
+        "\43\1\u0121\7\43\1\u012a\7\43\1\u0132\1\uffff\1\43\1\u0134\4\43"+
+        "\1\u0139\5\43\1\uffff\5\43\1\uffff\10\43\1\uffff\1\u014d\4\43\1"+
+        "\u0153\1\43\1\uffff\1\u0155\1\uffff\3\43\1\u0159\1\uffff\6\43\1"+
+        "\u0160\14\43\1\uffff\5\43\1\uffff\1\43\1\uffff\3\43\1\uffff\2\43"+
+        "\1\u0178\3\43\1\uffff\27\43\1\uffff\1\u0196\2\43\1\u0199\1\u019b"+
+        "\27\43\1\u01b3\1\uffff\2\43\1\uffff\1\u01b6\1\uffff\27\43\1\uffff"+
+        "\2\43\1\uffff\10\43\1\u01d8\30\43\1\uffff\1\u01f2\1\43\1\u01f4\11"+
+        "\43\1\u01fe\1\u01ff\12\43\1\u020a\1\uffff\1\43\1\uffff\6\43\1\u0212"+
+        "\1\u0213\1\u0214\2\uffff\5\43\1\u021a\2\43\1\u021d\1\43\1\uffff"+
+        "\1\43\1\u0220\1\43\1\u0222\1\u0223\2\43\3\uffff\4\43\1\u022a\1\uffff"+
+        "\1\u022b\1\43\1\uffff\1\43\1\u022e\1\uffff\1\43\2\uffff\1\u0230"+
+        "\5\43\2\uffff\2\43\1\uffff\1\43\1\uffff\17\43\1\u0248\7\43\1\uffff"+
+        "\11\43\1\u0259\1\43\1\u025b\4\43\1\uffff\1\43\1\uffff\1\u0261\4"+
+        "\43\1\uffff\1\43\1\u0267\2\43\1\u026a\1\uffff\1\u026b\1\u026c\3"+
+        "\uffff";
+    static final String DFA12_eofS =
+        "\u026d\uffff";
+    static final String DFA12_minS =
+        "\1\0\1\145\1\uffff\1\141\2\uffff\1\156\1\157\1\116\1\141\2\uffff"+
+        "\1\151\1\145\1\110\1\162\1\171\1\157\1\117\1\163\1\124\1\163\1\156"+
+        "\1\165\2\117\1\101\2\uffff\2\0\1\52\2\uffff\1\160\2\uffff\1\164"+
+        "\2\uffff\1\156\1\155\1\156\1\124\1\162\1\157\2\uffff\1\147\1\146"+
+        "\1\154\1\101\1\151\1\160\1\151\1\163\1\117\1\124\1\163\1\142\1\122"+
+        "\1\163\1\143\1\164\1\125\1\116\5\uffff\1\157\1\165\1\141\2\145\1"+
+        "\160\2\145\1\60\1\145\1\166\1\156\1\141\1\165\1\60\1\154\1\160\1"+
+        "\122\1\155\1\166\1\145\1\144\1\151\1\114\1\105\1\145\1\123\1\111"+
+        "\1\145\1\141\1\145\1\102\1\107\1\163\1\151\1\124\2\162\1\157\2\162"+
+        "\1\uffff\1\156\1\151\1\141\1\164\1\151\1\uffff\1\145\1\157\1\60"+
+        "\2\151\2\60\1\143\2\60\1\155\1\171\1\116\1\155\1\160\1\162\1\114"+
+        "\1\60\1\151\1\162\2\171\1\146\1\104\1\156\1\146\1\104\1\164\1\144"+
+        "\1\164\1\151\1\162\1\143\1\163\1\uffff\1\164\1\144\2\uffff\1\103"+
+        "\2\uffff\1\142\1\163\1\107\1\142\1\163\1\120\1\105\1\uffff\1\164"+
+        "\1\145\2\160\1\141\1\171\1\145\1\162\2\145\1\141\1\145\1\111\1\145"+
+        "\1\165\1\157\1\145\1\164\1\145\1\151\1\145\1\157\1\154\1\164\1\60"+
+        "\1\154\1\165\1\162\1\145\1\60\1\157\1\144\2\145\1\143\1\160\1\143"+
+        "\1\157\1\161\1\156\2\143\1\156\1\171\1\144\1\156\1\162\1\156\1\144"+
+        "\1\156\1\151\1\164\1\144\1\166\1\144\1\155\1\171\1\145\1\uffff\1"+
+        "\171\1\154\1\157\1\161\1\uffff\1\162\1\104\1\163\1\60\2\145\1\154"+
+        "\1\166\1\165\1\164\1\145\1\154\1\164\1\160\1\104\1\60\1\147\1\145"+
+        "\1\163\1\104\1\60\1\147\1\157\1\145\1\123\1\145\1\104\1\160\1\60"+
+        "\1\155\1\103\1\141\1\166\1\165\1\171\1\145\1\60\1\uffff\1\163\1"+
+        "\60\1\141\2\151\1\163\1\60\1\141\2\145\1\157\1\145\1\uffff\1\101"+
+        "\1\163\1\150\1\157\1\145\1\uffff\1\101\1\156\1\103\1\164\1\104\1"+
+        "\145\2\157\1\uffff\1\60\1\157\1\164\2\151\1\60\1\154\1\uffff\1\60"+
+        "\1\uffff\1\162\1\144\1\162\1\60\1\uffff\2\162\1\163\2\154\1\163"+
+        "\1\60\1\151\2\154\1\163\1\104\1\141\1\157\1\162\1\141\1\154\2\156"+
+        "\1\uffff\1\156\1\145\1\144\1\162\1\157\1\uffff\1\145\1\uffff\1\141"+
+        "\2\145\1\uffff\1\141\1\146\1\60\2\145\1\163\1\uffff\1\160\2\145"+
+        "\1\163\1\141\1\164\1\155\1\165\1\164\2\145\2\156\1\144\2\145\1\155"+
+        "\1\147\1\164\2\144\1\164\1\141\1\uffff\1\60\1\147\1\145\2\60\1\147"+
+        "\1\145\1\164\1\141\1\160\1\143\1\141\1\147\1\156\4\145\1\103\2\144"+
+        "\1\160\1\141\1\151\2\122\1\151\1\143\1\60\1\uffff\1\141\1\155\1"+
+        "\uffff\1\60\1\uffff\1\141\1\155\1\141\1\124\1\157\1\164\1\124\1"+
+        "\141\1\164\1\170\1\143\1\170\1\143\1\157\2\122\1\157\1\164\4\157"+
+        "\1\145\1\uffff\1\164\1\142\1\uffff\1\164\1\142\1\124\1\171\1\156"+
+        "\1\165\1\171\1\164\1\60\4\164\1\155\2\157\1\156\1\151\1\156\2\154"+
+        "\1\156\1\163\1\151\1\154\1\151\1\154\1\171\1\160\1\145\1\162\1\160"+
+        "\1\151\1\uffff\1\60\1\157\1\60\1\157\1\160\2\154\1\145\1\157\1\163"+
+        "\2\145\2\60\1\157\1\171\1\157\1\171\1\160\1\145\1\156\2\145\1\157"+
+        "\1\60\1\uffff\1\162\1\uffff\1\162\1\157\2\145\2\156\3\60\2\uffff"+
+        "\1\156\1\103\1\156\1\103\1\145\1\60\1\164\1\101\1\60\1\156\1\uffff"+
+        "\1\163\1\60\1\156\2\60\1\164\1\103\3\uffff\1\103\1\157\1\103\1\157"+
+        "\1\60\1\uffff\1\60\1\163\1\uffff\1\103\1\60\1\uffff\1\145\2\uffff"+
+        "\1\60\2\157\1\156\1\157\1\156\2\uffff\1\163\1\157\1\uffff\1\156"+
+        "\1\uffff\2\156\1\164\1\156\1\164\1\145\1\156\1\164\2\156\1\145\1"+
+        "\156\1\145\1\155\1\156\1\60\2\145\1\170\1\145\1\170\1\142\1\145"+
+        "\1\uffff\2\143\1\164\1\143\1\164\1\154\1\143\2\164\1\60\1\164\1"+
+        "\60\1\171\1\164\2\157\1\uffff\1\157\1\uffff\1\60\1\157\3\162\1\uffff"+
+        "\1\162\1\60\2\163\1\60\1\uffff\2\60\3\uffff";
+    static final String DFA12_maxS =
+        "\1\uffff\1\145\1\uffff\1\141\2\uffff\1\156\1\157\1\156\1\162\2"+
+        "\uffff\1\151\1\145\1\157\1\162\1\171\1\157\1\141\1\163\1\165\1\163"+
+        "\1\156\1\165\2\117\1\172\2\uffff\2\uffff\1\57\2\uffff\1\161\2\uffff"+
+        "\1\164\2\uffff\1\164\1\155\1\164\1\124\1\162\1\157\2\uffff\1\147"+
+        "\1\161\1\155\1\101\1\157\1\160\1\151\1\163\1\117\1\124\1\163\1\142"+
+        "\1\122\1\163\1\143\1\164\1\125\1\116\5\uffff\1\157\1\165\1\141\2"+
+        "\145\1\160\2\145\1\172\1\145\1\166\1\156\1\141\1\165\1\172\1\154"+
+        "\1\160\1\122\1\155\1\166\1\145\1\144\1\151\1\114\1\105\1\145\1\123"+
+        "\1\111\1\145\1\141\1\145\1\102\1\107\1\163\1\151\1\164\2\162\1\157"+
+        "\2\162\1\uffff\1\156\1\151\1\141\1\164\1\151\1\uffff\1\145\1\157"+
+        "\1\172\2\151\2\172\1\143\2\172\1\155\1\171\1\116\1\155\1\160\1\162"+
+        "\1\114\1\172\1\151\1\162\2\171\1\146\1\124\1\156\1\146\1\104\1\164"+
+        "\1\144\1\164\1\151\1\162\1\143\1\163\1\uffff\1\164\1\144\2\uffff"+
+        "\1\103\2\uffff\1\142\1\163\1\107\1\142\1\163\1\122\1\105\1\uffff"+
+        "\1\164\1\145\2\160\1\141\1\171\1\145\1\162\2\145\1\141\1\145\1\124"+
+        "\1\151\1\165\1\157\1\151\1\164\2\151\1\145\1\157\1\154\1\164\1\172"+
+        "\1\154\1\165\1\162\1\145\1\172\1\157\1\144\2\145\1\143\1\160\1\143"+
+        "\1\157\1\161\1\156\2\143\1\156\1\171\1\163\1\156\1\162\1\156\1\163"+
+        "\1\156\1\151\1\164\1\144\1\166\1\144\1\155\1\171\1\145\1\uffff\1"+
+        "\171\1\154\1\157\1\161\1\uffff\1\162\1\104\1\163\1\172\2\145\1\154"+
+        "\1\166\1\165\1\164\1\145\1\154\1\164\1\160\1\122\1\172\1\147\1\145"+
+        "\1\163\1\122\1\172\1\147\1\157\1\145\1\123\1\145\1\104\1\160\1\172"+
+        "\1\155\1\103\1\141\1\166\1\165\1\171\1\145\1\172\1\uffff\1\163\1"+
+        "\172\1\141\2\151\1\163\1\172\1\141\2\145\1\157\1\145\1\uffff\1\101"+
+        "\1\163\1\150\1\157\1\145\1\uffff\1\101\1\156\1\104\1\164\1\104\1"+
+        "\145\2\157\1\uffff\1\172\1\157\1\164\2\151\1\172\1\154\1\uffff\1"+
+        "\172\1\uffff\1\162\1\144\1\162\1\172\1\uffff\2\162\1\163\2\154\1"+
+        "\163\1\172\1\151\2\154\1\163\1\104\1\141\1\157\1\162\1\141\1\154"+
+        "\2\156\1\uffff\1\156\1\145\1\144\1\162\1\157\1\uffff\1\145\1\uffff"+
+        "\1\141\2\145\1\uffff\1\141\1\146\1\172\2\145\1\163\1\uffff\1\160"+
+        "\2\145\1\163\1\141\1\164\1\155\1\165\1\164\2\145\2\164\1\144\2\145"+
+        "\1\155\1\147\1\164\2\144\1\164\1\141\1\uffff\1\172\1\147\1\145\2"+
+        "\172\1\147\1\145\1\164\1\141\1\160\1\143\1\141\1\147\1\156\4\145"+
+        "\1\103\2\144\1\160\1\141\1\151\2\122\1\151\1\143\1\172\1\uffff\1"+
+        "\141\1\155\1\uffff\1\172\1\uffff\1\141\1\155\1\141\1\124\1\157\1"+
+        "\164\1\124\1\141\1\164\1\170\1\143\1\170\1\143\1\157\2\122\1\157"+
+        "\1\164\4\157\1\145\1\uffff\1\164\1\142\1\uffff\1\164\1\142\1\124"+
+        "\1\171\1\156\1\165\1\171\1\164\1\172\4\164\1\155\2\157\1\156\1\151"+
+        "\1\156\2\154\1\156\1\163\1\151\1\154\1\151\1\154\1\171\1\160\1\145"+
+        "\1\162\1\160\1\151\1\uffff\1\172\1\157\1\172\1\157\1\160\2\154\1"+
+        "\145\1\157\1\163\2\145\2\172\1\157\1\171\1\157\1\171\1\160\1\145"+
+        "\1\156\2\145\1\157\1\172\1\uffff\1\162\1\uffff\1\162\1\157\2\145"+
+        "\2\156\3\172\2\uffff\1\156\1\103\1\156\1\103\1\145\1\172\1\164\1"+
+        "\101\1\172\1\156\1\uffff\1\163\1\172\1\156\2\172\1\164\1\103\3\uffff"+
+        "\1\103\1\157\1\103\1\157\1\172\1\uffff\1\172\1\163\1\uffff\1\103"+
+        "\1\172\1\uffff\1\145\2\uffff\1\172\2\157\1\156\1\157\1\156\2\uffff"+
+        "\1\163\1\157\1\uffff\1\156\1\uffff\2\156\1\164\1\156\1\164\1\145"+
+        "\1\156\1\164\2\156\1\145\1\156\1\145\1\155\1\156\1\172\2\145\1\170"+
+        "\1\145\1\170\1\142\1\145\1\uffff\2\143\1\164\1\143\1\164\1\154\1"+
+        "\143\2\164\1\172\1\164\1\172\1\171\1\164\2\157\1\uffff\1\157\1\uffff"+
+        "\1\172\1\157\3\162\1\uffff\1\162\1\172\2\163\1\172\1\uffff\2\172"+
+        "\3\uffff";
+    static final String DFA12_acceptS =
+        "\2\uffff\1\2\1\uffff\1\4\1\5\4\uffff\1\12\1\13\17\uffff\1\74\1"+
+        "\75\3\uffff\1\101\1\102\1\uffff\1\74\1\2\1\uffff\1\4\1\5\6\uffff"+
+        "\1\12\1\13\22\uffff\1\75\1\76\1\77\1\100\1\101\51\uffff\1\65\5\uffff"+
+        "\1\30\42\uffff\1\71\2\uffff\1\27\1\33\1\uffff\1\67\1\72\7\uffff"+
+        "\1\73\72\uffff\1\66\4\uffff\1\70\45\uffff\1\32\14\uffff\1\34\5\uffff"+
+        "\1\35\10\uffff\1\40\7\uffff\1\3\1\uffff\1\22\4\uffff\1\10\23\uffff"+
+        "\1\41\5\uffff\1\1\1\uffff\1\6\3\uffff\1\7\6\uffff\1\14\27\uffff"+
+        "\1\24\35\uffff\1\53\2\uffff\1\16\1\uffff\1\52\27\uffff\1\17\2\uffff"+
+        "\1\20\41\uffff\1\36\31\uffff\1\57\1\uffff\1\47\11\uffff\1\31\1\11"+
+        "\12\uffff\1\43\7\uffff\1\25\1\60\1\63\5\uffff\1\23\2\uffff\1\26"+
+        "\2\uffff\1\51\1\uffff\1\61\1\64\6\uffff\1\21\1\37\2\uffff\1\44\1"+
+        "\uffff\1\15\27\uffff\1\50\20\uffff\1\54\1\uffff\1\55\5\uffff\1\42"+
+        "\5\uffff\1\62\2\uffff\1\56\1\45\1\46";
+    static final String DFA12_specialS =
+        "\1\2\34\uffff\1\1\1\0\u024e\uffff}>";
+    static final String[] DFA12_transitionS = {
+            "\11\41\2\40\2\41\1\40\22\41\1\40\1\41\1\35\4\41\1\36\1\12\1"+
+            "\13\2\41\1\4\2\41\1\37\12\34\7\41\1\25\1\22\1\16\1\30\4\33\1"+
+            "\10\2\33\1\31\3\33\1\17\1\33\1\1\1\24\7\33\3\41\1\32\1\33\1"+
+            "\41\1\23\1\33\1\7\1\3\1\26\3\33\1\6\5\33\1\27\1\11\1\33\1\15"+
+            "\1\14\1\20\1\33\1\21\4\33\1\2\1\41\1\5\uff82\41",
+            "\1\42",
+            "",
+            "\1\45",
+            "",
+            "",
+            "\1\50",
+            "\1\51",
+            "\1\53\37\uffff\1\52",
+            "\1\54\20\uffff\1\55",
+            "",
+            "",
+            "\1\60",
+            "\1\61",
+            "\1\63\46\uffff\1\62",
+            "\1\64",
+            "\1\65",
+            "\1\66",
+            "\1\70\11\uffff\1\71\7\uffff\1\67",
+            "\1\72",
+            "\1\74\40\uffff\1\73",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "",
+            "\0\103",
+            "\0\103",
+            "\1\104\4\uffff\1\105",
+            "",
+            "",
+            "\1\107\1\110",
+            "",
+            "",
+            "\1\111",
+            "",
+            "",
+            "\1\113\5\uffff\1\112",
+            "\1\114",
+            "\1\116\5\uffff\1\115",
+            "\1\117",
+            "\1\120",
+            "\1\121",
+            "",
+            "",
+            "\1\122",
+            "\1\125\5\uffff\1\123\4\uffff\1\124",
+            "\1\126\1\127",
+            "\1\130",
+            "\1\131\5\uffff\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",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\150",
+            "\1\151",
+            "\1\152",
+            "\1\153",
+            "\1\154",
+            "\1\155",
+            "\1\156",
+            "\1\157",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\161",
+            "\1\162",
+            "\1\163",
+            "\1\164",
+            "\1\165",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\167",
+            "\1\170",
+            "\1\171",
+            "\1\172",
+            "\1\173",
+            "\1\174",
+            "\1\175",
+            "\1\176",
+            "\1\177",
+            "\1\u0080",
+            "\1\u0081",
+            "\1\u0082",
+            "\1\u0083",
+            "\1\u0084",
+            "\1\u0085",
+            "\1\u0086",
+            "\1\u0087",
+            "\1\u0088",
+            "\1\u0089",
+            "\1\u008a",
+            "\1\u008c\37\uffff\1\u008b",
+            "\1\u008d",
+            "\1\u008e",
+            "\1\u008f",
+            "\1\u0090",
+            "\1\u0091",
+            "",
+            "\1\u0092",
+            "\1\u0093",
+            "\1\u0094",
+            "\1\u0095",
+            "\1\u0096",
+            "",
+            "\1\u0097",
+            "\1\u0098",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u009a",
+            "\1\u009b",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u009e",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u00a1",
+            "\1\u00a2",
+            "\1\u00a3",
+            "\1\u00a4",
+            "\1\u00a5",
+            "\1\u00a6",
+            "\1\u00a7",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u00a9",
+            "\1\u00aa",
+            "\1\u00ab",
+            "\1\u00ac",
+            "\1\u00ad",
+            "\1\u00af\13\uffff\1\u00b0\1\uffff\1\u00b1\1\uffff\1\u00ae",
+            "\1\u00b2",
+            "\1\u00b3",
+            "\1\u00b4",
+            "\1\u00b5",
+            "\1\u00b6",
+            "\1\u00b7",
+            "\1\u00b8",
+            "\1\u00b9",
+            "\1\u00ba",
+            "\1\u00bb",
+            "",
+            "\1\u00bc",
+            "\1\u00bd",
+            "",
+            "",
+            "\1\u00be",
+            "",
+            "",
+            "\1\u00bf",
+            "\1\u00c0",
+            "\1\u00c1",
+            "\1\u00c2",
+            "\1\u00c3",
+            "\1\u00c4\1\uffff\1\u00c5",
+            "\1\u00c6",
+            "",
+            "\1\u00c7",
+            "\1\u00c8",
+            "\1\u00c9",
+            "\1\u00ca",
+            "\1\u00cb",
+            "\1\u00cc",
+            "\1\u00cd",
+            "\1\u00ce",
+            "\1\u00cf",
+            "\1\u00d0",
+            "\1\u00d1",
+            "\1\u00d2",
+            "\1\u00d3\12\uffff\1\u00d4",
+            "\1\u00d5\3\uffff\1\u00d6",
+            "\1\u00d7",
+            "\1\u00d8",
+            "\1\u00d9\3\uffff\1\u00da",
+            "\1\u00db",
+            "\1\u00dd\3\uffff\1\u00dc",
+            "\1\u00de",
+            "\1\u00df",
+            "\1\u00e0",
+            "\1\u00e1",
+            "\1\u00e2",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u00e4",
+            "\1\u00e5",
+            "\1\u00e6",
+            "\1\u00e7",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u00e9",
+            "\1\u00ea",
+            "\1\u00eb",
+            "\1\u00ec",
+            "\1\u00ed",
+            "\1\u00ee",
+            "\1\u00ef",
+            "\1\u00f0",
+            "\1\u00f1",
+            "\1\u00f2",
+            "\1\u00f3",
+            "\1\u00f4",
+            "\1\u00f5",
+            "\1\u00f6",
+            "\1\u00f7\16\uffff\1\u00f8",
+            "\1\u00f9",
+            "\1\u00fa",
+            "\1\u00fb",
+            "\1\u00fc\16\uffff\1\u00fd",
+            "\1\u00fe",
+            "\1\u00ff",
+            "\1\u0100",
+            "\1\u0101",
+            "\1\u0102",
+            "\1\u0103",
+            "\1\u0104",
+            "\1\u0105",
+            "\1\u0106",
+            "",
+            "\1\u0107",
+            "\1\u0108",
+            "\1\u0109",
+            "\1\u010a",
+            "",
+            "\1\u010b",
+            "\1\u010c",
+            "\1\u010d",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u010f",
+            "\1\u0110",
+            "\1\u0111",
+            "\1\u0112",
+            "\1\u0113",
+            "\1\u0114",
+            "\1\u0115",
+            "\1\u0116",
+            "\1\u0117",
+            "\1\u0118",
+            "\1\u011a\15\uffff\1\u0119",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u011c",
+            "\1\u011d",
+            "\1\u011e",
+            "\1\u0120\15\uffff\1\u011f",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0122",
+            "\1\u0123",
+            "\1\u0124",
+            "\1\u0125",
+            "\1\u0126",
+            "\1\u0127",
+            "\1\u0128",
+            "\12\43\7\uffff\2\43\1\u0129\27\43\4\uffff\1\43\1\uffff\32"+
+            "\43",
+            "\1\u012b",
+            "\1\u012c",
+            "\1\u012d",
+            "\1\u012e",
+            "\1\u012f",
+            "\1\u0130",
+            "\1\u0131",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u0133",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0135",
+            "\1\u0136",
+            "\1\u0137",
+            "\1\u0138",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u013a",
+            "\1\u013b",
+            "\1\u013c",
+            "\1\u013d",
+            "\1\u013e",
+            "",
+            "\1\u013f",
+            "\1\u0140",
+            "\1\u0141",
+            "\1\u0142",
+            "\1\u0143",
+            "",
+            "\1\u0144",
+            "\1\u0145",
+            "\1\u0147\1\u0146",
+            "\1\u0148",
+            "\1\u0149",
+            "\1\u014a",
+            "\1\u014b",
+            "\1\u014c",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u014e",
+            "\1\u014f",
+            "\1\u0150",
+            "\1\u0151",
+            "\12\43\7\uffff\2\43\1\u0152\27\43\4\uffff\1\43\1\uffff\32"+
+            "\43",
+            "\1\u0154",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u0156",
+            "\1\u0157",
+            "\1\u0158",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u015a",
+            "\1\u015b",
+            "\1\u015c",
+            "\1\u015d",
+            "\1\u015e",
+            "\1\u015f",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0161",
+            "\1\u0162",
+            "\1\u0163",
+            "\1\u0164",
+            "\1\u0165",
+            "\1\u0166",
+            "\1\u0167",
+            "\1\u0168",
+            "\1\u0169",
+            "\1\u016a",
+            "\1\u016b",
+            "\1\u016c",
+            "",
+            "\1\u016d",
+            "\1\u016e",
+            "\1\u016f",
+            "\1\u0170",
+            "\1\u0171",
+            "",
+            "\1\u0172",
+            "",
+            "\1\u0173",
+            "\1\u0174",
+            "\1\u0175",
+            "",
+            "\1\u0176",
+            "\1\u0177",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0179",
+            "\1\u017a",
+            "\1\u017b",
+            "",
+            "\1\u017c",
+            "\1\u017d",
+            "\1\u017e",
+            "\1\u017f",
+            "\1\u0180",
+            "\1\u0181",
+            "\1\u0182",
+            "\1\u0183",
+            "\1\u0184",
+            "\1\u0185",
+            "\1\u0186",
+            "\1\u0188\5\uffff\1\u0187",
+            "\1\u018a\5\uffff\1\u0189",
+            "\1\u018b",
+            "\1\u018c",
+            "\1\u018d",
+            "\1\u018e",
+            "\1\u018f",
+            "\1\u0190",
+            "\1\u0191",
+            "\1\u0192",
+            "\1\u0193",
+            "\1\u0194",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1\u0195\7"+
+            "\43",
+            "\1\u0197",
+            "\1\u0198",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1\u019a\7"+
+            "\43",
+            "\1\u019c",
+            "\1\u019d",
+            "\1\u019e",
+            "\1\u019f",
+            "\1\u01a0",
+            "\1\u01a1",
+            "\1\u01a2",
+            "\1\u01a3",
+            "\1\u01a4",
+            "\1\u01a5",
+            "\1\u01a6",
+            "\1\u01a7",
+            "\1\u01a8",
+            "\1\u01a9",
+            "\1\u01aa",
+            "\1\u01ab",
+            "\1\u01ac",
+            "\1\u01ad",
+            "\1\u01ae",
+            "\1\u01af",
+            "\1\u01b0",
+            "\1\u01b1",
+            "\1\u01b2",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u01b4",
+            "\1\u01b5",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u01b7",
+            "\1\u01b8",
+            "\1\u01b9",
+            "\1\u01ba",
+            "\1\u01bb",
+            "\1\u01bc",
+            "\1\u01bd",
+            "\1\u01be",
+            "\1\u01bf",
+            "\1\u01c0",
+            "\1\u01c1",
+            "\1\u01c2",
+            "\1\u01c3",
+            "\1\u01c4",
+            "\1\u01c5",
+            "\1\u01c6",
+            "\1\u01c7",
+            "\1\u01c8",
+            "\1\u01c9",
+            "\1\u01ca",
+            "\1\u01cb",
+            "\1\u01cc",
+            "\1\u01cd",
+            "",
+            "\1\u01ce",
+            "\1\u01cf",
+            "",
+            "\1\u01d0",
+            "\1\u01d1",
+            "\1\u01d2",
+            "\1\u01d3",
+            "\1\u01d4",
+            "\1\u01d5",
+            "\1\u01d6",
+            "\1\u01d7",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u01d9",
+            "\1\u01da",
+            "\1\u01db",
+            "\1\u01dc",
+            "\1\u01dd",
+            "\1\u01de",
+            "\1\u01df",
+            "\1\u01e0",
+            "\1\u01e1",
+            "\1\u01e2",
+            "\1\u01e3",
+            "\1\u01e4",
+            "\1\u01e5",
+            "\1\u01e6",
+            "\1\u01e7",
+            "\1\u01e8",
+            "\1\u01e9",
+            "\1\u01ea",
+            "\1\u01eb",
+            "\1\u01ec",
+            "\1\u01ed",
+            "\1\u01ee",
+            "\1\u01ef",
+            "\1\u01f0",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\22\43\1\u01f1\7"+
+            "\43",
+            "\1\u01f3",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u01f5",
+            "\1\u01f6",
+            "\1\u01f7",
+            "\1\u01f8",
+            "\1\u01f9",
+            "\1\u01fa",
+            "\1\u01fb",
+            "\1\u01fc",
+            "\1\u01fd",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0200",
+            "\1\u0201",
+            "\1\u0202",
+            "\1\u0203",
+            "\1\u0204",
+            "\1\u0205",
+            "\1\u0206",
+            "\1\u0207",
+            "\1\u0208",
+            "\1\u0209",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u020b",
+            "",
+            "\1\u020c",
+            "\1\u020d",
+            "\1\u020e",
+            "\1\u020f",
+            "\1\u0210",
+            "\1\u0211",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "",
+            "\1\u0215",
+            "\1\u0216",
+            "\1\u0217",
+            "\1\u0218",
+            "\1\u0219",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u021b",
+            "\1\u021c",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u021e",
+            "",
+            "\1\u021f",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0221",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0224",
+            "\1\u0225",
+            "",
+            "",
+            "",
+            "\1\u0226",
+            "\1\u0227",
+            "\1\u0228",
+            "\1\u0229",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u022c",
+            "",
+            "\1\u022d",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\1\u022f",
+            "",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0231",
+            "\1\u0232",
+            "\1\u0233",
+            "\1\u0234",
+            "\1\u0235",
+            "",
+            "",
+            "\1\u0236",
+            "\1\u0237",
+            "",
+            "\1\u0238",
+            "",
+            "\1\u0239",
+            "\1\u023a",
+            "\1\u023b",
+            "\1\u023c",
+            "\1\u023d",
+            "\1\u023e",
+            "\1\u023f",
+            "\1\u0240",
+            "\1\u0241",
+            "\1\u0242",
+            "\1\u0243",
+            "\1\u0244",
+            "\1\u0245",
+            "\1\u0246",
+            "\1\u0247",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0249",
+            "\1\u024a",
+            "\1\u024b",
+            "\1\u024c",
+            "\1\u024d",
+            "\1\u024e",
+            "\1\u024f",
+            "",
+            "\1\u0250",
+            "\1\u0251",
+            "\1\u0252",
+            "\1\u0253",
+            "\1\u0254",
+            "\1\u0255",
+            "\1\u0256",
+            "\1\u0257",
+            "\1\u0258",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u025a",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u025c",
+            "\1\u025d",
+            "\1\u025e",
+            "\1\u025f",
+            "",
+            "\1\u0260",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0262",
+            "\1\u0263",
+            "\1\u0264",
+            "\1\u0265",
+            "",
+            "\1\u0266",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\1\u0268",
+            "\1\u0269",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "\12\43\7\uffff\32\43\4\uffff\1\43\1\uffff\32\43",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA12_eot = DFA.unpackEncodedString(DFA12_eotS);
+    static final short[] DFA12_eof = DFA.unpackEncodedString(DFA12_eofS);
+    static final char[] DFA12_min = DFA.unpackEncodedStringToUnsignedChars(DFA12_minS);
+    static final char[] DFA12_max = DFA.unpackEncodedStringToUnsignedChars(DFA12_maxS);
+    static final short[] DFA12_accept = DFA.unpackEncodedString(DFA12_acceptS);
+    static final short[] DFA12_special = DFA.unpackEncodedString(DFA12_specialS);
+    static final short[][] DFA12_transition;
+
+    static {
+        int numStates = DFA12_transitionS.length;
+        DFA12_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA12_transition[i] = DFA.unpackEncodedString(DFA12_transitionS[i]);
+        }
+    }
+
+    static class DFA12 extends DFA {
+
+        public DFA12(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 12;
+            this.eot = DFA12_eot;
+            this.eof = DFA12_eof;
+            this.min = DFA12_min;
+            this.max = DFA12_max;
+            this.accept = DFA12_accept;
+            this.special = DFA12_special;
+            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 | 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 | T__48 | T__49 | T__50 | T__51 | T__52 | T__53 | T__54 | T__55 | T__56 | T__57 | T__58 | T__59 | T__60 | T__61 | T__62 | T__63 | T__64 | T__65 | T__66 | T__67 | T__68 | T__69 | 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_30 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_30>='\u0000' && LA12_30<='\uFFFF')) ) {s = 67;}
+
+                        else s = 33;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_29 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_29>='\u0000' && LA12_29<='\uFFFF')) ) {s = 67;}
+
+                        else s = 33;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_0 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA12_0=='R') ) {s = 1;}
+
+                        else if ( (LA12_0=='{') ) {s = 2;}
+
+                        else if ( (LA12_0=='d') ) {s = 3;}
+
+                        else if ( (LA12_0==',') ) {s = 4;}
+
+                        else if ( (LA12_0=='}') ) {s = 5;}
+
+                        else if ( (LA12_0=='i') ) {s = 6;}
+
+                        else if ( (LA12_0=='c') ) {s = 7;}
+
+                        else if ( (LA12_0=='I') ) {s = 8;}
+
+                        else if ( (LA12_0=='p') ) {s = 9;}
+
+                        else if ( (LA12_0=='(') ) {s = 10;}
+
+                        else if ( (LA12_0==')') ) {s = 11;}
+
+                        else if ( (LA12_0=='s') ) {s = 12;}
+
+                        else if ( (LA12_0=='r') ) {s = 13;}
+
+                        else if ( (LA12_0=='C') ) {s = 14;}
+
+                        else if ( (LA12_0=='P') ) {s = 15;}
+
+                        else if ( (LA12_0=='t') ) {s = 16;}
+
+                        else if ( (LA12_0=='v') ) {s = 17;}
+
+                        else if ( (LA12_0=='B') ) {s = 18;}
+
+                        else if ( (LA12_0=='a') ) {s = 19;}
+
+                        else if ( (LA12_0=='S') ) {s = 20;}
+
+                        else if ( (LA12_0=='A') ) {s = 21;}
+
+                        else if ( (LA12_0=='e') ) {s = 22;}
+
+                        else if ( (LA12_0=='o') ) {s = 23;}
+
+                        else if ( (LA12_0=='D') ) {s = 24;}
+
+                        else if ( (LA12_0=='L') ) {s = 25;}
+
+                        else if ( (LA12_0=='^') ) {s = 26;}
+
+                        else if ( ((LA12_0>='E' && LA12_0<='H')||(LA12_0>='J' && LA12_0<='K')||(LA12_0>='M' && LA12_0<='O')||LA12_0=='Q'||(LA12_0>='T' && LA12_0<='Z')||LA12_0=='_'||LA12_0=='b'||(LA12_0>='f' && LA12_0<='h')||(LA12_0>='j' && LA12_0<='n')||LA12_0=='q'||LA12_0=='u'||(LA12_0>='w' && LA12_0<='z')) ) {s = 27;}
+
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 28;}
+
+                        else if ( (LA12_0=='\"') ) {s = 29;}
+
+                        else if ( (LA12_0=='\'') ) {s = 30;}
+
+                        else if ( (LA12_0=='/') ) {s = 31;}
+
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 32;}
+
+                        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=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 33;}
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 12, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
\ No newline at end of file
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestParser.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestParser.java
new file mode 100644
index 0000000000000000000000000000000000000000..f55f405244b2de7f5697ddbddd008a896a164fb0
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTestParser.java
@@ -0,0 +1,6984 @@
+package org.xtext.example.mydsl.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.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;
+import org.eclipse.xtext.parser.antlr.AntlrDatatypeRuleToken;
+import org.xtext.example.mydsl.services.MyDslTestGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalMyDslTestParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_STRING", "RULE_ID", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'Repository'", "'{'", "'datatypes'", "','", "'}'", "'interfaces'", "'components'", "'Interface'", "'parentInterfaces'", "'('", "')'", "'signatures'", "'RepositoryComponent'", "'relationship'", "'providedRoles'", "'requiredRoles'", "'CollectionDataType'", "'innerType'", "'CompositeDataType'", "'parentTypes'", "'innerDeclarations'", "'PrimitiveDataType'", "'type'", "'ref'", "'InnerDeclaration'", "'dataType'", "'void'", "'provides'", "'requires'", "'BasicComponent'", "'CompositeComponent'", "'assembly'", "'SubSystem'", "'ComposedStructureAssembly'", "'assemblyContexts'", "'assemblyConnectors'", "'providedDelegationConnectors'", "'requiredDelegationConnectors'", "'AssemblyContext'", "'encapsulatedComponent'", "'AssemblyConnector'", "'requiredRole'", "'providedRole'", "'providingAssemblyContext'", "'requiringAssemblyContext'", "'ProvidedDelegationConnector'", "'assemblyContext'", "'innerProvidedRole'", "'outerProvidedRole'", "'RequiredDelegationConnector'", "'innerRequiredRole'", "'outerRequiredRole'", "'INT'", "'STRING'", "'BOOL'", "'DOUBLE'", "'CHAR'", "'BYTE'", "'LONG'"
+    };
+    public static final int T__68=68;
+    public static final int T__69=69;
+    public static final int RULE_ID=5;
+    public static final int T__66=66;
+    public static final int T__67=67;
+    public static final int T__64=64;
+    public static final int T__29=29;
+    public static final int T__65=65;
+    public static final int T__28=28;
+    public static final int T__62=62;
+    public static final int T__27=27;
+    public static final int T__63=63;
+    public static final int T__26=26;
+    public static final int T__25=25;
+    public static final int T__24=24;
+    public static final int T__23=23;
+    public static final int T__22=22;
+    public static final int RULE_ANY_OTHER=10;
+    public static final int T__21=21;
+    public static final int T__20=20;
+    public static final int T__61=61;
+    public static final int T__60=60;
+    public static final int EOF=-1;
+    public static final int T__55=55;
+    public static final int T__56=56;
+    public static final int T__19=19;
+    public static final int T__57=57;
+    public static final int T__58=58;
+    public static final int T__51=51;
+    public static final int T__16=16;
+    public static final int T__52=52;
+    public static final int T__15=15;
+    public static final int T__53=53;
+    public static final int T__18=18;
+    public static final int T__54=54;
+    public static final int T__17=17;
+    public static final int T__12=12;
+    public static final int T__11=11;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int T__59=59;
+    public static final int RULE_INT=6;
+    public static final int T__50=50;
+    public static final int T__42=42;
+    public static final int T__43=43;
+    public static final int T__40=40;
+    public static final int T__41=41;
+    public static final int T__46=46;
+    public static final int T__47=47;
+    public static final int T__44=44;
+    public static final int T__45=45;
+    public static final int T__48=48;
+    public static final int T__49=49;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int RULE_ML_COMMENT=7;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int RULE_STRING=4;
+    public static final int T__32=32;
+    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 T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int RULE_WS=9;
+
+    // delegates
+    // delegators
+
+
+        public InternalMyDslTestParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalMyDslTestParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalMyDslTestParser.tokenNames; }
+    public String getGrammarFileName() { return "../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g"; }
+
+
+
+     	private MyDslTestGrammarAccess grammarAccess;
+     	
+        public InternalMyDslTestParser(TokenStream input, MyDslTestGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "Repository";	
+       	}
+       	
+       	@Override
+       	protected MyDslTestGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleRepository"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:68:1: entryRuleRepository returns [EObject current=null] : iv_ruleRepository= ruleRepository EOF ;
+    public final EObject entryRuleRepository() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRepository = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:69:2: (iv_ruleRepository= ruleRepository EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:70:2: iv_ruleRepository= ruleRepository EOF
+            {
+             newCompositeNode(grammarAccess.getRepositoryRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleRepository_in_entryRuleRepository75);
+            iv_ruleRepository=ruleRepository();
+
+            state._fsp--;
+
+             current =iv_ruleRepository; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRepository85); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRepository"
+
+
+    // $ANTLR start "ruleRepository"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:77:1: ruleRepository returns [EObject current=null] : (otherlv_0= 'Repository' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )? (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )? (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )? otherlv_21= '}' ) ;
+    public final EObject ruleRepository() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token otherlv_18=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_datatypes_5_0 = null;
+
+        EObject lv_datatypes_7_0 = null;
+
+        EObject lv_interfaces_11_0 = null;
+
+        EObject lv_interfaces_13_0 = null;
+
+        EObject lv_components_17_0 = null;
+
+        EObject lv_components_19_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:80:28: ( (otherlv_0= 'Repository' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )? (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )? (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )? otherlv_21= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:81:1: (otherlv_0= 'Repository' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )? (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )? (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )? otherlv_21= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:81:1: (otherlv_0= 'Repository' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )? (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )? (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )? otherlv_21= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:81:3: otherlv_0= 'Repository' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )? (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )? (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )? otherlv_21= '}'
+            {
+            otherlv_0=(Token)match(input,11,FollowSets000.FOLLOW_11_in_ruleRepository122); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getRepositoryAccess().getRepositoryKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:85:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:86:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:86:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:87:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getRepositoryAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRepository143);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepository155); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:107:1: (otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}' )?
+            int alt2=2;
+            int LA2_0 = input.LA(1);
+
+            if ( (LA2_0==13) ) {
+                alt2=1;
+            }
+            switch (alt2) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:107:3: otherlv_3= 'datatypes' otherlv_4= '{' ( (lv_datatypes_5_0= ruleDataType ) ) (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )* otherlv_8= '}'
+                    {
+                    otherlv_3=(Token)match(input,13,FollowSets000.FOLLOW_13_in_ruleRepository168); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getRepositoryAccess().getDatatypesKeyword_3_0());
+                        
+                    otherlv_4=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepository180); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:115:1: ( (lv_datatypes_5_0= ruleDataType ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:116:1: (lv_datatypes_5_0= ruleDataType )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:116:1: (lv_datatypes_5_0= ruleDataType )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:117:3: lv_datatypes_5_0= ruleDataType
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleDataType_in_ruleRepository201);
+                    lv_datatypes_5_0=ruleDataType();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"datatypes",
+                            		lv_datatypes_5_0, 
+                            		"DataType");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:133:2: (otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) ) )*
+                    loop1:
+                    do {
+                        int alt1=2;
+                        int LA1_0 = input.LA(1);
+
+                        if ( (LA1_0==14) ) {
+                            alt1=1;
+                        }
+
+
+                        switch (alt1) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:133:4: otherlv_6= ',' ( (lv_datatypes_7_0= ruleDataType ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepository214); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getRepositoryAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:137:1: ( (lv_datatypes_7_0= ruleDataType ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:138:1: (lv_datatypes_7_0= ruleDataType )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:138:1: (lv_datatypes_7_0= ruleDataType )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:139:3: lv_datatypes_7_0= ruleDataType
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryAccess().getDatatypesDataTypeParserRuleCall_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleDataType_in_ruleRepository235);
+                    	    lv_datatypes_7_0=ruleDataType();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"datatypes",
+                    	            		lv_datatypes_7_0, 
+                    	            		"DataType");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop1;
+                        }
+                    } while (true);
+
+                    otherlv_8=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepository249); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:159:3: (otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}' )?
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==16) ) {
+                alt4=1;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:159:5: otherlv_9= 'interfaces' otherlv_10= '{' ( (lv_interfaces_11_0= ruleInterface ) ) (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )* otherlv_14= '}'
+                    {
+                    otherlv_9=(Token)match(input,16,FollowSets000.FOLLOW_16_in_ruleRepository264); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getRepositoryAccess().getInterfacesKeyword_4_0());
+                        
+                    otherlv_10=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepository276); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_4_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:167:1: ( (lv_interfaces_11_0= ruleInterface ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:168:1: (lv_interfaces_11_0= ruleInterface )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:168:1: (lv_interfaces_11_0= ruleInterface )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:169:3: lv_interfaces_11_0= ruleInterface
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleInterface_in_ruleRepository297);
+                    lv_interfaces_11_0=ruleInterface();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"interfaces",
+                            		lv_interfaces_11_0, 
+                            		"Interface");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:185:2: (otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) ) )*
+                    loop3:
+                    do {
+                        int alt3=2;
+                        int LA3_0 = input.LA(1);
+
+                        if ( (LA3_0==14) ) {
+                            alt3=1;
+                        }
+
+
+                        switch (alt3) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:185:4: otherlv_12= ',' ( (lv_interfaces_13_0= ruleInterface ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepository310); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getRepositoryAccess().getCommaKeyword_4_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:189:1: ( (lv_interfaces_13_0= ruleInterface ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:190:1: (lv_interfaces_13_0= ruleInterface )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:190:1: (lv_interfaces_13_0= ruleInterface )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:191:3: lv_interfaces_13_0= ruleInterface
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryAccess().getInterfacesInterfaceParserRuleCall_4_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleInterface_in_ruleRepository331);
+                    	    lv_interfaces_13_0=ruleInterface();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"interfaces",
+                    	            		lv_interfaces_13_0, 
+                    	            		"Interface");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop3;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepository345); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_4_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:211:3: (otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}' )?
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==17) ) {
+                alt6=1;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:211:5: otherlv_15= 'components' otherlv_16= '{' ( (lv_components_17_0= ruleRepositoryComponent ) ) (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )* otherlv_20= '}'
+                    {
+                    otherlv_15=(Token)match(input,17,FollowSets000.FOLLOW_17_in_ruleRepository360); 
+
+                        	newLeafNode(otherlv_15, grammarAccess.getRepositoryAccess().getComponentsKeyword_5_0());
+                        
+                    otherlv_16=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepository372); 
+
+                        	newLeafNode(otherlv_16, grammarAccess.getRepositoryAccess().getLeftCurlyBracketKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:219:1: ( (lv_components_17_0= ruleRepositoryComponent ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:220:1: (lv_components_17_0= ruleRepositoryComponent )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:220:1: (lv_components_17_0= ruleRepositoryComponent )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:221:3: lv_components_17_0= ruleRepositoryComponent
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRepositoryComponent_in_ruleRepository393);
+                    lv_components_17_0=ruleRepositoryComponent();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"components",
+                            		lv_components_17_0, 
+                            		"RepositoryComponent");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:237:2: (otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) ) )*
+                    loop5:
+                    do {
+                        int alt5=2;
+                        int LA5_0 = input.LA(1);
+
+                        if ( (LA5_0==14) ) {
+                            alt5=1;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:237:4: otherlv_18= ',' ( (lv_components_19_0= ruleRepositoryComponent ) )
+                    	    {
+                    	    otherlv_18=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepository406); 
+
+                    	        	newLeafNode(otherlv_18, grammarAccess.getRepositoryAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:241:1: ( (lv_components_19_0= ruleRepositoryComponent ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:242:1: (lv_components_19_0= ruleRepositoryComponent )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:242:1: (lv_components_19_0= ruleRepositoryComponent )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:243:3: lv_components_19_0= ruleRepositoryComponent
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryAccess().getComponentsRepositoryComponentParserRuleCall_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRepositoryComponent_in_ruleRepository427);
+                    	    lv_components_19_0=ruleRepositoryComponent();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getRepositoryRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"components",
+                    	            		lv_components_19_0, 
+                    	            		"RepositoryComponent");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+                    otherlv_20=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepository441); 
+
+                        	newLeafNode(otherlv_20, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_21=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepository455); 
+
+                	newLeafNode(otherlv_21, grammarAccess.getRepositoryAccess().getRightCurlyBracketKeyword_6());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRepository"
+
+
+    // $ANTLR start "entryRuleDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:275:1: entryRuleDataType returns [EObject current=null] : iv_ruleDataType= ruleDataType EOF ;
+    public final EObject entryRuleDataType() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleDataType = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:276:2: (iv_ruleDataType= ruleDataType EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:277:2: iv_ruleDataType= ruleDataType EOF
+            {
+             newCompositeNode(grammarAccess.getDataTypeRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleDataType_in_entryRuleDataType491);
+            iv_ruleDataType=ruleDataType();
+
+            state._fsp--;
+
+             current =iv_ruleDataType; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleDataType501); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDataType"
+
+
+    // $ANTLR start "ruleDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:284:1: ruleDataType returns [EObject current=null] : (this_CollectionDataType_0= ruleCollectionDataType | this_CompositeDataType_1= ruleCompositeDataType | this_PrimitiveDataType_2= rulePrimitiveDataType ) ;
+    public final EObject ruleDataType() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_CollectionDataType_0 = null;
+
+        EObject this_CompositeDataType_1 = null;
+
+        EObject this_PrimitiveDataType_2 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:287:28: ( (this_CollectionDataType_0= ruleCollectionDataType | this_CompositeDataType_1= ruleCompositeDataType | this_PrimitiveDataType_2= rulePrimitiveDataType ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:288:1: (this_CollectionDataType_0= ruleCollectionDataType | this_CompositeDataType_1= ruleCompositeDataType | this_PrimitiveDataType_2= rulePrimitiveDataType )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:288:1: (this_CollectionDataType_0= ruleCollectionDataType | this_CompositeDataType_1= ruleCompositeDataType | this_PrimitiveDataType_2= rulePrimitiveDataType )
+            int alt7=3;
+            switch ( input.LA(1) ) {
+            case 27:
+                {
+                alt7=1;
+                }
+                break;
+            case 29:
+                {
+                alt7=2;
+                }
+                break;
+            case 32:
+                {
+                alt7=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:289:5: this_CollectionDataType_0= ruleCollectionDataType
+                    {
+                     
+                            newCompositeNode(grammarAccess.getDataTypeAccess().getCollectionDataTypeParserRuleCall_0()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleCollectionDataType_in_ruleDataType548);
+                    this_CollectionDataType_0=ruleCollectionDataType();
+
+                    state._fsp--;
+
+                     
+                            current = this_CollectionDataType_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:299:5: this_CompositeDataType_1= ruleCompositeDataType
+                    {
+                     
+                            newCompositeNode(grammarAccess.getDataTypeAccess().getCompositeDataTypeParserRuleCall_1()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleCompositeDataType_in_ruleDataType575);
+                    this_CompositeDataType_1=ruleCompositeDataType();
+
+                    state._fsp--;
+
+                     
+                            current = this_CompositeDataType_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:309:5: this_PrimitiveDataType_2= rulePrimitiveDataType
+                    {
+                     
+                            newCompositeNode(grammarAccess.getDataTypeAccess().getPrimitiveDataTypeParserRuleCall_2()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_rulePrimitiveDataType_in_ruleDataType602);
+                    this_PrimitiveDataType_2=rulePrimitiveDataType();
+
+                    state._fsp--;
+
+                     
+                            current = this_PrimitiveDataType_2; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDataType"
+
+
+    // $ANTLR start "entryRuleRepositoryComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:325:1: entryRuleRepositoryComponent returns [EObject current=null] : iv_ruleRepositoryComponent= ruleRepositoryComponent EOF ;
+    public final EObject entryRuleRepositoryComponent() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRepositoryComponent = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:326:2: (iv_ruleRepositoryComponent= ruleRepositoryComponent EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:327:2: iv_ruleRepositoryComponent= ruleRepositoryComponent EOF
+            {
+             newCompositeNode(grammarAccess.getRepositoryComponentRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleRepositoryComponent_in_entryRuleRepositoryComponent637);
+            iv_ruleRepositoryComponent=ruleRepositoryComponent();
+
+            state._fsp--;
+
+             current =iv_ruleRepositoryComponent; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRepositoryComponent647); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRepositoryComponent"
+
+
+    // $ANTLR start "ruleRepositoryComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:334:1: ruleRepositoryComponent returns [EObject current=null] : (this_RepositoryComponent_Impl_0= ruleRepositoryComponent_Impl | this_BasicComponent_1= ruleBasicComponent | this_CompositeComponent_2= ruleCompositeComponent | this_SubSystem_3= ruleSubSystem ) ;
+    public final EObject ruleRepositoryComponent() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_RepositoryComponent_Impl_0 = null;
+
+        EObject this_BasicComponent_1 = null;
+
+        EObject this_CompositeComponent_2 = null;
+
+        EObject this_SubSystem_3 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:337:28: ( (this_RepositoryComponent_Impl_0= ruleRepositoryComponent_Impl | this_BasicComponent_1= ruleBasicComponent | this_CompositeComponent_2= ruleCompositeComponent | this_SubSystem_3= ruleSubSystem ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:338:1: (this_RepositoryComponent_Impl_0= ruleRepositoryComponent_Impl | this_BasicComponent_1= ruleBasicComponent | this_CompositeComponent_2= ruleCompositeComponent | this_SubSystem_3= ruleSubSystem )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:338:1: (this_RepositoryComponent_Impl_0= ruleRepositoryComponent_Impl | this_BasicComponent_1= ruleBasicComponent | this_CompositeComponent_2= ruleCompositeComponent | this_SubSystem_3= ruleSubSystem )
+            int alt8=4;
+            switch ( input.LA(1) ) {
+            case 23:
+                {
+                alt8=1;
+                }
+                break;
+            case 40:
+                {
+                alt8=2;
+                }
+                break;
+            case 41:
+                {
+                alt8=3;
+                }
+                break;
+            case 43:
+                {
+                alt8=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt8) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:339:5: this_RepositoryComponent_Impl_0= ruleRepositoryComponent_Impl
+                    {
+                     
+                            newCompositeNode(grammarAccess.getRepositoryComponentAccess().getRepositoryComponent_ImplParserRuleCall_0()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleRepositoryComponent_Impl_in_ruleRepositoryComponent694);
+                    this_RepositoryComponent_Impl_0=ruleRepositoryComponent_Impl();
+
+                    state._fsp--;
+
+                     
+                            current = this_RepositoryComponent_Impl_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:349:5: this_BasicComponent_1= ruleBasicComponent
+                    {
+                     
+                            newCompositeNode(grammarAccess.getRepositoryComponentAccess().getBasicComponentParserRuleCall_1()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleBasicComponent_in_ruleRepositoryComponent721);
+                    this_BasicComponent_1=ruleBasicComponent();
+
+                    state._fsp--;
+
+                     
+                            current = this_BasicComponent_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:359:5: this_CompositeComponent_2= ruleCompositeComponent
+                    {
+                     
+                            newCompositeNode(grammarAccess.getRepositoryComponentAccess().getCompositeComponentParserRuleCall_2()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleCompositeComponent_in_ruleRepositoryComponent748);
+                    this_CompositeComponent_2=ruleCompositeComponent();
+
+                    state._fsp--;
+
+                     
+                            current = this_CompositeComponent_2; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:369:5: this_SubSystem_3= ruleSubSystem
+                    {
+                     
+                            newCompositeNode(grammarAccess.getRepositoryComponentAccess().getSubSystemParserRuleCall_3()); 
+                        
+                    pushFollow(FollowSets000.FOLLOW_ruleSubSystem_in_ruleRepositoryComponent775);
+                    this_SubSystem_3=ruleSubSystem();
+
+                    state._fsp--;
+
+                     
+                            current = this_SubSystem_3; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRepositoryComponent"
+
+
+    // $ANTLR start "entryRuleEString"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:385:1: entryRuleEString returns [String current=null] : iv_ruleEString= ruleEString EOF ;
+    public final String entryRuleEString() throws RecognitionException {
+        String current = null;
+
+        AntlrDatatypeRuleToken iv_ruleEString = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:386:2: (iv_ruleEString= ruleEString EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:387:2: iv_ruleEString= ruleEString EOF
+            {
+             newCompositeNode(grammarAccess.getEStringRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_entryRuleEString811);
+            iv_ruleEString=ruleEString();
+
+            state._fsp--;
+
+             current =iv_ruleEString.getText(); 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleEString822); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEString"
+
+
+    // $ANTLR start "ruleEString"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:394:1: ruleEString returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) ;
+    public final AntlrDatatypeRuleToken ruleEString() throws RecognitionException {
+        AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
+
+        Token this_STRING_0=null;
+        Token this_ID_1=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:397:28: ( (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:398:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:398:1: (this_STRING_0= RULE_STRING | this_ID_1= RULE_ID )
+            int alt9=2;
+            int LA9_0 = input.LA(1);
+
+            if ( (LA9_0==RULE_STRING) ) {
+                alt9=1;
+            }
+            else if ( (LA9_0==RULE_ID) ) {
+                alt9=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+            switch (alt9) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:398:6: this_STRING_0= RULE_STRING
+                    {
+                    this_STRING_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_RULE_STRING_in_ruleEString862); 
+
+                    		current.merge(this_STRING_0);
+                        
+                     
+                        newLeafNode(this_STRING_0, grammarAccess.getEStringAccess().getSTRINGTerminalRuleCall_0()); 
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:406:10: this_ID_1= RULE_ID
+                    {
+                    this_ID_1=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_RULE_ID_in_ruleEString888); 
+
+                    		current.merge(this_ID_1);
+                        
+                     
+                        newLeafNode(this_ID_1, grammarAccess.getEStringAccess().getIDTerminalRuleCall_1()); 
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEString"
+
+
+    // $ANTLR start "entryRuleInterface"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:421:1: entryRuleInterface returns [EObject current=null] : iv_ruleInterface= ruleInterface EOF ;
+    public final EObject entryRuleInterface() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleInterface = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:422:2: (iv_ruleInterface= ruleInterface EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:423:2: iv_ruleInterface= ruleInterface EOF
+            {
+             newCompositeNode(grammarAccess.getInterfaceRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleInterface_in_entryRuleInterface933);
+            iv_ruleInterface=ruleInterface();
+
+            state._fsp--;
+
+             current =iv_ruleInterface; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInterface943); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInterface"
+
+
+    // $ANTLR start "ruleInterface"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:430:1: ruleInterface returns [EObject current=null] : (otherlv_0= 'Interface' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )? otherlv_15= '}' ) ;
+    public final EObject ruleInterface() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_signatures_11_0 = null;
+
+        EObject lv_signatures_13_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:433:28: ( (otherlv_0= 'Interface' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )? otherlv_15= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:434:1: (otherlv_0= 'Interface' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )? otherlv_15= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:434:1: (otherlv_0= 'Interface' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )? otherlv_15= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:434:3: otherlv_0= 'Interface' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )? otherlv_15= '}'
+            {
+            otherlv_0=(Token)match(input,18,FollowSets000.FOLLOW_18_in_ruleInterface980); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getInterfaceAccess().getInterfaceKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:438:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:439:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:439:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:440:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getInterfaceAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleInterface1001);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getInterfaceRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleInterface1013); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:460:1: (otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )?
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==19) ) {
+                alt11=1;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:460:3: otherlv_3= 'parentInterfaces' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')'
+                    {
+                    otherlv_3=(Token)match(input,19,FollowSets000.FOLLOW_19_in_ruleInterface1026); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getInterfaceAccess().getParentInterfacesKeyword_3_0());
+                        
+                    otherlv_4=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleInterface1038); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getInterfaceAccess().getLeftParenthesisKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:468:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:469:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:469:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:470:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getInterfaceRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleInterface1061);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:483:2: (otherlv_6= ',' ( ( ruleEString ) ) )*
+                    loop10:
+                    do {
+                        int alt10=2;
+                        int LA10_0 = input.LA(1);
+
+                        if ( (LA10_0==14) ) {
+                            alt10=1;
+                        }
+
+
+                        switch (alt10) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:483:4: otherlv_6= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleInterface1074); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getInterfaceAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:487:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:488:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:488:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:489:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getInterfaceRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getInterfaceAccess().getParentInterfacesInterfaceCrossReference_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleInterface1097);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop10;
+                        }
+                    } while (true);
+
+                    otherlv_8=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleInterface1111); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getInterfaceAccess().getRightParenthesisKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:506:3: (otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==22) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:506:5: otherlv_9= 'signatures' otherlv_10= '{' ( (lv_signatures_11_0= ruleSignature ) ) (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )* otherlv_14= '}'
+                    {
+                    otherlv_9=(Token)match(input,22,FollowSets000.FOLLOW_22_in_ruleInterface1126); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getInterfaceAccess().getSignaturesKeyword_4_0());
+                        
+                    otherlv_10=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleInterface1138); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getInterfaceAccess().getLeftCurlyBracketKeyword_4_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:514:1: ( (lv_signatures_11_0= ruleSignature ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:515:1: (lv_signatures_11_0= ruleSignature )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:515:1: (lv_signatures_11_0= ruleSignature )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:516:3: lv_signatures_11_0= ruleSignature
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleSignature_in_ruleInterface1159);
+                    lv_signatures_11_0=ruleSignature();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getInterfaceRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"signatures",
+                            		lv_signatures_11_0, 
+                            		"Signature");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:532:2: (otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) ) )*
+                    loop12:
+                    do {
+                        int alt12=2;
+                        int LA12_0 = input.LA(1);
+
+                        if ( (LA12_0==14) ) {
+                            alt12=1;
+                        }
+
+
+                        switch (alt12) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:532:4: otherlv_12= ',' ( (lv_signatures_13_0= ruleSignature ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleInterface1172); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getInterfaceAccess().getCommaKeyword_4_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:536:1: ( (lv_signatures_13_0= ruleSignature ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:537:1: (lv_signatures_13_0= ruleSignature )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:537:1: (lv_signatures_13_0= ruleSignature )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:538:3: lv_signatures_13_0= ruleSignature
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getInterfaceAccess().getSignaturesSignatureParserRuleCall_4_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleSignature_in_ruleInterface1193);
+                    	    lv_signatures_13_0=ruleSignature();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getInterfaceRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"signatures",
+                    	            		lv_signatures_13_0, 
+                    	            		"Signature");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop12;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleInterface1207); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_4_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_15=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleInterface1221); 
+
+                	newLeafNode(otherlv_15, grammarAccess.getInterfaceAccess().getRightCurlyBracketKeyword_5());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInterface"
+
+
+    // $ANTLR start "entryRuleRepositoryComponent_Impl"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:570:1: entryRuleRepositoryComponent_Impl returns [EObject current=null] : iv_ruleRepositoryComponent_Impl= ruleRepositoryComponent_Impl EOF ;
+    public final EObject entryRuleRepositoryComponent_Impl() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRepositoryComponent_Impl = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:571:2: (iv_ruleRepositoryComponent_Impl= ruleRepositoryComponent_Impl EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:572:2: iv_ruleRepositoryComponent_Impl= ruleRepositoryComponent_Impl EOF
+            {
+             newCompositeNode(grammarAccess.getRepositoryComponent_ImplRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleRepositoryComponent_Impl_in_entryRuleRepositoryComponent_Impl1257);
+            iv_ruleRepositoryComponent_Impl=ruleRepositoryComponent_Impl();
+
+            state._fsp--;
+
+             current =iv_ruleRepositoryComponent_Impl; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRepositoryComponent_Impl1267); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRepositoryComponent_Impl"
+
+
+    // $ANTLR start "ruleRepositoryComponent_Impl"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:579:1: ruleRepositoryComponent_Impl returns [EObject current=null] : (otherlv_0= 'RepositoryComponent' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )? (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )? otherlv_21= '}' ) ;
+    public final EObject ruleRepositoryComponent_Impl() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token otherlv_18=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_providedRoles_11_0 = null;
+
+        EObject lv_providedRoles_13_0 = null;
+
+        EObject lv_requiredRoles_17_0 = null;
+
+        EObject lv_requiredRoles_19_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:582:28: ( (otherlv_0= 'RepositoryComponent' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )? (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )? otherlv_21= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:583:1: (otherlv_0= 'RepositoryComponent' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )? (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )? otherlv_21= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:583:1: (otherlv_0= 'RepositoryComponent' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )? (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )? otherlv_21= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:583:3: otherlv_0= 'RepositoryComponent' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )? (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )? otherlv_21= '}'
+            {
+            otherlv_0=(Token)match(input,23,FollowSets000.FOLLOW_23_in_ruleRepositoryComponent_Impl1304); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getRepositoryComponent_ImplAccess().getRepositoryComponentKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:587:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:588:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:588:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:589:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1325);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepositoryComponent_Impl1337); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:609:1: (otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==24) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:609:3: otherlv_3= 'relationship' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')'
+                    {
+                    otherlv_3=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleRepositoryComponent_Impl1350); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipKeyword_3_0());
+                        
+                    otherlv_4=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleRepositoryComponent_Impl1362); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getRepositoryComponent_ImplAccess().getLeftParenthesisKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:617:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:618:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:618:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:619:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getRepositoryComponent_ImplRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1385);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:632:2: (otherlv_6= ',' ( ( ruleEString ) ) )*
+                    loop14:
+                    do {
+                        int alt14=2;
+                        int LA14_0 = input.LA(1);
+
+                        if ( (LA14_0==14) ) {
+                            alt14=1;
+                        }
+
+
+                        switch (alt14) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:632:4: otherlv_6= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepositoryComponent_Impl1398); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:636:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:637:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:637:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:638:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getRepositoryComponent_ImplRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRelationshipRelationshipCrossReference_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1421);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop14;
+                        }
+                    } while (true);
+
+                    otherlv_8=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleRepositoryComponent_Impl1435); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getRepositoryComponent_ImplAccess().getRightParenthesisKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:655:3: (otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}' )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
+
+            if ( (LA17_0==25) ) {
+                alt17=1;
+            }
+            switch (alt17) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:655:5: otherlv_9= 'providedRoles' otherlv_10= '{' ( (lv_providedRoles_11_0= ruleProvidedRole ) ) (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )* otherlv_14= '}'
+                    {
+                    otherlv_9=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleRepositoryComponent_Impl1450); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesKeyword_4_0());
+                        
+                    otherlv_10=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepositoryComponent_Impl1462); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_4_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:663:1: ( (lv_providedRoles_11_0= ruleProvidedRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:664:1: (lv_providedRoles_11_0= ruleProvidedRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:664:1: (lv_providedRoles_11_0= ruleProvidedRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:665:3: lv_providedRoles_11_0= ruleProvidedRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleRepositoryComponent_Impl1483);
+                    lv_providedRoles_11_0=ruleProvidedRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"providedRoles",
+                            		lv_providedRoles_11_0, 
+                            		"ProvidedRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:681:2: (otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) ) )*
+                    loop16:
+                    do {
+                        int alt16=2;
+                        int LA16_0 = input.LA(1);
+
+                        if ( (LA16_0==14) ) {
+                            alt16=1;
+                        }
+
+
+                        switch (alt16) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:681:4: otherlv_12= ',' ( (lv_providedRoles_13_0= ruleProvidedRole ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepositoryComponent_Impl1496); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_4_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:685:1: ( (lv_providedRoles_13_0= ruleProvidedRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:686:1: (lv_providedRoles_13_0= ruleProvidedRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:686:1: (lv_providedRoles_13_0= ruleProvidedRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:687:3: lv_providedRoles_13_0= ruleProvidedRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getProvidedRolesProvidedRoleParserRuleCall_4_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleRepositoryComponent_Impl1517);
+                    	    lv_providedRoles_13_0=ruleProvidedRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"providedRoles",
+                    	            		lv_providedRoles_13_0, 
+                    	            		"ProvidedRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop16;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepositoryComponent_Impl1531); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_4_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:707:3: (otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}' )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==26) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:707:5: otherlv_15= 'requiredRoles' otherlv_16= '{' ( (lv_requiredRoles_17_0= ruleRequiredRole ) ) (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )* otherlv_20= '}'
+                    {
+                    otherlv_15=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleRepositoryComponent_Impl1546); 
+
+                        	newLeafNode(otherlv_15, grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesKeyword_5_0());
+                        
+                    otherlv_16=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRepositoryComponent_Impl1558); 
+
+                        	newLeafNode(otherlv_16, grammarAccess.getRepositoryComponent_ImplAccess().getLeftCurlyBracketKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:715:1: ( (lv_requiredRoles_17_0= ruleRequiredRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:716:1: (lv_requiredRoles_17_0= ruleRequiredRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:716:1: (lv_requiredRoles_17_0= ruleRequiredRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:717:3: lv_requiredRoles_17_0= ruleRequiredRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleRepositoryComponent_Impl1579);
+                    lv_requiredRoles_17_0=ruleRequiredRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"requiredRoles",
+                            		lv_requiredRoles_17_0, 
+                            		"RequiredRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:733:2: (otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) ) )*
+                    loop18:
+                    do {
+                        int alt18=2;
+                        int LA18_0 = input.LA(1);
+
+                        if ( (LA18_0==14) ) {
+                            alt18=1;
+                        }
+
+
+                        switch (alt18) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:733:4: otherlv_18= ',' ( (lv_requiredRoles_19_0= ruleRequiredRole ) )
+                    	    {
+                    	    otherlv_18=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRepositoryComponent_Impl1592); 
+
+                    	        	newLeafNode(otherlv_18, grammarAccess.getRepositoryComponent_ImplAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:737:1: ( (lv_requiredRoles_19_0= ruleRequiredRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:738:1: (lv_requiredRoles_19_0= ruleRequiredRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:738:1: (lv_requiredRoles_19_0= ruleRequiredRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:739:3: lv_requiredRoles_19_0= ruleRequiredRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getRepositoryComponent_ImplAccess().getRequiredRolesRequiredRoleParserRuleCall_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleRepositoryComponent_Impl1613);
+                    	    lv_requiredRoles_19_0=ruleRequiredRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getRepositoryComponent_ImplRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"requiredRoles",
+                    	            		lv_requiredRoles_19_0, 
+                    	            		"RequiredRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop18;
+                        }
+                    } while (true);
+
+                    otherlv_20=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepositoryComponent_Impl1627); 
+
+                        	newLeafNode(otherlv_20, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_21=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRepositoryComponent_Impl1641); 
+
+                	newLeafNode(otherlv_21, grammarAccess.getRepositoryComponent_ImplAccess().getRightCurlyBracketKeyword_6());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRepositoryComponent_Impl"
+
+
+    // $ANTLR start "entryRuleCollectionDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:771:1: entryRuleCollectionDataType returns [EObject current=null] : iv_ruleCollectionDataType= ruleCollectionDataType EOF ;
+    public final EObject entryRuleCollectionDataType() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCollectionDataType = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:772:2: (iv_ruleCollectionDataType= ruleCollectionDataType EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:773:2: iv_ruleCollectionDataType= ruleCollectionDataType EOF
+            {
+             newCompositeNode(grammarAccess.getCollectionDataTypeRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleCollectionDataType_in_entryRuleCollectionDataType1677);
+            iv_ruleCollectionDataType=ruleCollectionDataType();
+
+            state._fsp--;
+
+             current =iv_ruleCollectionDataType; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCollectionDataType1687); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCollectionDataType"
+
+
+    // $ANTLR start "ruleCollectionDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:780:1: ruleCollectionDataType returns [EObject current=null] : (otherlv_0= 'CollectionDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'innerType' ( ( ruleEString ) ) otherlv_5= '}' ) ;
+    public final EObject ruleCollectionDataType() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:783:28: ( (otherlv_0= 'CollectionDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'innerType' ( ( ruleEString ) ) otherlv_5= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:784:1: (otherlv_0= 'CollectionDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'innerType' ( ( ruleEString ) ) otherlv_5= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:784:1: (otherlv_0= 'CollectionDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'innerType' ( ( ruleEString ) ) otherlv_5= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:784:3: otherlv_0= 'CollectionDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'innerType' ( ( ruleEString ) ) otherlv_5= '}'
+            {
+            otherlv_0=(Token)match(input,27,FollowSets000.FOLLOW_27_in_ruleCollectionDataType1724); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getCollectionDataTypeAccess().getCollectionDataTypeKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:788:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:789:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:789:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:790:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getCollectionDataTypeAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCollectionDataType1745);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getCollectionDataTypeRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleCollectionDataType1757); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getCollectionDataTypeAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,28,FollowSets000.FOLLOW_28_in_ruleCollectionDataType1769); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getCollectionDataTypeAccess().getInnerTypeKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:814:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:815:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:815:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:816:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getCollectionDataTypeRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getCollectionDataTypeAccess().getInnerTypeDataTypeCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCollectionDataType1792);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleCollectionDataType1804); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getCollectionDataTypeAccess().getRightCurlyBracketKeyword_5());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCollectionDataType"
+
+
+    // $ANTLR start "entryRuleCompositeDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:841:1: entryRuleCompositeDataType returns [EObject current=null] : iv_ruleCompositeDataType= ruleCompositeDataType EOF ;
+    public final EObject entryRuleCompositeDataType() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCompositeDataType = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:842:2: (iv_ruleCompositeDataType= ruleCompositeDataType EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:843:2: iv_ruleCompositeDataType= ruleCompositeDataType EOF
+            {
+             newCompositeNode(grammarAccess.getCompositeDataTypeRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleCompositeDataType_in_entryRuleCompositeDataType1840);
+            iv_ruleCompositeDataType=ruleCompositeDataType();
+
+            state._fsp--;
+
+             current =iv_ruleCompositeDataType; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCompositeDataType1850); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCompositeDataType"
+
+
+    // $ANTLR start "ruleCompositeDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:850:1: ruleCompositeDataType returns [EObject current=null] : (otherlv_0= 'CompositeDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )? otherlv_15= '}' ) ;
+    public final EObject ruleCompositeDataType() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_innerDeclarations_11_0 = null;
+
+        EObject lv_innerDeclarations_13_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:853:28: ( (otherlv_0= 'CompositeDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )? otherlv_15= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:854:1: (otherlv_0= 'CompositeDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )? otherlv_15= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:854:1: (otherlv_0= 'CompositeDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )? otherlv_15= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:854:3: otherlv_0= 'CompositeDataType' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )? (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )? otherlv_15= '}'
+            {
+            otherlv_0=(Token)match(input,29,FollowSets000.FOLLOW_29_in_ruleCompositeDataType1887); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getCompositeDataTypeAccess().getCompositeDataTypeKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:858:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:859:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:859:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:860:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeDataType1908);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleCompositeDataType1920); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:880:1: (otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')' )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==30) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:880:3: otherlv_3= 'parentTypes' otherlv_4= '(' ( ( ruleEString ) ) (otherlv_6= ',' ( ( ruleEString ) ) )* otherlv_8= ')'
+                    {
+                    otherlv_3=(Token)match(input,30,FollowSets000.FOLLOW_30_in_ruleCompositeDataType1933); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getCompositeDataTypeAccess().getParentTypesKeyword_3_0());
+                        
+                    otherlv_4=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleCompositeDataType1945); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getCompositeDataTypeAccess().getLeftParenthesisKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:888:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:889:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:889:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:890:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getCompositeDataTypeRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeDataType1968);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:903:2: (otherlv_6= ',' ( ( ruleEString ) ) )*
+                    loop20:
+                    do {
+                        int alt20=2;
+                        int LA20_0 = input.LA(1);
+
+                        if ( (LA20_0==14) ) {
+                            alt20=1;
+                        }
+
+
+                        switch (alt20) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:903:4: otherlv_6= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCompositeDataType1981); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:907:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:908:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:908:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:909:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getCompositeDataTypeRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getParentTypesCompositeDataTypeCrossReference_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeDataType2004);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop20;
+                        }
+                    } while (true);
+
+                    otherlv_8=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleCompositeDataType2018); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getCompositeDataTypeAccess().getRightParenthesisKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:926:3: (otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}' )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==31) ) {
+                alt23=1;
+            }
+            switch (alt23) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:926:5: otherlv_9= 'innerDeclarations' otherlv_10= '{' ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) ) (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )* otherlv_14= '}'
+                    {
+                    otherlv_9=(Token)match(input,31,FollowSets000.FOLLOW_31_in_ruleCompositeDataType2033); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsKeyword_4_0());
+                        
+                    otherlv_10=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleCompositeDataType2045); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getCompositeDataTypeAccess().getLeftCurlyBracketKeyword_4_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:934:1: ( (lv_innerDeclarations_11_0= ruleInnerDeclaration ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:935:1: (lv_innerDeclarations_11_0= ruleInnerDeclaration )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:935:1: (lv_innerDeclarations_11_0= ruleInnerDeclaration )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:936:3: lv_innerDeclarations_11_0= ruleInnerDeclaration
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleInnerDeclaration_in_ruleCompositeDataType2066);
+                    lv_innerDeclarations_11_0=ruleInnerDeclaration();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"innerDeclarations",
+                            		lv_innerDeclarations_11_0, 
+                            		"InnerDeclaration");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:952:2: (otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) ) )*
+                    loop22:
+                    do {
+                        int alt22=2;
+                        int LA22_0 = input.LA(1);
+
+                        if ( (LA22_0==14) ) {
+                            alt22=1;
+                        }
+
+
+                        switch (alt22) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:952:4: otherlv_12= ',' ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCompositeDataType2079); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getCompositeDataTypeAccess().getCommaKeyword_4_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:956:1: ( (lv_innerDeclarations_13_0= ruleInnerDeclaration ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:957:1: (lv_innerDeclarations_13_0= ruleInnerDeclaration )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:957:1: (lv_innerDeclarations_13_0= ruleInnerDeclaration )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:958:3: lv_innerDeclarations_13_0= ruleInnerDeclaration
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getCompositeDataTypeAccess().getInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleInnerDeclaration_in_ruleCompositeDataType2100);
+                    	    lv_innerDeclarations_13_0=ruleInnerDeclaration();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getCompositeDataTypeRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"innerDeclarations",
+                    	            		lv_innerDeclarations_13_0, 
+                    	            		"InnerDeclaration");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop22;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleCompositeDataType2114); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_4_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_15=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleCompositeDataType2128); 
+
+                	newLeafNode(otherlv_15, grammarAccess.getCompositeDataTypeAccess().getRightCurlyBracketKeyword_5());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCompositeDataType"
+
+
+    // $ANTLR start "entryRulePrimitiveDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:990:1: entryRulePrimitiveDataType returns [EObject current=null] : iv_rulePrimitiveDataType= rulePrimitiveDataType EOF ;
+    public final EObject entryRulePrimitiveDataType() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulePrimitiveDataType = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:991:2: (iv_rulePrimitiveDataType= rulePrimitiveDataType EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:992:2: iv_rulePrimitiveDataType= rulePrimitiveDataType EOF
+            {
+             newCompositeNode(grammarAccess.getPrimitiveDataTypeRule()); 
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveDataType_in_entryRulePrimitiveDataType2164);
+            iv_rulePrimitiveDataType=rulePrimitiveDataType();
+
+            state._fsp--;
+
+             current =iv_rulePrimitiveDataType; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRulePrimitiveDataType2174); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRulePrimitiveDataType"
+
+
+    // $ANTLR start "rulePrimitiveDataType"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:999:1: rulePrimitiveDataType returns [EObject current=null] : (otherlv_0= 'PrimitiveDataType' otherlv_1= '{' otherlv_2= 'type' ( (lv_type_3_0= rulePrimitiveTypeEnum ) ) otherlv_4= 'ref' ( (lv_name_5_0= ruleEString ) ) otherlv_6= '}' ) ;
+    public final EObject rulePrimitiveDataType() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Enumerator lv_type_3_0 = null;
+
+        AntlrDatatypeRuleToken lv_name_5_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1002:28: ( (otherlv_0= 'PrimitiveDataType' otherlv_1= '{' otherlv_2= 'type' ( (lv_type_3_0= rulePrimitiveTypeEnum ) ) otherlv_4= 'ref' ( (lv_name_5_0= ruleEString ) ) otherlv_6= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1003:1: (otherlv_0= 'PrimitiveDataType' otherlv_1= '{' otherlv_2= 'type' ( (lv_type_3_0= rulePrimitiveTypeEnum ) ) otherlv_4= 'ref' ( (lv_name_5_0= ruleEString ) ) otherlv_6= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1003:1: (otherlv_0= 'PrimitiveDataType' otherlv_1= '{' otherlv_2= 'type' ( (lv_type_3_0= rulePrimitiveTypeEnum ) ) otherlv_4= 'ref' ( (lv_name_5_0= ruleEString ) ) otherlv_6= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1003:3: otherlv_0= 'PrimitiveDataType' otherlv_1= '{' otherlv_2= 'type' ( (lv_type_3_0= rulePrimitiveTypeEnum ) ) otherlv_4= 'ref' ( (lv_name_5_0= ruleEString ) ) otherlv_6= '}'
+            {
+            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_32_in_rulePrimitiveDataType2211); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getPrimitiveDataTypeAccess().getPrimitiveDataTypeKeyword_0());
+                
+            otherlv_1=(Token)match(input,12,FollowSets000.FOLLOW_12_in_rulePrimitiveDataType2223); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getPrimitiveDataTypeAccess().getLeftCurlyBracketKeyword_1());
+                
+            otherlv_2=(Token)match(input,33,FollowSets000.FOLLOW_33_in_rulePrimitiveDataType2235); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getPrimitiveDataTypeAccess().getTypeKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1015:1: ( (lv_type_3_0= rulePrimitiveTypeEnum ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1016:1: (lv_type_3_0= rulePrimitiveTypeEnum )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1016:1: (lv_type_3_0= rulePrimitiveTypeEnum )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1017:3: lv_type_3_0= rulePrimitiveTypeEnum
+            {
+             
+            	        newCompositeNode(grammarAccess.getPrimitiveDataTypeAccess().getTypePrimitiveTypeEnumEnumRuleCall_3_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_rulePrimitiveTypeEnum_in_rulePrimitiveDataType2256);
+            lv_type_3_0=rulePrimitiveTypeEnum();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getPrimitiveDataTypeRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"type",
+                    		lv_type_3_0, 
+                    		"PrimitiveTypeEnum");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_4=(Token)match(input,34,FollowSets000.FOLLOW_34_in_rulePrimitiveDataType2268); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getPrimitiveDataTypeAccess().getRefKeyword_4());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1037:1: ( (lv_name_5_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1038:1: (lv_name_5_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1038:1: (lv_name_5_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1039:3: lv_name_5_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getPrimitiveDataTypeAccess().getNameEStringParserRuleCall_5_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_rulePrimitiveDataType2289);
+            lv_name_5_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getPrimitiveDataTypeRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_5_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_6=(Token)match(input,15,FollowSets000.FOLLOW_15_in_rulePrimitiveDataType2301); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getPrimitiveDataTypeAccess().getRightCurlyBracketKeyword_6());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "rulePrimitiveDataType"
+
+
+    // $ANTLR start "entryRuleInnerDeclaration"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1067:1: entryRuleInnerDeclaration returns [EObject current=null] : iv_ruleInnerDeclaration= ruleInnerDeclaration EOF ;
+    public final EObject entryRuleInnerDeclaration() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleInnerDeclaration = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1068:2: (iv_ruleInnerDeclaration= ruleInnerDeclaration EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1069:2: iv_ruleInnerDeclaration= ruleInnerDeclaration EOF
+            {
+             newCompositeNode(grammarAccess.getInnerDeclarationRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleInnerDeclaration_in_entryRuleInnerDeclaration2337);
+            iv_ruleInnerDeclaration=ruleInnerDeclaration();
+
+            state._fsp--;
+
+             current =iv_ruleInnerDeclaration; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleInnerDeclaration2347); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleInnerDeclaration"
+
+
+    // $ANTLR start "ruleInnerDeclaration"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1076:1: ruleInnerDeclaration returns [EObject current=null] : (otherlv_0= 'InnerDeclaration' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'dataType' ( ( ruleEString ) ) otherlv_5= '}' ) ;
+    public final EObject ruleInnerDeclaration() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1079:28: ( (otherlv_0= 'InnerDeclaration' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'dataType' ( ( ruleEString ) ) otherlv_5= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1080:1: (otherlv_0= 'InnerDeclaration' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'dataType' ( ( ruleEString ) ) otherlv_5= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1080:1: (otherlv_0= 'InnerDeclaration' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'dataType' ( ( ruleEString ) ) otherlv_5= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1080:3: otherlv_0= 'InnerDeclaration' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'dataType' ( ( ruleEString ) ) otherlv_5= '}'
+            {
+            otherlv_0=(Token)match(input,35,FollowSets000.FOLLOW_35_in_ruleInnerDeclaration2384); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getInnerDeclarationAccess().getInnerDeclarationKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1084:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1085:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1085:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1086:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getInnerDeclarationAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleInnerDeclaration2405);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getInnerDeclarationRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleInnerDeclaration2417); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getInnerDeclarationAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,36,FollowSets000.FOLLOW_36_in_ruleInnerDeclaration2429); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getInnerDeclarationAccess().getDataTypeKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1110:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1111:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1111:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1112:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getInnerDeclarationRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getInnerDeclarationAccess().getDataTypeDataTypeCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleInnerDeclaration2452);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleInnerDeclaration2464); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getInnerDeclarationAccess().getRightCurlyBracketKeyword_5());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleInnerDeclaration"
+
+
+    // $ANTLR start "entryRuleSignature"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1137:1: entryRuleSignature returns [EObject current=null] : iv_ruleSignature= ruleSignature EOF ;
+    public final EObject entryRuleSignature() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSignature = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1138:2: (iv_ruleSignature= ruleSignature EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1139:2: iv_ruleSignature= ruleSignature EOF
+            {
+             newCompositeNode(grammarAccess.getSignatureRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleSignature_in_entryRuleSignature2500);
+            iv_ruleSignature=ruleSignature();
+
+            state._fsp--;
+
+             current =iv_ruleSignature; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSignature2510); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSignature"
+
+
+    // $ANTLR start "ruleSignature"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1146:1: ruleSignature returns [EObject current=null] : ( ( ( ( ruleEString ) ) | otherlv_1= 'void' ) ( (lv_name_2_0= ruleEString ) ) otherlv_3= '(' ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? otherlv_7= ')' ) ;
+    public final EObject ruleSignature() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        AntlrDatatypeRuleToken lv_name_2_0 = null;
+
+        EObject lv_parameters_4_0 = null;
+
+        EObject lv_parameters_6_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1149:28: ( ( ( ( ( ruleEString ) ) | otherlv_1= 'void' ) ( (lv_name_2_0= ruleEString ) ) otherlv_3= '(' ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? otherlv_7= ')' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:1: ( ( ( ( ruleEString ) ) | otherlv_1= 'void' ) ( (lv_name_2_0= ruleEString ) ) otherlv_3= '(' ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? otherlv_7= ')' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:1: ( ( ( ( ruleEString ) ) | otherlv_1= 'void' ) ( (lv_name_2_0= ruleEString ) ) otherlv_3= '(' ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? otherlv_7= ')' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:2: ( ( ( ruleEString ) ) | otherlv_1= 'void' ) ( (lv_name_2_0= ruleEString ) ) otherlv_3= '(' ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )? otherlv_7= ')'
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:2: ( ( ( ruleEString ) ) | otherlv_1= 'void' )
+            int alt24=2;
+            int LA24_0 = input.LA(1);
+
+            if ( ((LA24_0>=RULE_STRING && LA24_0<=RULE_ID)) ) {
+                alt24=1;
+            }
+            else if ( (LA24_0==37) ) {
+                alt24=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 24, 0, input);
+
+                throw nvae;
+            }
+            switch (alt24) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:3: ( ( ruleEString ) )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1150:3: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1151:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1151:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1152:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getSignatureRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getSignatureAccess().getReturnTypeDataTypeCrossReference_0_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleSignature2559);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1166:7: otherlv_1= 'void'
+                    {
+                    otherlv_1=(Token)match(input,37,FollowSets000.FOLLOW_37_in_ruleSignature2577); 
+
+                        	newLeafNode(otherlv_1, grammarAccess.getSignatureAccess().getVoidKeyword_0_1());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1170:2: ( (lv_name_2_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1171:1: (lv_name_2_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1171:1: (lv_name_2_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1172:3: lv_name_2_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getSignatureAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleSignature2599);
+            lv_name_2_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getSignatureRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_2_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleSignature2611); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getSignatureAccess().getLeftParenthesisKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1192:1: ( ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )* )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( ((LA26_0>=RULE_STRING && LA26_0<=RULE_ID)) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1192:2: ( (lv_parameters_4_0= ruleParameter ) ) (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )*
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1192:2: ( (lv_parameters_4_0= ruleParameter ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1193:1: (lv_parameters_4_0= ruleParameter )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1193:1: (lv_parameters_4_0= ruleParameter )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1194:3: lv_parameters_4_0= ruleParameter
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleParameter_in_ruleSignature2633);
+                    lv_parameters_4_0=ruleParameter();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getSignatureRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"parameters",
+                            		lv_parameters_4_0, 
+                            		"Parameter");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1210:2: (otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) ) )*
+                    loop25:
+                    do {
+                        int alt25=2;
+                        int LA25_0 = input.LA(1);
+
+                        if ( (LA25_0==14) ) {
+                            alt25=1;
+                        }
+
+
+                        switch (alt25) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1210:4: otherlv_5= ',' ( (lv_parameters_6_0= ruleParameter ) )
+                    	    {
+                    	    otherlv_5=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleSignature2646); 
+
+                    	        	newLeafNode(otherlv_5, grammarAccess.getSignatureAccess().getCommaKeyword_3_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1214:1: ( (lv_parameters_6_0= ruleParameter ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1215:1: (lv_parameters_6_0= ruleParameter )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1215:1: (lv_parameters_6_0= ruleParameter )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1216:3: lv_parameters_6_0= ruleParameter
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getSignatureAccess().getParametersParameterParserRuleCall_3_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleParameter_in_ruleSignature2667);
+                    	    lv_parameters_6_0=ruleParameter();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getSignatureRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"parameters",
+                    	            		lv_parameters_6_0, 
+                    	            		"Parameter");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop25;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_7=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleSignature2683); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getSignatureAccess().getRightParenthesisKeyword_4());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSignature"
+
+
+    // $ANTLR start "entryRuleParameter"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1244:1: entryRuleParameter returns [EObject current=null] : iv_ruleParameter= ruleParameter EOF ;
+    public final EObject entryRuleParameter() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleParameter = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1245:2: (iv_ruleParameter= ruleParameter EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1246:2: iv_ruleParameter= ruleParameter EOF
+            {
+             newCompositeNode(grammarAccess.getParameterRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleParameter_in_entryRuleParameter2719);
+            iv_ruleParameter=ruleParameter();
+
+            state._fsp--;
+
+             current =iv_ruleParameter; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleParameter2729); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleParameter"
+
+
+    // $ANTLR start "ruleParameter"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1253:1: ruleParameter returns [EObject current=null] : ( ( ( ruleEString ) ) ( (lv_name_1_0= ruleEString ) ) ) ;
+    public final EObject ruleParameter() throws RecognitionException {
+        EObject current = null;
+
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1256:28: ( ( ( ( ruleEString ) ) ( (lv_name_1_0= ruleEString ) ) ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1257:1: ( ( ( ruleEString ) ) ( (lv_name_1_0= ruleEString ) ) )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1257:1: ( ( ( ruleEString ) ) ( (lv_name_1_0= ruleEString ) ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1257:2: ( ( ruleEString ) ) ( (lv_name_1_0= ruleEString ) )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1257:2: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1258:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1258:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1259:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getParameterRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getParameterAccess().getDataTypeDataTypeCrossReference_0_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleParameter2777);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1272:2: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1273:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1273:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1274:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getParameterAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleParameter2798);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getParameterRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleParameter"
+
+
+    // $ANTLR start "entryRuleProvidedRole"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1298:1: entryRuleProvidedRole returns [EObject current=null] : iv_ruleProvidedRole= ruleProvidedRole EOF ;
+    public final EObject entryRuleProvidedRole() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleProvidedRole = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1299:2: (iv_ruleProvidedRole= ruleProvidedRole EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1300:2: iv_ruleProvidedRole= ruleProvidedRole EOF
+            {
+             newCompositeNode(grammarAccess.getProvidedRoleRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_entryRuleProvidedRole2834);
+            iv_ruleProvidedRole=ruleProvidedRole();
+
+            state._fsp--;
+
+             current =iv_ruleProvidedRole; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleProvidedRole2844); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleProvidedRole"
+
+
+    // $ANTLR start "ruleProvidedRole"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1307:1: ruleProvidedRole returns [EObject current=null] : ( () otherlv_1= 'provides' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* ) ;
+    public final EObject ruleProvidedRole() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1310:28: ( ( () otherlv_1= 'provides' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1311:1: ( () otherlv_1= 'provides' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1311:1: ( () otherlv_1= 'provides' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1311:2: () otherlv_1= 'provides' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )*
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1311:2: ()
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1312:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getProvidedRoleAccess().getProvidedRoleAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,38,FollowSets000.FOLLOW_38_in_ruleProvidedRole2890); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getProvidedRoleAccess().getProvidesKeyword_1());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1321:1: ( ( ( ruleEString ) ) (otherlv_3= ',' )? )*
+            loop28:
+            do {
+                int alt28=2;
+                int LA28_0 = input.LA(1);
+
+                if ( ((LA28_0>=RULE_STRING && LA28_0<=RULE_ID)) ) {
+                    alt28=1;
+                }
+
+
+                switch (alt28) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1321:2: ( ( ruleEString ) ) (otherlv_3= ',' )?
+            	    {
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1321:2: ( ( ruleEString ) )
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1322:1: ( ruleEString )
+            	    {
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1322:1: ( ruleEString )
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1323:3: ruleEString
+            	    {
+
+            	    			if (current==null) {
+            	    	            current = createModelElement(grammarAccess.getProvidedRoleRule());
+            	    	        }
+            	            
+            	     
+            	    	        newCompositeNode(grammarAccess.getProvidedRoleAccess().getInterfaceInterfaceCrossReference_2_0_0()); 
+            	    	    
+            	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleProvidedRole2914);
+            	    ruleEString();
+
+            	    state._fsp--;
+
+            	     
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1336:2: (otherlv_3= ',' )?
+            	    int alt27=2;
+            	    int LA27_0 = input.LA(1);
+
+            	    if ( (LA27_0==14) ) {
+            	        int LA27_1 = input.LA(2);
+
+            	        if ( (LA27_1==EOF||(LA27_1>=RULE_STRING && LA27_1<=RULE_ID)||LA27_1==12||(LA27_1>=14 && LA27_1<=15)||LA27_1==39) ) {
+            	            alt27=1;
+            	        }
+            	    }
+            	    switch (alt27) {
+            	        case 1 :
+            	            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1336:4: otherlv_3= ','
+            	            {
+            	            otherlv_3=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleProvidedRole2927); 
+
+            	                	newLeafNode(otherlv_3, grammarAccess.getProvidedRoleAccess().getCommaKeyword_2_1());
+            	                
+
+            	            }
+            	            break;
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop28;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleProvidedRole"
+
+
+    // $ANTLR start "entryRuleRequiredRole"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1348:1: entryRuleRequiredRole returns [EObject current=null] : iv_ruleRequiredRole= ruleRequiredRole EOF ;
+    public final EObject entryRuleRequiredRole() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRequiredRole = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1349:2: (iv_ruleRequiredRole= ruleRequiredRole EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1350:2: iv_ruleRequiredRole= ruleRequiredRole EOF
+            {
+             newCompositeNode(grammarAccess.getRequiredRoleRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_entryRuleRequiredRole2967);
+            iv_ruleRequiredRole=ruleRequiredRole();
+
+            state._fsp--;
+
+             current =iv_ruleRequiredRole; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRequiredRole2977); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRequiredRole"
+
+
+    // $ANTLR start "ruleRequiredRole"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1357:1: ruleRequiredRole returns [EObject current=null] : ( () otherlv_1= 'requires' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* ) ;
+    public final EObject ruleRequiredRole() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_3=null;
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1360:28: ( ( () otherlv_1= 'requires' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1361:1: ( () otherlv_1= 'requires' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1361:1: ( () otherlv_1= 'requires' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )* )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1361:2: () otherlv_1= 'requires' ( ( ( ruleEString ) ) (otherlv_3= ',' )? )*
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1361:2: ()
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1362:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getRequiredRoleAccess().getRequiredRoleAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,39,FollowSets000.FOLLOW_39_in_ruleRequiredRole3023); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getRequiredRoleAccess().getRequiresKeyword_1());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1371:1: ( ( ( ruleEString ) ) (otherlv_3= ',' )? )*
+            loop30:
+            do {
+                int alt30=2;
+                int LA30_0 = input.LA(1);
+
+                if ( ((LA30_0>=RULE_STRING && LA30_0<=RULE_ID)) ) {
+                    alt30=1;
+                }
+
+
+                switch (alt30) {
+            	case 1 :
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1371:2: ( ( ruleEString ) ) (otherlv_3= ',' )?
+            	    {
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1371:2: ( ( ruleEString ) )
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1372:1: ( ruleEString )
+            	    {
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1372:1: ( ruleEString )
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1373:3: ruleEString
+            	    {
+
+            	    			if (current==null) {
+            	    	            current = createModelElement(grammarAccess.getRequiredRoleRule());
+            	    	        }
+            	            
+            	     
+            	    	        newCompositeNode(grammarAccess.getRequiredRoleAccess().getInterfaceInterfaceCrossReference_2_0_0()); 
+            	    	    
+            	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRequiredRole3047);
+            	    ruleEString();
+
+            	    state._fsp--;
+
+            	     
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1386:2: (otherlv_3= ',' )?
+            	    int alt29=2;
+            	    int LA29_0 = input.LA(1);
+
+            	    if ( (LA29_0==14) ) {
+            	        int LA29_1 = input.LA(2);
+
+            	        if ( (LA29_1==EOF||(LA29_1>=RULE_STRING && LA29_1<=RULE_ID)||LA29_1==12||(LA29_1>=14 && LA29_1<=15)) ) {
+            	            alt29=1;
+            	        }
+            	    }
+            	    switch (alt29) {
+            	        case 1 :
+            	            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1386:4: otherlv_3= ','
+            	            {
+            	            otherlv_3=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleRequiredRole3060); 
+
+            	                	newLeafNode(otherlv_3, grammarAccess.getRequiredRoleAccess().getCommaKeyword_2_1());
+            	                
+
+            	            }
+            	            break;
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop30;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRequiredRole"
+
+
+    // $ANTLR start "entryRuleBasicComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1398:1: entryRuleBasicComponent returns [EObject current=null] : iv_ruleBasicComponent= ruleBasicComponent EOF ;
+    public final EObject entryRuleBasicComponent() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleBasicComponent = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1399:2: (iv_ruleBasicComponent= ruleBasicComponent EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1400:2: iv_ruleBasicComponent= ruleBasicComponent EOF
+            {
+             newCompositeNode(grammarAccess.getBasicComponentRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleBasicComponent_in_entryRuleBasicComponent3100);
+            iv_ruleBasicComponent=ruleBasicComponent();
+
+            state._fsp--;
+
+             current =iv_ruleBasicComponent; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleBasicComponent3110); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleBasicComponent"
+
+
+    // $ANTLR start "ruleBasicComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1407:1: ruleBasicComponent returns [EObject current=null] : (otherlv_0= 'BasicComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? otherlv_15= '}' ) ;
+    public final EObject ruleBasicComponent() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_3=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_providedRoles_2_0 = null;
+
+        EObject lv_providedRoles_4_0 = null;
+
+        EObject lv_requiredRoles_5_0 = null;
+
+        EObject lv_requiredRoles_7_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1410:28: ( (otherlv_0= 'BasicComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? otherlv_15= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1411:1: (otherlv_0= 'BasicComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? otherlv_15= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1411:1: (otherlv_0= 'BasicComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? otherlv_15= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1411:3: otherlv_0= 'BasicComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? otherlv_15= '}'
+            {
+            otherlv_0=(Token)match(input,40,FollowSets000.FOLLOW_40_in_ruleBasicComponent3147); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getBasicComponentAccess().getBasicComponentKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1415:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1416:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1416:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1417:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getBasicComponentAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleBasicComponent3168);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1433:2: ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==38) ) {
+                alt32=1;
+            }
+            switch (alt32) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1433:3: ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )*
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1433:3: ( (lv_providedRoles_2_0= ruleProvidedRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1434:1: (lv_providedRoles_2_0= ruleProvidedRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1434:1: (lv_providedRoles_2_0= ruleProvidedRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1435:3: lv_providedRoles_2_0= ruleProvidedRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleBasicComponent3190);
+                    lv_providedRoles_2_0=ruleProvidedRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"providedRoles",
+                            		lv_providedRoles_2_0, 
+                            		"ProvidedRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1451:2: (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )*
+                    loop31:
+                    do {
+                        int alt31=2;
+                        int LA31_0 = input.LA(1);
+
+                        if ( (LA31_0==14) ) {
+                            alt31=1;
+                        }
+
+
+                        switch (alt31) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1451:4: otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) )
+                    	    {
+                    	    otherlv_3=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleBasicComponent3203); 
+
+                    	        	newLeafNode(otherlv_3, grammarAccess.getBasicComponentAccess().getCommaKeyword_2_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1455:1: ( (lv_providedRoles_4_0= ruleProvidedRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1456:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1456:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1457:3: lv_providedRoles_4_0= ruleProvidedRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleBasicComponent3224);
+                    	    lv_providedRoles_4_0=ruleProvidedRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"providedRoles",
+                    	            		lv_providedRoles_4_0, 
+                    	            		"ProvidedRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop31;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1473:6: ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0==39) ) {
+                alt34=1;
+            }
+            switch (alt34) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1473:7: ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )*
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1473:7: ( (lv_requiredRoles_5_0= ruleRequiredRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1474:1: (lv_requiredRoles_5_0= ruleRequiredRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1474:1: (lv_requiredRoles_5_0= ruleRequiredRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1475:3: lv_requiredRoles_5_0= ruleRequiredRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleBasicComponent3250);
+                    lv_requiredRoles_5_0=ruleRequiredRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"requiredRoles",
+                            		lv_requiredRoles_5_0, 
+                            		"RequiredRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1491:2: (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )*
+                    loop33:
+                    do {
+                        int alt33=2;
+                        int LA33_0 = input.LA(1);
+
+                        if ( (LA33_0==14) ) {
+                            alt33=1;
+                        }
+
+
+                        switch (alt33) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1491:4: otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleBasicComponent3263); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getBasicComponentAccess().getCommaKeyword_3_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1495:1: ( (lv_requiredRoles_7_0= ruleRequiredRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1496:1: (lv_requiredRoles_7_0= ruleRequiredRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1496:1: (lv_requiredRoles_7_0= ruleRequiredRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1497:3: lv_requiredRoles_7_0= ruleRequiredRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleBasicComponent3284);
+                    	    lv_requiredRoles_7_0=ruleRequiredRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getBasicComponentRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"requiredRoles",
+                    	            		lv_requiredRoles_7_0, 
+                    	            		"RequiredRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop33;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_8=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleBasicComponent3300); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getBasicComponentAccess().getLeftCurlyBracketKeyword_4());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1517:1: (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
+
+            if ( (LA36_0==24) ) {
+                alt36=1;
+            }
+            switch (alt36) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1517:3: otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')'
+                    {
+                    otherlv_9=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleBasicComponent3313); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getBasicComponentAccess().getRelationshipKeyword_5_0());
+                        
+                    otherlv_10=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleBasicComponent3325); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getBasicComponentAccess().getLeftParenthesisKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1525:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1526:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1526:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1527:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getBasicComponentRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleBasicComponent3348);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1540:2: (otherlv_12= ',' ( ( ruleEString ) ) )*
+                    loop35:
+                    do {
+                        int alt35=2;
+                        int LA35_0 = input.LA(1);
+
+                        if ( (LA35_0==14) ) {
+                            alt35=1;
+                        }
+
+
+                        switch (alt35) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1540:4: otherlv_12= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleBasicComponent3361); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getBasicComponentAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1544:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1545:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1545:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1546:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getBasicComponentRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getBasicComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleBasicComponent3384);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop35;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleBasicComponent3398); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getBasicComponentAccess().getRightParenthesisKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_15=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleBasicComponent3412); 
+
+                	newLeafNode(otherlv_15, grammarAccess.getBasicComponentAccess().getRightCurlyBracketKeyword_6());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBasicComponent"
+
+
+    // $ANTLR start "entryRuleCompositeComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1575:1: entryRuleCompositeComponent returns [EObject current=null] : iv_ruleCompositeComponent= ruleCompositeComponent EOF ;
+    public final EObject entryRuleCompositeComponent() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleCompositeComponent = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1576:2: (iv_ruleCompositeComponent= ruleCompositeComponent EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1577:2: iv_ruleCompositeComponent= ruleCompositeComponent EOF
+            {
+             newCompositeNode(grammarAccess.getCompositeComponentRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleCompositeComponent_in_entryRuleCompositeComponent3448);
+            iv_ruleCompositeComponent=ruleCompositeComponent();
+
+            state._fsp--;
+
+             current =iv_ruleCompositeComponent; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleCompositeComponent3458); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleCompositeComponent"
+
+
+    // $ANTLR start "ruleCompositeComponent"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1584:1: ruleCompositeComponent returns [EObject current=null] : (otherlv_0= 'CompositeComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )? otherlv_17= '}' ) ;
+    public final EObject ruleCompositeComponent() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_3=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_17=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_providedRoles_2_0 = null;
+
+        EObject lv_providedRoles_4_0 = null;
+
+        EObject lv_requiredRoles_5_0 = null;
+
+        EObject lv_requiredRoles_7_0 = null;
+
+        EObject lv_assembly_16_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1587:28: ( (otherlv_0= 'CompositeComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )? otherlv_17= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1588:1: (otherlv_0= 'CompositeComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )? otherlv_17= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1588:1: (otherlv_0= 'CompositeComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )? otherlv_17= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1588:3: otherlv_0= 'CompositeComponent' ( (lv_name_1_0= ruleEString ) ) ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )? ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )? otherlv_8= '{' (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )? (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )? otherlv_17= '}'
+            {
+            otherlv_0=(Token)match(input,41,FollowSets000.FOLLOW_41_in_ruleCompositeComponent3495); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getCompositeComponentAccess().getCompositeComponentKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1592:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1593:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1593:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1594:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeComponent3516);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1610:2: ( ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )* )?
+            int alt38=2;
+            int LA38_0 = input.LA(1);
+
+            if ( (LA38_0==38) ) {
+                alt38=1;
+            }
+            switch (alt38) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1610:3: ( (lv_providedRoles_2_0= ruleProvidedRole ) ) (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )*
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1610:3: ( (lv_providedRoles_2_0= ruleProvidedRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1611:1: (lv_providedRoles_2_0= ruleProvidedRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1611:1: (lv_providedRoles_2_0= ruleProvidedRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1612:3: lv_providedRoles_2_0= ruleProvidedRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleCompositeComponent3538);
+                    lv_providedRoles_2_0=ruleProvidedRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"providedRoles",
+                            		lv_providedRoles_2_0, 
+                            		"ProvidedRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1628:2: (otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) )*
+                    loop37:
+                    do {
+                        int alt37=2;
+                        int LA37_0 = input.LA(1);
+
+                        if ( (LA37_0==14) ) {
+                            alt37=1;
+                        }
+
+
+                        switch (alt37) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1628:4: otherlv_3= ',' ( (lv_providedRoles_4_0= ruleProvidedRole ) )
+                    	    {
+                    	    otherlv_3=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCompositeComponent3551); 
+
+                    	        	newLeafNode(otherlv_3, grammarAccess.getCompositeComponentAccess().getCommaKeyword_2_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1632:1: ( (lv_providedRoles_4_0= ruleProvidedRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1633:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1633:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1634:3: lv_providedRoles_4_0= ruleProvidedRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleCompositeComponent3572);
+                    	    lv_providedRoles_4_0=ruleProvidedRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"providedRoles",
+                    	            		lv_providedRoles_4_0, 
+                    	            		"ProvidedRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop37;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1650:6: ( ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )* )?
+            int alt40=2;
+            int LA40_0 = input.LA(1);
+
+            if ( (LA40_0==39) ) {
+                alt40=1;
+            }
+            switch (alt40) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1650:7: ( (lv_requiredRoles_5_0= ruleRequiredRole ) ) (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )*
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1650:7: ( (lv_requiredRoles_5_0= ruleRequiredRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1651:1: (lv_requiredRoles_5_0= ruleRequiredRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1651:1: (lv_requiredRoles_5_0= ruleRequiredRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1652:3: lv_requiredRoles_5_0= ruleRequiredRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_0_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleCompositeComponent3598);
+                    lv_requiredRoles_5_0=ruleRequiredRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"requiredRoles",
+                            		lv_requiredRoles_5_0, 
+                            		"RequiredRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1668:2: (otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) ) )*
+                    loop39:
+                    do {
+                        int alt39=2;
+                        int LA39_0 = input.LA(1);
+
+                        if ( (LA39_0==14) ) {
+                            alt39=1;
+                        }
+
+
+                        switch (alt39) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1668:4: otherlv_6= ',' ( (lv_requiredRoles_7_0= ruleRequiredRole ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCompositeComponent3611); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getCompositeComponentAccess().getCommaKeyword_3_1_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1672:1: ( (lv_requiredRoles_7_0= ruleRequiredRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1673:1: (lv_requiredRoles_7_0= ruleRequiredRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1673:1: (lv_requiredRoles_7_0= ruleRequiredRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1674:3: lv_requiredRoles_7_0= ruleRequiredRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleCompositeComponent3632);
+                    	    lv_requiredRoles_7_0=ruleRequiredRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"requiredRoles",
+                    	            		lv_requiredRoles_7_0, 
+                    	            		"RequiredRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop39;
+                        }
+                    } while (true);
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_8=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleCompositeComponent3648); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getCompositeComponentAccess().getLeftCurlyBracketKeyword_4());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1694:1: (otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')' )?
+            int alt42=2;
+            int LA42_0 = input.LA(1);
+
+            if ( (LA42_0==24) ) {
+                alt42=1;
+            }
+            switch (alt42) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1694:3: otherlv_9= 'relationship' otherlv_10= '(' ( ( ruleEString ) ) (otherlv_12= ',' ( ( ruleEString ) ) )* otherlv_14= ')'
+                    {
+                    otherlv_9=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleCompositeComponent3661); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getCompositeComponentAccess().getRelationshipKeyword_5_0());
+                        
+                    otherlv_10=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleCompositeComponent3673); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getCompositeComponentAccess().getLeftParenthesisKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1702:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1703:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1703:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1704:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getCompositeComponentRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeComponent3696);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1717:2: (otherlv_12= ',' ( ( ruleEString ) ) )*
+                    loop41:
+                    do {
+                        int alt41=2;
+                        int LA41_0 = input.LA(1);
+
+                        if ( (LA41_0==14) ) {
+                            alt41=1;
+                        }
+
+
+                        switch (alt41) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1717:4: otherlv_12= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleCompositeComponent3709); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getCompositeComponentAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1721:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1722:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1722:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1723:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getCompositeComponentRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleCompositeComponent3732);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop41;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleCompositeComponent3746); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getCompositeComponentAccess().getRightParenthesisKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1740:3: (otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) ) )?
+            int alt43=2;
+            int LA43_0 = input.LA(1);
+
+            if ( (LA43_0==42) ) {
+                alt43=1;
+            }
+            switch (alt43) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1740:5: otherlv_15= 'assembly' ( (lv_assembly_16_0= ruleComposedStructureAssembly ) )
+                    {
+                    otherlv_15=(Token)match(input,42,FollowSets000.FOLLOW_42_in_ruleCompositeComponent3761); 
+
+                        	newLeafNode(otherlv_15, grammarAccess.getCompositeComponentAccess().getAssemblyKeyword_6_0());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1744:1: ( (lv_assembly_16_0= ruleComposedStructureAssembly ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1745:1: (lv_assembly_16_0= ruleComposedStructureAssembly )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1745:1: (lv_assembly_16_0= ruleComposedStructureAssembly )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1746:3: lv_assembly_16_0= ruleComposedStructureAssembly
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getCompositeComponentAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleComposedStructureAssembly_in_ruleCompositeComponent3782);
+                    lv_assembly_16_0=ruleComposedStructureAssembly();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getCompositeComponentRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"assembly",
+                            		lv_assembly_16_0, 
+                            		"ComposedStructureAssembly");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_17=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleCompositeComponent3796); 
+
+                	newLeafNode(otherlv_17, grammarAccess.getCompositeComponentAccess().getRightCurlyBracketKeyword_7());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleCompositeComponent"
+
+
+    // $ANTLR start "entryRuleSubSystem"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1774:1: entryRuleSubSystem returns [EObject current=null] : iv_ruleSubSystem= ruleSubSystem EOF ;
+    public final EObject entryRuleSubSystem() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSubSystem = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1775:2: (iv_ruleSubSystem= ruleSubSystem EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1776:2: iv_ruleSubSystem= ruleSubSystem EOF
+            {
+             newCompositeNode(grammarAccess.getSubSystemRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleSubSystem_in_entryRuleSubSystem3832);
+            iv_ruleSubSystem=ruleSubSystem();
+
+            state._fsp--;
+
+             current =iv_ruleSubSystem; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleSubSystem3842); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSubSystem"
+
+
+    // $ANTLR start "ruleSubSystem"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1783:1: ruleSubSystem returns [EObject current=null] : (otherlv_0= 'SubSystem' ( (lv_name_1_0= ruleEString ) ) (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )? (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )? otherlv_14= '{' (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )? (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )? otherlv_23= '}' ) ;
+    public final EObject ruleSubSystem() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_11=null;
+        Token otherlv_13=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token otherlv_18=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token otherlv_23=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+        EObject lv_providedRoles_4_0 = null;
+
+        EObject lv_providedRoles_6_0 = null;
+
+        EObject lv_requiredRoles_10_0 = null;
+
+        EObject lv_requiredRoles_12_0 = null;
+
+        EObject lv_assembly_22_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1786:28: ( (otherlv_0= 'SubSystem' ( (lv_name_1_0= ruleEString ) ) (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )? (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )? otherlv_14= '{' (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )? (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )? otherlv_23= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1787:1: (otherlv_0= 'SubSystem' ( (lv_name_1_0= ruleEString ) ) (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )? (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )? otherlv_14= '{' (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )? (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )? otherlv_23= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1787:1: (otherlv_0= 'SubSystem' ( (lv_name_1_0= ruleEString ) ) (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )? (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )? otherlv_14= '{' (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )? (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )? otherlv_23= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1787:3: otherlv_0= 'SubSystem' ( (lv_name_1_0= ruleEString ) ) (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )? (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )? otherlv_14= '{' (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )? (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )? otherlv_23= '}'
+            {
+            otherlv_0=(Token)match(input,43,FollowSets000.FOLLOW_43_in_ruleSubSystem3879); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getSubSystemAccess().getSubSystemKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1791:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1792:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1792:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1793:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getSubSystemAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleSubSystem3900);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1809:2: (otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}' )?
+            int alt45=2;
+            int LA45_0 = input.LA(1);
+
+            if ( (LA45_0==25) ) {
+                alt45=1;
+            }
+            switch (alt45) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1809:4: otherlv_2= 'providedRoles' otherlv_3= '{' ( (lv_providedRoles_4_0= ruleProvidedRole ) ) (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )* otherlv_7= '}'
+                    {
+                    otherlv_2=(Token)match(input,25,FollowSets000.FOLLOW_25_in_ruleSubSystem3913); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getSubSystemAccess().getProvidedRolesKeyword_2_0());
+                        
+                    otherlv_3=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleSubSystem3925); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_2_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1817:1: ( (lv_providedRoles_4_0= ruleProvidedRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1818:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1818:1: (lv_providedRoles_4_0= ruleProvidedRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1819:3: lv_providedRoles_4_0= ruleProvidedRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleSubSystem3946);
+                    lv_providedRoles_4_0=ruleProvidedRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"providedRoles",
+                            		lv_providedRoles_4_0, 
+                            		"ProvidedRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1835:2: (otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) ) )*
+                    loop44:
+                    do {
+                        int alt44=2;
+                        int LA44_0 = input.LA(1);
+
+                        if ( (LA44_0==14) ) {
+                            alt44=1;
+                        }
+
+
+                        switch (alt44) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1835:4: otherlv_5= ',' ( (lv_providedRoles_6_0= ruleProvidedRole ) )
+                    	    {
+                    	    otherlv_5=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleSubSystem3959); 
+
+                    	        	newLeafNode(otherlv_5, grammarAccess.getSubSystemAccess().getCommaKeyword_2_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1839:1: ( (lv_providedRoles_6_0= ruleProvidedRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1840:1: (lv_providedRoles_6_0= ruleProvidedRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1840:1: (lv_providedRoles_6_0= ruleProvidedRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1841:3: lv_providedRoles_6_0= ruleProvidedRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getSubSystemAccess().getProvidedRolesProvidedRoleParserRuleCall_2_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleProvidedRole_in_ruleSubSystem3980);
+                    	    lv_providedRoles_6_0=ruleProvidedRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"providedRoles",
+                    	            		lv_providedRoles_6_0, 
+                    	            		"ProvidedRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop44;
+                        }
+                    } while (true);
+
+                    otherlv_7=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleSubSystem3994); 
+
+                        	newLeafNode(otherlv_7, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_2_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1861:3: (otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}' )?
+            int alt47=2;
+            int LA47_0 = input.LA(1);
+
+            if ( (LA47_0==26) ) {
+                alt47=1;
+            }
+            switch (alt47) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1861:5: otherlv_8= 'requiredRoles' otherlv_9= '{' ( (lv_requiredRoles_10_0= ruleRequiredRole ) ) (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )* otherlv_13= '}'
+                    {
+                    otherlv_8=(Token)match(input,26,FollowSets000.FOLLOW_26_in_ruleSubSystem4009); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getSubSystemAccess().getRequiredRolesKeyword_3_0());
+                        
+                    otherlv_9=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleSubSystem4021); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1869:1: ( (lv_requiredRoles_10_0= ruleRequiredRole ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1870:1: (lv_requiredRoles_10_0= ruleRequiredRole )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1870:1: (lv_requiredRoles_10_0= ruleRequiredRole )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1871:3: lv_requiredRoles_10_0= ruleRequiredRole
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleSubSystem4042);
+                    lv_requiredRoles_10_0=ruleRequiredRole();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"requiredRoles",
+                            		lv_requiredRoles_10_0, 
+                            		"RequiredRole");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1887:2: (otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) ) )*
+                    loop46:
+                    do {
+                        int alt46=2;
+                        int LA46_0 = input.LA(1);
+
+                        if ( (LA46_0==14) ) {
+                            alt46=1;
+                        }
+
+
+                        switch (alt46) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1887:4: otherlv_11= ',' ( (lv_requiredRoles_12_0= ruleRequiredRole ) )
+                    	    {
+                    	    otherlv_11=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleSubSystem4055); 
+
+                    	        	newLeafNode(otherlv_11, grammarAccess.getSubSystemAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1891:1: ( (lv_requiredRoles_12_0= ruleRequiredRole ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1892:1: (lv_requiredRoles_12_0= ruleRequiredRole )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1892:1: (lv_requiredRoles_12_0= ruleRequiredRole )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1893:3: lv_requiredRoles_12_0= ruleRequiredRole
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getSubSystemAccess().getRequiredRolesRequiredRoleParserRuleCall_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRequiredRole_in_ruleSubSystem4076);
+                    	    lv_requiredRoles_12_0=ruleRequiredRole();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"requiredRoles",
+                    	            		lv_requiredRoles_12_0, 
+                    	            		"RequiredRole");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop46;
+                        }
+                    } while (true);
+
+                    otherlv_13=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleSubSystem4090); 
+
+                        	newLeafNode(otherlv_13, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_14=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleSubSystem4104); 
+
+                	newLeafNode(otherlv_14, grammarAccess.getSubSystemAccess().getLeftCurlyBracketKeyword_4());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1917:1: (otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')' )?
+            int alt49=2;
+            int LA49_0 = input.LA(1);
+
+            if ( (LA49_0==24) ) {
+                alt49=1;
+            }
+            switch (alt49) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1917:3: otherlv_15= 'relationship' otherlv_16= '(' ( ( ruleEString ) ) (otherlv_18= ',' ( ( ruleEString ) ) )* otherlv_20= ')'
+                    {
+                    otherlv_15=(Token)match(input,24,FollowSets000.FOLLOW_24_in_ruleSubSystem4117); 
+
+                        	newLeafNode(otherlv_15, grammarAccess.getSubSystemAccess().getRelationshipKeyword_5_0());
+                        
+                    otherlv_16=(Token)match(input,20,FollowSets000.FOLLOW_20_in_ruleSubSystem4129); 
+
+                        	newLeafNode(otherlv_16, grammarAccess.getSubSystemAccess().getLeftParenthesisKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1925:1: ( ( ruleEString ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1926:1: ( ruleEString )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1926:1: ( ruleEString )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1927:3: ruleEString
+                    {
+
+                    			if (current==null) {
+                    	            current = createModelElement(grammarAccess.getSubSystemRule());
+                    	        }
+                            
+                     
+                    	        newCompositeNode(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleSubSystem4152);
+                    ruleEString();
+
+                    state._fsp--;
+
+                     
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1940:2: (otherlv_18= ',' ( ( ruleEString ) ) )*
+                    loop48:
+                    do {
+                        int alt48=2;
+                        int LA48_0 = input.LA(1);
+
+                        if ( (LA48_0==14) ) {
+                            alt48=1;
+                        }
+
+
+                        switch (alt48) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1940:4: otherlv_18= ',' ( ( ruleEString ) )
+                    	    {
+                    	    otherlv_18=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleSubSystem4165); 
+
+                    	        	newLeafNode(otherlv_18, grammarAccess.getSubSystemAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1944:1: ( ( ruleEString ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1945:1: ( ruleEString )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1945:1: ( ruleEString )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1946:3: ruleEString
+                    	    {
+
+                    	    			if (current==null) {
+                    	    	            current = createModelElement(grammarAccess.getSubSystemRule());
+                    	    	        }
+                    	            
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getSubSystemAccess().getRelationshipRelationshipCrossReference_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleSubSystem4188);
+                    	    ruleEString();
+
+                    	    state._fsp--;
+
+                    	     
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop48;
+                        }
+                    } while (true);
+
+                    otherlv_20=(Token)match(input,21,FollowSets000.FOLLOW_21_in_ruleSubSystem4202); 
+
+                        	newLeafNode(otherlv_20, grammarAccess.getSubSystemAccess().getRightParenthesisKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1963:3: (otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) ) )?
+            int alt50=2;
+            int LA50_0 = input.LA(1);
+
+            if ( (LA50_0==42) ) {
+                alt50=1;
+            }
+            switch (alt50) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1963:5: otherlv_21= 'assembly' ( (lv_assembly_22_0= ruleComposedStructureAssembly ) )
+                    {
+                    otherlv_21=(Token)match(input,42,FollowSets000.FOLLOW_42_in_ruleSubSystem4217); 
+
+                        	newLeafNode(otherlv_21, grammarAccess.getSubSystemAccess().getAssemblyKeyword_6_0());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1967:1: ( (lv_assembly_22_0= ruleComposedStructureAssembly ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1968:1: (lv_assembly_22_0= ruleComposedStructureAssembly )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1968:1: (lv_assembly_22_0= ruleComposedStructureAssembly )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1969:3: lv_assembly_22_0= ruleComposedStructureAssembly
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getSubSystemAccess().getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleComposedStructureAssembly_in_ruleSubSystem4238);
+                    lv_assembly_22_0=ruleComposedStructureAssembly();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getSubSystemRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"assembly",
+                            		lv_assembly_22_0, 
+                            		"ComposedStructureAssembly");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_23=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleSubSystem4252); 
+
+                	newLeafNode(otherlv_23, grammarAccess.getSubSystemAccess().getRightCurlyBracketKeyword_7());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSubSystem"
+
+
+    // $ANTLR start "entryRuleComposedStructureAssembly"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1997:1: entryRuleComposedStructureAssembly returns [EObject current=null] : iv_ruleComposedStructureAssembly= ruleComposedStructureAssembly EOF ;
+    public final EObject entryRuleComposedStructureAssembly() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleComposedStructureAssembly = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1998:2: (iv_ruleComposedStructureAssembly= ruleComposedStructureAssembly EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:1999:2: iv_ruleComposedStructureAssembly= ruleComposedStructureAssembly EOF
+            {
+             newCompositeNode(grammarAccess.getComposedStructureAssemblyRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleComposedStructureAssembly_in_entryRuleComposedStructureAssembly4288);
+            iv_ruleComposedStructureAssembly=ruleComposedStructureAssembly();
+
+            state._fsp--;
+
+             current =iv_ruleComposedStructureAssembly; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleComposedStructureAssembly4298); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleComposedStructureAssembly"
+
+
+    // $ANTLR start "ruleComposedStructureAssembly"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2006:1: ruleComposedStructureAssembly returns [EObject current=null] : ( () otherlv_1= 'ComposedStructureAssembly' otherlv_2= '{' (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )? (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )? (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )? (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )? otherlv_27= '}' ) ;
+    public final EObject ruleComposedStructureAssembly() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        Token otherlv_8=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_12=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token otherlv_18=null;
+        Token otherlv_20=null;
+        Token otherlv_21=null;
+        Token otherlv_22=null;
+        Token otherlv_24=null;
+        Token otherlv_26=null;
+        Token otherlv_27=null;
+        EObject lv_assemblyContexts_5_0 = null;
+
+        EObject lv_assemblyContexts_7_0 = null;
+
+        EObject lv_assemblyConnectors_11_0 = null;
+
+        EObject lv_assemblyConnectors_13_0 = null;
+
+        EObject lv_providedDelegationConnectors_17_0 = null;
+
+        EObject lv_providedDelegationConnectors_19_0 = null;
+
+        EObject lv_requiredDelegationConnectors_23_0 = null;
+
+        EObject lv_requiredDelegationConnectors_25_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2009:28: ( ( () otherlv_1= 'ComposedStructureAssembly' otherlv_2= '{' (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )? (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )? (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )? (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )? otherlv_27= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2010:1: ( () otherlv_1= 'ComposedStructureAssembly' otherlv_2= '{' (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )? (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )? (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )? (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )? otherlv_27= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2010:1: ( () otherlv_1= 'ComposedStructureAssembly' otherlv_2= '{' (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )? (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )? (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )? (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )? otherlv_27= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2010:2: () otherlv_1= 'ComposedStructureAssembly' otherlv_2= '{' (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )? (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )? (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )? (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )? otherlv_27= '}'
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2010:2: ()
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2011:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyAction_0(),
+                        current);
+                
+
+            }
+
+            otherlv_1=(Token)match(input,44,FollowSets000.FOLLOW_44_in_ruleComposedStructureAssembly4344); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getComposedStructureAssemblyAccess().getComposedStructureAssemblyKeyword_1());
+                
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleComposedStructureAssembly4356); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_2());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2024:1: (otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}' )?
+            int alt52=2;
+            int LA52_0 = input.LA(1);
+
+            if ( (LA52_0==45) ) {
+                alt52=1;
+            }
+            switch (alt52) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2024:3: otherlv_3= 'assemblyContexts' otherlv_4= '{' ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) ) (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )* otherlv_8= '}'
+                    {
+                    otherlv_3=(Token)match(input,45,FollowSets000.FOLLOW_45_in_ruleComposedStructureAssembly4369); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsKeyword_3_0());
+                        
+                    otherlv_4=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleComposedStructureAssembly4381); 
+
+                        	newLeafNode(otherlv_4, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_3_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2032:1: ( (lv_assemblyContexts_5_0= ruleAssemblyContext ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2033:1: (lv_assemblyContexts_5_0= ruleAssemblyContext )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2033:1: (lv_assemblyContexts_5_0= ruleAssemblyContext )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2034:3: lv_assemblyContexts_5_0= ruleAssemblyContext
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleAssemblyContext_in_ruleComposedStructureAssembly4402);
+                    lv_assemblyContexts_5_0=ruleAssemblyContext();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"assemblyContexts",
+                            		lv_assemblyContexts_5_0, 
+                            		"AssemblyContext");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2050:2: (otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) ) )*
+                    loop51:
+                    do {
+                        int alt51=2;
+                        int LA51_0 = input.LA(1);
+
+                        if ( (LA51_0==14) ) {
+                            alt51=1;
+                        }
+
+
+                        switch (alt51) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2050:4: otherlv_6= ',' ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) )
+                    	    {
+                    	    otherlv_6=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleComposedStructureAssembly4415); 
+
+                    	        	newLeafNode(otherlv_6, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_3_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2054:1: ( (lv_assemblyContexts_7_0= ruleAssemblyContext ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2055:1: (lv_assemblyContexts_7_0= ruleAssemblyContext )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2055:1: (lv_assemblyContexts_7_0= ruleAssemblyContext )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2056:3: lv_assemblyContexts_7_0= ruleAssemblyContext
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAssemblyContext_in_ruleComposedStructureAssembly4436);
+                    	    lv_assemblyContexts_7_0=ruleAssemblyContext();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"assemblyContexts",
+                    	            		lv_assemblyContexts_7_0, 
+                    	            		"AssemblyContext");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop51;
+                        }
+                    } while (true);
+
+                    otherlv_8=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleComposedStructureAssembly4450); 
+
+                        	newLeafNode(otherlv_8, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_3_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2076:3: (otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}' )?
+            int alt54=2;
+            int LA54_0 = input.LA(1);
+
+            if ( (LA54_0==46) ) {
+                alt54=1;
+            }
+            switch (alt54) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2076:5: otherlv_9= 'assemblyConnectors' otherlv_10= '{' ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) ) (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )* otherlv_14= '}'
+                    {
+                    otherlv_9=(Token)match(input,46,FollowSets000.FOLLOW_46_in_ruleComposedStructureAssembly4465); 
+
+                        	newLeafNode(otherlv_9, grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsKeyword_4_0());
+                        
+                    otherlv_10=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleComposedStructureAssembly4477); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_4_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2084:1: ( (lv_assemblyConnectors_11_0= ruleAssemblyConnector ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2085:1: (lv_assemblyConnectors_11_0= ruleAssemblyConnector )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2085:1: (lv_assemblyConnectors_11_0= ruleAssemblyConnector )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2086:3: lv_assemblyConnectors_11_0= ruleAssemblyConnector
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleAssemblyConnector_in_ruleComposedStructureAssembly4498);
+                    lv_assemblyConnectors_11_0=ruleAssemblyConnector();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"assemblyConnectors",
+                            		lv_assemblyConnectors_11_0, 
+                            		"AssemblyConnector");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2102:2: (otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) ) )*
+                    loop53:
+                    do {
+                        int alt53=2;
+                        int LA53_0 = input.LA(1);
+
+                        if ( (LA53_0==14) ) {
+                            alt53=1;
+                        }
+
+
+                        switch (alt53) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2102:4: otherlv_12= ',' ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) )
+                    	    {
+                    	    otherlv_12=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleComposedStructureAssembly4511); 
+
+                    	        	newLeafNode(otherlv_12, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_4_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2106:1: ( (lv_assemblyConnectors_13_0= ruleAssemblyConnector ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2107:1: (lv_assemblyConnectors_13_0= ruleAssemblyConnector )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2107:1: (lv_assemblyConnectors_13_0= ruleAssemblyConnector )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2108:3: lv_assemblyConnectors_13_0= ruleAssemblyConnector
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleAssemblyConnector_in_ruleComposedStructureAssembly4532);
+                    	    lv_assemblyConnectors_13_0=ruleAssemblyConnector();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"assemblyConnectors",
+                    	            		lv_assemblyConnectors_13_0, 
+                    	            		"AssemblyConnector");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop53;
+                        }
+                    } while (true);
+
+                    otherlv_14=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleComposedStructureAssembly4546); 
+
+                        	newLeafNode(otherlv_14, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_4_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2128:3: (otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}' )?
+            int alt56=2;
+            int LA56_0 = input.LA(1);
+
+            if ( (LA56_0==47) ) {
+                alt56=1;
+            }
+            switch (alt56) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2128:5: otherlv_15= 'providedDelegationConnectors' otherlv_16= '{' ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) ) (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )* otherlv_20= '}'
+                    {
+                    otherlv_15=(Token)match(input,47,FollowSets000.FOLLOW_47_in_ruleComposedStructureAssembly4561); 
+
+                        	newLeafNode(otherlv_15, grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsKeyword_5_0());
+                        
+                    otherlv_16=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleComposedStructureAssembly4573); 
+
+                        	newLeafNode(otherlv_16, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_5_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2136:1: ( (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2137:1: (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2137:1: (lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2138:3: lv_providedDelegationConnectors_17_0= ruleProvidedDelegationConnector
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleProvidedDelegationConnector_in_ruleComposedStructureAssembly4594);
+                    lv_providedDelegationConnectors_17_0=ruleProvidedDelegationConnector();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"providedDelegationConnectors",
+                            		lv_providedDelegationConnectors_17_0, 
+                            		"ProvidedDelegationConnector");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2154:2: (otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) ) )*
+                    loop55:
+                    do {
+                        int alt55=2;
+                        int LA55_0 = input.LA(1);
+
+                        if ( (LA55_0==14) ) {
+                            alt55=1;
+                        }
+
+
+                        switch (alt55) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2154:4: otherlv_18= ',' ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) )
+                    	    {
+                    	    otherlv_18=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleComposedStructureAssembly4607); 
+
+                    	        	newLeafNode(otherlv_18, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_5_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2158:1: ( (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2159:1: (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2159:1: (lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2160:3: lv_providedDelegationConnectors_19_0= ruleProvidedDelegationConnector
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleProvidedDelegationConnector_in_ruleComposedStructureAssembly4628);
+                    	    lv_providedDelegationConnectors_19_0=ruleProvidedDelegationConnector();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"providedDelegationConnectors",
+                    	            		lv_providedDelegationConnectors_19_0, 
+                    	            		"ProvidedDelegationConnector");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop55;
+                        }
+                    } while (true);
+
+                    otherlv_20=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleComposedStructureAssembly4642); 
+
+                        	newLeafNode(otherlv_20, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_5_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2180:3: (otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}' )?
+            int alt58=2;
+            int LA58_0 = input.LA(1);
+
+            if ( (LA58_0==48) ) {
+                alt58=1;
+            }
+            switch (alt58) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2180:5: otherlv_21= 'requiredDelegationConnectors' otherlv_22= '{' ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) ) (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )* otherlv_26= '}'
+                    {
+                    otherlv_21=(Token)match(input,48,FollowSets000.FOLLOW_48_in_ruleComposedStructureAssembly4657); 
+
+                        	newLeafNode(otherlv_21, grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsKeyword_6_0());
+                        
+                    otherlv_22=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleComposedStructureAssembly4669); 
+
+                        	newLeafNode(otherlv_22, grammarAccess.getComposedStructureAssemblyAccess().getLeftCurlyBracketKeyword_6_1());
+                        
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2188:1: ( (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector ) )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2189:1: (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2189:1: (lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2190:3: lv_requiredDelegationConnectors_23_0= ruleRequiredDelegationConnector
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0()); 
+                    	    
+                    pushFollow(FollowSets000.FOLLOW_ruleRequiredDelegationConnector_in_ruleComposedStructureAssembly4690);
+                    lv_requiredDelegationConnectors_23_0=ruleRequiredDelegationConnector();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	        }
+                           		add(
+                           			current, 
+                           			"requiredDelegationConnectors",
+                            		lv_requiredDelegationConnectors_23_0, 
+                            		"RequiredDelegationConnector");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2206:2: (otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) ) )*
+                    loop57:
+                    do {
+                        int alt57=2;
+                        int LA57_0 = input.LA(1);
+
+                        if ( (LA57_0==14) ) {
+                            alt57=1;
+                        }
+
+
+                        switch (alt57) {
+                    	case 1 :
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2206:4: otherlv_24= ',' ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) )
+                    	    {
+                    	    otherlv_24=(Token)match(input,14,FollowSets000.FOLLOW_14_in_ruleComposedStructureAssembly4703); 
+
+                    	        	newLeafNode(otherlv_24, grammarAccess.getComposedStructureAssemblyAccess().getCommaKeyword_6_3_0());
+                    	        
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2210:1: ( (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector ) )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2211:1: (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector )
+                    	    {
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2211:1: (lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector )
+                    	    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2212:3: lv_requiredDelegationConnectors_25_0= ruleRequiredDelegationConnector
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getComposedStructureAssemblyAccess().getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0()); 
+                    	    	    
+                    	    pushFollow(FollowSets000.FOLLOW_ruleRequiredDelegationConnector_in_ruleComposedStructureAssembly4724);
+                    	    lv_requiredDelegationConnectors_25_0=ruleRequiredDelegationConnector();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getComposedStructureAssemblyRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"requiredDelegationConnectors",
+                    	            		lv_requiredDelegationConnectors_25_0, 
+                    	            		"RequiredDelegationConnector");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop57;
+                        }
+                    } while (true);
+
+                    otherlv_26=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleComposedStructureAssembly4738); 
+
+                        	newLeafNode(otherlv_26, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_6_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+            otherlv_27=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleComposedStructureAssembly4752); 
+
+                	newLeafNode(otherlv_27, grammarAccess.getComposedStructureAssemblyAccess().getRightCurlyBracketKeyword_7());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleComposedStructureAssembly"
+
+
+    // $ANTLR start "entryRuleAssemblyContext"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2244:1: entryRuleAssemblyContext returns [EObject current=null] : iv_ruleAssemblyContext= ruleAssemblyContext EOF ;
+    public final EObject entryRuleAssemblyContext() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAssemblyContext = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2245:2: (iv_ruleAssemblyContext= ruleAssemblyContext EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2246:2: iv_ruleAssemblyContext= ruleAssemblyContext EOF
+            {
+             newCompositeNode(grammarAccess.getAssemblyContextRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleAssemblyContext_in_entryRuleAssemblyContext4788);
+            iv_ruleAssemblyContext=ruleAssemblyContext();
+
+            state._fsp--;
+
+             current =iv_ruleAssemblyContext; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAssemblyContext4798); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAssemblyContext"
+
+
+    // $ANTLR start "ruleAssemblyContext"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2253:1: ruleAssemblyContext returns [EObject current=null] : (otherlv_0= 'AssemblyContext' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'encapsulatedComponent' ( ( ruleEString ) ) otherlv_5= '}' ) ;
+    public final EObject ruleAssemblyContext() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2256:28: ( (otherlv_0= 'AssemblyContext' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'encapsulatedComponent' ( ( ruleEString ) ) otherlv_5= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2257:1: (otherlv_0= 'AssemblyContext' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'encapsulatedComponent' ( ( ruleEString ) ) otherlv_5= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2257:1: (otherlv_0= 'AssemblyContext' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'encapsulatedComponent' ( ( ruleEString ) ) otherlv_5= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2257:3: otherlv_0= 'AssemblyContext' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'encapsulatedComponent' ( ( ruleEString ) ) otherlv_5= '}'
+            {
+            otherlv_0=(Token)match(input,49,FollowSets000.FOLLOW_49_in_ruleAssemblyContext4835); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getAssemblyContextAccess().getAssemblyContextKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2261:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2262:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2262:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2263:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getAssemblyContextAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyContext4856);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getAssemblyContextRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleAssemblyContext4868); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getAssemblyContextAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,50,FollowSets000.FOLLOW_50_in_ruleAssemblyContext4880); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2287:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2288:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2288:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2289:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getAssemblyContextRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getAssemblyContextAccess().getEncapsulatedComponentRepositoryComponentCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyContext4903);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleAssemblyContext4915); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getAssemblyContextAccess().getRightCurlyBracketKeyword_5());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAssemblyContext"
+
+
+    // $ANTLR start "entryRuleAssemblyConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2314:1: entryRuleAssemblyConnector returns [EObject current=null] : iv_ruleAssemblyConnector= ruleAssemblyConnector EOF ;
+    public final EObject entryRuleAssemblyConnector() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAssemblyConnector = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2315:2: (iv_ruleAssemblyConnector= ruleAssemblyConnector EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2316:2: iv_ruleAssemblyConnector= ruleAssemblyConnector EOF
+            {
+             newCompositeNode(grammarAccess.getAssemblyConnectorRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleAssemblyConnector_in_entryRuleAssemblyConnector4951);
+            iv_ruleAssemblyConnector=ruleAssemblyConnector();
+
+            state._fsp--;
+
+             current =iv_ruleAssemblyConnector; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleAssemblyConnector4961); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAssemblyConnector"
+
+
+    // $ANTLR start "ruleAssemblyConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2323:1: ruleAssemblyConnector returns [EObject current=null] : (otherlv_0= 'AssemblyConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'requiredRole' ( ( ruleEString ) ) otherlv_5= 'providedRole' ( ( ruleEString ) ) otherlv_7= 'providingAssemblyContext' ( ( ruleEString ) ) otherlv_9= 'requiringAssemblyContext' ( ( ruleEString ) ) otherlv_11= '}' ) ;
+    public final EObject ruleAssemblyConnector() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        Token otherlv_11=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2326:28: ( (otherlv_0= 'AssemblyConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'requiredRole' ( ( ruleEString ) ) otherlv_5= 'providedRole' ( ( ruleEString ) ) otherlv_7= 'providingAssemblyContext' ( ( ruleEString ) ) otherlv_9= 'requiringAssemblyContext' ( ( ruleEString ) ) otherlv_11= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2327:1: (otherlv_0= 'AssemblyConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'requiredRole' ( ( ruleEString ) ) otherlv_5= 'providedRole' ( ( ruleEString ) ) otherlv_7= 'providingAssemblyContext' ( ( ruleEString ) ) otherlv_9= 'requiringAssemblyContext' ( ( ruleEString ) ) otherlv_11= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2327:1: (otherlv_0= 'AssemblyConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'requiredRole' ( ( ruleEString ) ) otherlv_5= 'providedRole' ( ( ruleEString ) ) otherlv_7= 'providingAssemblyContext' ( ( ruleEString ) ) otherlv_9= 'requiringAssemblyContext' ( ( ruleEString ) ) otherlv_11= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2327:3: otherlv_0= 'AssemblyConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'requiredRole' ( ( ruleEString ) ) otherlv_5= 'providedRole' ( ( ruleEString ) ) otherlv_7= 'providingAssemblyContext' ( ( ruleEString ) ) otherlv_9= 'requiringAssemblyContext' ( ( ruleEString ) ) otherlv_11= '}'
+            {
+            otherlv_0=(Token)match(input,51,FollowSets000.FOLLOW_51_in_ruleAssemblyConnector4998); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getAssemblyConnectorAccess().getAssemblyConnectorKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2331:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2332:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2332:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2333:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyConnector5019);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getAssemblyConnectorRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleAssemblyConnector5031); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getAssemblyConnectorAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,52,FollowSets000.FOLLOW_52_in_ruleAssemblyConnector5043); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getAssemblyConnectorAccess().getRequiredRoleKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2357:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2358:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2358:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2359:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getRequiredRoleRequiredRoleCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyConnector5066);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,53,FollowSets000.FOLLOW_53_in_ruleAssemblyConnector5078); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getAssemblyConnectorAccess().getProvidedRoleKeyword_5());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2376:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2377:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2377:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2378:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getProvidedRoleProvidedRoleCrossReference_6_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyConnector5101);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_7=(Token)match(input,54,FollowSets000.FOLLOW_54_in_ruleAssemblyConnector5113); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextKeyword_7());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2395:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2396:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2396:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2397:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getProvidingAssemblyContextAssemblyContextCrossReference_8_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyConnector5136);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_9=(Token)match(input,55,FollowSets000.FOLLOW_55_in_ruleAssemblyConnector5148); 
+
+                	newLeafNode(otherlv_9, grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextKeyword_9());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2414:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2415:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2415:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2416:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getAssemblyConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getAssemblyConnectorAccess().getRequiringAssemblyContextAssemblyContextCrossReference_10_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleAssemblyConnector5171);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_11=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleAssemblyConnector5183); 
+
+                	newLeafNode(otherlv_11, grammarAccess.getAssemblyConnectorAccess().getRightCurlyBracketKeyword_11());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAssemblyConnector"
+
+
+    // $ANTLR start "entryRuleProvidedDelegationConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2441:1: entryRuleProvidedDelegationConnector returns [EObject current=null] : iv_ruleProvidedDelegationConnector= ruleProvidedDelegationConnector EOF ;
+    public final EObject entryRuleProvidedDelegationConnector() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleProvidedDelegationConnector = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2442:2: (iv_ruleProvidedDelegationConnector= ruleProvidedDelegationConnector EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2443:2: iv_ruleProvidedDelegationConnector= ruleProvidedDelegationConnector EOF
+            {
+             newCompositeNode(grammarAccess.getProvidedDelegationConnectorRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleProvidedDelegationConnector_in_entryRuleProvidedDelegationConnector5219);
+            iv_ruleProvidedDelegationConnector=ruleProvidedDelegationConnector();
+
+            state._fsp--;
+
+             current =iv_ruleProvidedDelegationConnector; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleProvidedDelegationConnector5229); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleProvidedDelegationConnector"
+
+
+    // $ANTLR start "ruleProvidedDelegationConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2450:1: ruleProvidedDelegationConnector returns [EObject current=null] : (otherlv_0= 'ProvidedDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerProvidedRole' ( ( ruleEString ) ) otherlv_7= 'outerProvidedRole' ( ( ruleEString ) ) otherlv_9= '}' ) ;
+    public final EObject ruleProvidedDelegationConnector() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2453:28: ( (otherlv_0= 'ProvidedDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerProvidedRole' ( ( ruleEString ) ) otherlv_7= 'outerProvidedRole' ( ( ruleEString ) ) otherlv_9= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2454:1: (otherlv_0= 'ProvidedDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerProvidedRole' ( ( ruleEString ) ) otherlv_7= 'outerProvidedRole' ( ( ruleEString ) ) otherlv_9= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2454:1: (otherlv_0= 'ProvidedDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerProvidedRole' ( ( ruleEString ) ) otherlv_7= 'outerProvidedRole' ( ( ruleEString ) ) otherlv_9= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2454:3: otherlv_0= 'ProvidedDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerProvidedRole' ( ( ruleEString ) ) otherlv_7= 'outerProvidedRole' ( ( ruleEString ) ) otherlv_9= '}'
+            {
+            otherlv_0=(Token)match(input,56,FollowSets000.FOLLOW_56_in_ruleProvidedDelegationConnector5266); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getProvidedDelegationConnectorAccess().getProvidedDelegationConnectorKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2458:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2459:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2459:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2460:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5287);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getProvidedDelegationConnectorRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleProvidedDelegationConnector5299); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getProvidedDelegationConnectorAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleProvidedDelegationConnector5311); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2484:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2485:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2485:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2486:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5334);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,58,FollowSets000.FOLLOW_58_in_ruleProvidedDelegationConnector5346); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleKeyword_5());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2503:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2504:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2504:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2505:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getInnerProvidedRoleProvidedRoleCrossReference_6_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5369);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_7=(Token)match(input,59,FollowSets000.FOLLOW_59_in_ruleProvidedDelegationConnector5381); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleKeyword_7());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2522:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2523:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2523:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2524:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getProvidedDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getProvidedDelegationConnectorAccess().getOuterProvidedRoleProvidedRoleCrossReference_8_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5404);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_9=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleProvidedDelegationConnector5416); 
+
+                	newLeafNode(otherlv_9, grammarAccess.getProvidedDelegationConnectorAccess().getRightCurlyBracketKeyword_9());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleProvidedDelegationConnector"
+
+
+    // $ANTLR start "entryRuleRequiredDelegationConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2549:1: entryRuleRequiredDelegationConnector returns [EObject current=null] : iv_ruleRequiredDelegationConnector= ruleRequiredDelegationConnector EOF ;
+    public final EObject entryRuleRequiredDelegationConnector() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRequiredDelegationConnector = null;
+
+
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2550:2: (iv_ruleRequiredDelegationConnector= ruleRequiredDelegationConnector EOF )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2551:2: iv_ruleRequiredDelegationConnector= ruleRequiredDelegationConnector EOF
+            {
+             newCompositeNode(grammarAccess.getRequiredDelegationConnectorRule()); 
+            pushFollow(FollowSets000.FOLLOW_ruleRequiredDelegationConnector_in_entryRuleRequiredDelegationConnector5452);
+            iv_ruleRequiredDelegationConnector=ruleRequiredDelegationConnector();
+
+            state._fsp--;
+
+             current =iv_ruleRequiredDelegationConnector; 
+            match(input,EOF,FollowSets000.FOLLOW_EOF_in_entryRuleRequiredDelegationConnector5462); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRequiredDelegationConnector"
+
+
+    // $ANTLR start "ruleRequiredDelegationConnector"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2558:1: ruleRequiredDelegationConnector returns [EObject current=null] : (otherlv_0= 'RequiredDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerRequiredRole' ( ( ruleEString ) ) otherlv_7= 'outerRequiredRole' ( ( ruleEString ) ) otherlv_9= '}' ) ;
+    public final EObject ruleRequiredDelegationConnector() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token otherlv_3=null;
+        Token otherlv_5=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        AntlrDatatypeRuleToken lv_name_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2561:28: ( (otherlv_0= 'RequiredDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerRequiredRole' ( ( ruleEString ) ) otherlv_7= 'outerRequiredRole' ( ( ruleEString ) ) otherlv_9= '}' ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2562:1: (otherlv_0= 'RequiredDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerRequiredRole' ( ( ruleEString ) ) otherlv_7= 'outerRequiredRole' ( ( ruleEString ) ) otherlv_9= '}' )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2562:1: (otherlv_0= 'RequiredDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerRequiredRole' ( ( ruleEString ) ) otherlv_7= 'outerRequiredRole' ( ( ruleEString ) ) otherlv_9= '}' )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2562:3: otherlv_0= 'RequiredDelegationConnector' ( (lv_name_1_0= ruleEString ) ) otherlv_2= '{' otherlv_3= 'assemblyContext' ( ( ruleEString ) ) otherlv_5= 'innerRequiredRole' ( ( ruleEString ) ) otherlv_7= 'outerRequiredRole' ( ( ruleEString ) ) otherlv_9= '}'
+            {
+            otherlv_0=(Token)match(input,60,FollowSets000.FOLLOW_60_in_ruleRequiredDelegationConnector5499); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getRequiredDelegationConnectorAccess().getRequiredDelegationConnectorKeyword_0());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2566:1: ( (lv_name_1_0= ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2567:1: (lv_name_1_0= ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2567:1: (lv_name_1_0= ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2568:3: lv_name_1_0= ruleEString
+            {
+             
+            	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getNameEStringParserRuleCall_1_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5520);
+            lv_name_1_0=ruleEString();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getRequiredDelegationConnectorRule());
+            	        }
+                   		set(
+                   			current, 
+                   			"name",
+                    		lv_name_1_0, 
+                    		"EString");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,12,FollowSets000.FOLLOW_12_in_ruleRequiredDelegationConnector5532); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getRequiredDelegationConnectorAccess().getLeftCurlyBracketKeyword_2());
+                
+            otherlv_3=(Token)match(input,57,FollowSets000.FOLLOW_57_in_ruleRequiredDelegationConnector5544); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextKeyword_3());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2592:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2593:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2593:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2594:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getAssemblyContextAssemblyContextCrossReference_4_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5567);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,61,FollowSets000.FOLLOW_61_in_ruleRequiredDelegationConnector5579); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleKeyword_5());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2611:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2612:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2612:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2613:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getInnerRequiredRoleRequiredRoleCrossReference_6_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5602);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_7=(Token)match(input,62,FollowSets000.FOLLOW_62_in_ruleRequiredDelegationConnector5614); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleKeyword_7());
+                
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2630:1: ( ( ruleEString ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2631:1: ( ruleEString )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2631:1: ( ruleEString )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2632:3: ruleEString
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getRequiredDelegationConnectorRule());
+            	        }
+                    
+             
+            	        newCompositeNode(grammarAccess.getRequiredDelegationConnectorAccess().getOuterRequiredRoleRequiredRoleCrossReference_8_0()); 
+            	    
+            pushFollow(FollowSets000.FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5637);
+            ruleEString();
+
+            state._fsp--;
+
+             
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_9=(Token)match(input,15,FollowSets000.FOLLOW_15_in_ruleRequiredDelegationConnector5649); 
+
+                	newLeafNode(otherlv_9, grammarAccess.getRequiredDelegationConnectorAccess().getRightCurlyBracketKeyword_9());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRequiredDelegationConnector"
+
+
+    // $ANTLR start "rulePrimitiveTypeEnum"
+    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2657:1: rulePrimitiveTypeEnum returns [Enumerator current=null] : ( (enumLiteral_0= 'INT' ) | (enumLiteral_1= 'STRING' ) | (enumLiteral_2= 'BOOL' ) | (enumLiteral_3= 'DOUBLE' ) | (enumLiteral_4= 'CHAR' ) | (enumLiteral_5= 'BYTE' ) | (enumLiteral_6= 'LONG' ) ) ;
+    public final Enumerator rulePrimitiveTypeEnum() throws RecognitionException {
+        Enumerator current = null;
+
+        Token enumLiteral_0=null;
+        Token enumLiteral_1=null;
+        Token enumLiteral_2=null;
+        Token enumLiteral_3=null;
+        Token enumLiteral_4=null;
+        Token enumLiteral_5=null;
+        Token enumLiteral_6=null;
+
+         enterRule(); 
+        try {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2659:28: ( ( (enumLiteral_0= 'INT' ) | (enumLiteral_1= 'STRING' ) | (enumLiteral_2= 'BOOL' ) | (enumLiteral_3= 'DOUBLE' ) | (enumLiteral_4= 'CHAR' ) | (enumLiteral_5= 'BYTE' ) | (enumLiteral_6= 'LONG' ) ) )
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2660:1: ( (enumLiteral_0= 'INT' ) | (enumLiteral_1= 'STRING' ) | (enumLiteral_2= 'BOOL' ) | (enumLiteral_3= 'DOUBLE' ) | (enumLiteral_4= 'CHAR' ) | (enumLiteral_5= 'BYTE' ) | (enumLiteral_6= 'LONG' ) )
+            {
+            // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2660:1: ( (enumLiteral_0= 'INT' ) | (enumLiteral_1= 'STRING' ) | (enumLiteral_2= 'BOOL' ) | (enumLiteral_3= 'DOUBLE' ) | (enumLiteral_4= 'CHAR' ) | (enumLiteral_5= 'BYTE' ) | (enumLiteral_6= 'LONG' ) )
+            int alt59=7;
+            switch ( input.LA(1) ) {
+            case 63:
+                {
+                alt59=1;
+                }
+                break;
+            case 64:
+                {
+                alt59=2;
+                }
+                break;
+            case 65:
+                {
+                alt59=3;
+                }
+                break;
+            case 66:
+                {
+                alt59=4;
+                }
+                break;
+            case 67:
+                {
+                alt59=5;
+                }
+                break;
+            case 68:
+                {
+                alt59=6;
+                }
+                break;
+            case 69:
+                {
+                alt59=7;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 59, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt59) {
+                case 1 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2660:2: (enumLiteral_0= 'INT' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2660:2: (enumLiteral_0= 'INT' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2660:4: enumLiteral_0= 'INT'
+                    {
+                    enumLiteral_0=(Token)match(input,63,FollowSets000.FOLLOW_63_in_rulePrimitiveTypeEnum5699); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getINTEnumLiteralDeclaration_0().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_0, grammarAccess.getPrimitiveTypeEnumAccess().getINTEnumLiteralDeclaration_0()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2666:6: (enumLiteral_1= 'STRING' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2666:6: (enumLiteral_1= 'STRING' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2666:8: enumLiteral_1= 'STRING'
+                    {
+                    enumLiteral_1=(Token)match(input,64,FollowSets000.FOLLOW_64_in_rulePrimitiveTypeEnum5716); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getSTRINGEnumLiteralDeclaration_1().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_1, grammarAccess.getPrimitiveTypeEnumAccess().getSTRINGEnumLiteralDeclaration_1()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2672:6: (enumLiteral_2= 'BOOL' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2672:6: (enumLiteral_2= 'BOOL' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2672:8: enumLiteral_2= 'BOOL'
+                    {
+                    enumLiteral_2=(Token)match(input,65,FollowSets000.FOLLOW_65_in_rulePrimitiveTypeEnum5733); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getBOOLEnumLiteralDeclaration_2().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_2, grammarAccess.getPrimitiveTypeEnumAccess().getBOOLEnumLiteralDeclaration_2()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2678:6: (enumLiteral_3= 'DOUBLE' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2678:6: (enumLiteral_3= 'DOUBLE' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2678:8: enumLiteral_3= 'DOUBLE'
+                    {
+                    enumLiteral_3=(Token)match(input,66,FollowSets000.FOLLOW_66_in_rulePrimitiveTypeEnum5750); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getDOUBLEEnumLiteralDeclaration_3().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_3, grammarAccess.getPrimitiveTypeEnumAccess().getDOUBLEEnumLiteralDeclaration_3()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2684:6: (enumLiteral_4= 'CHAR' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2684:6: (enumLiteral_4= 'CHAR' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2684:8: enumLiteral_4= 'CHAR'
+                    {
+                    enumLiteral_4=(Token)match(input,67,FollowSets000.FOLLOW_67_in_rulePrimitiveTypeEnum5767); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getCHAREnumLiteralDeclaration_4().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_4, grammarAccess.getPrimitiveTypeEnumAccess().getCHAREnumLiteralDeclaration_4()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2690:6: (enumLiteral_5= 'BYTE' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2690:6: (enumLiteral_5= 'BYTE' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2690:8: enumLiteral_5= 'BYTE'
+                    {
+                    enumLiteral_5=(Token)match(input,68,FollowSets000.FOLLOW_68_in_rulePrimitiveTypeEnum5784); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getBYTEEnumLiteralDeclaration_5().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_5, grammarAccess.getPrimitiveTypeEnumAccess().getBYTEEnumLiteralDeclaration_5()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+                case 7 :
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2696:6: (enumLiteral_6= 'LONG' )
+                    {
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2696:6: (enumLiteral_6= 'LONG' )
+                    // ../org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/parser/antlr/internal/InternalMyDslTest.g:2696:8: enumLiteral_6= 'LONG'
+                    {
+                    enumLiteral_6=(Token)match(input,69,FollowSets000.FOLLOW_69_in_rulePrimitiveTypeEnum5801); 
+
+                            current = grammarAccess.getPrimitiveTypeEnumAccess().getLONGEnumLiteralDeclaration_6().getEnumLiteral().getInstance();
+                            newLeafNode(enumLiteral_6, grammarAccess.getPrimitiveTypeEnumAccess().getLONGEnumLiteralDeclaration_6()); 
+                        
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "rulePrimitiveTypeEnum"
+
+    // Delegated rules
+
+
+ 
+
+    
+    private static class FollowSets000 {
+        public static final BitSet FOLLOW_ruleRepository_in_entryRuleRepository75 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRepository85 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_11_in_ruleRepository122 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRepository143 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepository155 = new BitSet(new long[]{0x000000000003A000L});
+        public static final BitSet FOLLOW_13_in_ruleRepository168 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepository180 = new BitSet(new long[]{0x0000000128000000L});
+        public static final BitSet FOLLOW_ruleDataType_in_ruleRepository201 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleRepository214 = new BitSet(new long[]{0x0000000128000000L});
+        public static final BitSet FOLLOW_ruleDataType_in_ruleRepository235 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleRepository249 = new BitSet(new long[]{0x0000000000038000L});
+        public static final BitSet FOLLOW_16_in_ruleRepository264 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepository276 = new BitSet(new long[]{0x0000000000040000L});
+        public static final BitSet FOLLOW_ruleInterface_in_ruleRepository297 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleRepository310 = new BitSet(new long[]{0x0000000000040000L});
+        public static final BitSet FOLLOW_ruleInterface_in_ruleRepository331 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleRepository345 = new BitSet(new long[]{0x0000000000028000L});
+        public static final BitSet FOLLOW_17_in_ruleRepository360 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepository372 = new BitSet(new long[]{0x00000B0000800000L});
+        public static final BitSet FOLLOW_ruleRepositoryComponent_in_ruleRepository393 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleRepository406 = new BitSet(new long[]{0x00000B0000800000L});
+        public static final BitSet FOLLOW_ruleRepositoryComponent_in_ruleRepository427 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleRepository441 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleRepository455 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleDataType_in_entryRuleDataType491 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleDataType501 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionDataType_in_ruleDataType548 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCompositeDataType_in_ruleDataType575 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveDataType_in_ruleDataType602 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRepositoryComponent_in_entryRuleRepositoryComponent637 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRepositoryComponent647 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRepositoryComponent_Impl_in_ruleRepositoryComponent694 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleBasicComponent_in_ruleRepositoryComponent721 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCompositeComponent_in_ruleRepositoryComponent748 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSubSystem_in_ruleRepositoryComponent775 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEString_in_entryRuleEString811 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleEString822 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_STRING_in_ruleEString862 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_RULE_ID_in_ruleEString888 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInterface_in_entryRuleInterface933 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleInterface943 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_18_in_ruleInterface980 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleInterface1001 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleInterface1013 = new BitSet(new long[]{0x0000000000488000L});
+        public static final BitSet FOLLOW_19_in_ruleInterface1026 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleInterface1038 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleInterface1061 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleInterface1074 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleInterface1097 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleInterface1111 = new BitSet(new long[]{0x0000000000408000L});
+        public static final BitSet FOLLOW_22_in_ruleInterface1126 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleInterface1138 = new BitSet(new long[]{0x0000002000000030L});
+        public static final BitSet FOLLOW_ruleSignature_in_ruleInterface1159 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleInterface1172 = new BitSet(new long[]{0x0000002000000030L});
+        public static final BitSet FOLLOW_ruleSignature_in_ruleInterface1193 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleInterface1207 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleInterface1221 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRepositoryComponent_Impl_in_entryRuleRepositoryComponent_Impl1257 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRepositoryComponent_Impl1267 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_23_in_ruleRepositoryComponent_Impl1304 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1325 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepositoryComponent_Impl1337 = new BitSet(new long[]{0x0000000007008000L});
+        public static final BitSet FOLLOW_24_in_ruleRepositoryComponent_Impl1350 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleRepositoryComponent_Impl1362 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1385 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleRepositoryComponent_Impl1398 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRepositoryComponent_Impl1421 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleRepositoryComponent_Impl1435 = new BitSet(new long[]{0x0000000006008000L});
+        public static final BitSet FOLLOW_25_in_ruleRepositoryComponent_Impl1450 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepositoryComponent_Impl1462 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleRepositoryComponent_Impl1483 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleRepositoryComponent_Impl1496 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleRepositoryComponent_Impl1517 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleRepositoryComponent_Impl1531 = new BitSet(new long[]{0x0000000004008000L});
+        public static final BitSet FOLLOW_26_in_ruleRepositoryComponent_Impl1546 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRepositoryComponent_Impl1558 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleRepositoryComponent_Impl1579 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleRepositoryComponent_Impl1592 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleRepositoryComponent_Impl1613 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleRepositoryComponent_Impl1627 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleRepositoryComponent_Impl1641 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCollectionDataType_in_entryRuleCollectionDataType1677 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCollectionDataType1687 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_27_in_ruleCollectionDataType1724 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCollectionDataType1745 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleCollectionDataType1757 = new BitSet(new long[]{0x0000000010000000L});
+        public static final BitSet FOLLOW_28_in_ruleCollectionDataType1769 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCollectionDataType1792 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleCollectionDataType1804 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCompositeDataType_in_entryRuleCompositeDataType1840 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCompositeDataType1850 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_29_in_ruleCompositeDataType1887 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeDataType1908 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleCompositeDataType1920 = new BitSet(new long[]{0x00000000C0008000L});
+        public static final BitSet FOLLOW_30_in_ruleCompositeDataType1933 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleCompositeDataType1945 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeDataType1968 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleCompositeDataType1981 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeDataType2004 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleCompositeDataType2018 = new BitSet(new long[]{0x0000000080008000L});
+        public static final BitSet FOLLOW_31_in_ruleCompositeDataType2033 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleCompositeDataType2045 = new BitSet(new long[]{0x0000000800000000L});
+        public static final BitSet FOLLOW_ruleInnerDeclaration_in_ruleCompositeDataType2066 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleCompositeDataType2079 = new BitSet(new long[]{0x0000000800000000L});
+        public static final BitSet FOLLOW_ruleInnerDeclaration_in_ruleCompositeDataType2100 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleCompositeDataType2114 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleCompositeDataType2128 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_rulePrimitiveDataType_in_entryRulePrimitiveDataType2164 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRulePrimitiveDataType2174 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_32_in_rulePrimitiveDataType2211 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_rulePrimitiveDataType2223 = new BitSet(new long[]{0x0000000200000000L});
+        public static final BitSet FOLLOW_33_in_rulePrimitiveDataType2235 = new BitSet(new long[]{0x8000000000000000L,0x000000000000003FL});
+        public static final BitSet FOLLOW_rulePrimitiveTypeEnum_in_rulePrimitiveDataType2256 = new BitSet(new long[]{0x0000000400000000L});
+        public static final BitSet FOLLOW_34_in_rulePrimitiveDataType2268 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_rulePrimitiveDataType2289 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_rulePrimitiveDataType2301 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleInnerDeclaration_in_entryRuleInnerDeclaration2337 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleInnerDeclaration2347 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_35_in_ruleInnerDeclaration2384 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleInnerDeclaration2405 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleInnerDeclaration2417 = new BitSet(new long[]{0x0000001000000000L});
+        public static final BitSet FOLLOW_36_in_ruleInnerDeclaration2429 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleInnerDeclaration2452 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleInnerDeclaration2464 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSignature_in_entryRuleSignature2500 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSignature2510 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleSignature2559 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_37_in_ruleSignature2577 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleSignature2599 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleSignature2611 = new BitSet(new long[]{0x0000000000200030L});
+        public static final BitSet FOLLOW_ruleParameter_in_ruleSignature2633 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleSignature2646 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleParameter_in_ruleSignature2667 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleSignature2683 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleParameter_in_entryRuleParameter2719 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleParameter2729 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleParameter2777 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleParameter2798 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_entryRuleProvidedRole2834 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleProvidedRole2844 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_38_in_ruleProvidedRole2890 = new BitSet(new long[]{0x0000000000000032L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleProvidedRole2914 = new BitSet(new long[]{0x0000000000004032L});
+        public static final BitSet FOLLOW_14_in_ruleProvidedRole2927 = new BitSet(new long[]{0x0000000000000032L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_entryRuleRequiredRole2967 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRequiredRole2977 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_39_in_ruleRequiredRole3023 = new BitSet(new long[]{0x0000000000000032L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRequiredRole3047 = new BitSet(new long[]{0x0000000000004032L});
+        public static final BitSet FOLLOW_14_in_ruleRequiredRole3060 = new BitSet(new long[]{0x0000000000000032L});
+        public static final BitSet FOLLOW_ruleBasicComponent_in_entryRuleBasicComponent3100 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleBasicComponent3110 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_40_in_ruleBasicComponent3147 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleBasicComponent3168 = new BitSet(new long[]{0x000000C000001000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleBasicComponent3190 = new BitSet(new long[]{0x0000008000005000L});
+        public static final BitSet FOLLOW_14_in_ruleBasicComponent3203 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleBasicComponent3224 = new BitSet(new long[]{0x0000008000005000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleBasicComponent3250 = new BitSet(new long[]{0x0000000000005000L});
+        public static final BitSet FOLLOW_14_in_ruleBasicComponent3263 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleBasicComponent3284 = new BitSet(new long[]{0x0000000000005000L});
+        public static final BitSet FOLLOW_12_in_ruleBasicComponent3300 = new BitSet(new long[]{0x0000000001008000L});
+        public static final BitSet FOLLOW_24_in_ruleBasicComponent3313 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleBasicComponent3325 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleBasicComponent3348 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleBasicComponent3361 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleBasicComponent3384 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleBasicComponent3398 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleBasicComponent3412 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleCompositeComponent_in_entryRuleCompositeComponent3448 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleCompositeComponent3458 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_41_in_ruleCompositeComponent3495 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeComponent3516 = new BitSet(new long[]{0x000000C000001000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleCompositeComponent3538 = new BitSet(new long[]{0x0000008000005000L});
+        public static final BitSet FOLLOW_14_in_ruleCompositeComponent3551 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleCompositeComponent3572 = new BitSet(new long[]{0x0000008000005000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleCompositeComponent3598 = new BitSet(new long[]{0x0000000000005000L});
+        public static final BitSet FOLLOW_14_in_ruleCompositeComponent3611 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleCompositeComponent3632 = new BitSet(new long[]{0x0000000000005000L});
+        public static final BitSet FOLLOW_12_in_ruleCompositeComponent3648 = new BitSet(new long[]{0x0000040001008000L});
+        public static final BitSet FOLLOW_24_in_ruleCompositeComponent3661 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleCompositeComponent3673 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeComponent3696 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleCompositeComponent3709 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleCompositeComponent3732 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleCompositeComponent3746 = new BitSet(new long[]{0x0000040000008000L});
+        public static final BitSet FOLLOW_42_in_ruleCompositeComponent3761 = new BitSet(new long[]{0x0000100000000000L});
+        public static final BitSet FOLLOW_ruleComposedStructureAssembly_in_ruleCompositeComponent3782 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleCompositeComponent3796 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleSubSystem_in_entryRuleSubSystem3832 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleSubSystem3842 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_43_in_ruleSubSystem3879 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleSubSystem3900 = new BitSet(new long[]{0x0000000006001000L});
+        public static final BitSet FOLLOW_25_in_ruleSubSystem3913 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleSubSystem3925 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleSubSystem3946 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleSubSystem3959 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_ruleProvidedRole_in_ruleSubSystem3980 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleSubSystem3994 = new BitSet(new long[]{0x0000000004001000L});
+        public static final BitSet FOLLOW_26_in_ruleSubSystem4009 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleSubSystem4021 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleSubSystem4042 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleSubSystem4055 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_ruleRequiredRole_in_ruleSubSystem4076 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleSubSystem4090 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleSubSystem4104 = new BitSet(new long[]{0x0000040001008000L});
+        public static final BitSet FOLLOW_24_in_ruleSubSystem4117 = new BitSet(new long[]{0x0000000000100000L});
+        public static final BitSet FOLLOW_20_in_ruleSubSystem4129 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleSubSystem4152 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_14_in_ruleSubSystem4165 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleSubSystem4188 = new BitSet(new long[]{0x0000000000204000L});
+        public static final BitSet FOLLOW_21_in_ruleSubSystem4202 = new BitSet(new long[]{0x0000040000008000L});
+        public static final BitSet FOLLOW_42_in_ruleSubSystem4217 = new BitSet(new long[]{0x0000100000000000L});
+        public static final BitSet FOLLOW_ruleComposedStructureAssembly_in_ruleSubSystem4238 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleSubSystem4252 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleComposedStructureAssembly_in_entryRuleComposedStructureAssembly4288 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleComposedStructureAssembly4298 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_44_in_ruleComposedStructureAssembly4344 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleComposedStructureAssembly4356 = new BitSet(new long[]{0x0001E00000008000L});
+        public static final BitSet FOLLOW_45_in_ruleComposedStructureAssembly4369 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleComposedStructureAssembly4381 = new BitSet(new long[]{0x0002000000000000L});
+        public static final BitSet FOLLOW_ruleAssemblyContext_in_ruleComposedStructureAssembly4402 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleComposedStructureAssembly4415 = new BitSet(new long[]{0x0002000000000000L});
+        public static final BitSet FOLLOW_ruleAssemblyContext_in_ruleComposedStructureAssembly4436 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleComposedStructureAssembly4450 = new BitSet(new long[]{0x0001C00000008000L});
+        public static final BitSet FOLLOW_46_in_ruleComposedStructureAssembly4465 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleComposedStructureAssembly4477 = new BitSet(new long[]{0x0008000000000000L});
+        public static final BitSet FOLLOW_ruleAssemblyConnector_in_ruleComposedStructureAssembly4498 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleComposedStructureAssembly4511 = new BitSet(new long[]{0x0008000000000000L});
+        public static final BitSet FOLLOW_ruleAssemblyConnector_in_ruleComposedStructureAssembly4532 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleComposedStructureAssembly4546 = new BitSet(new long[]{0x0001800000008000L});
+        public static final BitSet FOLLOW_47_in_ruleComposedStructureAssembly4561 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleComposedStructureAssembly4573 = new BitSet(new long[]{0x0100000000000000L});
+        public static final BitSet FOLLOW_ruleProvidedDelegationConnector_in_ruleComposedStructureAssembly4594 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleComposedStructureAssembly4607 = new BitSet(new long[]{0x0100000000000000L});
+        public static final BitSet FOLLOW_ruleProvidedDelegationConnector_in_ruleComposedStructureAssembly4628 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleComposedStructureAssembly4642 = new BitSet(new long[]{0x0001000000008000L});
+        public static final BitSet FOLLOW_48_in_ruleComposedStructureAssembly4657 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleComposedStructureAssembly4669 = new BitSet(new long[]{0x1000000000000000L});
+        public static final BitSet FOLLOW_ruleRequiredDelegationConnector_in_ruleComposedStructureAssembly4690 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_14_in_ruleComposedStructureAssembly4703 = new BitSet(new long[]{0x1000000000000000L});
+        public static final BitSet FOLLOW_ruleRequiredDelegationConnector_in_ruleComposedStructureAssembly4724 = new BitSet(new long[]{0x000000000000C000L});
+        public static final BitSet FOLLOW_15_in_ruleComposedStructureAssembly4738 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleComposedStructureAssembly4752 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAssemblyContext_in_entryRuleAssemblyContext4788 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleAssemblyContext4798 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_49_in_ruleAssemblyContext4835 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyContext4856 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleAssemblyContext4868 = new BitSet(new long[]{0x0004000000000000L});
+        public static final BitSet FOLLOW_50_in_ruleAssemblyContext4880 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyContext4903 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleAssemblyContext4915 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleAssemblyConnector_in_entryRuleAssemblyConnector4951 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleAssemblyConnector4961 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_51_in_ruleAssemblyConnector4998 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyConnector5019 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleAssemblyConnector5031 = new BitSet(new long[]{0x0010000000000000L});
+        public static final BitSet FOLLOW_52_in_ruleAssemblyConnector5043 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyConnector5066 = new BitSet(new long[]{0x0020000000000000L});
+        public static final BitSet FOLLOW_53_in_ruleAssemblyConnector5078 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyConnector5101 = new BitSet(new long[]{0x0040000000000000L});
+        public static final BitSet FOLLOW_54_in_ruleAssemblyConnector5113 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyConnector5136 = new BitSet(new long[]{0x0080000000000000L});
+        public static final BitSet FOLLOW_55_in_ruleAssemblyConnector5148 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleAssemblyConnector5171 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleAssemblyConnector5183 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleProvidedDelegationConnector_in_entryRuleProvidedDelegationConnector5219 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleProvidedDelegationConnector5229 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_56_in_ruleProvidedDelegationConnector5266 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5287 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleProvidedDelegationConnector5299 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleProvidedDelegationConnector5311 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5334 = new BitSet(new long[]{0x0400000000000000L});
+        public static final BitSet FOLLOW_58_in_ruleProvidedDelegationConnector5346 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5369 = new BitSet(new long[]{0x0800000000000000L});
+        public static final BitSet FOLLOW_59_in_ruleProvidedDelegationConnector5381 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleProvidedDelegationConnector5404 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleProvidedDelegationConnector5416 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_ruleRequiredDelegationConnector_in_entryRuleRequiredDelegationConnector5452 = new BitSet(new long[]{0x0000000000000000L});
+        public static final BitSet FOLLOW_EOF_in_entryRuleRequiredDelegationConnector5462 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_60_in_ruleRequiredDelegationConnector5499 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5520 = new BitSet(new long[]{0x0000000000001000L});
+        public static final BitSet FOLLOW_12_in_ruleRequiredDelegationConnector5532 = new BitSet(new long[]{0x0200000000000000L});
+        public static final BitSet FOLLOW_57_in_ruleRequiredDelegationConnector5544 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5567 = new BitSet(new long[]{0x2000000000000000L});
+        public static final BitSet FOLLOW_61_in_ruleRequiredDelegationConnector5579 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5602 = new BitSet(new long[]{0x4000000000000000L});
+        public static final BitSet FOLLOW_62_in_ruleRequiredDelegationConnector5614 = new BitSet(new long[]{0x0000000000000030L});
+        public static final BitSet FOLLOW_ruleEString_in_ruleRequiredDelegationConnector5637 = new BitSet(new long[]{0x0000000000008000L});
+        public static final BitSet FOLLOW_15_in_ruleRequiredDelegationConnector5649 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_63_in_rulePrimitiveTypeEnum5699 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_64_in_rulePrimitiveTypeEnum5716 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_65_in_rulePrimitiveTypeEnum5733 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_66_in_rulePrimitiveTypeEnum5750 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_67_in_rulePrimitiveTypeEnum5767 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_68_in_rulePrimitiveTypeEnum5784 = new BitSet(new long[]{0x0000000000000002L});
+        public static final BitSet FOLLOW_69_in_rulePrimitiveTypeEnum5801 = new BitSet(new long[]{0x0000000000000002L});
+    }
+
+
+}
\ No newline at end of file
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/services/MyDslTestGrammarAccess.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/services/MyDslTestGrammarAccess.java
new file mode 100644
index 0000000000000000000000000000000000000000..233aa049c66258cf8ccd9fef4e8304a7a2576ef2
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/services/MyDslTestGrammarAccess.java
@@ -0,0 +1,2424 @@
+/*
+* generated by Xtext
+*/
+
+package org.xtext.example.mydsl.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.service.GrammarProvider;
+import org.eclipse.xtext.service.AbstractElementFinder.*;
+
+import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
+
+@Singleton
+public class MyDslTestGrammarAccess extends AbstractGrammarElementFinder {
+	
+	
+	public class RepositoryElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Repository");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cRepositoryKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cDatatypesKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cDatatypesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final RuleCall cDatatypesDataTypeParserRuleCall_3_2_0 = (RuleCall)cDatatypesAssignment_3_2.eContents().get(0);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cDatatypesAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final RuleCall cDatatypesDataTypeParserRuleCall_3_3_1_0 = (RuleCall)cDatatypesAssignment_3_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cInterfacesKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
+		private final Assignment cInterfacesAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
+		private final RuleCall cInterfacesInterfaceParserRuleCall_4_2_0 = (RuleCall)cInterfacesAssignment_4_2.eContents().get(0);
+		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
+		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
+		private final Assignment cInterfacesAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
+		private final RuleCall cInterfacesInterfaceParserRuleCall_4_3_1_0 = (RuleCall)cInterfacesAssignment_4_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cComponentsKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cComponentsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final RuleCall cComponentsRepositoryComponentParserRuleCall_5_2_0 = (RuleCall)cComponentsAssignment_5_2.eContents().get(0);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cComponentsAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final RuleCall cComponentsRepositoryComponentParserRuleCall_5_3_1_0 = (RuleCall)cComponentsAssignment_5_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//Repository returns repository::Repository:
+		//	"Repository" name=EString "{" ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")? ("interfaces" "{"
+		//	interfaces+=Interface ("," interfaces+=Interface)* "}")? ("components" "{" components+=RepositoryComponent (","
+		//	components+=RepositoryComponent)* "}")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"Repository" name=EString "{" ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")? ("interfaces" "{"
+		//interfaces+=Interface ("," interfaces+=Interface)* "}")? ("components" "{" components+=RepositoryComponent (","
+		//components+=RepositoryComponent)* "}")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"Repository"
+		public Keyword getRepositoryKeyword_0() { return cRepositoryKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"datatypes"
+		public Keyword getDatatypesKeyword_3_0() { return cDatatypesKeyword_3_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_3_1() { return cLeftCurlyBracketKeyword_3_1; }
+
+		//datatypes+=DataType
+		public Assignment getDatatypesAssignment_3_2() { return cDatatypesAssignment_3_2; }
+
+		//DataType
+		public RuleCall getDatatypesDataTypeParserRuleCall_3_2_0() { return cDatatypesDataTypeParserRuleCall_3_2_0; }
+
+		//("," datatypes+=DataType)*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//datatypes+=DataType
+		public Assignment getDatatypesAssignment_3_3_1() { return cDatatypesAssignment_3_3_1; }
+
+		//DataType
+		public RuleCall getDatatypesDataTypeParserRuleCall_3_3_1_0() { return cDatatypesDataTypeParserRuleCall_3_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }
+
+		//("interfaces" "{" interfaces+=Interface ("," interfaces+=Interface)* "}")?
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"interfaces"
+		public Keyword getInterfacesKeyword_4_0() { return cInterfacesKeyword_4_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }
+
+		//interfaces+=Interface
+		public Assignment getInterfacesAssignment_4_2() { return cInterfacesAssignment_4_2; }
+
+		//Interface
+		public RuleCall getInterfacesInterfaceParserRuleCall_4_2_0() { return cInterfacesInterfaceParserRuleCall_4_2_0; }
+
+		//("," interfaces+=Interface)*
+		public Group getGroup_4_3() { return cGroup_4_3; }
+
+		//","
+		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }
+
+		//interfaces+=Interface
+		public Assignment getInterfacesAssignment_4_3_1() { return cInterfacesAssignment_4_3_1; }
+
+		//Interface
+		public RuleCall getInterfacesInterfaceParserRuleCall_4_3_1_0() { return cInterfacesInterfaceParserRuleCall_4_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }
+
+		//("components" "{" components+=RepositoryComponent ("," components+=RepositoryComponent)* "}")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"components"
+		public Keyword getComponentsKeyword_5_0() { return cComponentsKeyword_5_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }
+
+		//components+=RepositoryComponent
+		public Assignment getComponentsAssignment_5_2() { return cComponentsAssignment_5_2; }
+
+		//RepositoryComponent
+		public RuleCall getComponentsRepositoryComponentParserRuleCall_5_2_0() { return cComponentsRepositoryComponentParserRuleCall_5_2_0; }
+
+		//("," components+=RepositoryComponent)*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//components+=RepositoryComponent
+		public Assignment getComponentsAssignment_5_3_1() { return cComponentsAssignment_5_3_1; }
+
+		//RepositoryComponent
+		public RuleCall getComponentsRepositoryComponentParserRuleCall_5_3_1_0() { return cComponentsRepositoryComponentParserRuleCall_5_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5_4() { return cRightCurlyBracketKeyword_5_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+
+	public class DataTypeElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DataType");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cCollectionDataTypeParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cCompositeDataTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cPrimitiveDataTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		
+		//DataType returns repository::DataType:
+		//	CollectionDataType | CompositeDataType | PrimitiveDataType;
+		public ParserRule getRule() { return rule; }
+
+		//CollectionDataType | CompositeDataType | PrimitiveDataType
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//CollectionDataType
+		public RuleCall getCollectionDataTypeParserRuleCall_0() { return cCollectionDataTypeParserRuleCall_0; }
+
+		//CompositeDataType
+		public RuleCall getCompositeDataTypeParserRuleCall_1() { return cCompositeDataTypeParserRuleCall_1; }
+
+		//PrimitiveDataType
+		public RuleCall getPrimitiveDataTypeParserRuleCall_2() { return cPrimitiveDataTypeParserRuleCall_2; }
+	}
+
+	public class RepositoryComponentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RepositoryComponent");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cRepositoryComponent_ImplParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cBasicComponentParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cCompositeComponentParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		private final RuleCall cSubSystemParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
+		
+		//RepositoryComponent returns repository::RepositoryComponent:
+		//	RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem;
+		public ParserRule getRule() { return rule; }
+
+		//RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//RepositoryComponent_Impl
+		public RuleCall getRepositoryComponent_ImplParserRuleCall_0() { return cRepositoryComponent_ImplParserRuleCall_0; }
+
+		//BasicComponent
+		public RuleCall getBasicComponentParserRuleCall_1() { return cBasicComponentParserRuleCall_1; }
+
+		//CompositeComponent
+		public RuleCall getCompositeComponentParserRuleCall_2() { return cCompositeComponentParserRuleCall_2; }
+
+		//SubSystem
+		public RuleCall getSubSystemParserRuleCall_3() { return cSubSystemParserRuleCall_3; }
+	}
+
+	public class EStringElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EString");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cSTRINGTerminalRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cIDTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		
+		//EString returns ecore::EString:
+		//	STRING | ID;
+		public ParserRule getRule() { return rule; }
+
+		//STRING | ID
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//STRING
+		public RuleCall getSTRINGTerminalRuleCall_0() { return cSTRINGTerminalRuleCall_0; }
+
+		//ID
+		public RuleCall getIDTerminalRuleCall_1() { return cIDTerminalRuleCall_1; }
+	}
+
+	public class InterfaceElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Interface");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cInterfaceKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cParentInterfacesKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cParentInterfacesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final CrossReference cParentInterfacesInterfaceCrossReference_3_2_0 = (CrossReference)cParentInterfacesAssignment_3_2.eContents().get(0);
+		private final RuleCall cParentInterfacesInterfaceEStringParserRuleCall_3_2_0_1 = (RuleCall)cParentInterfacesInterfaceCrossReference_3_2_0.eContents().get(1);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cParentInterfacesAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final CrossReference cParentInterfacesInterfaceCrossReference_3_3_1_0 = (CrossReference)cParentInterfacesAssignment_3_3_1.eContents().get(0);
+		private final RuleCall cParentInterfacesInterfaceEStringParserRuleCall_3_3_1_0_1 = (RuleCall)cParentInterfacesInterfaceCrossReference_3_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cSignaturesKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
+		private final Assignment cSignaturesAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
+		private final RuleCall cSignaturesSignatureParserRuleCall_4_2_0 = (RuleCall)cSignaturesAssignment_4_2.eContents().get(0);
+		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
+		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
+		private final Assignment cSignaturesAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
+		private final RuleCall cSignaturesSignatureParserRuleCall_4_3_1_0 = (RuleCall)cSignaturesAssignment_4_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//Interface returns repository::Interface:
+		//	"Interface" name=EString "{" ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+		//	parentInterfaces+=[repository::Interface|EString])* ")")? ("signatures" "{" signatures+=Signature (","
+		//	signatures+=Signature)* "}")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"Interface" name=EString "{" ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+		//parentInterfaces+=[repository::Interface|EString])* ")")? ("signatures" "{" signatures+=Signature (","
+		//signatures+=Signature)* "}")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"Interface"
+		public Keyword getInterfaceKeyword_0() { return cInterfaceKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+		//parentInterfaces+=[repository::Interface|EString])* ")")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"parentInterfaces"
+		public Keyword getParentInterfacesKeyword_3_0() { return cParentInterfacesKeyword_3_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_3_1() { return cLeftParenthesisKeyword_3_1; }
+
+		//parentInterfaces+=[repository::Interface|EString]
+		public Assignment getParentInterfacesAssignment_3_2() { return cParentInterfacesAssignment_3_2; }
+
+		//[repository::Interface|EString]
+		public CrossReference getParentInterfacesInterfaceCrossReference_3_2_0() { return cParentInterfacesInterfaceCrossReference_3_2_0; }
+
+		//EString
+		public RuleCall getParentInterfacesInterfaceEStringParserRuleCall_3_2_0_1() { return cParentInterfacesInterfaceEStringParserRuleCall_3_2_0_1; }
+
+		//("," parentInterfaces+=[repository::Interface|EString])*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//parentInterfaces+=[repository::Interface|EString]
+		public Assignment getParentInterfacesAssignment_3_3_1() { return cParentInterfacesAssignment_3_3_1; }
+
+		//[repository::Interface|EString]
+		public CrossReference getParentInterfacesInterfaceCrossReference_3_3_1_0() { return cParentInterfacesInterfaceCrossReference_3_3_1_0; }
+
+		//EString
+		public RuleCall getParentInterfacesInterfaceEStringParserRuleCall_3_3_1_0_1() { return cParentInterfacesInterfaceEStringParserRuleCall_3_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_3_4() { return cRightParenthesisKeyword_3_4; }
+
+		//("signatures" "{" signatures+=Signature ("," signatures+=Signature)* "}")?
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"signatures"
+		public Keyword getSignaturesKeyword_4_0() { return cSignaturesKeyword_4_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }
+
+		//signatures+=Signature
+		public Assignment getSignaturesAssignment_4_2() { return cSignaturesAssignment_4_2; }
+
+		//Signature
+		public RuleCall getSignaturesSignatureParserRuleCall_4_2_0() { return cSignaturesSignatureParserRuleCall_4_2_0; }
+
+		//("," signatures+=Signature)*
+		public Group getGroup_4_3() { return cGroup_4_3; }
+
+		//","
+		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }
+
+		//signatures+=Signature
+		public Assignment getSignaturesAssignment_4_3_1() { return cSignaturesAssignment_4_3_1; }
+
+		//Signature
+		public RuleCall getSignaturesSignatureParserRuleCall_4_3_1_0() { return cSignaturesSignatureParserRuleCall_4_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
+	}
+
+	public class RepositoryComponent_ImplElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RepositoryComponent_Impl");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cRepositoryComponentKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cRelationshipKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cRelationshipAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final CrossReference cRelationshipRelationshipCrossReference_3_2_0 = (CrossReference)cRelationshipAssignment_3_2.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_3_2_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_3_2_0.eContents().get(1);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cRelationshipAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final CrossReference cRelationshipRelationshipCrossReference_3_3_1_0 = (CrossReference)cRelationshipAssignment_3_3_1.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_3_3_1_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_3_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cProvidedRolesKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
+		private final Assignment cProvidedRolesAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_4_2_0 = (RuleCall)cProvidedRolesAssignment_4_2.eContents().get(0);
+		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
+		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
+		private final Assignment cProvidedRolesAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_4_3_1_0 = (RuleCall)cProvidedRolesAssignment_4_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cRequiredRolesKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cRequiredRolesAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_5_2_0 = (RuleCall)cRequiredRolesAssignment_5_2.eContents().get(0);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cRequiredRolesAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_5_3_1_0 = (RuleCall)cRequiredRolesAssignment_5_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//RepositoryComponent_Impl returns repository::RepositoryComponent:
+		//	"RepositoryComponent" name=EString "{" ("relationship" "(" relationship+=[Relationship|EString] (","
+		//	relationship+=[Relationship|EString])* ")")? ("providedRoles" "{" providedRoles+=ProvidedRole (","
+		//	providedRoles+=ProvidedRole)* "}")? ("requiredRoles" "{" requiredRoles+=RequiredRole (","
+		//	requiredRoles+=RequiredRole)* "}")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"RepositoryComponent" name=EString "{" ("relationship" "(" relationship+=[Relationship|EString] (","
+		//relationship+=[Relationship|EString])* ")")? ("providedRoles" "{" providedRoles+=ProvidedRole (","
+		//providedRoles+=ProvidedRole)* "}")? ("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*
+		//"}")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"RepositoryComponent"
+		public Keyword getRepositoryComponentKeyword_0() { return cRepositoryComponentKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"relationship"
+		public Keyword getRelationshipKeyword_3_0() { return cRelationshipKeyword_3_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_3_1() { return cLeftParenthesisKeyword_3_1; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_3_2() { return cRelationshipAssignment_3_2; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_3_2_0() { return cRelationshipRelationshipCrossReference_3_2_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_3_2_0_1() { return cRelationshipRelationshipEStringParserRuleCall_3_2_0_1; }
+
+		//("," relationship+=[Relationship|EString])*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_3_3_1() { return cRelationshipAssignment_3_3_1; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_3_3_1_0() { return cRelationshipRelationshipCrossReference_3_3_1_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_3_3_1_0_1() { return cRelationshipRelationshipEStringParserRuleCall_3_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_3_4() { return cRightParenthesisKeyword_3_4; }
+
+		//("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"providedRoles"
+		public Keyword getProvidedRolesKeyword_4_0() { return cProvidedRolesKeyword_4_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_4_2() { return cProvidedRolesAssignment_4_2; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_4_2_0() { return cProvidedRolesProvidedRoleParserRuleCall_4_2_0; }
+
+		//("," providedRoles+=ProvidedRole)*
+		public Group getGroup_4_3() { return cGroup_4_3; }
+
+		//","
+		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_4_3_1() { return cProvidedRolesAssignment_4_3_1; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_4_3_1_0() { return cProvidedRolesProvidedRoleParserRuleCall_4_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }
+
+		//("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"requiredRoles"
+		public Keyword getRequiredRolesKeyword_5_0() { return cRequiredRolesKeyword_5_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_5_2() { return cRequiredRolesAssignment_5_2; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_5_2_0() { return cRequiredRolesRequiredRoleParserRuleCall_5_2_0; }
+
+		//("," requiredRoles+=RequiredRole)*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_5_3_1() { return cRequiredRolesAssignment_5_3_1; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_5_3_1_0() { return cRequiredRolesRequiredRoleParserRuleCall_5_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5_4() { return cRightCurlyBracketKeyword_5_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+
+	public class CollectionDataTypeElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "CollectionDataType");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cCollectionDataTypeKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cInnerTypeKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cInnerTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cInnerTypeDataTypeCrossReference_4_0 = (CrossReference)cInnerTypeAssignment_4.eContents().get(0);
+		private final RuleCall cInnerTypeDataTypeEStringParserRuleCall_4_0_1 = (RuleCall)cInnerTypeDataTypeCrossReference_4_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//CollectionDataType returns repository::CollectionDataType:
+		//	"CollectionDataType" name=EString "{" "innerType" innerType=[repository::DataType|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"CollectionDataType" name=EString "{" "innerType" innerType=[repository::DataType|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"CollectionDataType"
+		public Keyword getCollectionDataTypeKeyword_0() { return cCollectionDataTypeKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"innerType"
+		public Keyword getInnerTypeKeyword_3() { return cInnerTypeKeyword_3; }
+
+		//innerType=[repository::DataType|EString]
+		public Assignment getInnerTypeAssignment_4() { return cInnerTypeAssignment_4; }
+
+		//[repository::DataType|EString]
+		public CrossReference getInnerTypeDataTypeCrossReference_4_0() { return cInnerTypeDataTypeCrossReference_4_0; }
+
+		//EString
+		public RuleCall getInnerTypeDataTypeEStringParserRuleCall_4_0_1() { return cInnerTypeDataTypeEStringParserRuleCall_4_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
+	}
+
+	public class CompositeDataTypeElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "CompositeDataType");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cCompositeDataTypeKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cParentTypesKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cParentTypesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final CrossReference cParentTypesCompositeDataTypeCrossReference_3_2_0 = (CrossReference)cParentTypesAssignment_3_2.eContents().get(0);
+		private final RuleCall cParentTypesCompositeDataTypeEStringParserRuleCall_3_2_0_1 = (RuleCall)cParentTypesCompositeDataTypeCrossReference_3_2_0.eContents().get(1);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cParentTypesAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final CrossReference cParentTypesCompositeDataTypeCrossReference_3_3_1_0 = (CrossReference)cParentTypesAssignment_3_3_1.eContents().get(0);
+		private final RuleCall cParentTypesCompositeDataTypeEStringParserRuleCall_3_3_1_0_1 = (RuleCall)cParentTypesCompositeDataTypeCrossReference_3_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cInnerDeclarationsKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
+		private final Assignment cInnerDeclarationsAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
+		private final RuleCall cInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0 = (RuleCall)cInnerDeclarationsAssignment_4_2.eContents().get(0);
+		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
+		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
+		private final Assignment cInnerDeclarationsAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
+		private final RuleCall cInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0 = (RuleCall)cInnerDeclarationsAssignment_4_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//CompositeDataType returns repository::CompositeDataType:
+		//	"CompositeDataType" name=EString "{" ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+		//	parentTypes+=[repository::CompositeDataType|EString])* ")")? ("innerDeclarations" "{"
+		//	innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"CompositeDataType" name=EString "{" ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+		//parentTypes+=[repository::CompositeDataType|EString])* ")")? ("innerDeclarations" "{"
+		//innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"CompositeDataType"
+		public Keyword getCompositeDataTypeKeyword_0() { return cCompositeDataTypeKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+		//parentTypes+=[repository::CompositeDataType|EString])* ")")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"parentTypes"
+		public Keyword getParentTypesKeyword_3_0() { return cParentTypesKeyword_3_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_3_1() { return cLeftParenthesisKeyword_3_1; }
+
+		//parentTypes+=[repository::CompositeDataType|EString]
+		public Assignment getParentTypesAssignment_3_2() { return cParentTypesAssignment_3_2; }
+
+		//[repository::CompositeDataType|EString]
+		public CrossReference getParentTypesCompositeDataTypeCrossReference_3_2_0() { return cParentTypesCompositeDataTypeCrossReference_3_2_0; }
+
+		//EString
+		public RuleCall getParentTypesCompositeDataTypeEStringParserRuleCall_3_2_0_1() { return cParentTypesCompositeDataTypeEStringParserRuleCall_3_2_0_1; }
+
+		//("," parentTypes+=[repository::CompositeDataType|EString])*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//parentTypes+=[repository::CompositeDataType|EString]
+		public Assignment getParentTypesAssignment_3_3_1() { return cParentTypesAssignment_3_3_1; }
+
+		//[repository::CompositeDataType|EString]
+		public CrossReference getParentTypesCompositeDataTypeCrossReference_3_3_1_0() { return cParentTypesCompositeDataTypeCrossReference_3_3_1_0; }
+
+		//EString
+		public RuleCall getParentTypesCompositeDataTypeEStringParserRuleCall_3_3_1_0_1() { return cParentTypesCompositeDataTypeEStringParserRuleCall_3_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_3_4() { return cRightParenthesisKeyword_3_4; }
+
+		//("innerDeclarations" "{" innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")?
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"innerDeclarations"
+		public Keyword getInnerDeclarationsKeyword_4_0() { return cInnerDeclarationsKeyword_4_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }
+
+		//innerDeclarations+=InnerDeclaration
+		public Assignment getInnerDeclarationsAssignment_4_2() { return cInnerDeclarationsAssignment_4_2; }
+
+		//InnerDeclaration
+		public RuleCall getInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0() { return cInnerDeclarationsInnerDeclarationParserRuleCall_4_2_0; }
+
+		//("," innerDeclarations+=InnerDeclaration)*
+		public Group getGroup_4_3() { return cGroup_4_3; }
+
+		//","
+		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }
+
+		//innerDeclarations+=InnerDeclaration
+		public Assignment getInnerDeclarationsAssignment_4_3_1() { return cInnerDeclarationsAssignment_4_3_1; }
+
+		//InnerDeclaration
+		public RuleCall getInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0() { return cInnerDeclarationsInnerDeclarationParserRuleCall_4_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
+	}
+
+	public class PrimitiveDataTypeElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveDataType");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cPrimitiveDataTypeKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Keyword cTypeKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cTypeAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cTypePrimitiveTypeEnumEnumRuleCall_3_0 = (RuleCall)cTypeAssignment_3.eContents().get(0);
+		private final Keyword cRefKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Assignment cNameAssignment_5 = (Assignment)cGroup.eContents().get(5);
+		private final RuleCall cNameEStringParserRuleCall_5_0 = (RuleCall)cNameAssignment_5.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//PrimitiveDataType returns repository::PrimitiveDataType:
+		//	"PrimitiveDataType" "{" "type" type=PrimitiveTypeEnum "ref" name=EString "}";
+		public ParserRule getRule() { return rule; }
+
+		//"PrimitiveDataType" "{" "type" type=PrimitiveTypeEnum "ref" name=EString "}"
+		public Group getGroup() { return cGroup; }
+
+		//"PrimitiveDataType"
+		public Keyword getPrimitiveDataTypeKeyword_0() { return cPrimitiveDataTypeKeyword_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
+
+		//"type"
+		public Keyword getTypeKeyword_2() { return cTypeKeyword_2; }
+
+		//type=PrimitiveTypeEnum
+		public Assignment getTypeAssignment_3() { return cTypeAssignment_3; }
+
+		//PrimitiveTypeEnum
+		public RuleCall getTypePrimitiveTypeEnumEnumRuleCall_3_0() { return cTypePrimitiveTypeEnumEnumRuleCall_3_0; }
+
+		//"ref"
+		public Keyword getRefKeyword_4() { return cRefKeyword_4; }
+
+		//name=EString
+		public Assignment getNameAssignment_5() { return cNameAssignment_5; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_5_0() { return cNameEStringParserRuleCall_5_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+
+	public class InnerDeclarationElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "InnerDeclaration");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cInnerDeclarationKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cDataTypeKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cDataTypeAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cDataTypeDataTypeCrossReference_4_0 = (CrossReference)cDataTypeAssignment_4.eContents().get(0);
+		private final RuleCall cDataTypeDataTypeEStringParserRuleCall_4_0_1 = (RuleCall)cDataTypeDataTypeCrossReference_4_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//InnerDeclaration returns repository::InnerDeclaration:
+		//	"InnerDeclaration" name=EString "{" "dataType" dataType=[repository::DataType|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"InnerDeclaration" name=EString "{" "dataType" dataType=[repository::DataType|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"InnerDeclaration"
+		public Keyword getInnerDeclarationKeyword_0() { return cInnerDeclarationKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"dataType"
+		public Keyword getDataTypeKeyword_3() { return cDataTypeKeyword_3; }
+
+		//dataType=[repository::DataType|EString]
+		public Assignment getDataTypeAssignment_4() { return cDataTypeAssignment_4; }
+
+		//[repository::DataType|EString]
+		public CrossReference getDataTypeDataTypeCrossReference_4_0() { return cDataTypeDataTypeCrossReference_4_0; }
+
+		//EString
+		public RuleCall getDataTypeDataTypeEStringParserRuleCall_4_0_1() { return cDataTypeDataTypeEStringParserRuleCall_4_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
+	}
+
+	public class SignatureElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Signature");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Alternatives cAlternatives_0 = (Alternatives)cGroup.eContents().get(0);
+		private final Assignment cReturnTypeAssignment_0_0 = (Assignment)cAlternatives_0.eContents().get(0);
+		private final CrossReference cReturnTypeDataTypeCrossReference_0_0_0 = (CrossReference)cReturnTypeAssignment_0_0.eContents().get(0);
+		private final RuleCall cReturnTypeDataTypeEStringParserRuleCall_0_0_0_1 = (RuleCall)cReturnTypeDataTypeCrossReference_0_0_0.eContents().get(1);
+		private final Keyword cVoidKeyword_0_1 = (Keyword)cAlternatives_0.eContents().get(1);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cParametersAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cParametersParameterParserRuleCall_3_0_0 = (RuleCall)cParametersAssignment_3_0.eContents().get(0);
+		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
+		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
+		private final Assignment cParametersAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
+		private final RuleCall cParametersParameterParserRuleCall_3_1_1_0 = (RuleCall)cParametersAssignment_3_1_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//Signature returns repository::Signature:
+		//	(returnType=[repository::DataType|EString] | "void") name=EString "(" (parameters+=Parameter (","
+		//	parameters+=Parameter)*)? ")";
+		public ParserRule getRule() { return rule; }
+
+		//(returnType=[repository::DataType|EString] | "void") name=EString "(" (parameters+=Parameter (","
+		//parameters+=Parameter)*)? ")"
+		public Group getGroup() { return cGroup; }
+
+		//returnType=[repository::DataType|EString] | "void"
+		public Alternatives getAlternatives_0() { return cAlternatives_0; }
+
+		//returnType=[repository::DataType|EString]
+		public Assignment getReturnTypeAssignment_0_0() { return cReturnTypeAssignment_0_0; }
+
+		//[repository::DataType|EString]
+		public CrossReference getReturnTypeDataTypeCrossReference_0_0_0() { return cReturnTypeDataTypeCrossReference_0_0_0; }
+
+		//EString
+		public RuleCall getReturnTypeDataTypeEStringParserRuleCall_0_0_0_1() { return cReturnTypeDataTypeEStringParserRuleCall_0_0_0_1; }
+
+		//"void"
+		public Keyword getVoidKeyword_0_1() { return cVoidKeyword_0_1; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_2() { return cLeftParenthesisKeyword_2; }
+
+		//(parameters+=Parameter ("," parameters+=Parameter)*)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//parameters+=Parameter
+		public Assignment getParametersAssignment_3_0() { return cParametersAssignment_3_0; }
+
+		//Parameter
+		public RuleCall getParametersParameterParserRuleCall_3_0_0() { return cParametersParameterParserRuleCall_3_0_0; }
+
+		//("," parameters+=Parameter)*
+		public Group getGroup_3_1() { return cGroup_3_1; }
+
+		//","
+		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
+
+		//parameters+=Parameter
+		public Assignment getParametersAssignment_3_1_1() { return cParametersAssignment_3_1_1; }
+
+		//Parameter
+		public RuleCall getParametersParameterParserRuleCall_3_1_1_0() { return cParametersParameterParserRuleCall_3_1_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_4() { return cRightParenthesisKeyword_4; }
+	}
+
+	public class ParameterElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Parameter");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cDataTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final CrossReference cDataTypeDataTypeCrossReference_0_0 = (CrossReference)cDataTypeAssignment_0.eContents().get(0);
+		private final RuleCall cDataTypeDataTypeEStringParserRuleCall_0_0_1 = (RuleCall)cDataTypeDataTypeCrossReference_0_0.eContents().get(1);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		
+		//Parameter returns repository::Parameter:
+		//	dataType=[repository::DataType|EString] name=EString;
+		public ParserRule getRule() { return rule; }
+
+		//dataType=[repository::DataType|EString] name=EString
+		public Group getGroup() { return cGroup; }
+
+		//dataType=[repository::DataType|EString]
+		public Assignment getDataTypeAssignment_0() { return cDataTypeAssignment_0; }
+
+		//[repository::DataType|EString]
+		public CrossReference getDataTypeDataTypeCrossReference_0_0() { return cDataTypeDataTypeCrossReference_0_0; }
+
+		//EString
+		public RuleCall getDataTypeDataTypeEStringParserRuleCall_0_0_1() { return cDataTypeDataTypeEStringParserRuleCall_0_0_1; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+	}
+
+	public class ProvidedRoleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ProvidedRole");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cProvidedRoleAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cProvidesKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Assignment cInterfaceAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final CrossReference cInterfaceInterfaceCrossReference_2_0_0 = (CrossReference)cInterfaceAssignment_2_0.eContents().get(0);
+		private final RuleCall cInterfaceInterfaceEStringParserRuleCall_2_0_0_1 = (RuleCall)cInterfaceInterfaceCrossReference_2_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		
+		//ProvidedRole returns repository::ProvidedRole:
+		//	{repository::ProvidedRole} "provides" (interface+=[repository::Interface|EString] ","?)*;
+		public ParserRule getRule() { return rule; }
+
+		//{repository::ProvidedRole} "provides" (interface+=[repository::Interface|EString] ","?)*
+		public Group getGroup() { return cGroup; }
+
+		//{repository::ProvidedRole}
+		public Action getProvidedRoleAction_0() { return cProvidedRoleAction_0; }
+
+		//"provides"
+		public Keyword getProvidesKeyword_1() { return cProvidesKeyword_1; }
+
+		//(interface+=[repository::Interface|EString] ","?)*
+		public Group getGroup_2() { return cGroup_2; }
+
+		//interface+=[repository::Interface|EString]
+		public Assignment getInterfaceAssignment_2_0() { return cInterfaceAssignment_2_0; }
+
+		//[repository::Interface|EString]
+		public CrossReference getInterfaceInterfaceCrossReference_2_0_0() { return cInterfaceInterfaceCrossReference_2_0_0; }
+
+		//EString
+		public RuleCall getInterfaceInterfaceEStringParserRuleCall_2_0_0_1() { return cInterfaceInterfaceEStringParserRuleCall_2_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_2_1() { return cCommaKeyword_2_1; }
+	}
+
+	public class RequiredRoleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RequiredRole");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cRequiredRoleAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cRequiresKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Assignment cInterfaceAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final CrossReference cInterfaceInterfaceCrossReference_2_0_0 = (CrossReference)cInterfaceAssignment_2_0.eContents().get(0);
+		private final RuleCall cInterfaceInterfaceEStringParserRuleCall_2_0_0_1 = (RuleCall)cInterfaceInterfaceCrossReference_2_0_0.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		
+		//RequiredRole returns repository::RequiredRole:
+		//	{repository::RequiredRole} "requires" (interface+=[repository::Interface|EString] ","?)*;
+		public ParserRule getRule() { return rule; }
+
+		//{repository::RequiredRole} "requires" (interface+=[repository::Interface|EString] ","?)*
+		public Group getGroup() { return cGroup; }
+
+		//{repository::RequiredRole}
+		public Action getRequiredRoleAction_0() { return cRequiredRoleAction_0; }
+
+		//"requires"
+		public Keyword getRequiresKeyword_1() { return cRequiresKeyword_1; }
+
+		//(interface+=[repository::Interface|EString] ","?)*
+		public Group getGroup_2() { return cGroup_2; }
+
+		//interface+=[repository::Interface|EString]
+		public Assignment getInterfaceAssignment_2_0() { return cInterfaceAssignment_2_0; }
+
+		//[repository::Interface|EString]
+		public CrossReference getInterfaceInterfaceCrossReference_2_0_0() { return cInterfaceInterfaceCrossReference_2_0_0; }
+
+		//EString
+		public RuleCall getInterfaceInterfaceEStringParserRuleCall_2_0_0_1() { return cInterfaceInterfaceEStringParserRuleCall_2_0_0_1; }
+
+		//","?
+		public Keyword getCommaKeyword_2_1() { return cCommaKeyword_2_1; }
+	}
+
+	public class BasicComponentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BasicComponent");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cBasicComponentKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Assignment cProvidedRolesAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_0_0 = (RuleCall)cProvidedRolesAssignment_2_0.eContents().get(0);
+		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
+		private final Assignment cProvidedRolesAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_1_1_0 = (RuleCall)cProvidedRolesAssignment_2_1_1.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cRequiredRolesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_0_0 = (RuleCall)cRequiredRolesAssignment_3_0.eContents().get(0);
+		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
+		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
+		private final Assignment cRequiredRolesAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_1_1_0 = (RuleCall)cRequiredRolesAssignment_3_1_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cRelationshipKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cRelationshipAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_2_0 = (CrossReference)cRelationshipAssignment_5_2.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_2_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_2_0.eContents().get(1);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cRelationshipAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_3_1_0 = (CrossReference)cRelationshipAssignment_5_3_1.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
+		
+		//BasicComponent returns repository::BasicComponent:
+		//	"BasicComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		//	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+		//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"BasicComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		//(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+		//relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"BasicComponent"
+		public Keyword getBasicComponentKeyword_0() { return cBasicComponentKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//(providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_0() { return cProvidedRolesAssignment_2_0; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_0_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_0_0; }
+
+		//("," providedRoles+=ProvidedRole)*
+		public Group getGroup_2_1() { return cGroup_2_1; }
+
+		//","
+		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_1_1() { return cProvidedRolesAssignment_2_1_1; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_1_1_0; }
+
+		//(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_0() { return cRequiredRolesAssignment_3_0; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_0_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_0_0; }
+
+		//("," requiredRoles+=RequiredRole)*
+		public Group getGroup_3_1() { return cGroup_3_1; }
+
+		//","
+		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_1_1() { return cRequiredRolesAssignment_3_1_1; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_1_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
+
+		//("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"relationship"
+		public Keyword getRelationshipKeyword_5_0() { return cRelationshipKeyword_5_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_5_1() { return cLeftParenthesisKeyword_5_1; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_2() { return cRelationshipAssignment_5_2; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_2_0() { return cRelationshipRelationshipCrossReference_5_2_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_2_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_2_0_1; }
+
+		//("," relationship+=[Relationship|EString])*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_3_1() { return cRelationshipAssignment_5_3_1; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_3_1_0() { return cRelationshipRelationshipCrossReference_5_3_1_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_5_4() { return cRightParenthesisKeyword_5_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6() { return cRightCurlyBracketKeyword_6; }
+	}
+
+	public class CompositeComponentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "CompositeComponent");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cCompositeComponentKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Assignment cProvidedRolesAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_0_0 = (RuleCall)cProvidedRolesAssignment_2_0.eContents().get(0);
+		private final Group cGroup_2_1 = (Group)cGroup_2.eContents().get(1);
+		private final Keyword cCommaKeyword_2_1_0 = (Keyword)cGroup_2_1.eContents().get(0);
+		private final Assignment cProvidedRolesAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_1_1_0 = (RuleCall)cProvidedRolesAssignment_2_1_1.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Assignment cRequiredRolesAssignment_3_0 = (Assignment)cGroup_3.eContents().get(0);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_0_0 = (RuleCall)cRequiredRolesAssignment_3_0.eContents().get(0);
+		private final Group cGroup_3_1 = (Group)cGroup_3.eContents().get(1);
+		private final Keyword cCommaKeyword_3_1_0 = (Keyword)cGroup_3_1.eContents().get(0);
+		private final Assignment cRequiredRolesAssignment_3_1_1 = (Assignment)cGroup_3_1.eContents().get(1);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_1_1_0 = (RuleCall)cRequiredRolesAssignment_3_1_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cRelationshipKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cRelationshipAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_2_0 = (CrossReference)cRelationshipAssignment_5_2.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_2_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_2_0.eContents().get(1);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cRelationshipAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_3_1_0 = (CrossReference)cRelationshipAssignment_5_3_1.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
+		private final Keyword cAssemblyKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
+		private final Assignment cAssemblyAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
+		private final RuleCall cAssemblyComposedStructureAssemblyParserRuleCall_6_1_0 = (RuleCall)cAssemblyAssignment_6_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//CompositeComponent returns repository::CompositeComponent:
+		//	"CompositeComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		//	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+		//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+		//	assembly=ComposedStructureAssembly)? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"CompositeComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		//(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+		//relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+		//assembly=ComposedStructureAssembly)? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"CompositeComponent"
+		public Keyword getCompositeComponentKeyword_0() { return cCompositeComponentKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//(providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_0() { return cProvidedRolesAssignment_2_0; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_0_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_0_0; }
+
+		//("," providedRoles+=ProvidedRole)*
+		public Group getGroup_2_1() { return cGroup_2_1; }
+
+		//","
+		public Keyword getCommaKeyword_2_1_0() { return cCommaKeyword_2_1_0; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_1_1() { return cProvidedRolesAssignment_2_1_1; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_1_1_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_1_1_0; }
+
+		//(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_0() { return cRequiredRolesAssignment_3_0; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_0_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_0_0; }
+
+		//("," requiredRoles+=RequiredRole)*
+		public Group getGroup_3_1() { return cGroup_3_1; }
+
+		//","
+		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_1_1() { return cRequiredRolesAssignment_3_1_1; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_1_1_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_1_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
+
+		//("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"relationship"
+		public Keyword getRelationshipKeyword_5_0() { return cRelationshipKeyword_5_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_5_1() { return cLeftParenthesisKeyword_5_1; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_2() { return cRelationshipAssignment_5_2; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_2_0() { return cRelationshipRelationshipCrossReference_5_2_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_2_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_2_0_1; }
+
+		//("," relationship+=[Relationship|EString])*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_3_1() { return cRelationshipAssignment_5_3_1; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_3_1_0() { return cRelationshipRelationshipCrossReference_5_3_1_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_5_4() { return cRightParenthesisKeyword_5_4; }
+
+		//("assembly" assembly=ComposedStructureAssembly)?
+		public Group getGroup_6() { return cGroup_6; }
+
+		//"assembly"
+		public Keyword getAssemblyKeyword_6_0() { return cAssemblyKeyword_6_0; }
+
+		//assembly=ComposedStructureAssembly
+		public Assignment getAssemblyAssignment_6_1() { return cAssemblyAssignment_6_1; }
+
+		//ComposedStructureAssembly
+		public RuleCall getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0() { return cAssemblyComposedStructureAssemblyParserRuleCall_6_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_7() { return cRightCurlyBracketKeyword_7; }
+	}
+
+	public class SubSystemElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SubSystem");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cSubSystemKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cProvidedRolesKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		private final Assignment cProvidedRolesAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_2_0 = (RuleCall)cProvidedRolesAssignment_2_2.eContents().get(0);
+		private final Group cGroup_2_3 = (Group)cGroup_2.eContents().get(3);
+		private final Keyword cCommaKeyword_2_3_0 = (Keyword)cGroup_2_3.eContents().get(0);
+		private final Assignment cProvidedRolesAssignment_2_3_1 = (Assignment)cGroup_2_3.eContents().get(1);
+		private final RuleCall cProvidedRolesProvidedRoleParserRuleCall_2_3_1_0 = (RuleCall)cProvidedRolesAssignment_2_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_2_4 = (Keyword)cGroup_2.eContents().get(4);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cRequiredRolesKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cRequiredRolesAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_2_0 = (RuleCall)cRequiredRolesAssignment_3_2.eContents().get(0);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cRequiredRolesAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final RuleCall cRequiredRolesRequiredRoleParserRuleCall_3_3_1_0 = (RuleCall)cRequiredRolesAssignment_3_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Keyword cLeftCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cRelationshipKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cRelationshipAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_2_0 = (CrossReference)cRelationshipAssignment_5_2.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_2_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_2_0.eContents().get(1);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cRelationshipAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final CrossReference cRelationshipRelationshipCrossReference_5_3_1_0 = (CrossReference)cRelationshipAssignment_5_3_1.eContents().get(0);
+		private final RuleCall cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1 = (RuleCall)cRelationshipRelationshipCrossReference_5_3_1_0.eContents().get(1);
+		private final Keyword cRightParenthesisKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
+		private final Keyword cAssemblyKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
+		private final Assignment cAssemblyAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
+		private final RuleCall cAssemblyComposedStructureAssemblyParserRuleCall_6_1_0 = (RuleCall)cAssemblyAssignment_6_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//SubSystem returns repository::SubSystem:
+		//	"SubSystem" name=EString ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+		//	("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")? "{" ("relationship" "("
+		//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+		//	assembly=ComposedStructureAssembly)? "}";
+		public ParserRule getRule() { return rule; }
+
+		//"SubSystem" name=EString ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+		//("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")? "{" ("relationship" "("
+		//relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+		//assembly=ComposedStructureAssembly)? "}"
+		public Group getGroup() { return cGroup; }
+
+		//"SubSystem"
+		public Keyword getSubSystemKeyword_0() { return cSubSystemKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//"providedRoles"
+		public Keyword getProvidedRolesKeyword_2_0() { return cProvidedRolesKeyword_2_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2_1() { return cLeftCurlyBracketKeyword_2_1; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_2() { return cProvidedRolesAssignment_2_2; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_2_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_2_0; }
+
+		//("," providedRoles+=ProvidedRole)*
+		public Group getGroup_2_3() { return cGroup_2_3; }
+
+		//","
+		public Keyword getCommaKeyword_2_3_0() { return cCommaKeyword_2_3_0; }
+
+		//providedRoles+=ProvidedRole
+		public Assignment getProvidedRolesAssignment_2_3_1() { return cProvidedRolesAssignment_2_3_1; }
+
+		//ProvidedRole
+		public RuleCall getProvidedRolesProvidedRoleParserRuleCall_2_3_1_0() { return cProvidedRolesProvidedRoleParserRuleCall_2_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_2_4() { return cRightCurlyBracketKeyword_2_4; }
+
+		//("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"requiredRoles"
+		public Keyword getRequiredRolesKeyword_3_0() { return cRequiredRolesKeyword_3_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_3_1() { return cLeftCurlyBracketKeyword_3_1; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_2() { return cRequiredRolesAssignment_3_2; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_2_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_2_0; }
+
+		//("," requiredRoles+=RequiredRole)*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//requiredRoles+=RequiredRole
+		public Assignment getRequiredRolesAssignment_3_3_1() { return cRequiredRolesAssignment_3_3_1; }
+
+		//RequiredRole
+		public RuleCall getRequiredRolesRequiredRoleParserRuleCall_3_3_1_0() { return cRequiredRolesRequiredRoleParserRuleCall_3_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
+
+		//("relationship" "(" relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"relationship"
+		public Keyword getRelationshipKeyword_5_0() { return cRelationshipKeyword_5_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_5_1() { return cLeftParenthesisKeyword_5_1; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_2() { return cRelationshipAssignment_5_2; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_2_0() { return cRelationshipRelationshipCrossReference_5_2_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_2_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_2_0_1; }
+
+		//("," relationship+=[Relationship|EString])*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//relationship+=[Relationship|EString]
+		public Assignment getRelationshipAssignment_5_3_1() { return cRelationshipAssignment_5_3_1; }
+
+		//[Relationship|EString]
+		public CrossReference getRelationshipRelationshipCrossReference_5_3_1_0() { return cRelationshipRelationshipCrossReference_5_3_1_0; }
+
+		//EString
+		public RuleCall getRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1() { return cRelationshipRelationshipEStringParserRuleCall_5_3_1_0_1; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_5_4() { return cRightParenthesisKeyword_5_4; }
+
+		//("assembly" assembly=ComposedStructureAssembly)?
+		public Group getGroup_6() { return cGroup_6; }
+
+		//"assembly"
+		public Keyword getAssemblyKeyword_6_0() { return cAssemblyKeyword_6_0; }
+
+		//assembly=ComposedStructureAssembly
+		public Assignment getAssemblyAssignment_6_1() { return cAssemblyAssignment_6_1; }
+
+		//ComposedStructureAssembly
+		public RuleCall getAssemblyComposedStructureAssemblyParserRuleCall_6_1_0() { return cAssemblyComposedStructureAssemblyParserRuleCall_6_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_7() { return cRightCurlyBracketKeyword_7; }
+	}
+
+	public class ComposedStructureAssemblyElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ComposedStructureAssembly");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cComposedStructureAssemblyAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cComposedStructureAssemblyKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cAssemblyContextsKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_3_1 = (Keyword)cGroup_3.eContents().get(1);
+		private final Assignment cAssemblyContextsAssignment_3_2 = (Assignment)cGroup_3.eContents().get(2);
+		private final RuleCall cAssemblyContextsAssemblyContextParserRuleCall_3_2_0 = (RuleCall)cAssemblyContextsAssignment_3_2.eContents().get(0);
+		private final Group cGroup_3_3 = (Group)cGroup_3.eContents().get(3);
+		private final Keyword cCommaKeyword_3_3_0 = (Keyword)cGroup_3_3.eContents().get(0);
+		private final Assignment cAssemblyContextsAssignment_3_3_1 = (Assignment)cGroup_3_3.eContents().get(1);
+		private final RuleCall cAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0 = (RuleCall)cAssemblyContextsAssignment_3_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
+		private final Group cGroup_4 = (Group)cGroup.eContents().get(4);
+		private final Keyword cAssemblyConnectorsKeyword_4_0 = (Keyword)cGroup_4.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_4_1 = (Keyword)cGroup_4.eContents().get(1);
+		private final Assignment cAssemblyConnectorsAssignment_4_2 = (Assignment)cGroup_4.eContents().get(2);
+		private final RuleCall cAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0 = (RuleCall)cAssemblyConnectorsAssignment_4_2.eContents().get(0);
+		private final Group cGroup_4_3 = (Group)cGroup_4.eContents().get(3);
+		private final Keyword cCommaKeyword_4_3_0 = (Keyword)cGroup_4_3.eContents().get(0);
+		private final Assignment cAssemblyConnectorsAssignment_4_3_1 = (Assignment)cGroup_4_3.eContents().get(1);
+		private final RuleCall cAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0 = (RuleCall)cAssemblyConnectorsAssignment_4_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_4_4 = (Keyword)cGroup_4.eContents().get(4);
+		private final Group cGroup_5 = (Group)cGroup.eContents().get(5);
+		private final Keyword cProvidedDelegationConnectorsKeyword_5_0 = (Keyword)cGroup_5.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_5_1 = (Keyword)cGroup_5.eContents().get(1);
+		private final Assignment cProvidedDelegationConnectorsAssignment_5_2 = (Assignment)cGroup_5.eContents().get(2);
+		private final RuleCall cProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0 = (RuleCall)cProvidedDelegationConnectorsAssignment_5_2.eContents().get(0);
+		private final Group cGroup_5_3 = (Group)cGroup_5.eContents().get(3);
+		private final Keyword cCommaKeyword_5_3_0 = (Keyword)cGroup_5_3.eContents().get(0);
+		private final Assignment cProvidedDelegationConnectorsAssignment_5_3_1 = (Assignment)cGroup_5_3.eContents().get(1);
+		private final RuleCall cProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0 = (RuleCall)cProvidedDelegationConnectorsAssignment_5_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_5_4 = (Keyword)cGroup_5.eContents().get(4);
+		private final Group cGroup_6 = (Group)cGroup.eContents().get(6);
+		private final Keyword cRequiredDelegationConnectorsKeyword_6_0 = (Keyword)cGroup_6.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_6_1 = (Keyword)cGroup_6.eContents().get(1);
+		private final Assignment cRequiredDelegationConnectorsAssignment_6_2 = (Assignment)cGroup_6.eContents().get(2);
+		private final RuleCall cRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0 = (RuleCall)cRequiredDelegationConnectorsAssignment_6_2.eContents().get(0);
+		private final Group cGroup_6_3 = (Group)cGroup_6.eContents().get(3);
+		private final Keyword cCommaKeyword_6_3_0 = (Keyword)cGroup_6_3.eContents().get(0);
+		private final Assignment cRequiredDelegationConnectorsAssignment_6_3_1 = (Assignment)cGroup_6_3.eContents().get(1);
+		private final RuleCall cRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0 = (RuleCall)cRequiredDelegationConnectorsAssignment_6_3_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_6_4 = (Keyword)cGroup_6.eContents().get(4);
+		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		
+		//ComposedStructureAssembly returns repository_composites::ComposedStructureAssembly:
+		//	{repository_composites::ComposedStructureAssembly} "ComposedStructureAssembly" "{" ("assemblyContexts" "{"
+		//	assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")? ("assemblyConnectors" "{"
+		//	assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+		//	("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+		//	providedDelegationConnectors+=ProvidedDelegationConnector)* "}")? ("requiredDelegationConnectors" "{"
+		//	requiredDelegationConnectors+=RequiredDelegationConnector (","
+		//	requiredDelegationConnectors+=RequiredDelegationConnector)* "}")? "}";
+		public ParserRule getRule() { return rule; }
+
+		//{repository_composites::ComposedStructureAssembly} "ComposedStructureAssembly" "{" ("assemblyContexts" "{"
+		//assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")? ("assemblyConnectors" "{"
+		//assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+		//("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+		//providedDelegationConnectors+=ProvidedDelegationConnector)* "}")? ("requiredDelegationConnectors" "{"
+		//requiredDelegationConnectors+=RequiredDelegationConnector (","
+		//requiredDelegationConnectors+=RequiredDelegationConnector)* "}")? "}"
+		public Group getGroup() { return cGroup; }
+
+		//{repository_composites::ComposedStructureAssembly}
+		public Action getComposedStructureAssemblyAction_0() { return cComposedStructureAssemblyAction_0; }
+
+		//"ComposedStructureAssembly"
+		public Keyword getComposedStructureAssemblyKeyword_1() { return cComposedStructureAssemblyKeyword_1; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//("assemblyContexts" "{" assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"assemblyContexts"
+		public Keyword getAssemblyContextsKeyword_3_0() { return cAssemblyContextsKeyword_3_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_3_1() { return cLeftCurlyBracketKeyword_3_1; }
+
+		//assemblyContexts+=AssemblyContext
+		public Assignment getAssemblyContextsAssignment_3_2() { return cAssemblyContextsAssignment_3_2; }
+
+		//AssemblyContext
+		public RuleCall getAssemblyContextsAssemblyContextParserRuleCall_3_2_0() { return cAssemblyContextsAssemblyContextParserRuleCall_3_2_0; }
+
+		//("," assemblyContexts+=AssemblyContext)*
+		public Group getGroup_3_3() { return cGroup_3_3; }
+
+		//","
+		public Keyword getCommaKeyword_3_3_0() { return cCommaKeyword_3_3_0; }
+
+		//assemblyContexts+=AssemblyContext
+		public Assignment getAssemblyContextsAssignment_3_3_1() { return cAssemblyContextsAssignment_3_3_1; }
+
+		//AssemblyContext
+		public RuleCall getAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0() { return cAssemblyContextsAssemblyContextParserRuleCall_3_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_3_4() { return cRightCurlyBracketKeyword_3_4; }
+
+		//("assemblyConnectors" "{" assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+		public Group getGroup_4() { return cGroup_4; }
+
+		//"assemblyConnectors"
+		public Keyword getAssemblyConnectorsKeyword_4_0() { return cAssemblyConnectorsKeyword_4_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_1() { return cLeftCurlyBracketKeyword_4_1; }
+
+		//assemblyConnectors+=AssemblyConnector
+		public Assignment getAssemblyConnectorsAssignment_4_2() { return cAssemblyConnectorsAssignment_4_2; }
+
+		//AssemblyConnector
+		public RuleCall getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0() { return cAssemblyConnectorsAssemblyConnectorParserRuleCall_4_2_0; }
+
+		//("," assemblyConnectors+=AssemblyConnector)*
+		public Group getGroup_4_3() { return cGroup_4_3; }
+
+		//","
+		public Keyword getCommaKeyword_4_3_0() { return cCommaKeyword_4_3_0; }
+
+		//assemblyConnectors+=AssemblyConnector
+		public Assignment getAssemblyConnectorsAssignment_4_3_1() { return cAssemblyConnectorsAssignment_4_3_1; }
+
+		//AssemblyConnector
+		public RuleCall getAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0() { return cAssemblyConnectorsAssemblyConnectorParserRuleCall_4_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_4() { return cRightCurlyBracketKeyword_4_4; }
+
+		//("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+		//providedDelegationConnectors+=ProvidedDelegationConnector)* "}")?
+		public Group getGroup_5() { return cGroup_5; }
+
+		//"providedDelegationConnectors"
+		public Keyword getProvidedDelegationConnectorsKeyword_5_0() { return cProvidedDelegationConnectorsKeyword_5_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_5_1() { return cLeftCurlyBracketKeyword_5_1; }
+
+		//providedDelegationConnectors+=ProvidedDelegationConnector
+		public Assignment getProvidedDelegationConnectorsAssignment_5_2() { return cProvidedDelegationConnectorsAssignment_5_2; }
+
+		//ProvidedDelegationConnector
+		public RuleCall getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0() { return cProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_2_0; }
+
+		//("," providedDelegationConnectors+=ProvidedDelegationConnector)*
+		public Group getGroup_5_3() { return cGroup_5_3; }
+
+		//","
+		public Keyword getCommaKeyword_5_3_0() { return cCommaKeyword_5_3_0; }
+
+		//providedDelegationConnectors+=ProvidedDelegationConnector
+		public Assignment getProvidedDelegationConnectorsAssignment_5_3_1() { return cProvidedDelegationConnectorsAssignment_5_3_1; }
+
+		//ProvidedDelegationConnector
+		public RuleCall getProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0() { return cProvidedDelegationConnectorsProvidedDelegationConnectorParserRuleCall_5_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5_4() { return cRightCurlyBracketKeyword_5_4; }
+
+		//("requiredDelegationConnectors" "{" requiredDelegationConnectors+=RequiredDelegationConnector (","
+		//requiredDelegationConnectors+=RequiredDelegationConnector)* "}")?
+		public Group getGroup_6() { return cGroup_6; }
+
+		//"requiredDelegationConnectors"
+		public Keyword getRequiredDelegationConnectorsKeyword_6_0() { return cRequiredDelegationConnectorsKeyword_6_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_6_1() { return cLeftCurlyBracketKeyword_6_1; }
+
+		//requiredDelegationConnectors+=RequiredDelegationConnector
+		public Assignment getRequiredDelegationConnectorsAssignment_6_2() { return cRequiredDelegationConnectorsAssignment_6_2; }
+
+		//RequiredDelegationConnector
+		public RuleCall getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0() { return cRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_2_0; }
+
+		//("," requiredDelegationConnectors+=RequiredDelegationConnector)*
+		public Group getGroup_6_3() { return cGroup_6_3; }
+
+		//","
+		public Keyword getCommaKeyword_6_3_0() { return cCommaKeyword_6_3_0; }
+
+		//requiredDelegationConnectors+=RequiredDelegationConnector
+		public Assignment getRequiredDelegationConnectorsAssignment_6_3_1() { return cRequiredDelegationConnectorsAssignment_6_3_1; }
+
+		//RequiredDelegationConnector
+		public RuleCall getRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0() { return cRequiredDelegationConnectorsRequiredDelegationConnectorParserRuleCall_6_3_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_6_4() { return cRightCurlyBracketKeyword_6_4; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_7() { return cRightCurlyBracketKeyword_7; }
+	}
+
+	public class AssemblyContextElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AssemblyContext");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cAssemblyContextKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cEncapsulatedComponentKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cEncapsulatedComponentAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cEncapsulatedComponentRepositoryComponentCrossReference_4_0 = (CrossReference)cEncapsulatedComponentAssignment_4.eContents().get(0);
+		private final RuleCall cEncapsulatedComponentRepositoryComponentEStringParserRuleCall_4_0_1 = (RuleCall)cEncapsulatedComponentRepositoryComponentCrossReference_4_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//AssemblyContext returns repository_composites::AssemblyContext:
+		//	"AssemblyContext" name=EString "{" "encapsulatedComponent"
+		//	encapsulatedComponent=[repository::RepositoryComponent|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"AssemblyContext" name=EString "{" "encapsulatedComponent"
+		//encapsulatedComponent=[repository::RepositoryComponent|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"AssemblyContext"
+		public Keyword getAssemblyContextKeyword_0() { return cAssemblyContextKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"encapsulatedComponent"
+		public Keyword getEncapsulatedComponentKeyword_3() { return cEncapsulatedComponentKeyword_3; }
+
+		//encapsulatedComponent=[repository::RepositoryComponent|EString]
+		public Assignment getEncapsulatedComponentAssignment_4() { return cEncapsulatedComponentAssignment_4; }
+
+		//[repository::RepositoryComponent|EString]
+		public CrossReference getEncapsulatedComponentRepositoryComponentCrossReference_4_0() { return cEncapsulatedComponentRepositoryComponentCrossReference_4_0; }
+
+		//EString
+		public RuleCall getEncapsulatedComponentRepositoryComponentEStringParserRuleCall_4_0_1() { return cEncapsulatedComponentRepositoryComponentEStringParserRuleCall_4_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
+	}
+
+	public class AssemblyConnectorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "AssemblyConnector");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cAssemblyConnectorKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cRequiredRoleKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cRequiredRoleAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cRequiredRoleRequiredRoleCrossReference_4_0 = (CrossReference)cRequiredRoleAssignment_4.eContents().get(0);
+		private final RuleCall cRequiredRoleRequiredRoleEStringParserRuleCall_4_0_1 = (RuleCall)cRequiredRoleRequiredRoleCrossReference_4_0.eContents().get(1);
+		private final Keyword cProvidedRoleKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cProvidedRoleAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final CrossReference cProvidedRoleProvidedRoleCrossReference_6_0 = (CrossReference)cProvidedRoleAssignment_6.eContents().get(0);
+		private final RuleCall cProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1 = (RuleCall)cProvidedRoleProvidedRoleCrossReference_6_0.eContents().get(1);
+		private final Keyword cProvidingAssemblyContextKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		private final Assignment cProvidingAssemblyContextAssignment_8 = (Assignment)cGroup.eContents().get(8);
+		private final CrossReference cProvidingAssemblyContextAssemblyContextCrossReference_8_0 = (CrossReference)cProvidingAssemblyContextAssignment_8.eContents().get(0);
+		private final RuleCall cProvidingAssemblyContextAssemblyContextEStringParserRuleCall_8_0_1 = (RuleCall)cProvidingAssemblyContextAssemblyContextCrossReference_8_0.eContents().get(1);
+		private final Keyword cRequiringAssemblyContextKeyword_9 = (Keyword)cGroup.eContents().get(9);
+		private final Assignment cRequiringAssemblyContextAssignment_10 = (Assignment)cGroup.eContents().get(10);
+		private final CrossReference cRequiringAssemblyContextAssemblyContextCrossReference_10_0 = (CrossReference)cRequiringAssemblyContextAssignment_10.eContents().get(0);
+		private final RuleCall cRequiringAssemblyContextAssemblyContextEStringParserRuleCall_10_0_1 = (RuleCall)cRequiringAssemblyContextAssemblyContextCrossReference_10_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_11 = (Keyword)cGroup.eContents().get(11);
+		
+		//AssemblyConnector returns repository_composites::AssemblyConnector:
+		//	"AssemblyConnector" name=EString "{" "requiredRole" requiredRole=[repository::RequiredRole|EString] "providedRole"
+		//	providedRole=[repository::ProvidedRole|EString] "providingAssemblyContext"
+		//	providingAssemblyContext=[repository_composites::AssemblyContext|EString] "requiringAssemblyContext"
+		//	requiringAssemblyContext=[repository_composites::AssemblyContext|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"AssemblyConnector" name=EString "{" "requiredRole" requiredRole=[repository::RequiredRole|EString] "providedRole"
+		//providedRole=[repository::ProvidedRole|EString] "providingAssemblyContext"
+		//providingAssemblyContext=[repository_composites::AssemblyContext|EString] "requiringAssemblyContext"
+		//requiringAssemblyContext=[repository_composites::AssemblyContext|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"AssemblyConnector"
+		public Keyword getAssemblyConnectorKeyword_0() { return cAssemblyConnectorKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"requiredRole"
+		public Keyword getRequiredRoleKeyword_3() { return cRequiredRoleKeyword_3; }
+
+		//requiredRole=[repository::RequiredRole|EString]
+		public Assignment getRequiredRoleAssignment_4() { return cRequiredRoleAssignment_4; }
+
+		//[repository::RequiredRole|EString]
+		public CrossReference getRequiredRoleRequiredRoleCrossReference_4_0() { return cRequiredRoleRequiredRoleCrossReference_4_0; }
+
+		//EString
+		public RuleCall getRequiredRoleRequiredRoleEStringParserRuleCall_4_0_1() { return cRequiredRoleRequiredRoleEStringParserRuleCall_4_0_1; }
+
+		//"providedRole"
+		public Keyword getProvidedRoleKeyword_5() { return cProvidedRoleKeyword_5; }
+
+		//providedRole=[repository::ProvidedRole|EString]
+		public Assignment getProvidedRoleAssignment_6() { return cProvidedRoleAssignment_6; }
+
+		//[repository::ProvidedRole|EString]
+		public CrossReference getProvidedRoleProvidedRoleCrossReference_6_0() { return cProvidedRoleProvidedRoleCrossReference_6_0; }
+
+		//EString
+		public RuleCall getProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1() { return cProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1; }
+
+		//"providingAssemblyContext"
+		public Keyword getProvidingAssemblyContextKeyword_7() { return cProvidingAssemblyContextKeyword_7; }
+
+		//providingAssemblyContext=[repository_composites::AssemblyContext|EString]
+		public Assignment getProvidingAssemblyContextAssignment_8() { return cProvidingAssemblyContextAssignment_8; }
+
+		//[repository_composites::AssemblyContext|EString]
+		public CrossReference getProvidingAssemblyContextAssemblyContextCrossReference_8_0() { return cProvidingAssemblyContextAssemblyContextCrossReference_8_0; }
+
+		//EString
+		public RuleCall getProvidingAssemblyContextAssemblyContextEStringParserRuleCall_8_0_1() { return cProvidingAssemblyContextAssemblyContextEStringParserRuleCall_8_0_1; }
+
+		//"requiringAssemblyContext"
+		public Keyword getRequiringAssemblyContextKeyword_9() { return cRequiringAssemblyContextKeyword_9; }
+
+		//requiringAssemblyContext=[repository_composites::AssemblyContext|EString]
+		public Assignment getRequiringAssemblyContextAssignment_10() { return cRequiringAssemblyContextAssignment_10; }
+
+		//[repository_composites::AssemblyContext|EString]
+		public CrossReference getRequiringAssemblyContextAssemblyContextCrossReference_10_0() { return cRequiringAssemblyContextAssemblyContextCrossReference_10_0; }
+
+		//EString
+		public RuleCall getRequiringAssemblyContextAssemblyContextEStringParserRuleCall_10_0_1() { return cRequiringAssemblyContextAssemblyContextEStringParserRuleCall_10_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_11() { return cRightCurlyBracketKeyword_11; }
+	}
+
+	public class ProvidedDelegationConnectorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ProvidedDelegationConnector");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cProvidedDelegationConnectorKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cAssemblyContextKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cAssemblyContextAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cAssemblyContextAssemblyContextCrossReference_4_0 = (CrossReference)cAssemblyContextAssignment_4.eContents().get(0);
+		private final RuleCall cAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1 = (RuleCall)cAssemblyContextAssemblyContextCrossReference_4_0.eContents().get(1);
+		private final Keyword cInnerProvidedRoleKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cInnerProvidedRoleAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final CrossReference cInnerProvidedRoleProvidedRoleCrossReference_6_0 = (CrossReference)cInnerProvidedRoleAssignment_6.eContents().get(0);
+		private final RuleCall cInnerProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1 = (RuleCall)cInnerProvidedRoleProvidedRoleCrossReference_6_0.eContents().get(1);
+		private final Keyword cOuterProvidedRoleKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		private final Assignment cOuterProvidedRoleAssignment_8 = (Assignment)cGroup.eContents().get(8);
+		private final CrossReference cOuterProvidedRoleProvidedRoleCrossReference_8_0 = (CrossReference)cOuterProvidedRoleAssignment_8.eContents().get(0);
+		private final RuleCall cOuterProvidedRoleProvidedRoleEStringParserRuleCall_8_0_1 = (RuleCall)cOuterProvidedRoleProvidedRoleCrossReference_8_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
+		
+		//ProvidedDelegationConnector returns repository_composites::ProvidedDelegationConnector:
+		//	"ProvidedDelegationConnector" name=EString "{" "assemblyContext"
+		//	assemblyContext=[repository_composites::AssemblyContext|EString] "innerProvidedRole"
+		//	innerProvidedRole=[repository::ProvidedRole|EString] "outerProvidedRole"
+		//	outerProvidedRole=[repository::ProvidedRole|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"ProvidedDelegationConnector" name=EString "{" "assemblyContext"
+		//assemblyContext=[repository_composites::AssemblyContext|EString] "innerProvidedRole"
+		//innerProvidedRole=[repository::ProvidedRole|EString] "outerProvidedRole"
+		//outerProvidedRole=[repository::ProvidedRole|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"ProvidedDelegationConnector"
+		public Keyword getProvidedDelegationConnectorKeyword_0() { return cProvidedDelegationConnectorKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"assemblyContext"
+		public Keyword getAssemblyContextKeyword_3() { return cAssemblyContextKeyword_3; }
+
+		//assemblyContext=[repository_composites::AssemblyContext|EString]
+		public Assignment getAssemblyContextAssignment_4() { return cAssemblyContextAssignment_4; }
+
+		//[repository_composites::AssemblyContext|EString]
+		public CrossReference getAssemblyContextAssemblyContextCrossReference_4_0() { return cAssemblyContextAssemblyContextCrossReference_4_0; }
+
+		//EString
+		public RuleCall getAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1() { return cAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1; }
+
+		//"innerProvidedRole"
+		public Keyword getInnerProvidedRoleKeyword_5() { return cInnerProvidedRoleKeyword_5; }
+
+		//innerProvidedRole=[repository::ProvidedRole|EString]
+		public Assignment getInnerProvidedRoleAssignment_6() { return cInnerProvidedRoleAssignment_6; }
+
+		//[repository::ProvidedRole|EString]
+		public CrossReference getInnerProvidedRoleProvidedRoleCrossReference_6_0() { return cInnerProvidedRoleProvidedRoleCrossReference_6_0; }
+
+		//EString
+		public RuleCall getInnerProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1() { return cInnerProvidedRoleProvidedRoleEStringParserRuleCall_6_0_1; }
+
+		//"outerProvidedRole"
+		public Keyword getOuterProvidedRoleKeyword_7() { return cOuterProvidedRoleKeyword_7; }
+
+		//outerProvidedRole=[repository::ProvidedRole|EString]
+		public Assignment getOuterProvidedRoleAssignment_8() { return cOuterProvidedRoleAssignment_8; }
+
+		//[repository::ProvidedRole|EString]
+		public CrossReference getOuterProvidedRoleProvidedRoleCrossReference_8_0() { return cOuterProvidedRoleProvidedRoleCrossReference_8_0; }
+
+		//EString
+		public RuleCall getOuterProvidedRoleProvidedRoleEStringParserRuleCall_8_0_1() { return cOuterProvidedRoleProvidedRoleEStringParserRuleCall_8_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_9() { return cRightCurlyBracketKeyword_9; }
+	}
+
+	public class RequiredDelegationConnectorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RequiredDelegationConnector");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cRequiredDelegationConnectorKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameEStringParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Keyword cAssemblyContextKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cAssemblyContextAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final CrossReference cAssemblyContextAssemblyContextCrossReference_4_0 = (CrossReference)cAssemblyContextAssignment_4.eContents().get(0);
+		private final RuleCall cAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1 = (RuleCall)cAssemblyContextAssemblyContextCrossReference_4_0.eContents().get(1);
+		private final Keyword cInnerRequiredRoleKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cInnerRequiredRoleAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final CrossReference cInnerRequiredRoleRequiredRoleCrossReference_6_0 = (CrossReference)cInnerRequiredRoleAssignment_6.eContents().get(0);
+		private final RuleCall cInnerRequiredRoleRequiredRoleEStringParserRuleCall_6_0_1 = (RuleCall)cInnerRequiredRoleRequiredRoleCrossReference_6_0.eContents().get(1);
+		private final Keyword cOuterRequiredRoleKeyword_7 = (Keyword)cGroup.eContents().get(7);
+		private final Assignment cOuterRequiredRoleAssignment_8 = (Assignment)cGroup.eContents().get(8);
+		private final CrossReference cOuterRequiredRoleRequiredRoleCrossReference_8_0 = (CrossReference)cOuterRequiredRoleAssignment_8.eContents().get(0);
+		private final RuleCall cOuterRequiredRoleRequiredRoleEStringParserRuleCall_8_0_1 = (RuleCall)cOuterRequiredRoleRequiredRoleCrossReference_8_0.eContents().get(1);
+		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
+		
+		//RequiredDelegationConnector returns repository_composites::RequiredDelegationConnector:
+		//	"RequiredDelegationConnector" name=EString "{" "assemblyContext"
+		//	assemblyContext=[repository_composites::AssemblyContext|EString] "innerRequiredRole"
+		//	innerRequiredRole=[repository::RequiredRole|EString] "outerRequiredRole"
+		//	outerRequiredRole=[repository::RequiredRole|EString] "}";
+		public ParserRule getRule() { return rule; }
+
+		//"RequiredDelegationConnector" name=EString "{" "assemblyContext"
+		//assemblyContext=[repository_composites::AssemblyContext|EString] "innerRequiredRole"
+		//innerRequiredRole=[repository::RequiredRole|EString] "outerRequiredRole"
+		//outerRequiredRole=[repository::RequiredRole|EString] "}"
+		public Group getGroup() { return cGroup; }
+
+		//"RequiredDelegationConnector"
+		public Keyword getRequiredDelegationConnectorKeyword_0() { return cRequiredDelegationConnectorKeyword_0; }
+
+		//name=EString
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//EString
+		public RuleCall getNameEStringParserRuleCall_1_0() { return cNameEStringParserRuleCall_1_0; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
+
+		//"assemblyContext"
+		public Keyword getAssemblyContextKeyword_3() { return cAssemblyContextKeyword_3; }
+
+		//assemblyContext=[repository_composites::AssemblyContext|EString]
+		public Assignment getAssemblyContextAssignment_4() { return cAssemblyContextAssignment_4; }
+
+		//[repository_composites::AssemblyContext|EString]
+		public CrossReference getAssemblyContextAssemblyContextCrossReference_4_0() { return cAssemblyContextAssemblyContextCrossReference_4_0; }
+
+		//EString
+		public RuleCall getAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1() { return cAssemblyContextAssemblyContextEStringParserRuleCall_4_0_1; }
+
+		//"innerRequiredRole"
+		public Keyword getInnerRequiredRoleKeyword_5() { return cInnerRequiredRoleKeyword_5; }
+
+		//innerRequiredRole=[repository::RequiredRole|EString]
+		public Assignment getInnerRequiredRoleAssignment_6() { return cInnerRequiredRoleAssignment_6; }
+
+		//[repository::RequiredRole|EString]
+		public CrossReference getInnerRequiredRoleRequiredRoleCrossReference_6_0() { return cInnerRequiredRoleRequiredRoleCrossReference_6_0; }
+
+		//EString
+		public RuleCall getInnerRequiredRoleRequiredRoleEStringParserRuleCall_6_0_1() { return cInnerRequiredRoleRequiredRoleEStringParserRuleCall_6_0_1; }
+
+		//"outerRequiredRole"
+		public Keyword getOuterRequiredRoleKeyword_7() { return cOuterRequiredRoleKeyword_7; }
+
+		//outerRequiredRole=[repository::RequiredRole|EString]
+		public Assignment getOuterRequiredRoleAssignment_8() { return cOuterRequiredRoleAssignment_8; }
+
+		//[repository::RequiredRole|EString]
+		public CrossReference getOuterRequiredRoleRequiredRoleCrossReference_8_0() { return cOuterRequiredRoleRequiredRoleCrossReference_8_0; }
+
+		//EString
+		public RuleCall getOuterRequiredRoleRequiredRoleEStringParserRuleCall_8_0_1() { return cOuterRequiredRoleRequiredRoleEStringParserRuleCall_8_0_1; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_9() { return cRightCurlyBracketKeyword_9; }
+	}
+	
+	
+	public class PrimitiveTypeEnumElements extends AbstractEnumRuleElementFinder {
+		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "PrimitiveTypeEnum");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final EnumLiteralDeclaration cINTEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
+		private final Keyword cINTINTKeyword_0_0 = (Keyword)cINTEnumLiteralDeclaration_0.eContents().get(0);
+		private final EnumLiteralDeclaration cSTRINGEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
+		private final Keyword cSTRINGSTRINGKeyword_1_0 = (Keyword)cSTRINGEnumLiteralDeclaration_1.eContents().get(0);
+		private final EnumLiteralDeclaration cBOOLEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
+		private final Keyword cBOOLBOOLKeyword_2_0 = (Keyword)cBOOLEnumLiteralDeclaration_2.eContents().get(0);
+		private final EnumLiteralDeclaration cDOUBLEEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
+		private final Keyword cDOUBLEDOUBLEKeyword_3_0 = (Keyword)cDOUBLEEnumLiteralDeclaration_3.eContents().get(0);
+		private final EnumLiteralDeclaration cCHAREnumLiteralDeclaration_4 = (EnumLiteralDeclaration)cAlternatives.eContents().get(4);
+		private final Keyword cCHARCHARKeyword_4_0 = (Keyword)cCHAREnumLiteralDeclaration_4.eContents().get(0);
+		private final EnumLiteralDeclaration cBYTEEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
+		private final Keyword cBYTEBYTEKeyword_5_0 = (Keyword)cBYTEEnumLiteralDeclaration_5.eContents().get(0);
+		private final EnumLiteralDeclaration cLONGEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
+		private final Keyword cLONGLONGKeyword_6_0 = (Keyword)cLONGEnumLiteralDeclaration_6.eContents().get(0);
+		
+		//enum PrimitiveTypeEnum returns repository::PrimitiveTypeEnum:
+		//	INT | STRING | BOOL | DOUBLE | CHAR | BYTE | LONG;
+		public EnumRule getRule() { return rule; }
+
+		//INT | STRING | BOOL | DOUBLE | CHAR | BYTE | LONG
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//INT
+		public EnumLiteralDeclaration getINTEnumLiteralDeclaration_0() { return cINTEnumLiteralDeclaration_0; }
+
+		//"INT"
+		public Keyword getINTINTKeyword_0_0() { return cINTINTKeyword_0_0; }
+
+		//STRING
+		public EnumLiteralDeclaration getSTRINGEnumLiteralDeclaration_1() { return cSTRINGEnumLiteralDeclaration_1; }
+
+		//"STRING"
+		public Keyword getSTRINGSTRINGKeyword_1_0() { return cSTRINGSTRINGKeyword_1_0; }
+
+		//BOOL
+		public EnumLiteralDeclaration getBOOLEnumLiteralDeclaration_2() { return cBOOLEnumLiteralDeclaration_2; }
+
+		//"BOOL"
+		public Keyword getBOOLBOOLKeyword_2_0() { return cBOOLBOOLKeyword_2_0; }
+
+		//DOUBLE
+		public EnumLiteralDeclaration getDOUBLEEnumLiteralDeclaration_3() { return cDOUBLEEnumLiteralDeclaration_3; }
+
+		//"DOUBLE"
+		public Keyword getDOUBLEDOUBLEKeyword_3_0() { return cDOUBLEDOUBLEKeyword_3_0; }
+
+		//CHAR
+		public EnumLiteralDeclaration getCHAREnumLiteralDeclaration_4() { return cCHAREnumLiteralDeclaration_4; }
+
+		//"CHAR"
+		public Keyword getCHARCHARKeyword_4_0() { return cCHARCHARKeyword_4_0; }
+
+		//BYTE
+		public EnumLiteralDeclaration getBYTEEnumLiteralDeclaration_5() { return cBYTEEnumLiteralDeclaration_5; }
+
+		//"BYTE"
+		public Keyword getBYTEBYTEKeyword_5_0() { return cBYTEBYTEKeyword_5_0; }
+
+		//LONG
+		public EnumLiteralDeclaration getLONGEnumLiteralDeclaration_6() { return cLONGEnumLiteralDeclaration_6; }
+
+		//"LONG"
+		public Keyword getLONGLONGKeyword_6_0() { return cLONGLONGKeyword_6_0; }
+	}
+	
+	private RepositoryElements pRepository;
+	private DataTypeElements pDataType;
+	private RepositoryComponentElements pRepositoryComponent;
+	private EStringElements pEString;
+	private InterfaceElements pInterface;
+	private RepositoryComponent_ImplElements pRepositoryComponent_Impl;
+	private CollectionDataTypeElements pCollectionDataType;
+	private CompositeDataTypeElements pCompositeDataType;
+	private PrimitiveDataTypeElements pPrimitiveDataType;
+	private InnerDeclarationElements pInnerDeclaration;
+	private PrimitiveTypeEnumElements unknownRulePrimitiveTypeEnum;
+	private SignatureElements pSignature;
+	private ParameterElements pParameter;
+	private ProvidedRoleElements pProvidedRole;
+	private RequiredRoleElements pRequiredRole;
+	private BasicComponentElements pBasicComponent;
+	private CompositeComponentElements pCompositeComponent;
+	private SubSystemElements pSubSystem;
+	private ComposedStructureAssemblyElements pComposedStructureAssembly;
+	private AssemblyContextElements pAssemblyContext;
+	private AssemblyConnectorElements pAssemblyConnector;
+	private ProvidedDelegationConnectorElements pProvidedDelegationConnector;
+	private RequiredDelegationConnectorElements pRequiredDelegationConnector;
+	
+	private final GrammarProvider grammarProvider;
+
+	private TerminalsGrammarAccess gaTerminals;
+
+	@Inject
+	public MyDslTestGrammarAccess(GrammarProvider grammarProvider,
+		TerminalsGrammarAccess gaTerminals) {
+		this.grammarProvider = grammarProvider;
+		this.gaTerminals = gaTerminals;
+	}
+	
+	public Grammar getGrammar() {	
+		return grammarProvider.getGrammar(this);
+	}
+	
+
+	public TerminalsGrammarAccess getTerminalsGrammarAccess() {
+		return gaTerminals;
+	}
+
+	
+	//Repository returns repository::Repository:
+	//	"Repository" name=EString "{" ("datatypes" "{" datatypes+=DataType ("," datatypes+=DataType)* "}")? ("interfaces" "{"
+	//	interfaces+=Interface ("," interfaces+=Interface)* "}")? ("components" "{" components+=RepositoryComponent (","
+	//	components+=RepositoryComponent)* "}")? "}";
+	public RepositoryElements getRepositoryAccess() {
+		return (pRepository != null) ? pRepository : (pRepository = new RepositoryElements());
+	}
+	
+	public ParserRule getRepositoryRule() {
+		return getRepositoryAccess().getRule();
+	}
+
+	//DataType returns repository::DataType:
+	//	CollectionDataType | CompositeDataType | PrimitiveDataType;
+	public DataTypeElements getDataTypeAccess() {
+		return (pDataType != null) ? pDataType : (pDataType = new DataTypeElements());
+	}
+	
+	public ParserRule getDataTypeRule() {
+		return getDataTypeAccess().getRule();
+	}
+
+	//RepositoryComponent returns repository::RepositoryComponent:
+	//	RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem;
+	public RepositoryComponentElements getRepositoryComponentAccess() {
+		return (pRepositoryComponent != null) ? pRepositoryComponent : (pRepositoryComponent = new RepositoryComponentElements());
+	}
+	
+	public ParserRule getRepositoryComponentRule() {
+		return getRepositoryComponentAccess().getRule();
+	}
+
+	//EString returns ecore::EString:
+	//	STRING | ID;
+	public EStringElements getEStringAccess() {
+		return (pEString != null) ? pEString : (pEString = new EStringElements());
+	}
+	
+	public ParserRule getEStringRule() {
+		return getEStringAccess().getRule();
+	}
+
+	//Interface returns repository::Interface:
+	//	"Interface" name=EString "{" ("parentInterfaces" "(" parentInterfaces+=[repository::Interface|EString] (","
+	//	parentInterfaces+=[repository::Interface|EString])* ")")? ("signatures" "{" signatures+=Signature (","
+	//	signatures+=Signature)* "}")? "}";
+	public InterfaceElements getInterfaceAccess() {
+		return (pInterface != null) ? pInterface : (pInterface = new InterfaceElements());
+	}
+	
+	public ParserRule getInterfaceRule() {
+		return getInterfaceAccess().getRule();
+	}
+
+	//RepositoryComponent_Impl returns repository::RepositoryComponent:
+	//	"RepositoryComponent" name=EString "{" ("relationship" "(" relationship+=[Relationship|EString] (","
+	//	relationship+=[Relationship|EString])* ")")? ("providedRoles" "{" providedRoles+=ProvidedRole (","
+	//	providedRoles+=ProvidedRole)* "}")? ("requiredRoles" "{" requiredRoles+=RequiredRole (","
+	//	requiredRoles+=RequiredRole)* "}")? "}";
+	public RepositoryComponent_ImplElements getRepositoryComponent_ImplAccess() {
+		return (pRepositoryComponent_Impl != null) ? pRepositoryComponent_Impl : (pRepositoryComponent_Impl = new RepositoryComponent_ImplElements());
+	}
+	
+	public ParserRule getRepositoryComponent_ImplRule() {
+		return getRepositoryComponent_ImplAccess().getRule();
+	}
+
+	//CollectionDataType returns repository::CollectionDataType:
+	//	"CollectionDataType" name=EString "{" "innerType" innerType=[repository::DataType|EString] "}";
+	public CollectionDataTypeElements getCollectionDataTypeAccess() {
+		return (pCollectionDataType != null) ? pCollectionDataType : (pCollectionDataType = new CollectionDataTypeElements());
+	}
+	
+	public ParserRule getCollectionDataTypeRule() {
+		return getCollectionDataTypeAccess().getRule();
+	}
+
+	//CompositeDataType returns repository::CompositeDataType:
+	//	"CompositeDataType" name=EString "{" ("parentTypes" "(" parentTypes+=[repository::CompositeDataType|EString] (","
+	//	parentTypes+=[repository::CompositeDataType|EString])* ")")? ("innerDeclarations" "{"
+	//	innerDeclarations+=InnerDeclaration ("," innerDeclarations+=InnerDeclaration)* "}")? "}";
+	public CompositeDataTypeElements getCompositeDataTypeAccess() {
+		return (pCompositeDataType != null) ? pCompositeDataType : (pCompositeDataType = new CompositeDataTypeElements());
+	}
+	
+	public ParserRule getCompositeDataTypeRule() {
+		return getCompositeDataTypeAccess().getRule();
+	}
+
+	//PrimitiveDataType returns repository::PrimitiveDataType:
+	//	"PrimitiveDataType" "{" "type" type=PrimitiveTypeEnum "ref" name=EString "}";
+	public PrimitiveDataTypeElements getPrimitiveDataTypeAccess() {
+		return (pPrimitiveDataType != null) ? pPrimitiveDataType : (pPrimitiveDataType = new PrimitiveDataTypeElements());
+	}
+	
+	public ParserRule getPrimitiveDataTypeRule() {
+		return getPrimitiveDataTypeAccess().getRule();
+	}
+
+	//InnerDeclaration returns repository::InnerDeclaration:
+	//	"InnerDeclaration" name=EString "{" "dataType" dataType=[repository::DataType|EString] "}";
+	public InnerDeclarationElements getInnerDeclarationAccess() {
+		return (pInnerDeclaration != null) ? pInnerDeclaration : (pInnerDeclaration = new InnerDeclarationElements());
+	}
+	
+	public ParserRule getInnerDeclarationRule() {
+		return getInnerDeclarationAccess().getRule();
+	}
+
+	//enum PrimitiveTypeEnum returns repository::PrimitiveTypeEnum:
+	//	INT | STRING | BOOL | DOUBLE | CHAR | BYTE | LONG;
+	public PrimitiveTypeEnumElements getPrimitiveTypeEnumAccess() {
+		return (unknownRulePrimitiveTypeEnum != null) ? unknownRulePrimitiveTypeEnum : (unknownRulePrimitiveTypeEnum = new PrimitiveTypeEnumElements());
+	}
+	
+	public EnumRule getPrimitiveTypeEnumRule() {
+		return getPrimitiveTypeEnumAccess().getRule();
+	}
+
+	//Signature returns repository::Signature:
+	//	(returnType=[repository::DataType|EString] | "void") name=EString "(" (parameters+=Parameter (","
+	//	parameters+=Parameter)*)? ")";
+	public SignatureElements getSignatureAccess() {
+		return (pSignature != null) ? pSignature : (pSignature = new SignatureElements());
+	}
+	
+	public ParserRule getSignatureRule() {
+		return getSignatureAccess().getRule();
+	}
+
+	//Parameter returns repository::Parameter:
+	//	dataType=[repository::DataType|EString] name=EString;
+	public ParameterElements getParameterAccess() {
+		return (pParameter != null) ? pParameter : (pParameter = new ParameterElements());
+	}
+	
+	public ParserRule getParameterRule() {
+		return getParameterAccess().getRule();
+	}
+
+	//ProvidedRole returns repository::ProvidedRole:
+	//	{repository::ProvidedRole} "provides" (interface+=[repository::Interface|EString] ","?)*;
+	public ProvidedRoleElements getProvidedRoleAccess() {
+		return (pProvidedRole != null) ? pProvidedRole : (pProvidedRole = new ProvidedRoleElements());
+	}
+	
+	public ParserRule getProvidedRoleRule() {
+		return getProvidedRoleAccess().getRule();
+	}
+
+	//RequiredRole returns repository::RequiredRole:
+	//	{repository::RequiredRole} "requires" (interface+=[repository::Interface|EString] ","?)*;
+	public RequiredRoleElements getRequiredRoleAccess() {
+		return (pRequiredRole != null) ? pRequiredRole : (pRequiredRole = new RequiredRoleElements());
+	}
+	
+	public ParserRule getRequiredRoleRule() {
+		return getRequiredRoleAccess().getRule();
+	}
+
+	//BasicComponent returns repository::BasicComponent:
+	//	"BasicComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+	//	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+	//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? "}";
+	public BasicComponentElements getBasicComponentAccess() {
+		return (pBasicComponent != null) ? pBasicComponent : (pBasicComponent = new BasicComponentElements());
+	}
+	
+	public ParserRule getBasicComponentRule() {
+		return getBasicComponentAccess().getRule();
+	}
+
+	//CompositeComponent returns repository::CompositeComponent:
+	//	"CompositeComponent" name=EString (providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)*)?
+	//	(requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)*)? "{" ("relationship" "("
+	//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+	//	assembly=ComposedStructureAssembly)? "}";
+	public CompositeComponentElements getCompositeComponentAccess() {
+		return (pCompositeComponent != null) ? pCompositeComponent : (pCompositeComponent = new CompositeComponentElements());
+	}
+	
+	public ParserRule getCompositeComponentRule() {
+		return getCompositeComponentAccess().getRule();
+	}
+
+	//SubSystem returns repository::SubSystem:
+	//	"SubSystem" name=EString ("providedRoles" "{" providedRoles+=ProvidedRole ("," providedRoles+=ProvidedRole)* "}")?
+	//	("requiredRoles" "{" requiredRoles+=RequiredRole ("," requiredRoles+=RequiredRole)* "}")? "{" ("relationship" "("
+	//	relationship+=[Relationship|EString] ("," relationship+=[Relationship|EString])* ")")? ("assembly"
+	//	assembly=ComposedStructureAssembly)? "}";
+	public SubSystemElements getSubSystemAccess() {
+		return (pSubSystem != null) ? pSubSystem : (pSubSystem = new SubSystemElements());
+	}
+	
+	public ParserRule getSubSystemRule() {
+		return getSubSystemAccess().getRule();
+	}
+
+	//ComposedStructureAssembly returns repository_composites::ComposedStructureAssembly:
+	//	{repository_composites::ComposedStructureAssembly} "ComposedStructureAssembly" "{" ("assemblyContexts" "{"
+	//	assemblyContexts+=AssemblyContext ("," assemblyContexts+=AssemblyContext)* "}")? ("assemblyConnectors" "{"
+	//	assemblyConnectors+=AssemblyConnector ("," assemblyConnectors+=AssemblyConnector)* "}")?
+	//	("providedDelegationConnectors" "{" providedDelegationConnectors+=ProvidedDelegationConnector (","
+	//	providedDelegationConnectors+=ProvidedDelegationConnector)* "}")? ("requiredDelegationConnectors" "{"
+	//	requiredDelegationConnectors+=RequiredDelegationConnector (","
+	//	requiredDelegationConnectors+=RequiredDelegationConnector)* "}")? "}";
+	public ComposedStructureAssemblyElements getComposedStructureAssemblyAccess() {
+		return (pComposedStructureAssembly != null) ? pComposedStructureAssembly : (pComposedStructureAssembly = new ComposedStructureAssemblyElements());
+	}
+	
+	public ParserRule getComposedStructureAssemblyRule() {
+		return getComposedStructureAssemblyAccess().getRule();
+	}
+
+	//AssemblyContext returns repository_composites::AssemblyContext:
+	//	"AssemblyContext" name=EString "{" "encapsulatedComponent"
+	//	encapsulatedComponent=[repository::RepositoryComponent|EString] "}";
+	public AssemblyContextElements getAssemblyContextAccess() {
+		return (pAssemblyContext != null) ? pAssemblyContext : (pAssemblyContext = new AssemblyContextElements());
+	}
+	
+	public ParserRule getAssemblyContextRule() {
+		return getAssemblyContextAccess().getRule();
+	}
+
+	//AssemblyConnector returns repository_composites::AssemblyConnector:
+	//	"AssemblyConnector" name=EString "{" "requiredRole" requiredRole=[repository::RequiredRole|EString] "providedRole"
+	//	providedRole=[repository::ProvidedRole|EString] "providingAssemblyContext"
+	//	providingAssemblyContext=[repository_composites::AssemblyContext|EString] "requiringAssemblyContext"
+	//	requiringAssemblyContext=[repository_composites::AssemblyContext|EString] "}";
+	public AssemblyConnectorElements getAssemblyConnectorAccess() {
+		return (pAssemblyConnector != null) ? pAssemblyConnector : (pAssemblyConnector = new AssemblyConnectorElements());
+	}
+	
+	public ParserRule getAssemblyConnectorRule() {
+		return getAssemblyConnectorAccess().getRule();
+	}
+
+	//ProvidedDelegationConnector returns repository_composites::ProvidedDelegationConnector:
+	//	"ProvidedDelegationConnector" name=EString "{" "assemblyContext"
+	//	assemblyContext=[repository_composites::AssemblyContext|EString] "innerProvidedRole"
+	//	innerProvidedRole=[repository::ProvidedRole|EString] "outerProvidedRole"
+	//	outerProvidedRole=[repository::ProvidedRole|EString] "}";
+	public ProvidedDelegationConnectorElements getProvidedDelegationConnectorAccess() {
+		return (pProvidedDelegationConnector != null) ? pProvidedDelegationConnector : (pProvidedDelegationConnector = new ProvidedDelegationConnectorElements());
+	}
+	
+	public ParserRule getProvidedDelegationConnectorRule() {
+		return getProvidedDelegationConnectorAccess().getRule();
+	}
+
+	//RequiredDelegationConnector returns repository_composites::RequiredDelegationConnector:
+	//	"RequiredDelegationConnector" name=EString "{" "assemblyContext"
+	//	assemblyContext=[repository_composites::AssemblyContext|EString] "innerRequiredRole"
+	//	innerRequiredRole=[repository::RequiredRole|EString] "outerRequiredRole"
+	//	outerRequiredRole=[repository::RequiredRole|EString] "}";
+	public RequiredDelegationConnectorElements getRequiredDelegationConnectorAccess() {
+		return (pRequiredDelegationConnector != null) ? pRequiredDelegationConnector : (pRequiredDelegationConnector = new RequiredDelegationConnectorElements());
+	}
+	
+	public ParserRule getRequiredDelegationConnectorRule() {
+		return getRequiredDelegationConnectorAccess().getRule();
+	}
+
+	//terminal ID:
+	//	"^"? ("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "_" | "0".."9")*;
+	public TerminalRule getIDRule() {
+		return gaTerminals.getIDRule();
+	} 
+
+	//terminal INT returns ecore::EInt:
+	//	"0".."9"+;
+	public TerminalRule getINTRule() {
+		return gaTerminals.getINTRule();
+	} 
+
+	//terminal STRING:
+	//	"\"" ("\\" ("b" | "t" | "n" | "f" | "r" | "u" | "\"" | "\'" | "\\") | !("\\" | "\""))* "\"" | "\'" ("\\" ("b" | "t" |
+	//	"n" | "f" | "r" | "u" | "\"" | "\'" | "\\") | !("\\" | "\'"))* "\'";
+	public TerminalRule getSTRINGRule() {
+		return gaTerminals.getSTRINGRule();
+	} 
+
+	//terminal ML_COMMENT:
+	//	"/ *"->"* /";
+	public TerminalRule getML_COMMENTRule() {
+		return gaTerminals.getML_COMMENTRule();
+	} 
+
+	//terminal SL_COMMENT:
+	//	"//" !("\n" | "\r")* ("\r"? "\n")?;
+	public TerminalRule getSL_COMMENTRule() {
+		return gaTerminals.getSL_COMMENTRule();
+	} 
+
+	//terminal WS:
+	//	(" " | "\t" | "\r" | "\n")+;
+	public TerminalRule getWSRule() {
+		return gaTerminals.getWSRule();
+	} 
+
+	//terminal ANY_OTHER:
+	//	.;
+	public TerminalRule getANY_OTHERRule() {
+		return gaTerminals.getANY_OTHERRule();
+	} 
+}
diff --git a/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/validation/AbstractMyDslTestJavaValidator.java b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/validation/AbstractMyDslTestJavaValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..e88d3ceb173b4af8be81223e68fd0d0189bf40c8
--- /dev/null
+++ b/org.xtext.example.mydslTest/src-gen/org/xtext/example/mydsl/validation/AbstractMyDslTestJavaValidator.java
@@ -0,0 +1,19 @@
+package org.xtext.example.mydsl.validation;
+ 
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.xtext.validation.AbstractDeclarativeValidator;
+
+public class AbstractMyDslTestJavaValidator extends AbstractDeclarativeValidator {
+
+	@Override
+	protected List<EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.descartes-research.net/metamodel/repository/0.1"));
+	    result.add(EPackage.Registry.INSTANCE.getEPackage("http://www.descartes-research.net/metamodel/repository_composites/0.1"));
+		return result;
+	}
+
+}
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/GenerateMyDslTest.mwe2 b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/GenerateMyDslTest.mwe2
new file mode 100644
index 0000000000000000000000000000000000000000..49b45432df1e216191a7095465f0914100393e13
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/GenerateMyDslTest.mwe2
@@ -0,0 +1,122 @@
+module org.xtext.example.mydsl.MyDslTest
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+
+var grammarURI = "classpath:/org/xtext/example/mydsl/MyDslTest.xtext"
+var file.extensions = "mydslTest"
+var projectName = "org.xtext.example.mydslTest"
+var runtimeProject = "../${projectName}"
+
+Workflow {
+	bean = StandaloneSetup {
+		scanClassPath  = true
+		platformUri = "${runtimeProject}/.."
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.parameterdependencies.ParameterdependenciesPackage"
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.system.SystemPackage"
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.repository.RepositoryPackage"
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.repository_composites.RepositoryCompositesPackage"
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.servicebehavior.ServicebehaviorPackage"
+		registerGeneratedEPackage = "edu.kit.ipd.descartes.mm.functions.FunctionsPackage"
+	
+		// registerGenModelFile = "platform:/resource/edu.kit.ipd.descartes.mm/model/applicationlevel.genmodel"
+	
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}/src-gen"
+	}
+
+	component = DirectoryCleaner {
+		directory = "${runtimeProject}.ui/src-gen"
+	}
+
+	component = Generator {
+		pathRtProject = runtimeProject
+		pathUiProject = "${runtimeProject}.ui"
+		projectNameRt = projectName
+		projectNameUi = "${projectName}.ui"
+		language = {
+			uri = grammarURI
+			fileExtensions = file.extensions
+
+			// Java API to access grammar elements (required by several other fragments)
+			fragment = grammarAccess.GrammarAccessFragment {}
+
+			// generates Java API for the generated EPackages
+			// fragment = ecore.EcoreGeneratorFragment {}
+
+			// the serialization component
+			fragment = parseTreeConstructor.ParseTreeConstructorFragment {}
+
+			// a custom ResourceFactory for use with EMF 
+			fragment = resourceFactory.ResourceFactoryFragment {
+				fileExtensions = file.extensions
+			}
+
+			// the Antlr parser
+			fragment = parser.antlr.XtextAntlrGeneratorFragment {
+				options = {
+					classSplitting = true
+				}
+			}
+
+			// the Ecore2Xtext specific terminal converter
+			fragment = ecore2xtext.Ecore2XtextValueConverterServiceFragment {}
+
+			// java-based API for validation 
+			fragment = validation.JavaValidatorFragment {
+			// composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
+			// composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+			}
+
+			// scoping and exporting API
+			fragment = scoping.ImportURIScopingFragment {}
+			fragment = exporting.SimpleNamesFragment {}
+
+			// scoping and exporting API 
+
+			// fragment = scoping.ImportNamespacesScopingFragment {}
+			// fragment = exporting.QualifiedNamesFragment {}
+
+
+			// formatter API 
+			fragment = ecore2xtext.FormatterFragment {}
+
+			// labeling API 
+			fragment = labeling.LabelProviderFragment {}
+
+			// outline API 
+            fragment = outline.OutlineTreeProviderFragment {}
+            fragment = outline.QuickOutlineFragment {}
+
+			// java-based API for content assistance 
+			fragment = contentAssist.JavaBasedContentAssistFragment {}
+
+			// antlr parser generator tailored for content assist 
+			fragment = parser.antlr.XtextAntlrUiGeneratorFragment {
+				options = {
+					classSplitting = true
+				}
+			}
+
+			// provides a compare view
+            fragment = compare.CompareFragment {
+                fileExtensions = file.extensions
+            }
+
+			fragment = builder.BuilderIntegrationFragment {}
+
+			// project wizard (optional) 
+
+			// fragment = projectWizard.SimpleProjectWizardFragment {
+			//		generatorProjectName = "${projectName}.generator" 
+			//		modelFileExtension = file.extensions
+			// }
+
+			// quickfix API 
+			fragment = quickfix.QuickfixProviderFragment {}
+		}
+	}
+}
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTest.xtext b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTest.xtext
new file mode 100644
index 0000000000000000000000000000000000000000..e94f998b71f7d3f39fccef3d91a6763ebd880f9f
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTest.xtext
@@ -0,0 +1,190 @@
+// automatically generated by Xtext
+grammar org.xtext.example.mydsl.MyDslTest with org.eclipse.xtext.common.Terminals 
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/parameterdependency.ecore" 
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/servicebehavior.ecore" as servicebehavior
+
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/repository.ecore" as repository
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/repository_composites.ecore" as repository_composites
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/functions.ecore" as functions
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/system.ecore" as system
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/resourceconfiguration.ecore" as resourceconfiguration
+
+import "platform:/resource/edu.kit.ipd.descartes.mm/model/resourcetype.ecore" as resourcetype
+
+Repository returns repository::Repository:
+	'Repository'
+	name=EString
+	'{' 
+		('datatypes' '{' datatypes+=DataType ( "," datatypes+=DataType)* '}' )? 
+		('interfaces' '{' interfaces+=Interface ( "," interfaces+=Interface)* '}' )? 
+		('components' '{' components+=RepositoryComponent ( "," components+=RepositoryComponent)* '}' )?
+    '}';
+
+
+DataType returns repository::DataType:
+	CollectionDataType | CompositeDataType | PrimitiveDataType;
+
+RepositoryComponent returns repository::RepositoryComponent:
+	RepositoryComponent_Impl | BasicComponent | CompositeComponent | SubSystem;
+
+EString returns ecore::EString:
+	STRING | ID;
+
+Interface returns repository::Interface:
+	'Interface'
+	name=EString
+	'{'
+		('parentInterfaces' '(' parentInterfaces+=[repository::Interface|EString] ( "," parentInterfaces+=[repository::Interface|EString])* ')' )?
+		('signatures' '{' signatures+=Signature ( "," signatures+=Signature)* '}' )?
+    '}';
+
+RepositoryComponent_Impl returns repository::RepositoryComponent:
+	'RepositoryComponent'
+	name=EString
+	'{'
+		('relationship' '(' relationship+=[Relationship|EString] ( "," relationship+=[Relationship|EString])* ')' )?
+		('providedRoles' '{' providedRoles+=ProvidedRole ( "," providedRoles+=ProvidedRole)* '}' )?
+		('requiredRoles' '{' requiredRoles+=RequiredRole ( "," requiredRoles+=RequiredRole)* '}' )?
+    '}';
+
+CollectionDataType returns repository::CollectionDataType:
+	'CollectionDataType'
+	name=EString
+	'{'
+		'innerType' innerType=[repository::DataType|EString]
+    '}';
+
+CompositeDataType returns repository::CompositeDataType:
+	'CompositeDataType'
+	name=EString
+	'{'
+		('parentTypes' '(' parentTypes+=[repository::CompositeDataType|EString] ( "," parentTypes+=[repository::CompositeDataType|EString])* ')' )?
+		('innerDeclarations' '{' innerDeclarations+=InnerDeclaration ( "," innerDeclarations+=InnerDeclaration)* '}' )?
+    '}';
+
+PrimitiveDataType returns repository::PrimitiveDataType:
+	'PrimitiveDataType'
+	'{'
+		'type' type=PrimitiveTypeEnum
+		'ref' name = EString
+    '}';
+
+InnerDeclaration returns repository::InnerDeclaration:
+	'InnerDeclaration'
+	name=EString
+	'{'
+		'dataType' dataType=[repository::DataType|EString]
+    '}';
+
+enum PrimitiveTypeEnum returns repository::PrimitiveTypeEnum:
+	INT = 'INT' | STRING = 'STRING' | BOOL = 'BOOL' | DOUBLE = 'DOUBLE' | CHAR = 'CHAR' | BYTE = 'BYTE' | LONG = 'LONG';
+
+Signature returns repository::Signature:
+    ((returnType=[repository::DataType|EString])|('void'))
+		name=EString
+		'('
+		(parameters+=Parameter ( "," parameters+=Parameter)*)?
+		')'
+    ;
+
+Parameter returns repository::Parameter:
+    dataType=[repository::DataType|EString]
+		name=EString
+    ;
+
+ProvidedRole returns repository::ProvidedRole:
+	{repository::ProvidedRole}
+	'provides' 
+	((interface+=[repository::Interface|EString]) (',')?)*	
+		;
+
+RequiredRole returns repository::RequiredRole:
+	{repository::RequiredRole}
+	'requires'
+		((interface+=[repository::Interface|EString]) (',')?)*
+		;
+
+BasicComponent returns repository::BasicComponent:
+	'BasicComponent'
+	name=EString
+	(providedRoles+=ProvidedRole ( "," providedRoles+=ProvidedRole)*)?
+	(requiredRoles+=RequiredRole ( "," requiredRoles+=RequiredRole)*)?
+	'{'
+		('relationship' '(' relationship+=[Relationship|EString] ( "," relationship+=[Relationship|EString])* ')' )?
+    '}'
+    ;
+
+CompositeComponent returns repository::CompositeComponent:
+	'CompositeComponent'
+	name=EString
+	(providedRoles+=ProvidedRole ( "," providedRoles+=ProvidedRole)*)?
+	(requiredRoles+=RequiredRole ( "," requiredRoles+=RequiredRole)*)?
+	'{'
+		('relationship' '(' relationship+=[Relationship|EString] ( "," relationship+=[Relationship|EString])* ')' )?
+		('assembly' assembly=ComposedStructureAssembly)?
+    '}'
+    ;
+
+SubSystem returns repository::SubSystem:
+	'SubSystem'
+	name=EString
+	('providedRoles' '{' providedRoles+=ProvidedRole ( "," providedRoles+=ProvidedRole)* '}' )?
+	('requiredRoles' '{' requiredRoles+=RequiredRole ( "," requiredRoles+=RequiredRole)* '}' )?
+	'{'
+		('relationship' '(' relationship+=[Relationship|EString] ( "," relationship+=[Relationship|EString])* ')' )?
+		('assembly' assembly=ComposedStructureAssembly)?
+    '}'
+    ;
+
+ComposedStructureAssembly returns repository_composites::ComposedStructureAssembly:
+	{repository_composites::ComposedStructureAssembly}
+	'ComposedStructureAssembly'
+	'{'
+		('assemblyContexts' '{' assemblyContexts+=AssemblyContext ( "," assemblyContexts+=AssemblyContext)* '}' )?
+		('assemblyConnectors' '{' assemblyConnectors+=AssemblyConnector ( "," assemblyConnectors+=AssemblyConnector)* '}' )?
+		('providedDelegationConnectors' '{' providedDelegationConnectors+=ProvidedDelegationConnector ( "," providedDelegationConnectors+=ProvidedDelegationConnector)* '}' )?
+		('requiredDelegationConnectors' '{' requiredDelegationConnectors+=RequiredDelegationConnector ( "," requiredDelegationConnectors+=RequiredDelegationConnector)* '}' )?
+    '}';
+
+AssemblyContext returns repository_composites::AssemblyContext:
+	'AssemblyContext'
+	name=EString
+	'{'
+		'encapsulatedComponent' encapsulatedComponent=[repository::RepositoryComponent|EString]
+    '}';
+
+AssemblyConnector returns repository_composites::AssemblyConnector:
+	'AssemblyConnector'
+	name=EString
+	'{'
+		'requiredRole' requiredRole=[repository::RequiredRole|EString]
+		'providedRole' providedRole=[repository::ProvidedRole|EString]
+		'providingAssemblyContext' providingAssemblyContext=[repository_composites::AssemblyContext|EString]
+		'requiringAssemblyContext' requiringAssemblyContext=[repository_composites::AssemblyContext|EString]
+    '}';
+
+ProvidedDelegationConnector returns repository_composites::ProvidedDelegationConnector:
+	'ProvidedDelegationConnector'
+	name=EString
+	'{'
+		'assemblyContext' assemblyContext=[repository_composites::AssemblyContext|EString]
+		'innerProvidedRole' innerProvidedRole=[repository::ProvidedRole|EString]
+		'outerProvidedRole' outerProvidedRole=[repository::ProvidedRole|EString]
+    '}';
+
+RequiredDelegationConnector returns repository_composites::RequiredDelegationConnector:
+	'RequiredDelegationConnector'
+	name=EString
+	'{'
+		'assemblyContext' assemblyContext=[repository_composites::AssemblyContext|EString]
+		'innerRequiredRole' innerRequiredRole=[repository::RequiredRole|EString]
+		'outerRequiredRole' outerRequiredRole=[repository::RequiredRole|EString]
+    '}';
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestRuntimeModule.java b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestRuntimeModule.java
new file mode 100644
index 0000000000000000000000000000000000000000..7aa22fc3bb0827878d00569452c0564f93db948a
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestRuntimeModule.java
@@ -0,0 +1,11 @@
+/*
+ * generated by Xtext
+ */
+package org.xtext.example.mydsl;
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class MyDslTestRuntimeModule extends org.xtext.example.mydsl.AbstractMyDslTestRuntimeModule {
+
+}
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestStandaloneSetup.java b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestStandaloneSetup.java
new file mode 100644
index 0000000000000000000000000000000000000000..72cc25525c270843e4d72ed80cd16e0630dc9648
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/MyDslTestStandaloneSetup.java
@@ -0,0 +1,14 @@
+
+package org.xtext.example.mydsl;
+
+/**
+ * Initialization support for running Xtext languages 
+ * without equinox extension registry
+ */
+public class MyDslTestStandaloneSetup extends MyDslTestStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new MyDslTestStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/formatting/MyDslTestFormatter.java b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/formatting/MyDslTestFormatter.java
new file mode 100644
index 0000000000000000000000000000000000000000..7996cd8a8228ed0a8ae104778f24375f4a68b0f4
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/formatting/MyDslTestFormatter.java
@@ -0,0 +1,39 @@
+/*
+ * generated by Xtext
+ */
+package org.xtext.example.mydsl.formatting;
+
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.util.Pair;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#formatting
+ * on how and when to use it 
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+public class MyDslTestFormatter extends AbstractDeclarativeFormatter {
+	
+	@Override
+	protected void configureFormatting(FormattingConfig c) {
+		org.xtext.example.mydsl.services.MyDslTestGrammarAccess f = (org.xtext.example.mydsl.services.MyDslTestGrammarAccess) getGrammarAccess();
+		for(Pair<Keyword, Keyword> pair: f.findKeywordPairs("{", "}")) {
+			c.setIndentation(pair.getFirst(), pair.getSecond());
+			c.setLinewrap(1).after(pair.getFirst());
+			c.setLinewrap(1).before(pair.getSecond());
+			c.setLinewrap(1).after(pair.getSecond());
+		}
+		for(Keyword comma: f.findKeywords(",")) {
+			c.setNoLinewrap().before(comma);
+			c.setNoSpace().before(comma);
+			c.setLinewrap().after(comma);
+		}
+		c.setLinewrap(0, 1, 2).before(f.getSL_COMMENTRule());
+		c.setLinewrap(0, 1, 2).before(f.getML_COMMENTRule());
+		c.setLinewrap(0, 1, 1).after(f.getML_COMMENTRule());
+	}
+}
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/scoping/MyDslTestScopeProvider.java b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/scoping/MyDslTestScopeProvider.java
new file mode 100644
index 0000000000000000000000000000000000000000..20f3604b36b677875ac469de1cbe665be85cf43f
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/scoping/MyDslTestScopeProvider.java
@@ -0,0 +1,17 @@
+/*
+ * generated by Xtext
+ */
+package org.xtext.example.mydsl.scoping;
+
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation/latest/xtext.html#scoping
+ * on how and when to use it 
+ *
+ */
+public class MyDslTestScopeProvider extends AbstractDeclarativeScopeProvider {
+
+}
diff --git a/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/validation/MyDslTestJavaValidator.java b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/validation/MyDslTestJavaValidator.java
new file mode 100644
index 0000000000000000000000000000000000000000..b392fff17d12e353ccdf7d9183edbe09ff9af3b8
--- /dev/null
+++ b/org.xtext.example.mydslTest/src/org/xtext/example/mydsl/validation/MyDslTestJavaValidator.java
@@ -0,0 +1,13 @@
+package org.xtext.example.mydsl.validation;
+ 
+
+public class MyDslTestJavaValidator extends AbstractMyDslTestJavaValidator {
+
+//	@Check
+//	public void checkGreetingStartsWithCapital(Greeting greeting) {
+//		if (!Character.isUpperCase(greeting.getName().charAt(0))) {
+//			warning("Name should start with a capital", MyDslPackage.Literals.GREETING__NAME);
+//		}
+//	}
+
+}