Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/.project
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/.project	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/.project	(revision 61)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>de.ugoe.cs.swe.bnftools.ebnf.sdk</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.pde.FeatureBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.FeatureNature</nature>
+	</natures>
+</projectDescription>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/build.properties
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/build.properties	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/build.properties	(revision 61)
@@ -0,0 +1,1 @@
+bin.includes =feature.xml
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/feature.xml
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/feature.xml	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.sdk/feature.xml	(revision 61)
@@ -0,0 +1,17 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<feature id="de.ugoe.cs.swe.bnftools.ebnf.sdk"
+	label="EBNF SDK Feature "
+	version="1.0.0.qualifier">
+	<plugin
+			id="de.ugoe.cs.swe.bnftools.ebnf"
+			download-size="0"
+			install-size="0"
+			version="0.0.0"
+			unpack="false"/>
+	<plugin
+			id="de.ugoe.cs.swe.bnftools.ebnf.ui"
+			download-size="0"
+			install-size="0"
+			version="0.0.0"
+			unpack="false"/>
+</feature>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.classpath
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.classpath	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.classpath	(revision 61)
@@ -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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.project
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.project	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.project	(revision 61)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>de.ugoe.cs.swe.bnftools.ebnf.tests</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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.settings/org.eclipse.core.resources.prefs
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.settings/org.eclipse.core.resources.prefs	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/.settings/org.eclipse.core.resources.prefs	(revision 61)
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/META-INF/MANIFEST.MF
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/META-INF/MANIFEST.MF	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/META-INF/MANIFEST.MF	(revision 61)
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: de.ugoe.cs.swe.bnftools.ebnf.tests
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: de.ugoe.cs.swe.bnftools.ebnf.tests; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: de.ugoe.cs.swe.bnftools.ebnf,
+ de.ugoe.cs.swe.bnftools.ebnf.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.xtext.junit4,
+ org.eclipse.ui.workbench;resolution:=optional
+Import-Package: org.apache.log4j,
+ org.junit;version="4.5.0",
+ org.junit.runner;version="4.5.0",
+ org.junit.runner.manipulation;version="4.5.0",
+ org.junit.runner.notification;version="4.5.0",
+ org.junit.runners;version="4.5.0",
+ org.junit.runners.model;version="4.5.0",
+ org.hamcrest.core
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: de.ugoe.cs.swe.bnftools
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/build.properties
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/build.properties	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/build.properties	(revision 61)
@@ -0,0 +1,5 @@
+source.. = src/,\
+          src-gen/,\
+          xtend-gen/
+bin.includes = META-INF/,\
+       .
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/de.ugoe.cs.swe.bnftools.ebnf.tests.launch
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/de.ugoe.cs.swe.bnftools.ebnf.tests.launch	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/de.ugoe.cs.swe.bnftools.ebnf.tests.launch	(revision 61)
@@ -0,0 +1,13 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.jdt.junit.launchconfig">
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/de.ugoe.cs.swe.bnftools.ebnf.tests"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value="=de.ugoe.cs.swe.bnftools.ebnf.tests"/>
+<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
+<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="de.ugoe.cs.swe.bnftools.ebnf.tests"/>
+</launchConfiguration>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfInjectorProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfInjectorProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfInjectorProvider.java	(revision 61)
@@ -0,0 +1,45 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools;
+
+import org.eclipse.xtext.junit4.GlobalRegistries;
+import org.eclipse.xtext.junit4.GlobalRegistries.GlobalStateMemento;
+import org.eclipse.xtext.junit4.IInjectorProvider;
+import org.eclipse.xtext.junit4.IRegistryConfigurator;
+
+import com.google.inject.Injector;
+
+public class EbnfInjectorProvider implements IInjectorProvider, IRegistryConfigurator {
+	
+    protected GlobalStateMemento stateBeforeInjectorCreation;
+	protected GlobalStateMemento stateAfterInjectorCreation;
+	protected Injector injector;
+
+	static {
+		GlobalRegistries.initializeDefaults();
+	}
+
+	public Injector getInjector()
+	{
+		if (injector == null) {
+			stateBeforeInjectorCreation = GlobalRegistries.makeCopyOfGlobalState();
+			this.injector = internalCreateInjector();
+			stateAfterInjectorCreation = GlobalRegistries.makeCopyOfGlobalState();
+		}
+		return injector;
+	}
+	
+	protected Injector internalCreateInjector() {
+	    return new EbnfStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+
+	public void restoreRegistry() {
+		stateBeforeInjectorCreation.restoreGlobalState();
+	}
+
+	public void setupRegistry() {
+		getInjector();
+		stateAfterInjectorCreation.restoreGlobalState();
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfUiInjectorProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfUiInjectorProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.tests/src-gen/de/ugoe/cs/swe/bnftools/EbnfUiInjectorProvider.java	(revision 61)
@@ -0,0 +1,16 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools;
+
+import org.eclipse.xtext.junit4.IInjectorProvider;
+
+import com.google.inject.Injector;
+
+public class EbnfUiInjectorProvider implements IInjectorProvider {
+	
+	public Injector getInjector() {
+		return de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator.getInstance().getInjector("de.ugoe.cs.swe.bnftools.Ebnf");
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath	(revision 61)
@@ -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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project	(revision 61)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>de.ugoe.cs.swe.bnftools.ebnf.ui</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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.settings/org.eclipse.core.resources.prefs
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.settings/org.eclipse.core.resources.prefs	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.settings/org.eclipse.core.resources.prefs	(revision 61)
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF	(revision 61)
@@ -0,0 +1,26 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: de.ugoe.cs.swe.bnftools.ebnf.ui
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: de.ugoe.cs.swe.bnftools.ebnf.ui; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: de.ugoe.cs.swe.bnftools.ebnf;visibility:=reexport,
+ org.eclipse.xtext.ui,
+ org.eclipse.ui.editors;bundle-version="3.5.0",
+ org.eclipse.ui.ide;bundle-version="3.5.0",
+ org.eclipse.xtext.ui.shared,
+ org.eclipse.ui,
+ org.eclipse.xtext.builder,
+ org.antlr.runtime,
+ org.eclipse.xtext.common.types.ui,
+ org.eclipse.xtext.ui.codetemplates.ui,
+ org.eclipse.compare
+Import-Package: org.apache.log4j,
+ org.eclipse.xtext.xbase.lib
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: de.ugoe.cs.swe.bnftools.ui.quickfix,
+ de.ugoe.cs.swe.bnftools.ui.contentassist,
+ de.ugoe.cs.swe.bnftools.ui.contentassist.antlr,
+ de.ugoe.cs.swe.bnftools.ui.internal
+Bundle-Activator: de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties	(revision 61)
@@ -0,0 +1,6 @@
+source.. = src/,\
+          src-gen/,\
+          xtend-gen/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml	(revision 61)
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+    <extension
+            point="org.eclipse.ui.editors">
+        <editor
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+            default="true"
+            extensions="bnf"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf Editor">
+        </editor>
+    </extension>
+    <extension
+        point="org.eclipse.ui.handlers">
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+            commandId="de.ugoe.cs.swe.bnftools.Ebnf.validate">
+         <activeWhen>
+            <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+            </reference>
+         </activeWhen>
+      	</handler>
+      	<!-- copy qualified name -->
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedNameHandler"
+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName">
+            <activeWhen>
+				<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            </activeWhen>
+        </handler>
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedNameHandler"
+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName">
+            <activeWhen>
+            	<and>
+            		<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened" />
+	                <iterate>
+						<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+					</iterate>
+				</and>
+            </activeWhen>
+        </handler>
+    </extension>
+    <extension point="org.eclipse.core.expressions.definitions">
+        <definition id="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+            <and>
+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="de.ugoe.cs.swe.bnftools.Ebnf" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+        <definition id="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened">
+            <and>
+                <reference definitionId="isXtextEditorActive"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="de.ugoe.cs.swe.bnftools.Ebnf" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+    </extension>
+    <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.coloring"
+            name="Syntax Coloring">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.templates"
+            name="Templates">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+    </extension>
+    <extension
+            point="org.eclipse.ui.propertyPages">
+        <page
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+            <enabledWhen>
+	            <adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+        </page>
+    </extension>
+    <extension
+        point="org.eclipse.ui.keywords">
+        <keyword
+            id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"
+            label="Ebnf"/>
+    </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            description="Trigger expensive validation"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.validate"
+            name="Validate">
+      </command>
+      <!-- copy qualified name -->
+      <command
+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+            categoryId="org.eclipse.ui.category.edit"
+            description="Copy the qualified name for the selected element"
+            name="Copy Qualified Name">
+      </command>
+      <command
+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
+            categoryId="org.eclipse.ui.category.edit"
+            description="Copy the qualified name for the selected element"
+            name="Copy Qualified Name">
+      </command>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+        <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+             <command
+                 commandId="de.ugoe.cs.swe.bnftools.Ebnf.validate"
+                 style="push"
+                 tooltip="Trigger expensive validation">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </visibleWhen>
+         </command>  
+         </menuContribution>
+         <!-- copy qualified name -->
+         <menuContribution locationURI="popup:#TextEditorContext?after=copy">
+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName" 
+         		style="push" tooltip="Copy Qualified Name">
+            	<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            	</visibleWhen>
+         	</command>  
+         </menuContribution>
+         <menuContribution locationURI="menu:edit?after=copy">
+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+            	style="push" tooltip="Copy Qualified Name">
+            	<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            	</visibleWhen>
+         	</command>  
+         </menuContribution>
+         <menuContribution locationURI="popup:org.eclipse.xtext.ui.outline?after=additions">
+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName" 
+				style="push" tooltip="Copy Qualified Name">
+         		<visibleWhen checkEnabled="false">
+	            	<and>
+	            		<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened" />
+						<iterate>
+							<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+						</iterate>
+					</and>
+				</visibleWhen>
+			</command>
+         </menuContribution>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
+				<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                	</reference>
+            	</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	    <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+            commandId="org.eclipse.xtext.ui.editor.FindReferences">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+    </extension>   
+
+<!-- adding resource factories -->
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="bnf">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="bnf">
+        </resourceServiceProvider>
+    </extension>
+
+
+	<!-- marker definitions for de.ugoe.cs.swe.bnftools.Ebnf -->
+	<extension
+	        id="ebnf.check.fast"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.fast"/>
+	    <persistent value="true"/>
+	</extension>
+	<extension
+	        id="ebnf.check.normal"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.normal"/>
+	    <persistent value="true"/>
+	</extension>
+	<extension
+	        id="ebnf.check.expensive"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.expensive"/>
+	    <persistent value="true"/>
+	</extension>
+
+   <extension
+         point="org.eclipse.xtext.builder.participant">
+      <participant
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant">
+      </participant>
+   </extension>
+   <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.compiler.preferencePage"
+            name="Compiler">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+    </extension>
+    <extension
+            point="org.eclipse.ui.propertyPages">
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.compiler.propertyPage"
+            name="Compiler">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+            <enabledWhen>
+	            <adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+        </page>
+    </extension>
+
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler 
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Open the quick outline."
+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+			name="Quick Outline">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.open">
+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+				style="push"
+				tooltip="Open Quick Outline">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+    <!-- quickfix marker resolution generator for de.ugoe.cs.swe.bnftools.Ebnf -->
+    <extension
+            point="org.eclipse.ui.ide.markerResolution">
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.fast">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.normal">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.expensive">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+    </extension>
+   	<!-- Rename Refactoring -->
+	<extension point="org.eclipse.ui.handlers">
+		<handler 
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
+			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
+			<activeWhen>
+				<reference
+					definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+    <extension point="org.eclipse.ui.menus">
+         <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+         <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
+               style="push">
+            <visibleWhen checkEnabled="false">
+               <reference
+                     definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+               </reference>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+   <extension point="org.eclipse.ui.preferencePages">
+	    <page
+	        category="de.ugoe.cs.swe.bnftools.Ebnf"
+	        class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"
+	        id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring"
+	        name="Refactoring">
+	        <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+	    </page>
+	</extension>
+
+  <extension point="org.eclipse.compare.contentViewers">
+    <viewer id="de.ugoe.cs.swe.bnftools.Ebnf.compare.contentViewers"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+            extensions="bnf">
+    </viewer>
+  </extension>
+  <extension point="org.eclipse.compare.contentMergeViewers">
+    <viewer id="de.ugoe.cs.swe.bnftools.Ebnf.compare.contentMergeViewers"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+            extensions="bnf" label="Ebnf Compare">
+     </viewer>
+  </extension>
+  <extension point="org.eclipse.ui.editors.documentProviders">
+    <provider id="de.ugoe.cs.swe.bnftools.Ebnf.editors.documentProviders"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"
+            extensions="bnf">
+    </provider>
+  </extension>
+
+</plugin>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen	(revision 61)
@@ -0,0 +1,396 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+    <extension
+            point="org.eclipse.ui.editors">
+        <editor
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.XtextEditor"
+            contributorClass="org.eclipse.ui.editors.text.TextEditorActionContributor"
+            default="true"
+            extensions="bnf"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf Editor">
+        </editor>
+    </extension>
+    <extension
+        point="org.eclipse.ui.handlers">
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclarationHandler"
+            commandId="org.eclipse.xtext.ui.editor.hyperlinking.OpenDeclaration">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.handler.ValidateActionHandler"
+            commandId="de.ugoe.cs.swe.bnftools.Ebnf.validate">
+         <activeWhen>
+            <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+            </reference>
+         </activeWhen>
+      	</handler>
+      	<!-- copy qualified name -->
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedNameHandler"
+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName">
+            <activeWhen>
+				<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            </activeWhen>
+        </handler>
+        <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedNameHandler"
+            commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName">
+            <activeWhen>
+            	<and>
+            		<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened" />
+	                <iterate>
+						<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+					</iterate>
+				</and>
+            </activeWhen>
+        </handler>
+    </extension>
+    <extension point="org.eclipse.core.expressions.definitions">
+        <definition id="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+            <and>
+                <reference definitionId="isActiveEditorAnInstanceOfXtextEditor"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="de.ugoe.cs.swe.bnftools.Ebnf" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+        <definition id="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened">
+            <and>
+                <reference definitionId="isXtextEditorActive"/>
+                <with variable="activeEditor">
+                    <test property="org.eclipse.xtext.ui.editor.XtextEditor.languageName" 
+                        value="de.ugoe.cs.swe.bnftools.Ebnf" 
+                        forcePluginActivation="true"/>
+                </with>        
+            </and>
+        </definition>
+    </extension>
+    <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.syntaxcoloring.SyntaxColoringPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.coloring"
+            name="Syntax Coloring">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.templates"
+            name="Templates">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+    </extension>
+    <extension
+            point="org.eclipse.ui.propertyPages">
+        <page
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.preferences.LanguageRootPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf"
+            name="Ebnf">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+            <enabledWhen>
+	            <adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+        </page>
+    </extension>
+    <extension
+        point="org.eclipse.ui.keywords">
+        <keyword
+            id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"
+            label="Ebnf"/>
+    </extension>
+    <extension
+         point="org.eclipse.ui.commands">
+      <command
+            description="Trigger expensive validation"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.validate"
+            name="Validate">
+      </command>
+      <!-- copy qualified name -->
+      <command
+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+            categoryId="org.eclipse.ui.category.edit"
+            description="Copy the qualified name for the selected element"
+            name="Copy Qualified Name">
+      </command>
+      <command
+            id="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName"
+            categoryId="org.eclipse.ui.category.edit"
+            description="Copy the qualified name for the selected element"
+            name="Copy Qualified Name">
+      </command>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+        <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+             <command
+                 commandId="de.ugoe.cs.swe.bnftools.Ebnf.validate"
+                 style="push"
+                 tooltip="Trigger expensive validation">
+            <visibleWhen checkEnabled="false">
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </visibleWhen>
+         </command>  
+         </menuContribution>
+         <!-- copy qualified name -->
+         <menuContribution locationURI="popup:#TextEditorContext?after=copy">
+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName" 
+         		style="push" tooltip="Copy Qualified Name">
+            	<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            	</visibleWhen>
+         	</command>  
+         </menuContribution>
+         <menuContribution locationURI="menu:edit?after=copy">
+         	<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.EditorCopyQualifiedName"
+            	style="push" tooltip="Copy Qualified Name">
+            	<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened" />
+            	</visibleWhen>
+         	</command>  
+         </menuContribution>
+         <menuContribution locationURI="popup:org.eclipse.xtext.ui.outline?after=additions">
+			<command commandId="org.eclipse.xtext.ui.editor.copyqualifiedname.OutlineCopyQualifiedName" 
+				style="push" tooltip="Copy Qualified Name">
+         		<visibleWhen checkEnabled="false">
+	            	<and>
+	            		<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.XtextEditor.opened" />
+						<iterate>
+							<adapt type="org.eclipse.xtext.ui.editor.outline.IOutlineNode" />
+						</iterate>
+					</and>
+				</visibleWhen>
+			</command>
+         </menuContribution>
+    </extension>
+    <extension point="org.eclipse.ui.menus">
+		<menuContribution locationURI="popup:#TextEditorContext?endof=group.find">
+			<command commandId="org.eclipse.xtext.ui.editor.FindReferences">
+				<visibleWhen checkEnabled="false">
+                	<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                	</reference>
+            	</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+	<extension point="org.eclipse.ui.handlers">
+	    <handler
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.findrefs.FindReferencesHandler"
+            commandId="org.eclipse.xtext.ui.editor.FindReferences">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+    </extension>   
+
+<!-- adding resource factories -->
+
+	<extension
+		point="org.eclipse.emf.ecore.extension_parser">
+		<parser
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.resource.IResourceFactory"
+			type="bnf">
+		</parser>
+	</extension>
+	<extension point="org.eclipse.xtext.extension_resourceServiceProvider">
+        <resourceServiceProvider
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.resource.IResourceUIServiceProvider"
+            uriExtension="bnf">
+        </resourceServiceProvider>
+    </extension>
+
+
+	<!-- marker definitions for de.ugoe.cs.swe.bnftools.Ebnf -->
+	<extension
+	        id="ebnf.check.fast"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.fast"/>
+	    <persistent value="true"/>
+	</extension>
+	<extension
+	        id="ebnf.check.normal"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.normal"/>
+	    <persistent value="true"/>
+	</extension>
+	<extension
+	        id="ebnf.check.expensive"
+	        name="Ebnf Problem"
+	        point="org.eclipse.core.resources.markers">
+	    <super type="org.eclipse.xtext.ui.check.expensive"/>
+	    <persistent value="true"/>
+	</extension>
+
+   <extension
+         point="org.eclipse.xtext.builder.participant">
+      <participant
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.IXtextBuilderParticipant">
+      </participant>
+   </extension>
+   <extension
+            point="org.eclipse.ui.preferencePages">
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.compiler.preferencePage"
+            name="Compiler">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+        </page>
+    </extension>
+    <extension
+            point="org.eclipse.ui.propertyPages">
+        <page
+            category="de.ugoe.cs.swe.bnftools.Ebnf"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.builder.preferences.BuilderPreferencePage"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.compiler.propertyPage"
+            name="Compiler">
+            <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+            <enabledWhen>
+	            <adapt type="org.eclipse.core.resources.IProject"/>
+			</enabledWhen>
+	        <filter name="projectNature" value="org.eclipse.xtext.ui.shared.xtextNature"/>
+        </page>
+    </extension>
+
+	<!-- Quick Outline -->
+	<extension
+		point="org.eclipse.ui.handlers">
+		<handler 
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
+			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
+			<activeWhen>
+				<reference
+					definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+	<extension
+		point="org.eclipse.ui.commands">
+		<command
+			description="Open the quick outline."
+			id="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+			name="Quick Outline">
+		</command>
+	</extension>
+	<extension point="org.eclipse.ui.menus">
+		<menuContribution
+			locationURI="popup:#TextEditorContext?after=group.open">
+			<command commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline"
+				style="push"
+				tooltip="Open Quick Outline">
+				<visibleWhen checkEnabled="false">
+					<reference definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened"/>
+				</visibleWhen>
+			</command>
+		</menuContribution>
+	</extension>
+    <!-- quickfix marker resolution generator for de.ugoe.cs.swe.bnftools.Ebnf -->
+    <extension
+            point="org.eclipse.ui.ide.markerResolution">
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.fast">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.normal">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+        <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator"
+            markerType="de.ugoe.cs.swe.bnftools.ui.ebnf.check.expensive">
+            <attribute
+                name="FIXABLE_KEY"
+                value="true">
+            </attribute>
+        </markerResolutionGenerator>
+    </extension>
+   	<!-- Rename Refactoring -->
+	<extension point="org.eclipse.ui.handlers">
+		<handler 
+			class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
+			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
+			<activeWhen>
+				<reference
+					definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+				</reference>
+			</activeWhen>
+		</handler>
+	</extension>
+    <extension point="org.eclipse.ui.menus">
+         <menuContribution
+            locationURI="popup:#TextEditorContext?after=group.edit">
+         <command commandId="org.eclipse.xtext.ui.refactoring.RenameElement"
+               style="push">
+            <visibleWhen checkEnabled="false">
+               <reference
+                     definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+               </reference>
+            </visibleWhen>
+         </command>
+      </menuContribution>
+   </extension>
+   <extension point="org.eclipse.ui.preferencePages">
+	    <page
+	        category="de.ugoe.cs.swe.bnftools.Ebnf"
+	        class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferencePage"
+	        id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring"
+	        name="Refactoring">
+	        <keywordReference id="de.ugoe.cs.swe.bnftools.ui.keyword_Ebnf"/>
+	    </page>
+	</extension>
+
+  <extension point="org.eclipse.compare.contentViewers">
+    <viewer id="de.ugoe.cs.swe.bnftools.Ebnf.compare.contentViewers"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+            extensions="bnf">
+    </viewer>
+  </extension>
+  <extension point="org.eclipse.compare.contentMergeViewers">
+    <viewer id="de.ugoe.cs.swe.bnftools.Ebnf.compare.contentMergeViewers"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.compare.InjectableViewerCreator"
+            extensions="bnf" label="Ebnf Compare">
+     </viewer>
+  </extension>
+  <extension point="org.eclipse.ui.editors.documentProviders">
+    <provider id="de.ugoe.cs.swe.bnftools.Ebnf.editors.documentProviders"
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.model.XtextDocumentProvider"
+            extensions="bnf">
+    </provider>
+  </extension>
+
+</plugin>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java	(revision 61)
@@ -0,0 +1,242 @@
+
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui;
+
+import org.eclipse.xtext.ui.DefaultUiModule;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Manual modifications go to {de.ugoe.cs.swe.bnftools.ui.EbnfUiModule}
+ */
+@SuppressWarnings("all")
+public abstract class AbstractEbnfUiModule extends DefaultUiModule {
+	
+	public AbstractEbnfUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+	
+	
+	// contributed by org.eclipse.xtext.ui.generator.ImplicitUiFragment
+	public com.google.inject.Provider<org.eclipse.xtext.resource.containers.IAllContainersState> provideIAllContainersState() {
+		return org.eclipse.xtext.ui.shared.Access.getJavaProjectsState();
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IProposalConflictHelper> bindIProposalConflictHelper() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.AntlrProposalConflictHelper.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public void configureHighlightingTokenDefProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.parser.antlr.ITokenDefProvider.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.HIGHLIGHTING)).to(org.eclipse.xtext.parser.antlr.AntlrTokenDefProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.exporting.QualifiedNamesFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IDependentElementsCalculator> bindIDependentElementsCalculator() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultDependentElementsCalculator.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.builder.clustering.CurrentDescriptions.ResourceSetAware.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.IXtextEditorCallback> bindIXtextEditorCallback() {
+		return org.eclipse.xtext.builder.nature.NatureAddingEditorCallback.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public void configureIResourceDescriptionsPersisted(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.resource.IResourceDescriptions.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.builder.impl.PersistentDataAwareDirtyResource.PERSISTED_DESCRIPTIONS)).to(org.eclipse.xtext.builder.builderState.IBuilderState.class);
+	}
+
+	// contributed by org.eclipse.xtext.generator.builder.BuilderIntegrationFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.DocumentBasedDirtyResource> bindDocumentBasedDirtyResource() {
+		return org.eclipse.xtext.builder.impl.PersistentDataAwareDirtyResource.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public Class<? extends org.eclipse.xtext.builder.IXtextBuilderParticipant> bindIXtextBuilderParticipant() {
+		return org.eclipse.xtext.builder.BuilderParticipant.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public org.eclipse.core.resources.IWorkspaceRoot bindIWorkspaceRootToInstance() {
+		return org.eclipse.core.resources.ResourcesPlugin.getWorkspace().getRoot();
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public void configureBuilderPreferenceStoreInitializer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer.class).annotatedWith(com.google.inject.name.Names.named("builderPreferenceInitializer")).to(org.eclipse.xtext.builder.preferences.BuilderPreferenceAccess.Initializer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public Class<? extends org.eclipse.jface.viewers.ILabelProvider> bindILabelProvider() {
+		return de.ugoe.cs.swe.bnftools.ui.labeling.EbnfLabelProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.labeling.LabelProviderFragment
+	public void configureResourceUIServiceLabelProvider(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.jface.viewers.ILabelProvider.class).annotatedWith(org.eclipse.xtext.ui.resource.ResourceServiceDescriptionLabelProvider.class).to(de.ugoe.cs.swe.bnftools.ui.labeling.EbnfDescriptionLabelProvider.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.IOutlineTreeProvider> bindIOutlineTreeProvider() {
+		return de.ugoe.cs.swe.bnftools.ui.outline.EbnfOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineTreeProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.impl.IOutlineTreeStructureProvider> bindIOutlineTreeStructureProvider() {
+		return de.ugoe.cs.swe.bnftools.ui.outline.EbnfOutlineTreeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.quickfix.QuickfixProviderFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.quickfix.IssueResolutionProvider> bindIssueResolutionProvider() {
+		return de.ugoe.cs.swe.bnftools.ui.quickfix.EbnfQuickfixProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.contentAssist.ContentAssistFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.IContentProposalProvider> bindIContentProposalProvider() {
+		return de.ugoe.cs.swe.bnftools.ui.contentassist.EbnfProposalProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext.Factory> bindContentAssistContext$Factory() {
+		return org.eclipse.xtext.ui.editor.contentassist.antlr.ParserBasedContentAssistContextFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.antlr.IContentAssistParser> bindIContentAssistParser() {
+		return de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.EbnfParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexerProvider(com.google.inject.Binder binder) {
+		binder.bind(de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfLexer.class).toProvider(org.eclipse.xtext.parser.antlr.LexerProvider.create(de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfLexer.class));
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrUiGeneratorFragment
+	public void configureContentAssistLexer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.contentassist.antlr.internal.Lexer.class).annotatedWith(com.google.inject.name.Names.named(org.eclipse.xtext.ui.LexerUIBindings.CONTENT_ASSIST)).to(de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfLexer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IRenameStrategy> bindIRenameStrategy() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultRenameStrategy.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IReferenceUpdater> bindIReferenceUpdater() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultReferenceUpdater.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public void configureIPreferenceStoreInitializer(com.google.inject.Binder binder) {
+		binder.bind(org.eclipse.xtext.ui.editor.preferences.IPreferenceStoreInitializer.class).annotatedWith(com.google.inject.name.Names.named("RefactoringPreferences")).to(org.eclipse.xtext.ui.refactoring.ui.RefactoringPreferences.Initializer.class);
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.IRenameRefactoringProvider> bindIRenameRefactoringProvider() {
+		return org.eclipse.xtext.ui.refactoring.impl.DefaultRenameRefactoringProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.refactoring.RefactorElementNameFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.ui.IRenameSupport.Factory> bindIRenameSupport$Factory() {
+		return org.eclipse.xtext.ui.refactoring.ui.DefaultRenameSupport.Factory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public java.lang.ClassLoader bindClassLoaderToInstance() {
+		return getClass().getClassLoader();
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.access.IJvmTypeProvider.Factory> bindIJvmTypeProvider$Factory() {
+		return org.eclipse.xtext.common.types.access.jdt.JdtTypeProviderFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.xtext.AbstractTypeScopeProvider> bindAbstractTypeScopeProvider() {
+		return org.eclipse.xtext.common.types.xtext.ui.JdtBasedSimpleTypeScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.xtext.ui.ITypesProposalProvider> bindITypesProposalProvider() {
+		return org.eclipse.xtext.common.types.xtext.ui.JdtTypesProposalProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.access.jdt.IJavaProjectProvider> bindIJavaProjectProvider() {
+		return org.eclipse.xtext.common.types.xtext.ui.XtextResourceSetBasedProjectProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.hyperlinking.IHyperlinkHelper> bindIHyperlinkHelper() {
+		return org.eclipse.xtext.common.types.xtext.ui.TypeAwareHyperlinkHelper.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.PrefixMatcher> bindPrefixMatcher() {
+		return org.eclipse.xtext.ui.editor.contentassist.FQNPrefixMatcher.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider.ReferenceProposalCreator> bindAbstractJavaBasedContentProposalProvider$ReferenceProposalCreator() {
+		return org.eclipse.xtext.common.types.xtext.ui.TypeAwareReferenceProposalCreator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.IValidationJobScheduler> bindIValidationJobScheduler() {
+		return org.eclipse.xtext.common.types.xtext.ui.JdtValidationJobScheduler.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.refactoring.impl.RefactoringResourceSetProvider> bindRefactoringResourceSetProvider() {
+		return org.eclipse.xtext.common.types.ui.refactoring.JvmRefactoringResourceSetProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.ui.query.IJavaSearchParticipation> bindIJavaSearchParticipation() {
+		return org.eclipse.xtext.common.types.ui.query.IJavaSearchParticipation.Yes.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.xtext.ui.codetemplates.ui.preferences.TemplatesLanguageConfiguration> provideTemplatesLanguageConfiguration() {
+		return org.eclipse.xtext.ui.codetemplates.ui.AccessibleCodetemplatesActivator.getTemplatesLanguageConfigurationProvider();
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public com.google.inject.Provider<org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistry> provideLanguageRegistry() {
+		return org.eclipse.xtext.ui.codetemplates.ui.AccessibleCodetemplatesActivator.getLanguageRegistry();
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistrar> bindLanguageRegistrar() {
+		return org.eclipse.xtext.ui.codetemplates.ui.registry.LanguageRegistrar.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.templates.XtextTemplatePreferencePage> bindXtextTemplatePreferencePage() {
+		return org.eclipse.xtext.ui.codetemplates.ui.preferences.AdvancedTemplatesPreferencePage.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.templates.CodetemplatesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialContentAssistParser> bindIPartialContentAssistParser() {
+		return de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.PartialEbnfContentAssistParser.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.compare.CompareFragment
+	public Class<? extends org.eclipse.compare.IViewerCreator> bindIViewerCreator() {
+		return org.eclipse.xtext.ui.compare.DefaultViewerCreator.class;
+	}
+
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java	(revision 61)
@@ -0,0 +1,29 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui;
+
+import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
+import org.osgi.framework.Bundle;
+
+import com.google.inject.Injector;
+
+import de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class EbnfExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return EbnfActivator.getInstance().getBundle();
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		return EbnfActivator.getInstance().getInjector(EbnfActivator.DE_UGOE_CS_SWE_BNFTOOLS_EBNF);
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java	(revision 61)
@@ -0,0 +1,263 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.contentassist;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+
+/**
+ * Represents a generated, default implementation of superclass {@link org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider}.
+ * Methods are dynamically dispatched on the first parameter, i.e., you can override them 
+ * with a more concrete subtype. 
+ */
+@SuppressWarnings("all")
+public class AbstractEbnfProposalProvider extends org.eclipse.xtext.ui.editor.contentassist.AbstractJavaBasedContentProposalProvider {
+		
+	public void completeEtsiBnf_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_Type(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeEtsiBnf_ImportSection(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_BnfEntry(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_DeltaEntry(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_MergeEntry(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeImportSection_Imports(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeBnfEntry_Sectionheader(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeBnfEntry_Rule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDeltaEntry_Rule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDeltaEntry_Sectionheader(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDeltaEntry_ExtRule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeMergeEntry_Sectionheader(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeMergeEntry_MergeRule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeSectionHeading_SectionHeader(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeImport_ImportURI(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeImport_GrammarType(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void completeImport_Label(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRule_Rulenumber(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRule_Rulevariant(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRule_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRule_DefinitionList(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExtRule_Rulenumber(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExtRule_Rulevariant(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExtRule_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExtRule_Ruleext(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeExtRule_Elements(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeGlobalCombinator_Logic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRuleCombinator_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRuleCombinator_Logic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRuleCombinator_LABEL(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeHookCombinator_Name(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeHookCombinator_Ruleext(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeHookCombinator_Logic(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeHookCombinator_LABEL(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeDefinitionList_SingleDefinition(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeSingleDefinition_Terms(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTerm_TermAtom(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTerm_TermGroupedSequence(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTerm_TermOptionalSequence(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeTerm_TermRepeatedSequence(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAtom_AtomStringRule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeAtom_AtomRuleReference(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRuleReference_Ruleref(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		lookupCrossReference(((CrossReference)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStringRule_Literal(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeStringRule_Colon(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeGroupedSequence_DefinitionList(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeOptionalSequence_DefinitionList(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRepeatedSequence_Definitions(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeRepeatedSequence_Morethanonce(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+    
+	public void complete_EtsiBnf(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ImportSection(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_BnfEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_DeltaEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_MergeEntry(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_SectionHeading(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Import(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Rule(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ExtRule(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_MergeRule(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_GlobalCombinator(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_RuleCombinator(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_HookCombinator(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_DefinitionList(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_SingleDefinition(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Term(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_Atom(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_RuleReference(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_StringRule(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_GroupedSequence(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_OptionalSequence(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_RepeatedSequence(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ID(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_INT(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_WS(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_COLON(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_STRING(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_SECTIONHEADER(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_SL_COMMENT(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_ML_COMMENT(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_LOGIC(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java	(revision 61)
@@ -0,0 +1,161 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Map;
+import java.util.HashMap;
+
+import org.antlr.runtime.RecognitionException;
+import org.eclipse.xtext.AbstractElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.AbstractContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+public class EbnfParser extends AbstractContentAssistParser {
+	
+	@Inject
+	private EbnfGrammarAccess grammarAccess;
+	
+	private Map<AbstractElement, String> nameMappings;
+	
+	@Override
+	protected de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfParser createParser() {
+		de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfParser result = new de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfParser(null);
+		result.setGrammarAccess(grammarAccess);
+		return result;
+	}
+	
+	@Override
+	protected String getRuleName(AbstractElement element) {
+		if (nameMappings == null) {
+			nameMappings = new HashMap<AbstractElement, String>() {
+				private static final long serialVersionUID = 1L;
+				{
+					put(grammarAccess.getEtsiBnfAccess().getAlternatives(), "rule__EtsiBnf__Alternatives");
+					put(grammarAccess.getBnfEntryAccess().getAlternatives(), "rule__BnfEntry__Alternatives");
+					put(grammarAccess.getDeltaEntryAccess().getAlternatives(), "rule__DeltaEntry__Alternatives");
+					put(grammarAccess.getMergeEntryAccess().getAlternatives(), "rule__MergeEntry__Alternatives");
+					put(grammarAccess.getImportAccess().getAlternatives_2_1(), "rule__Import__Alternatives_2_1");
+					put(grammarAccess.getExtRuleAccess().getAlternatives_4(), "rule__ExtRule__Alternatives_4");
+					put(grammarAccess.getMergeRuleAccess().getAlternatives(), "rule__MergeRule__Alternatives");
+					put(grammarAccess.getTermAccess().getAlternatives(), "rule__Term__Alternatives");
+					put(grammarAccess.getAtomAccess().getAlternatives(), "rule__Atom__Alternatives");
+					put(grammarAccess.getStringRuleAccess().getAlternatives(), "rule__StringRule__Alternatives");
+					put(grammarAccess.getEtsiBnfAccess().getGroup_0(), "rule__EtsiBnf__Group_0__0");
+					put(grammarAccess.getEtsiBnfAccess().getGroup_0_2(), "rule__EtsiBnf__Group_0_2__0");
+					put(grammarAccess.getEtsiBnfAccess().getGroup_1(), "rule__EtsiBnf__Group_1__0");
+					put(grammarAccess.getEtsiBnfAccess().getGroup_2(), "rule__EtsiBnf__Group_2__0");
+					put(grammarAccess.getSectionHeadingAccess().getGroup(), "rule__SectionHeading__Group__0");
+					put(grammarAccess.getImportAccess().getGroup(), "rule__Import__Group__0");
+					put(grammarAccess.getImportAccess().getGroup_2(), "rule__Import__Group_2__0");
+					put(grammarAccess.getImportAccess().getGroup_3(), "rule__Import__Group_3__0");
+					put(grammarAccess.getRuleAccess().getGroup(), "rule__Rule__Group__0");
+					put(grammarAccess.getRuleAccess().getGroup_0(), "rule__Rule__Group_0__0");
+					put(grammarAccess.getExtRuleAccess().getGroup(), "rule__ExtRule__Group__0");
+					put(grammarAccess.getExtRuleAccess().getGroup_0(), "rule__ExtRule__Group_0__0");
+					put(grammarAccess.getExtRuleAccess().getGroup_2(), "rule__ExtRule__Group_2__0");
+					put(grammarAccess.getGlobalCombinatorAccess().getGroup(), "rule__GlobalCombinator__Group__0");
+					put(grammarAccess.getGlobalCombinatorAccess().getGroup_0(), "rule__GlobalCombinator__Group_0__0");
+					put(grammarAccess.getRuleCombinatorAccess().getGroup(), "rule__RuleCombinator__Group__0");
+					put(grammarAccess.getRuleCombinatorAccess().getGroup_0(), "rule__RuleCombinator__Group_0__0");
+					put(grammarAccess.getRuleCombinatorAccess().getGroup_2(), "rule__RuleCombinator__Group_2__0");
+					put(grammarAccess.getHookCombinatorAccess().getGroup(), "rule__HookCombinator__Group__0");
+					put(grammarAccess.getHookCombinatorAccess().getGroup_7(), "rule__HookCombinator__Group_7__0");
+					put(grammarAccess.getDefinitionListAccess().getGroup(), "rule__DefinitionList__Group__0");
+					put(grammarAccess.getDefinitionListAccess().getGroup_1(), "rule__DefinitionList__Group_1__0");
+					put(grammarAccess.getGroupedSequenceAccess().getGroup(), "rule__GroupedSequence__Group__0");
+					put(grammarAccess.getOptionalSequenceAccess().getGroup(), "rule__OptionalSequence__Group__0");
+					put(grammarAccess.getRepeatedSequenceAccess().getGroup(), "rule__RepeatedSequence__Group__0");
+					put(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1(), "rule__EtsiBnf__NameAssignment_0_1");
+					put(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0(), "rule__EtsiBnf__TypeAssignment_0_2_0");
+					put(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2(), "rule__EtsiBnf__ImportSectionAssignment_0_2_2");
+					put(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3(), "rule__EtsiBnf__BnfEntryAssignment_0_2_3");
+					put(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0(), "rule__EtsiBnf__TypeAssignment_1_0");
+					put(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2(), "rule__EtsiBnf__ImportSectionAssignment_1_2");
+					put(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3(), "rule__EtsiBnf__DeltaEntryAssignment_1_3");
+					put(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0(), "rule__EtsiBnf__TypeAssignment_2_0");
+					put(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2(), "rule__EtsiBnf__ImportSectionAssignment_2_2");
+					put(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3(), "rule__EtsiBnf__MergeEntryAssignment_2_3");
+					put(grammarAccess.getImportSectionAccess().getImportsAssignment(), "rule__ImportSection__ImportsAssignment");
+					put(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0(), "rule__BnfEntry__SectionheaderAssignment_0");
+					put(grammarAccess.getBnfEntryAccess().getRuleAssignment_1(), "rule__BnfEntry__RuleAssignment_1");
+					put(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0(), "rule__DeltaEntry__RuleAssignment_0");
+					put(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1(), "rule__DeltaEntry__SectionheaderAssignment_1");
+					put(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2(), "rule__DeltaEntry__ExtRuleAssignment_2");
+					put(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0(), "rule__MergeEntry__SectionheaderAssignment_0");
+					put(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1(), "rule__MergeEntry__MergeRuleAssignment_1");
+					put(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1(), "rule__SectionHeading__SectionHeaderAssignment_1");
+					put(grammarAccess.getImportAccess().getImportURIAssignment_1(), "rule__Import__ImportURIAssignment_1");
+					put(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0(), "rule__Import__GrammarTypeAssignment_2_1_0");
+					put(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1(), "rule__Import__GrammarTypeAssignment_2_1_1");
+					put(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2(), "rule__Import__GrammarTypeAssignment_2_1_2");
+					put(grammarAccess.getImportAccess().getLabelAssignment_3_1(), "rule__Import__LabelAssignment_3_1");
+					put(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0(), "rule__Rule__RulenumberAssignment_0_0");
+					put(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1(), "rule__Rule__RulevariantAssignment_0_1");
+					put(grammarAccess.getRuleAccess().getNameAssignment_1(), "rule__Rule__NameAssignment_1");
+					put(grammarAccess.getRuleAccess().getDefinitionListAssignment_3(), "rule__Rule__DefinitionListAssignment_3");
+					put(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0(), "rule__ExtRule__RulenumberAssignment_0_0");
+					put(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1(), "rule__ExtRule__RulevariantAssignment_0_1");
+					put(grammarAccess.getExtRuleAccess().getNameAssignment_1(), "rule__ExtRule__NameAssignment_1");
+					put(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1(), "rule__ExtRule__RuleextAssignment_2_1");
+					put(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0(), "rule__ExtRule__ElementsAssignment_4_0");
+					put(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1(), "rule__GlobalCombinator__LogicAssignment_1");
+					put(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2(), "rule__RuleCombinator__NameAssignment_0_2");
+					put(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1(), "rule__RuleCombinator__LogicAssignment_1");
+					put(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1(), "rule__RuleCombinator__LABELAssignment_2_1");
+					put(grammarAccess.getHookCombinatorAccess().getNameAssignment_2(), "rule__HookCombinator__NameAssignment_2");
+					put(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4(), "rule__HookCombinator__RuleextAssignment_4");
+					put(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6(), "rule__HookCombinator__LogicAssignment_6");
+					put(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1(), "rule__HookCombinator__LABELAssignment_7_1");
+					put(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0(), "rule__DefinitionList__SingleDefinitionAssignment_0");
+					put(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1(), "rule__DefinitionList__SingleDefinitionAssignment_1_1");
+					put(grammarAccess.getSingleDefinitionAccess().getTermsAssignment(), "rule__SingleDefinition__TermsAssignment");
+					put(grammarAccess.getTermAccess().getTermAtomAssignment_0(), "rule__Term__TermAtomAssignment_0");
+					put(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1(), "rule__Term__TermGroupedSequenceAssignment_1");
+					put(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2(), "rule__Term__TermOptionalSequenceAssignment_2");
+					put(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3(), "rule__Term__TermRepeatedSequenceAssignment_3");
+					put(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0(), "rule__Atom__AtomStringRuleAssignment_0");
+					put(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1(), "rule__Atom__AtomRuleReferenceAssignment_1");
+					put(grammarAccess.getRuleReferenceAccess().getRulerefAssignment(), "rule__RuleReference__RulerefAssignment");
+					put(grammarAccess.getStringRuleAccess().getLiteralAssignment_0(), "rule__StringRule__LiteralAssignment_0");
+					put(grammarAccess.getStringRuleAccess().getColonAssignment_1(), "rule__StringRule__ColonAssignment_1");
+					put(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1(), "rule__GroupedSequence__DefinitionListAssignment_1");
+					put(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1(), "rule__OptionalSequence__DefinitionListAssignment_1");
+					put(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1(), "rule__RepeatedSequence__DefinitionsAssignment_1");
+					put(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3(), "rule__RepeatedSequence__MorethanonceAssignment_3");
+				}
+			};
+		}
+		return nameMappings.get(element);
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		try {
+			de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfParser typedParser = (de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal.InternalEbnfParser) parser;
+			typedParser.entryRuleEtsiBnf();
+			return typedParser.getFollowElements();
+		} catch(RecognitionException ex) {
+			throw new RuntimeException(ex);
+		}		
+	}
+	
+	@Override
+	protected String[] getInitialHiddenTokens() {
+		return new String[] { "RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT" };
+	}
+	
+	public EbnfGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(EbnfGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/PartialEbnfContentAssistParser.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/PartialEbnfContentAssistParser.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/PartialEbnfContentAssistParser.java	(revision 61)
@@ -0,0 +1,38 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.contentassist.antlr;
+
+import java.util.Collection;
+import java.util.Collections;
+
+import org.eclipse.xtext.AbstractRule;
+import org.eclipse.xtext.ui.codetemplates.ui.partialEditing.IPartialContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.FollowElement;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.util.PolymorphicDispatcher;
+
+/**
+ * @author Sebastian Zarnekow - Initial contribution and API
+ */
+@SuppressWarnings("restriction")
+public class PartialEbnfContentAssistParser extends EbnfParser implements IPartialContentAssistParser {
+
+	private AbstractRule rule;
+
+	public void initializeFor(AbstractRule rule) {
+		this.rule = rule;
+	}
+	
+	@Override
+	protected Collection<FollowElement> getFollowElements(AbstractInternalContentAssistParser parser) {
+		if (rule == null || rule.eIsProxy())
+			return Collections.emptyList();
+		String methodName = "entryRule" + rule.getName();
+		PolymorphicDispatcher<Collection<FollowElement>> dispatcher = 
+			new PolymorphicDispatcher<Collection<FollowElement>>(methodName, 0, 0, Collections.singletonList(parser));
+		dispatcher.invoke();
+		return parser.getFollowElements();
+	}
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g	(revision 61)
@@ -0,0 +1,4713 @@
+/*
+* generated by Xtext
+*/
+grammar InternalEbnf;
+
+options {
+	superClass=AbstractInternalContentAssistParser;
+	
+}
+
+@lexer::header {
+package de.ugoe.cs.swe.bnftools.ui.contentassist.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.ui.editor.contentassist.antlr.internal.Lexer;
+}
+
+@parser::header {
+package de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+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.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+}
+
+@parser::members {
+ 
+ 	private EbnfGrammarAccess grammarAccess;
+ 	
+    public void setGrammarAccess(EbnfGrammarAccess grammarAccess) {
+    	this.grammarAccess = grammarAccess;
+    }
+    
+    @Override
+    protected Grammar getGrammar() {
+    	return grammarAccess.getGrammar();
+    }
+    
+    @Override
+    protected String getValueForTokenName(String tokenName) {
+    	return tokenName;
+    }
+
+}
+
+
+
+
+// Entry rule entryRuleEtsiBnf
+entryRuleEtsiBnf 
+:
+{ before(grammarAccess.getEtsiBnfRule()); }
+	 ruleEtsiBnf
+{ after(grammarAccess.getEtsiBnfRule()); } 
+	 EOF 
+;
+
+// Rule EtsiBnf
+ruleEtsiBnf
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getAlternatives()); }
+(rule__EtsiBnf__Alternatives)
+{ after(grammarAccess.getEtsiBnfAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleImportSection
+entryRuleImportSection 
+:
+{ before(grammarAccess.getImportSectionRule()); }
+	 ruleImportSection
+{ after(grammarAccess.getImportSectionRule()); } 
+	 EOF 
+;
+
+// Rule ImportSection
+ruleImportSection
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+(
+{ before(grammarAccess.getImportSectionAccess().getImportsAssignment()); }
+(rule__ImportSection__ImportsAssignment)
+{ after(grammarAccess.getImportSectionAccess().getImportsAssignment()); }
+)
+(
+{ before(grammarAccess.getImportSectionAccess().getImportsAssignment()); }
+(rule__ImportSection__ImportsAssignment)*
+{ after(grammarAccess.getImportSectionAccess().getImportsAssignment()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleBnfEntry
+entryRuleBnfEntry 
+:
+{ before(grammarAccess.getBnfEntryRule()); }
+	 ruleBnfEntry
+{ after(grammarAccess.getBnfEntryRule()); } 
+	 EOF 
+;
+
+// Rule BnfEntry
+ruleBnfEntry
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getBnfEntryAccess().getAlternatives()); }
+(rule__BnfEntry__Alternatives)
+{ after(grammarAccess.getBnfEntryAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleDeltaEntry
+entryRuleDeltaEntry 
+:
+{ before(grammarAccess.getDeltaEntryRule()); }
+	 ruleDeltaEntry
+{ after(grammarAccess.getDeltaEntryRule()); } 
+	 EOF 
+;
+
+// Rule DeltaEntry
+ruleDeltaEntry
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getDeltaEntryAccess().getAlternatives()); }
+(rule__DeltaEntry__Alternatives)
+{ after(grammarAccess.getDeltaEntryAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleMergeEntry
+entryRuleMergeEntry 
+:
+{ before(grammarAccess.getMergeEntryRule()); }
+	 ruleMergeEntry
+{ after(grammarAccess.getMergeEntryRule()); } 
+	 EOF 
+;
+
+// Rule MergeEntry
+ruleMergeEntry
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getMergeEntryAccess().getAlternatives()); }
+(rule__MergeEntry__Alternatives)
+{ after(grammarAccess.getMergeEntryAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleSectionHeading
+entryRuleSectionHeading 
+:
+{ before(grammarAccess.getSectionHeadingRule()); }
+	 ruleSectionHeading
+{ after(grammarAccess.getSectionHeadingRule()); } 
+	 EOF 
+;
+
+// Rule SectionHeading
+ruleSectionHeading
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getSectionHeadingAccess().getGroup()); }
+(rule__SectionHeading__Group__0)
+{ after(grammarAccess.getSectionHeadingAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleImport
+entryRuleImport 
+:
+{ before(grammarAccess.getImportRule()); }
+	 ruleImport
+{ after(grammarAccess.getImportRule()); } 
+	 EOF 
+;
+
+// Rule Import
+ruleImport
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getImportAccess().getGroup()); }
+(rule__Import__Group__0)
+{ after(grammarAccess.getImportAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRule
+entryRuleRule 
+:
+{ before(grammarAccess.getRuleRule()); }
+	 ruleRule
+{ after(grammarAccess.getRuleRule()); } 
+	 EOF 
+;
+
+// Rule Rule
+ruleRule
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRuleAccess().getGroup()); }
+(rule__Rule__Group__0)
+{ after(grammarAccess.getRuleAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleExtRule
+entryRuleExtRule 
+:
+{ before(grammarAccess.getExtRuleRule()); }
+	 ruleExtRule
+{ after(grammarAccess.getExtRuleRule()); } 
+	 EOF 
+;
+
+// Rule ExtRule
+ruleExtRule
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getExtRuleAccess().getGroup()); }
+(rule__ExtRule__Group__0)
+{ after(grammarAccess.getExtRuleAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleMergeRule
+entryRuleMergeRule 
+:
+{ before(grammarAccess.getMergeRuleRule()); }
+	 ruleMergeRule
+{ after(grammarAccess.getMergeRuleRule()); } 
+	 EOF 
+;
+
+// Rule MergeRule
+ruleMergeRule
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getMergeRuleAccess().getAlternatives()); }
+(rule__MergeRule__Alternatives)
+{ after(grammarAccess.getMergeRuleAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleGlobalCombinator
+entryRuleGlobalCombinator 
+:
+{ before(grammarAccess.getGlobalCombinatorRule()); }
+	 ruleGlobalCombinator
+{ after(grammarAccess.getGlobalCombinatorRule()); } 
+	 EOF 
+;
+
+// Rule GlobalCombinator
+ruleGlobalCombinator
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getGroup()); }
+(rule__GlobalCombinator__Group__0)
+{ after(grammarAccess.getGlobalCombinatorAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRuleCombinator
+entryRuleRuleCombinator 
+:
+{ before(grammarAccess.getRuleCombinatorRule()); }
+	 ruleRuleCombinator
+{ after(grammarAccess.getRuleCombinatorRule()); } 
+	 EOF 
+;
+
+// Rule RuleCombinator
+ruleRuleCombinator
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getGroup()); }
+(rule__RuleCombinator__Group__0)
+{ after(grammarAccess.getRuleCombinatorAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleHookCombinator
+entryRuleHookCombinator 
+:
+{ before(grammarAccess.getHookCombinatorRule()); }
+	 ruleHookCombinator
+{ after(grammarAccess.getHookCombinatorRule()); } 
+	 EOF 
+;
+
+// Rule HookCombinator
+ruleHookCombinator
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getGroup()); }
+(rule__HookCombinator__Group__0)
+{ after(grammarAccess.getHookCombinatorAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleDefinitionList
+entryRuleDefinitionList 
+:
+{ before(grammarAccess.getDefinitionListRule()); }
+	 ruleDefinitionList
+{ after(grammarAccess.getDefinitionListRule()); } 
+	 EOF 
+;
+
+// Rule DefinitionList
+ruleDefinitionList
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getDefinitionListAccess().getGroup()); }
+(rule__DefinitionList__Group__0)
+{ after(grammarAccess.getDefinitionListAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleSingleDefinition
+entryRuleSingleDefinition 
+:
+{ before(grammarAccess.getSingleDefinitionRule()); }
+	 ruleSingleDefinition
+{ after(grammarAccess.getSingleDefinitionRule()); } 
+	 EOF 
+;
+
+// Rule SingleDefinition
+ruleSingleDefinition
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+(
+{ before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); }
+(rule__SingleDefinition__TermsAssignment)
+{ after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); }
+)
+(
+{ before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); }
+(rule__SingleDefinition__TermsAssignment)*
+{ after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleTerm
+entryRuleTerm 
+:
+{ before(grammarAccess.getTermRule()); }
+	 ruleTerm
+{ after(grammarAccess.getTermRule()); } 
+	 EOF 
+;
+
+// Rule Term
+ruleTerm
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getTermAccess().getAlternatives()); }
+(rule__Term__Alternatives)
+{ after(grammarAccess.getTermAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleAtom
+entryRuleAtom 
+:
+{ before(grammarAccess.getAtomRule()); }
+	 ruleAtom
+{ after(grammarAccess.getAtomRule()); } 
+	 EOF 
+;
+
+// Rule Atom
+ruleAtom
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getAtomAccess().getAlternatives()); }
+(rule__Atom__Alternatives)
+{ after(grammarAccess.getAtomAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRuleReference
+entryRuleRuleReference 
+:
+{ before(grammarAccess.getRuleReferenceRule()); }
+	 ruleRuleReference
+{ after(grammarAccess.getRuleReferenceRule()); } 
+	 EOF 
+;
+
+// Rule RuleReference
+ruleRuleReference
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); }
+(rule__RuleReference__RulerefAssignment)
+{ after(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleStringRule
+entryRuleStringRule 
+:
+{ before(grammarAccess.getStringRuleRule()); }
+	 ruleStringRule
+{ after(grammarAccess.getStringRuleRule()); } 
+	 EOF 
+;
+
+// Rule StringRule
+ruleStringRule
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getStringRuleAccess().getAlternatives()); }
+(rule__StringRule__Alternatives)
+{ after(grammarAccess.getStringRuleAccess().getAlternatives()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleGroupedSequence
+entryRuleGroupedSequence 
+:
+{ before(grammarAccess.getGroupedSequenceRule()); }
+	 ruleGroupedSequence
+{ after(grammarAccess.getGroupedSequenceRule()); } 
+	 EOF 
+;
+
+// Rule GroupedSequence
+ruleGroupedSequence
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getGroupedSequenceAccess().getGroup()); }
+(rule__GroupedSequence__Group__0)
+{ after(grammarAccess.getGroupedSequenceAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleOptionalSequence
+entryRuleOptionalSequence 
+:
+{ before(grammarAccess.getOptionalSequenceRule()); }
+	 ruleOptionalSequence
+{ after(grammarAccess.getOptionalSequenceRule()); } 
+	 EOF 
+;
+
+// Rule OptionalSequence
+ruleOptionalSequence
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getOptionalSequenceAccess().getGroup()); }
+(rule__OptionalSequence__Group__0)
+{ after(grammarAccess.getOptionalSequenceAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+// Entry rule entryRuleRepeatedSequence
+entryRuleRepeatedSequence 
+:
+{ before(grammarAccess.getRepeatedSequenceRule()); }
+	 ruleRepeatedSequence
+{ after(grammarAccess.getRepeatedSequenceRule()); } 
+	 EOF 
+;
+
+// Rule RepeatedSequence
+ruleRepeatedSequence
+    @init {
+		int stackSize = keepStackSize();
+    }
+	:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getGroup()); }
+(rule__RepeatedSequence__Group__0)
+{ after(grammarAccess.getRepeatedSequenceAccess().getGroup()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+rule__EtsiBnf__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getGroup_0()); }
+(rule__EtsiBnf__Group_0__0)
+{ after(grammarAccess.getEtsiBnfAccess().getGroup_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getGroup_1()); }
+(rule__EtsiBnf__Group_1__0)
+{ after(grammarAccess.getEtsiBnfAccess().getGroup_1()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getGroup_2()); }
+(rule__EtsiBnf__Group_2__0)
+{ after(grammarAccess.getEtsiBnfAccess().getGroup_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BnfEntry__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); }
+(rule__BnfEntry__SectionheaderAssignment_0)
+{ after(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); }
+(rule__BnfEntry__RuleAssignment_1)
+{ after(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DeltaEntry__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); }
+(rule__DeltaEntry__RuleAssignment_0)
+{ after(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); }
+(rule__DeltaEntry__SectionheaderAssignment_1)
+{ after(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); }
+)
+
+    |(
+{ before(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); }
+(rule__DeltaEntry__ExtRuleAssignment_2)
+{ after(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MergeEntry__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); }
+(rule__MergeEntry__SectionheaderAssignment_0)
+{ after(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); }
+(rule__MergeEntry__MergeRuleAssignment_1)
+{ after(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Alternatives_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); }
+(rule__Import__GrammarTypeAssignment_2_1_0)
+{ after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); }
+)
+
+    |(
+{ before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); }
+(rule__Import__GrammarTypeAssignment_2_1_1)
+{ after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); }
+)
+
+    |(
+{ before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); }
+(rule__Import__GrammarTypeAssignment_2_1_2)
+{ after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Alternatives_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); }
+(rule__ExtRule__ElementsAssignment_4_0)
+{ after(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); }
+
+	')' 
+
+{ after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); }
+
+	']' 
+
+{ after(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); }
+
+	'}' 
+
+{ after(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); }
+
+	'|' 
+
+{ after(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); }
+
+	'(' 
+
+{ after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); }
+
+	'[' 
+
+{ after(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); }
+
+	'{' 
+
+{ after(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); }
+
+	'*' 
+
+{ after(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); }
+)
+
+    |(
+{ before(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); }
+
+	'+' 
+
+{ after(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MergeRule__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); }
+	ruleGlobalCombinator
+{ after(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); }
+)
+
+    |(
+{ before(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); }
+	ruleRuleCombinator
+{ after(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); }
+)
+
+    |(
+{ before(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); }
+	ruleHookCombinator
+{ after(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermAtomAssignment_0()); }
+(rule__Term__TermAtomAssignment_0)
+{ after(grammarAccess.getTermAccess().getTermAtomAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); }
+(rule__Term__TermGroupedSequenceAssignment_1)
+{ after(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); }
+)
+
+    |(
+{ before(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); }
+(rule__Term__TermOptionalSequenceAssignment_2)
+{ after(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); }
+)
+
+    |(
+{ before(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); }
+(rule__Term__TermRepeatedSequenceAssignment_3)
+{ after(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Atom__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); }
+(rule__Atom__AtomStringRuleAssignment_0)
+{ after(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); }
+(rule__Atom__AtomRuleReferenceAssignment_1)
+{ after(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StringRule__Alternatives
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); }
+(rule__StringRule__LiteralAssignment_0)
+{ after(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); }
+)
+
+    |(
+{ before(grammarAccess.getStringRuleAccess().getColonAssignment_1()); }
+(rule__StringRule__ColonAssignment_1)
+{ after(grammarAccess.getStringRuleAccess().getColonAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+rule__EtsiBnf__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0__0__Impl
+	rule__EtsiBnf__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); }
+
+	'grammar' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0__1__Impl
+	rule__EtsiBnf__Group_0__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); }
+(rule__EtsiBnf__NameAssignment_0_1)
+{ after(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_0__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); }
+(rule__EtsiBnf__Group_0_2__0)
+{ after(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__EtsiBnf__Group_0_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0_2__0__Impl
+	rule__EtsiBnf__Group_0_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); }
+(rule__EtsiBnf__TypeAssignment_0_2_0)?
+{ after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_0_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0_2__1__Impl
+	rule__EtsiBnf__Group_0_2__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); }
+
+	';' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_0_2__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0_2__2__Impl
+	rule__EtsiBnf__Group_0_2__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0_2__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); }
+(rule__EtsiBnf__ImportSectionAssignment_0_2_2)?
+{ after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_0_2__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_0_2__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_0_2__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+(
+{ before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); }
+(rule__EtsiBnf__BnfEntryAssignment_0_2_3)
+{ after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); }
+)
+(
+{ before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); }
+(rule__EtsiBnf__BnfEntryAssignment_0_2_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__EtsiBnf__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_1__0__Impl
+	rule__EtsiBnf__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); }
+(rule__EtsiBnf__TypeAssignment_1_0)
+{ after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_1__1__Impl
+	rule__EtsiBnf__Group_1__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); }
+
+	';' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_1__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_1__2__Impl
+	rule__EtsiBnf__Group_1__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_1__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); }
+(rule__EtsiBnf__ImportSectionAssignment_1_2)?
+{ after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_1__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_1__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_1__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); }
+(rule__EtsiBnf__DeltaEntryAssignment_1_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__EtsiBnf__Group_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_2__0__Impl
+	rule__EtsiBnf__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); }
+(rule__EtsiBnf__TypeAssignment_2_0)
+{ after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_2__1__Impl
+	rule__EtsiBnf__Group_2__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); }
+
+	';' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_2__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_2__2__Impl
+	rule__EtsiBnf__Group_2__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_2__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); }
+(rule__EtsiBnf__ImportSectionAssignment_2_2)?
+{ after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__EtsiBnf__Group_2__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__EtsiBnf__Group_2__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Group_2__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); }
+(rule__EtsiBnf__MergeEntryAssignment_2_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__SectionHeading__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SectionHeading__Group__0__Impl
+	rule__SectionHeading__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SectionHeading__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); }
+(
+
+)
+{ after(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__SectionHeading__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__SectionHeading__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SectionHeading__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); }
+(rule__SectionHeading__SectionHeaderAssignment_1)
+{ after(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Import__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group__0__Impl
+	rule__Import__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getImportKeyword_0()); }
+
+	'import' 
+
+{ after(grammarAccess.getImportAccess().getImportKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group__1__Impl
+	rule__Import__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getImportURIAssignment_1()); }
+(rule__Import__ImportURIAssignment_1)
+{ after(grammarAccess.getImportAccess().getImportURIAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group__2__Impl
+	rule__Import__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGroup_2()); }
+(rule__Import__Group_2__0)?
+{ after(grammarAccess.getImportAccess().getGroup_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group__3__Impl
+	rule__Import__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGroup_3()); }
+(rule__Import__Group_3__0)?
+{ after(grammarAccess.getImportAccess().getGroup_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getSemicolonKeyword_4()); }
+
+	';' 
+
+{ after(grammarAccess.getImportAccess().getSemicolonKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Import__Group_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group_2__0__Impl
+	rule__Import__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); }
+
+	'/' 
+
+{ after(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group_2__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getAlternatives_2_1()); }
+(rule__Import__Alternatives_2_1)
+{ after(grammarAccess.getImportAccess().getAlternatives_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Import__Group_3__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group_3__0__Impl
+	rule__Import__Group_3__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group_3__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getLabelKeyword_3_0()); }
+
+	'label:' 
+
+{ after(grammarAccess.getImportAccess().getLabelKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Import__Group_3__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Import__Group_3__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__Group_3__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getLabelAssignment_3_1()); }
+(rule__Import__LabelAssignment_3_1)
+{ after(grammarAccess.getImportAccess().getLabelAssignment_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__Rule__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group__0__Impl
+	rule__Rule__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getGroup_0()); }
+(rule__Rule__Group_0__0)?
+{ after(grammarAccess.getRuleAccess().getGroup_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group__1__Impl
+	rule__Rule__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getNameAssignment_1()); }
+(rule__Rule__NameAssignment_1)
+{ after(grammarAccess.getRuleAccess().getNameAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group__2__Impl
+	rule__Rule__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); }
+
+	'::=' 
+
+{ after(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group__3__Impl
+	rule__Rule__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); }
+(rule__Rule__DefinitionListAssignment_3)?
+{ after(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group__4__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); }
+(
+	';' 
+)?
+{ after(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+rule__Rule__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group_0__0__Impl
+	rule__Rule__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); }
+(rule__Rule__RulenumberAssignment_0_0)
+{ after(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group_0__1__Impl
+	rule__Rule__Group_0__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); }
+(rule__Rule__RulevariantAssignment_0_1)?
+{ after(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__Rule__Group_0__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__Rule__Group_0__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__Group_0__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); }
+
+	'.' 
+
+{ after(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__ExtRule__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__0__Impl
+	rule__ExtRule__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getGroup_0()); }
+(rule__ExtRule__Group_0__0)?
+{ after(grammarAccess.getExtRuleAccess().getGroup_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__1__Impl
+	rule__ExtRule__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getNameAssignment_1()); }
+(rule__ExtRule__NameAssignment_1)
+{ after(grammarAccess.getExtRuleAccess().getNameAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__2__Impl
+	rule__ExtRule__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getGroup_2()); }
+(rule__ExtRule__Group_2__0)
+{ after(grammarAccess.getExtRuleAccess().getGroup_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__3__Impl
+	rule__ExtRule__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); }
+
+	'<-' 
+
+{ after(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__4__Impl
+	rule__ExtRule__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getAlternatives_4()); }
+(rule__ExtRule__Alternatives_4)*
+{ after(grammarAccess.getExtRuleAccess().getAlternatives_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group__5__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); }
+(
+	';' 
+)?
+{ after(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__ExtRule__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_0__0__Impl
+	rule__ExtRule__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); }
+(rule__ExtRule__RulenumberAssignment_0_0)
+{ after(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_0__1__Impl
+	rule__ExtRule__Group_0__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); }
+(rule__ExtRule__RulevariantAssignment_0_1)?
+{ after(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group_0__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_0__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_0__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); }
+
+	'.' 
+
+{ after(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__ExtRule__Group_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_2__0__Impl
+	rule__ExtRule__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); }
+
+	'(' 
+
+{ after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_2__1__Impl
+	rule__ExtRule__Group_2__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); }
+(rule__ExtRule__RuleextAssignment_2_1)
+{ after(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__ExtRule__Group_2__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__ExtRule__Group_2__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__Group_2__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); }
+
+	')' 
+
+{ after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__GlobalCombinator__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GlobalCombinator__Group__0__Impl
+	rule__GlobalCombinator__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); }
+(rule__GlobalCombinator__Group_0__0)
+{ after(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__GlobalCombinator__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GlobalCombinator__Group__1__Impl
+	rule__GlobalCombinator__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); }
+(rule__GlobalCombinator__LogicAssignment_1)
+{ after(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__GlobalCombinator__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GlobalCombinator__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); }
+(
+	';' 
+)?
+{ after(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__GlobalCombinator__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GlobalCombinator__Group_0__0__Impl
+	rule__GlobalCombinator__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); }
+
+	'global' 
+
+{ after(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__GlobalCombinator__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GlobalCombinator__Group_0__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); }
+
+	'combinator:' 
+
+{ after(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__RuleCombinator__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group__0__Impl
+	rule__RuleCombinator__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getGroup_0()); }
+(rule__RuleCombinator__Group_0__0)
+{ after(grammarAccess.getRuleCombinatorAccess().getGroup_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group__1__Impl
+	rule__RuleCombinator__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); }
+(rule__RuleCombinator__LogicAssignment_1)
+{ after(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group__2__Impl
+	rule__RuleCombinator__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getGroup_2()); }
+(rule__RuleCombinator__Group_2__0)*
+{ after(grammarAccess.getRuleCombinatorAccess().getGroup_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); }
+(
+	';' 
+)?
+{ after(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+rule__RuleCombinator__Group_0__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_0__0__Impl
+	rule__RuleCombinator__Group_0__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_0__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); }
+
+	'rule' 
+
+{ after(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group_0__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_0__1__Impl
+	rule__RuleCombinator__Group_0__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_0__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); }
+
+	'combinator:' 
+
+{ after(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group_0__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_0__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_0__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); }
+(rule__RuleCombinator__NameAssignment_0_2)
+{ after(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__RuleCombinator__Group_2__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_2__0__Impl
+	rule__RuleCombinator__Group_2__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_2__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); }
+
+	'(' 
+
+{ after(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group_2__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_2__1__Impl
+	rule__RuleCombinator__Group_2__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_2__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); }
+(rule__RuleCombinator__LABELAssignment_2_1)
+{ after(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RuleCombinator__Group_2__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RuleCombinator__Group_2__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__Group_2__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); }
+
+	')' 
+
+{ after(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__HookCombinator__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__0__Impl
+	rule__HookCombinator__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); }
+
+	'hook' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__1__Impl
+	rule__HookCombinator__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); }
+
+	'combinator:' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__2__Impl
+	rule__HookCombinator__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); }
+(rule__HookCombinator__NameAssignment_2)
+{ after(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__3__Impl
+	rule__HookCombinator__Group__4
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); }
+
+	'(' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__4__Impl
+	rule__HookCombinator__Group__5
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__4__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); }
+(rule__HookCombinator__RuleextAssignment_4)
+{ after(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__5
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__5__Impl
+	rule__HookCombinator__Group__6
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__5__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); }
+
+	')' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__6__Impl
+	rule__HookCombinator__Group__7
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__6__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); }
+(rule__HookCombinator__LogicAssignment_6)?
+{ after(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__7
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__7__Impl
+	rule__HookCombinator__Group__8
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__7__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+(
+{ before(grammarAccess.getHookCombinatorAccess().getGroup_7()); }
+(rule__HookCombinator__Group_7__0)
+{ after(grammarAccess.getHookCombinatorAccess().getGroup_7()); }
+)
+(
+{ before(grammarAccess.getHookCombinatorAccess().getGroup_7()); }
+(rule__HookCombinator__Group_7__0)*
+{ after(grammarAccess.getHookCombinatorAccess().getGroup_7()); }
+)
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group__8
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group__8__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group__8__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); }
+(
+	';' 
+)?
+{ after(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+rule__HookCombinator__Group_7__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group_7__0__Impl
+	rule__HookCombinator__Group_7__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group_7__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); }
+
+	'(' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group_7__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group_7__1__Impl
+	rule__HookCombinator__Group_7__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group_7__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); }
+(rule__HookCombinator__LABELAssignment_7_1)
+{ after(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__HookCombinator__Group_7__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__HookCombinator__Group_7__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__Group_7__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); }
+
+	')' 
+
+{ after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__DefinitionList__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__DefinitionList__Group__0__Impl
+	rule__DefinitionList__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); }
+(rule__DefinitionList__SingleDefinitionAssignment_0)
+{ after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__DefinitionList__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__DefinitionList__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getGroup_1()); }
+(rule__DefinitionList__Group_1__0)*
+{ after(grammarAccess.getDefinitionListAccess().getGroup_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__DefinitionList__Group_1__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__DefinitionList__Group_1__0__Impl
+	rule__DefinitionList__Group_1__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__Group_1__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); }
+
+	'|' 
+
+{ after(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__DefinitionList__Group_1__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__DefinitionList__Group_1__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__Group_1__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); }
+(rule__DefinitionList__SingleDefinitionAssignment_1_1)
+{ after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+rule__GroupedSequence__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GroupedSequence__Group__0__Impl
+	rule__GroupedSequence__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GroupedSequence__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); }
+
+	'(' 
+
+{ after(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__GroupedSequence__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GroupedSequence__Group__1__Impl
+	rule__GroupedSequence__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GroupedSequence__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); }
+(rule__GroupedSequence__DefinitionListAssignment_1)
+{ after(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__GroupedSequence__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__GroupedSequence__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GroupedSequence__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); }
+
+	')' 
+
+{ after(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__OptionalSequence__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OptionalSequence__Group__0__Impl
+	rule__OptionalSequence__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OptionalSequence__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); }
+
+	'[' 
+
+{ after(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OptionalSequence__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OptionalSequence__Group__1__Impl
+	rule__OptionalSequence__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OptionalSequence__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); }
+(rule__OptionalSequence__DefinitionListAssignment_1)
+{ after(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__OptionalSequence__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__OptionalSequence__Group__2__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OptionalSequence__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); }
+
+	']' 
+
+{ after(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+rule__RepeatedSequence__Group__0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RepeatedSequence__Group__0__Impl
+	rule__RepeatedSequence__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__Group__0__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); }
+
+	'{' 
+
+{ after(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RepeatedSequence__Group__1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RepeatedSequence__Group__1__Impl
+	rule__RepeatedSequence__Group__2
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__Group__1__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); }
+(rule__RepeatedSequence__DefinitionsAssignment_1)
+{ after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RepeatedSequence__Group__2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RepeatedSequence__Group__2__Impl
+	rule__RepeatedSequence__Group__3
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__Group__2__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); }
+
+	'}' 
+
+{ after(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__RepeatedSequence__Group__3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+	rule__RepeatedSequence__Group__3__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__Group__3__Impl
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); }
+(rule__RepeatedSequence__MorethanonceAssignment_3)?
+{ after(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+
+
+
+
+
+
+
+
+
+rule__EtsiBnf__NameAssignment_0_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); }
+	RULE_ID{ after(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__TypeAssignment_0_2_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); }
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); }
+
+	'/bnf' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); }
+)
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__ImportSectionAssignment_0_2_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); }
+	ruleImportSection{ after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__BnfEntryAssignment_0_2_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); }
+	ruleBnfEntry{ after(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__TypeAssignment_1_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); }
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); }
+
+	'/delta' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); }
+)
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__ImportSectionAssignment_1_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); }
+	ruleImportSection{ after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__DeltaEntryAssignment_1_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); }
+	ruleDeltaEntry{ after(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__TypeAssignment_2_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); }
+(
+{ before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); }
+
+	'/merge' 
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); }
+)
+
+{ after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__ImportSectionAssignment_2_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); }
+	ruleImportSection{ after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__MergeEntryAssignment_2_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); }
+	ruleMergeEntry{ after(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ImportSection__ImportsAssignment
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); }
+	ruleImport{ after(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BnfEntry__SectionheaderAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); }
+	ruleSectionHeading{ after(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__BnfEntry__RuleAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); }
+	ruleRule{ after(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DeltaEntry__RuleAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); }
+	ruleRule{ after(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DeltaEntry__SectionheaderAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); }
+	ruleSectionHeading{ after(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DeltaEntry__ExtRuleAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); }
+	ruleExtRule{ after(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MergeEntry__SectionheaderAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); }
+	ruleSectionHeading{ after(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__MergeEntry__MergeRuleAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); }
+	ruleMergeRule{ after(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SectionHeading__SectionHeaderAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); }
+	RULE_SECTIONHEADER{ after(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__ImportURIAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); }
+	RULE_STRING{ after(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__GrammarTypeAssignment_2_1_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); }
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); }
+
+	'core' 
+
+{ after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); }
+)
+
+{ after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__GrammarTypeAssignment_2_1_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); }
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); }
+
+	'package' 
+
+{ after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); }
+)
+
+{ after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__GrammarTypeAssignment_2_1_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); }
+(
+{ before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); }
+
+	'update' 
+
+{ after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); }
+)
+
+{ after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Import__LabelAssignment_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); }
+	RULE_ID{ after(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__RulenumberAssignment_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); }
+	RULE_INT{ after(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__RulevariantAssignment_0_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); }
+	RULE_ID{ after(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__NameAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); }
+	RULE_ID{ after(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Rule__DefinitionListAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); }
+	ruleDefinitionList{ after(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__RulenumberAssignment_0_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); }
+	RULE_INT{ after(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__RulevariantAssignment_0_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); }
+	RULE_ID{ after(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__NameAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); }
+	RULE_ID{ after(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__RuleextAssignment_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); }
+	RULE_INT{ after(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__ExtRule__ElementsAssignment_4_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); }
+	ruleAtom{ after(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GlobalCombinator__LogicAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); }
+	RULE_LOGIC{ after(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__NameAssignment_0_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); }
+	RULE_ID{ after(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__LogicAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); }
+	RULE_LOGIC{ after(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleCombinator__LABELAssignment_2_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); }
+	RULE_STRING{ after(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__NameAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); }
+	RULE_ID{ after(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__RuleextAssignment_4
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); }
+	RULE_INT{ after(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__LogicAssignment_6
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); }
+	RULE_LOGIC{ after(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__HookCombinator__LABELAssignment_7_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); }
+	RULE_STRING{ after(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__SingleDefinitionAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); }
+	ruleSingleDefinition{ after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__DefinitionList__SingleDefinitionAssignment_1_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); }
+	ruleSingleDefinition{ after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__SingleDefinition__TermsAssignment
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); }
+	ruleTerm{ after(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__TermAtomAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); }
+	ruleAtom{ after(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__TermGroupedSequenceAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); }
+	ruleGroupedSequence{ after(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__TermOptionalSequenceAssignment_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); }
+	ruleOptionalSequence{ after(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Term__TermRepeatedSequenceAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); }
+	ruleRepeatedSequence{ after(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Atom__AtomStringRuleAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); }
+	ruleStringRule{ after(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__Atom__AtomRuleReferenceAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); }
+	ruleRuleReference{ after(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RuleReference__RulerefAssignment
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); }
+(
+{ before(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); }
+	RULE_ID{ after(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); }
+)
+{ after(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StringRule__LiteralAssignment_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); }
+	RULE_STRING{ after(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__StringRule__ColonAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); }
+	RULE_COLON{ after(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__GroupedSequence__DefinitionListAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); }
+	ruleDefinitionList{ after(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__OptionalSequence__DefinitionListAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); }
+	ruleDefinitionList{ after(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__DefinitionsAssignment_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); }
+	ruleDefinitionList{ after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__RepeatedSequence__MorethanonceAssignment_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); }
+(
+{ before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); }
+
+	'+' 
+
+{ after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); }
+)
+
+{ after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+RULE_ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_WS : (' '|'\t'|'\r'? '\n')+;
+
+RULE_COLON : '"' '"' '"';
+
+RULE_STRING : ('"' ~('"')* '"'|'\'' ~('\'')* '\'');
+
+RULE_SECTIONHEADER : ('a'..'z'|'A'..'Z') ('.'|'0'..'9')+ (' '|'\t') ~(('\n'|'\r'))* '\r'? '\n';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_LOGIC : ('/and'|'/or'|'/andr'|'/orr'|'/any'|'/together');
+
+
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens	(revision 61)
@@ -0,0 +1,63 @@
+RULE_ID=4
+RULE_SECTIONHEADER=5
+T__29=29
+T__28=28
+T__27=27
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+T__21=21
+T__20=20
+RULE_SL_COMMENT=11
+RULE_ML_COMMENT=12
+T__30=30
+T__19=19
+RULE_COLON=9
+T__31=31
+RULE_STRING=6
+T__32=32
+T__33=33
+T__16=16
+T__34=34
+T__15=15
+T__35=35
+T__18=18
+T__36=36
+T__17=17
+RULE_LOGIC=8
+T__37=37
+T__38=38
+T__39=39
+T__14=14
+T__13=13
+RULE_INT=7
+RULE_WS=10
+'update'=39
+'|'=16
+'::='=27
+'/'=25
+';'=23
+'grammar'=22
+'global'=30
+'core'=37
+'+'=21
+')'=13
+'.'=28
+'import'=24
+'<-'=29
+'hook'=33
+'}'=15
+'rule'=32
+'/delta'=35
+'/bnf'=34
+'/merge'=36
+'{'=19
+'package'=38
+'label:'=26
+'combinator:'=31
+'('=17
+'*'=20
+'['=18
+']'=14
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java	(revision 61)
@@ -0,0 +1,1837 @@
+package de.ugoe.cs.swe.bnftools.ui.contentassist.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.ui.editor.contentassist.antlr.internal.Lexer;
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalEbnfLexer extends Lexer {
+    public static final int RULE_ID=4;
+    public static final int RULE_SECTIONHEADER=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    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 T__21=21;
+    public static final int T__20=20;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int RULE_ML_COMMENT=12;
+    public static final int T__19=19;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int RULE_COLON=9;
+    public static final int T__32=32;
+    public static final int RULE_STRING=6;
+    public static final int T__16=16;
+    public static final int T__33=33;
+    public static final int T__15=15;
+    public static final int T__34=34;
+    public static final int T__18=18;
+    public static final int T__35=35;
+    public static final int T__17=17;
+    public static final int T__36=36;
+    public static final int T__37=37;
+    public static final int RULE_LOGIC=8;
+    public static final int T__38=38;
+    public static final int T__14=14;
+    public static final int T__39=39;
+    public static final int T__13=13;
+    public static final int RULE_INT=7;
+    public static final int RULE_WS=10;
+
+    // delegates
+    // delegators
+
+    public InternalEbnfLexer() {;} 
+    public InternalEbnfLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalEbnfLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g"; }
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:11:7: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:11:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:12:7: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:12: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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:13:7: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:13: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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:14:7: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:14:9: '|'
+            {
+            match('|'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:15:7: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:15:9: '('
+            {
+            match('('); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:16:7: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:16:9: '['
+            {
+            match('['); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:17:7: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:17:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:18:7: ( '*' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:18: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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:19:7: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:19: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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:20:7: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:20:9: 'grammar'
+            {
+            match("grammar"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:21:7: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:21:9: ';'
+            {
+            match(';'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:22:7: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:22:9: 'import'
+            {
+            match("import"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:23:7: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:23:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:24:7: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:24:9: 'label:'
+            {
+            match("label:"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:25:7: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:25:9: '::='
+            {
+            match("::="); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:26:7: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:26:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:27:7: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:27:9: '<-'
+            {
+            match("<-"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:28:7: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:28:9: 'global'
+            {
+            match("global"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:29:7: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:29:9: 'combinator:'
+            {
+            match("combinator:"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:30:7: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:30:9: 'rule'
+            {
+            match("rule"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:31:7: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:31:9: 'hook'
+            {
+            match("hook"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:32:7: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:32:9: '/bnf'
+            {
+            match("/bnf"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:33:7: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:33:9: '/delta'
+            {
+            match("/delta"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:34:7: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:34:9: '/merge'
+            {
+            match("/merge"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:35:7: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:35:9: 'core'
+            {
+            match("core"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:36:7: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:36:9: 'package'
+            {
+            match("package"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:37:7: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:37:9: 'update'
+            {
+            match("update"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4695:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4695:11: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+            {
+            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;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4695:35: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.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 loop1;
+                }
+            } 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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4697:10: ( ( '0' .. '9' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4697:12: ( '0' .. '9' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4697:12: ( '0' .. '9' )+
+            int cnt2=0;
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4697:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:9: ( ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:11: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:11: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+
+            int cnt4=0;
+            loop4:
+            do {
+                int alt4=4;
+                switch ( input.LA(1) ) {
+                case ' ':
+                    {
+                    alt4=1;
+                    }
+                    break;
+                case '\t':
+                    {
+                    alt4=2;
+                    }
+                    break;
+                case '\n':
+                case '\r':
+                    {
+                    alt4=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt4) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:12: ' '
+            	    {
+            	    match(' '); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:16: '\\t'
+            	    {
+            	    match('\t'); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:21: ( '\\r' )? '\\n'
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:21: ( '\\r' )?
+            	    int alt3=2;
+            	    int LA3_0 = input.LA(1);
+
+            	    if ( (LA3_0=='\r') ) {
+            	        alt3=1;
+            	    }
+            	    switch (alt3) {
+            	        case 1 :
+            	            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4699:21: '\\r'
+            	            {
+            	            match('\r'); 
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    match('\n'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt4 >= 1 ) break loop4;
+                        EarlyExitException eee =
+                            new EarlyExitException(4, input);
+                        throw eee;
+                }
+                cnt4++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_COLON"
+    public final void mRULE_COLON() throws RecognitionException {
+        try {
+            int _type = RULE_COLON;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4701:12: ( '\"' '\"' '\"' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4701:14: '\"' '\"' '\"'
+            {
+            match('\"'); 
+            match('\"'); 
+            match('\"'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_COLON"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:13: ( ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0=='\"') ) {
+                alt7=1;
+            }
+            else if ( (LA7_0=='\'') ) {
+                alt7=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:16: '\"' (~ ( '\"' ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:20: (~ ( '\"' ) )*
+                    loop5:
+                    do {
+                        int alt5=2;
+                        int LA5_0 = input.LA(1);
+
+                        if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='\uFFFF')) ) {
+                            alt5=1;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:20: ~ ( '\"' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && 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;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:32: '\\'' (~ ( '\\'' ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:37: (~ ( '\\'' ) )*
+                    loop6:
+                    do {
+                        int alt6=2;
+                        int LA6_0 = input.LA(1);
+
+                        if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='\uFFFF')) ) {
+                            alt6=1;
+                        }
+
+
+                        switch (alt6) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4703:37: ~ ( '\\'' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && 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 loop6;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_SECTIONHEADER"
+    public final void mRULE_SECTIONHEADER() throws RecognitionException {
+        try {
+            int _type = RULE_SECTIONHEADER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:20: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( '.' | '0' .. '9' )+ ( ' ' | '\\t' ) (~ ( ( '\\n' | '\\r' ) ) )* ( '\\r' )? '\\n' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:22: ( 'a' .. 'z' | 'A' .. 'Z' ) ( '.' | '0' .. '9' )+ ( ' ' | '\\t' ) (~ ( ( '\\n' | '\\r' ) ) )* ( '\\r' )? '\\n'
+            {
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:42: ( '.' | '0' .. '9' )+
+            int cnt8=0;
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( (LA8_0=='.'||(LA8_0>='0' && LA8_0<='9')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:
+            	    {
+            	    if ( input.LA(1)=='.'||(input.LA(1)>='0' && input.LA(1)<='9') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt8 >= 1 ) break loop8;
+                        EarlyExitException eee =
+                            new EarlyExitException(8, input);
+                        throw eee;
+                }
+                cnt8++;
+            } while (true);
+
+            if ( input.LA(1)=='\t'||input.LA(1)==' ' ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:69: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( ((LA9_0>='\u0000' && LA9_0<='\t')||(LA9_0>='\u000B' && LA9_0<='\f')||(LA9_0>='\u000E' && LA9_0<='\uFFFF')) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:69: ~ ( ( '\\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 loop9;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:85: ( '\\r' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4705:85: '\\r'
+                    {
+                    match('\r'); 
+
+                    }
+                    break;
+
+            }
+
+            match('\n'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SECTIONHEADER"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\u0000' && LA11_0<='\t')||(LA11_0>='\u000B' && LA11_0<='\f')||(LA11_0>='\u000E' && LA11_0<='\uFFFF')) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707: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 loop11;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:40: ( ( '\\r' )? '\\n' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='\n'||LA13_0=='\r') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:41: ( '\\r' )? '\\n'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:41: ( '\\r' )?
+                    int alt12=2;
+                    int LA12_0 = input.LA(1);
+
+                    if ( (LA12_0=='\r') ) {
+                        alt12=1;
+                    }
+                    switch (alt12) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4709:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4709:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4709:24: ( options {greedy=false; } : . )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0=='*') ) {
+                    int LA14_1 = input.LA(2);
+
+                    if ( (LA14_1=='/') ) {
+                        alt14=2;
+                    }
+                    else if ( ((LA14_1>='\u0000' && LA14_1<='.')||(LA14_1>='0' && LA14_1<='\uFFFF')) ) {
+                        alt14=1;
+                    }
+
+
+                }
+                else if ( ((LA14_0>='\u0000' && LA14_0<=')')||(LA14_0>='+' && LA14_0<='\uFFFF')) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4709:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_LOGIC"
+    public final void mRULE_LOGIC() throws RecognitionException {
+        try {
+            int _type = RULE_LOGIC;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:12: ( ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )
+            int alt15=6;
+            alt15 = dfa15.predict(input);
+            switch (alt15) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:15: '/and'
+                    {
+                    match("/and"); 
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:22: '/or'
+                    {
+                    match("/or"); 
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:28: '/andr'
+                    {
+                    match("/andr"); 
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:36: '/orr'
+                    {
+                    match("/orr"); 
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:43: '/any'
+                    {
+                    match("/any"); 
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4711:50: '/together'
+                    {
+                    match("/together"); 
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_LOGIC"
+
+    public void mTokens() throws RecognitionException {
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:8: ( 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 | RULE_ID | RULE_INT | RULE_WS | RULE_COLON | RULE_STRING | RULE_SECTIONHEADER | RULE_SL_COMMENT | RULE_ML_COMMENT | RULE_LOGIC )
+        int alt16=36;
+        alt16 = dfa16.predict(input);
+        switch (alt16) {
+            case 1 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:10: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 2 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:16: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 3 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:22: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 4 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:28: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 5 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:34: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 6 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:40: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 7 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:46: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 8 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:52: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 9 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:58: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 10 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:64: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 11 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:70: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 12 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:76: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 13 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:82: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 14 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:88: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 15 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:94: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 16 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:100: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 17 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:106: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 18 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:112: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 19 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:118: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 20 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:124: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 21 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:130: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 22 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:136: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 23 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:142: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 24 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:148: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 25 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:154: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 26 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:160: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 27 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:166: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 28 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:172: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 29 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:180: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 30 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:189: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 31 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:197: RULE_COLON
+                {
+                mRULE_COLON(); 
+
+                }
+                break;
+            case 32 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:208: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 33 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:220: RULE_SECTIONHEADER
+                {
+                mRULE_SECTIONHEADER(); 
+
+                }
+                break;
+            case 34 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:239: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 35 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:255: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 36 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:271: RULE_LOGIC
+                {
+                mRULE_LOGIC(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    protected DFA16 dfa16 = new DFA16(this);
+    static final String DFA15_eotS =
+        "\6\uffff\1\12\1\14\5\uffff";
+    static final String DFA15_eofS =
+        "\15\uffff";
+    static final String DFA15_minS =
+        "\1\57\1\141\1\156\1\162\1\uffff\1\144\2\162\5\uffff";
+    static final String DFA15_maxS =
+        "\1\57\1\164\1\156\1\162\1\uffff\1\171\2\162\5\uffff";
+    static final String DFA15_acceptS =
+        "\4\uffff\1\6\3\uffff\1\5\1\4\1\2\1\3\1\1";
+    static final String DFA15_specialS =
+        "\15\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\1\1",
+            "\1\2\15\uffff\1\3\4\uffff\1\4",
+            "\1\5",
+            "\1\6",
+            "",
+            "\1\7\24\uffff\1\10",
+            "\1\11",
+            "\1\13",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "4711:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )";
+        }
+    }
+    static final String DFA16_eotS =
+        "\12\uffff\1\34\1\uffff\1\34\1\50\1\34\3\uffff\6\34\5\uffff\3\34"+
+        "\1\uffff\1\34\7\uffff\6\34\1\33\12\34\1\uffff\5\34\1\112\1\113\1"+
+        "\114\7\34\3\uffff\3\34\1\127\1\130\1\uffff\2\34\1\133\1\134\2\uffff"+
+        "\1\34\1\136\2\uffff\1\34\1\uffff\2\34\1\uffff";
+    static final String DFA16_eofS =
+        "\142\uffff";
+    static final String DFA16_minS =
+        "\1\11\11\uffff\1\56\1\uffff\1\56\1\52\1\56\3\uffff\6\56\2\uffff"+
+        "\1\0\2\uffff\1\141\1\157\1\11\1\uffff\1\160\7\uffff\1\142\1\155"+
+        "\1\154\1\157\1\143\1\144\1\42\1\155\1\142\1\157\1\145\1\142\2\145"+
+        "\2\153\1\141\1\uffff\1\155\1\141\1\162\1\154\1\151\3\60\1\141\1"+
+        "\164\1\141\1\154\1\164\1\72\1\156\3\uffff\1\147\1\145\1\162\2\60"+
+        "\1\uffff\1\141\1\145\2\60\2\uffff\1\164\1\60\2\uffff\1\157\1\uffff"+
+        "\1\162\1\72\1\uffff";
+    static final String DFA16_maxS =
+        "\1\175\11\uffff\1\162\1\uffff\1\155\1\164\1\141\3\uffff\1\157\1"+
+        "\165\1\157\1\141\1\160\1\71\2\uffff\1\uffff\2\uffff\1\141\1\157"+
+        "\1\71\1\uffff\1\160\7\uffff\1\142\1\162\1\154\1\157\1\143\1\144"+
+        "\1\42\1\155\1\142\1\157\1\145\1\142\2\145\2\153\1\141\1\uffff\1"+
+        "\155\1\141\1\162\1\154\1\151\3\172\1\141\1\164\1\141\1\154\1\164"+
+        "\1\72\1\156\3\uffff\1\147\1\145\1\162\2\172\1\uffff\1\141\1\145"+
+        "\2\172\2\uffff\1\164\1\172\2\uffff\1\157\1\uffff\1\162\1\72\1\uffff";
+    static final String DFA16_acceptS =
+        "\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\uffff\1\13\3\uffff"+
+        "\1\17\1\20\1\21\6\uffff\1\35\1\36\1\uffff\1\40\1\34\3\uffff\1\41"+
+        "\1\uffff\1\26\1\27\1\30\1\42\1\43\1\44\1\15\21\uffff\1\37\17\uffff"+
+        "\1\31\1\24\1\25\5\uffff\1\16\4\uffff\1\22\1\14\2\uffff\1\33\1\12"+
+        "\1\uffff\1\32\2\uffff\1\23";
+    static final String DFA16_specialS =
+        "\32\uffff\1\0\107\uffff}>";
+    static final String[] DFA16_transitionS = {
+            "\2\31\2\uffff\1\31\22\uffff\1\31\1\uffff\1\32\4\uffff\1\33"+
+            "\1\5\1\1\1\10\1\11\2\uffff\1\20\1\15\12\30\1\17\1\13\1\21\4"+
+            "\uffff\32\27\1\6\1\uffff\1\2\1\uffff\1\34\1\uffff\2\27\1\22"+
+            "\3\27\1\12\1\24\1\14\2\27\1\16\3\27\1\25\1\27\1\23\2\27\1\26"+
+            "\5\27\1\7\1\4\1\3",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\40\1\uffff\12\37\62\uffff\1\36\5\uffff\1\35",
+            "",
+            "\1\40\1\uffff\12\37\63\uffff\1\41",
+            "\1\46\4\uffff\1\45\61\uffff\1\47\1\42\1\uffff\1\43\10\uffff"+
+            "\1\44\1\uffff\1\47\4\uffff\1\47",
+            "\1\40\1\uffff\12\37\47\uffff\1\51",
+            "",
+            "",
+            "",
+            "\1\40\1\uffff\12\37\65\uffff\1\52",
+            "\1\40\1\uffff\12\37\73\uffff\1\53",
+            "\1\40\1\uffff\12\37\65\uffff\1\54",
+            "\1\40\1\uffff\12\37\47\uffff\1\55",
+            "\1\40\1\uffff\12\37\66\uffff\1\56",
+            "\1\40\1\uffff\12\37",
+            "",
+            "",
+            "\42\33\1\57\uffdd\33",
+            "",
+            "",
+            "\1\60",
+            "\1\61",
+            "\1\40\26\uffff\1\40\15\uffff\1\40\1\uffff\12\37",
+            "",
+            "\1\62",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\63",
+            "\1\64\4\uffff\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\73",
+            "\1\74",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\102",
+            "\1\103",
+            "\1\104",
+            "",
+            "\1\105",
+            "\1\106",
+            "\1\107",
+            "\1\110",
+            "\1\111",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\115",
+            "\1\116",
+            "\1\117",
+            "\1\120",
+            "\1\121",
+            "\1\122",
+            "\1\123",
+            "",
+            "",
+            "",
+            "\1\124",
+            "\1\125",
+            "\1\126",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "\1\131",
+            "\1\132",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "",
+            "\1\135",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "",
+            "\1\137",
+            "",
+            "\1\140",
+            "\1\141",
+            ""
+    };
+
+    static final short[] DFA16_eot = DFA.unpackEncodedString(DFA16_eotS);
+    static final short[] DFA16_eof = DFA.unpackEncodedString(DFA16_eofS);
+    static final char[] DFA16_min = DFA.unpackEncodedStringToUnsignedChars(DFA16_minS);
+    static final char[] DFA16_max = DFA.unpackEncodedStringToUnsignedChars(DFA16_maxS);
+    static final short[] DFA16_accept = DFA.unpackEncodedString(DFA16_acceptS);
+    static final short[] DFA16_special = DFA.unpackEncodedString(DFA16_specialS);
+    static final short[][] DFA16_transition;
+
+    static {
+        int numStates = DFA16_transitionS.length;
+        DFA16_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA16_transition[i] = DFA.unpackEncodedString(DFA16_transitionS[i]);
+        }
+    }
+
+    class DFA16 extends DFA {
+
+        public DFA16(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 16;
+            this.eot = DFA16_eot;
+            this.eof = DFA16_eof;
+            this.min = DFA16_min;
+            this.max = DFA16_max;
+            this.accept = DFA16_accept;
+            this.special = DFA16_special;
+            this.transition = DFA16_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( 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 | RULE_ID | RULE_INT | RULE_WS | RULE_COLON | RULE_STRING | RULE_SECTIONHEADER | RULE_SL_COMMENT | RULE_ML_COMMENT | RULE_LOGIC );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA16_26 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA16_26=='\"') ) {s = 47;}
+
+                        else if ( ((LA16_26>='\u0000' && LA16_26<='!')||(LA16_26>='#' && LA16_26<='\uFFFF')) ) {s = 27;}
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 16, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 61)
@@ -0,0 +1,13243 @@
+package de.ugoe.cs.swe.bnftools.ui.contentassist.antlr.internal; 
+
+import java.io.InputStream;
+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.xtext.parser.antlr.XtextTokenStream;
+import org.eclipse.xtext.parser.antlr.XtextTokenStream.HiddenTokens;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
+import org.eclipse.xtext.ui.editor.contentassist.antlr.internal.DFA;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalEbnfParser extends AbstractInternalContentAssistParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_SECTIONHEADER", "RULE_STRING", "RULE_INT", "RULE_LOGIC", "RULE_COLON", "RULE_WS", "RULE_SL_COMMENT", "RULE_ML_COMMENT", "')'", "']'", "'}'", "'|'", "'('", "'['", "'{'", "'*'", "'+'", "'grammar'", "';'", "'import'", "'/'", "'label:'", "'::='", "'.'", "'<-'", "'global'", "'combinator:'", "'rule'", "'hook'", "'/bnf'", "'/delta'", "'/merge'", "'core'", "'package'", "'update'"
+    };
+    public static final int RULE_ID=4;
+    public static final int RULE_SECTIONHEADER=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    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 T__21=21;
+    public static final int T__20=20;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=12;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int RULE_COLON=9;
+    public static final int T__31=31;
+    public static final int RULE_STRING=6;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int T__16=16;
+    public static final int T__34=34;
+    public static final int T__15=15;
+    public static final int T__35=35;
+    public static final int T__18=18;
+    public static final int T__36=36;
+    public static final int T__17=17;
+    public static final int RULE_LOGIC=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=7;
+    public static final int RULE_WS=10;
+
+    // delegates
+    // delegators
+
+
+        public InternalEbnfParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalEbnfParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalEbnfParser.tokenNames; }
+    public String getGrammarFileName() { return "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g"; }
+
+
+     
+     	private EbnfGrammarAccess grammarAccess;
+     	
+        public void setGrammarAccess(EbnfGrammarAccess grammarAccess) {
+        	this.grammarAccess = grammarAccess;
+        }
+        
+        @Override
+        protected Grammar getGrammar() {
+        	return grammarAccess.getGrammar();
+        }
+        
+        @Override
+        protected String getValueForTokenName(String tokenName) {
+        	return tokenName;
+        }
+
+
+
+
+    // $ANTLR start "entryRuleEtsiBnf"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:60:1: entryRuleEtsiBnf : ruleEtsiBnf EOF ;
+    public final void entryRuleEtsiBnf() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:61:1: ( ruleEtsiBnf EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:62:1: ruleEtsiBnf EOF
+            {
+             before(grammarAccess.getEtsiBnfRule()); 
+            pushFollow(FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf61);
+            ruleEtsiBnf();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEtsiBnf68); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleEtsiBnf"
+
+
+    // $ANTLR start "ruleEtsiBnf"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:69:1: ruleEtsiBnf : ( ( rule__EtsiBnf__Alternatives ) ) ;
+    public final void ruleEtsiBnf() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:73:2: ( ( ( rule__EtsiBnf__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:74:1: ( ( rule__EtsiBnf__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:74:1: ( ( rule__EtsiBnf__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:75:1: ( rule__EtsiBnf__Alternatives )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:76:1: ( rule__EtsiBnf__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:76:2: rule__EtsiBnf__Alternatives
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf94);
+            rule__EtsiBnf__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleEtsiBnf"
+
+
+    // $ANTLR start "entryRuleImportSection"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:88:1: entryRuleImportSection : ruleImportSection EOF ;
+    public final void entryRuleImportSection() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:89:1: ( ruleImportSection EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:90:1: ruleImportSection EOF
+            {
+             before(grammarAccess.getImportSectionRule()); 
+            pushFollow(FOLLOW_ruleImportSection_in_entryRuleImportSection121);
+            ruleImportSection();
+
+            state._fsp--;
+
+             after(grammarAccess.getImportSectionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImportSection128); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleImportSection"
+
+
+    // $ANTLR start "ruleImportSection"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:97:1: ruleImportSection : ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) ;
+    public final void ruleImportSection() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:101:2: ( ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:102:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:102:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:103:1: ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:103:1: ( ( rule__ImportSection__ImportsAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:104:1: ( rule__ImportSection__ImportsAssignment )
+            {
+             before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:1: ( rule__ImportSection__ImportsAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:2: rule__ImportSection__ImportsAssignment
+            {
+            pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection156);
+            rule__ImportSection__ImportsAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:108:1: ( ( rule__ImportSection__ImportsAssignment )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:109:1: ( rule__ImportSection__ImportsAssignment )*
+            {
+             before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:110:1: ( rule__ImportSection__ImportsAssignment )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==24) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:110:2: rule__ImportSection__ImportsAssignment
+            	    {
+            	    pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection168);
+            	    rule__ImportSection__ImportsAssignment();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } while (true);
+
+             after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleImportSection"
+
+
+    // $ANTLR start "entryRuleBnfEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:123:1: entryRuleBnfEntry : ruleBnfEntry EOF ;
+    public final void entryRuleBnfEntry() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:124:1: ( ruleBnfEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:125:1: ruleBnfEntry EOF
+            {
+             before(grammarAccess.getBnfEntryRule()); 
+            pushFollow(FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry198);
+            ruleBnfEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getBnfEntryRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBnfEntry205); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleBnfEntry"
+
+
+    // $ANTLR start "ruleBnfEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:132:1: ruleBnfEntry : ( ( rule__BnfEntry__Alternatives ) ) ;
+    public final void ruleBnfEntry() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:136:2: ( ( ( rule__BnfEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:137:1: ( ( rule__BnfEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:137:1: ( ( rule__BnfEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:138:1: ( rule__BnfEntry__Alternatives )
+            {
+             before(grammarAccess.getBnfEntryAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:1: ( rule__BnfEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:2: rule__BnfEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry231);
+            rule__BnfEntry__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getBnfEntryAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleBnfEntry"
+
+
+    // $ANTLR start "entryRuleDeltaEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:151:1: entryRuleDeltaEntry : ruleDeltaEntry EOF ;
+    public final void entryRuleDeltaEntry() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:152:1: ( ruleDeltaEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:153:1: ruleDeltaEntry EOF
+            {
+             before(grammarAccess.getDeltaEntryRule()); 
+            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry258);
+            ruleDeltaEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getDeltaEntryRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry265); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleDeltaEntry"
+
+
+    // $ANTLR start "ruleDeltaEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:160:1: ruleDeltaEntry : ( ( rule__DeltaEntry__Alternatives ) ) ;
+    public final void ruleDeltaEntry() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:164:2: ( ( ( rule__DeltaEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:165:1: ( ( rule__DeltaEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:165:1: ( ( rule__DeltaEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:166:1: ( rule__DeltaEntry__Alternatives )
+            {
+             before(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:1: ( rule__DeltaEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:2: rule__DeltaEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry291);
+            rule__DeltaEntry__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDeltaEntry"
+
+
+    // $ANTLR start "entryRuleMergeEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:179:1: entryRuleMergeEntry : ruleMergeEntry EOF ;
+    public final void entryRuleMergeEntry() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:180:1: ( ruleMergeEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:181:1: ruleMergeEntry EOF
+            {
+             before(grammarAccess.getMergeEntryRule()); 
+            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry318);
+            ruleMergeEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getMergeEntryRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry325); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleMergeEntry"
+
+
+    // $ANTLR start "ruleMergeEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:188:1: ruleMergeEntry : ( ( rule__MergeEntry__Alternatives ) ) ;
+    public final void ruleMergeEntry() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:192:2: ( ( ( rule__MergeEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:193:1: ( ( rule__MergeEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:193:1: ( ( rule__MergeEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:194:1: ( rule__MergeEntry__Alternatives )
+            {
+             before(grammarAccess.getMergeEntryAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:1: ( rule__MergeEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:2: rule__MergeEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry351);
+            rule__MergeEntry__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getMergeEntryAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleMergeEntry"
+
+
+    // $ANTLR start "entryRuleSectionHeading"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:207:1: entryRuleSectionHeading : ruleSectionHeading EOF ;
+    public final void entryRuleSectionHeading() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:208:1: ( ruleSectionHeading EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:209:1: ruleSectionHeading EOF
+            {
+             before(grammarAccess.getSectionHeadingRule()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading378);
+            ruleSectionHeading();
+
+            state._fsp--;
+
+             after(grammarAccess.getSectionHeadingRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading385); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleSectionHeading"
+
+
+    // $ANTLR start "ruleSectionHeading"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:216:1: ruleSectionHeading : ( ( rule__SectionHeading__Group__0 ) ) ;
+    public final void ruleSectionHeading() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:220:2: ( ( ( rule__SectionHeading__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:221:1: ( ( rule__SectionHeading__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:221:1: ( ( rule__SectionHeading__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:222:1: ( rule__SectionHeading__Group__0 )
+            {
+             before(grammarAccess.getSectionHeadingAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:223:1: ( rule__SectionHeading__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:223:2: rule__SectionHeading__Group__0
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading411);
+            rule__SectionHeading__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSectionHeadingAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleSectionHeading"
+
+
+    // $ANTLR start "entryRuleImport"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:235:1: entryRuleImport : ruleImport EOF ;
+    public final void entryRuleImport() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:236:1: ( ruleImport EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:237:1: ruleImport EOF
+            {
+             before(grammarAccess.getImportRule()); 
+            pushFollow(FOLLOW_ruleImport_in_entryRuleImport438);
+            ruleImport();
+
+            state._fsp--;
+
+             after(grammarAccess.getImportRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImport445); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleImport"
+
+
+    // $ANTLR start "ruleImport"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:244:1: ruleImport : ( ( rule__Import__Group__0 ) ) ;
+    public final void ruleImport() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:248:2: ( ( ( rule__Import__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:249:1: ( ( rule__Import__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:249:1: ( ( rule__Import__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:250:1: ( rule__Import__Group__0 )
+            {
+             before(grammarAccess.getImportAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:251:1: ( rule__Import__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:251:2: rule__Import__Group__0
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0_in_ruleImport471);
+            rule__Import__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImportAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleImport"
+
+
+    // $ANTLR start "entryRuleRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:263:1: entryRuleRule : ruleRule EOF ;
+    public final void entryRuleRule() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:264:1: ( ruleRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:265:1: ruleRule EOF
+            {
+             before(grammarAccess.getRuleRule()); 
+            pushFollow(FOLLOW_ruleRule_in_entryRuleRule498);
+            ruleRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRule505); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRule"
+
+
+    // $ANTLR start "ruleRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:272:1: ruleRule : ( ( rule__Rule__Group__0 ) ) ;
+    public final void ruleRule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:276:2: ( ( ( rule__Rule__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:277:1: ( ( rule__Rule__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:277:1: ( ( rule__Rule__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:278:1: ( rule__Rule__Group__0 )
+            {
+             before(grammarAccess.getRuleAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:279:1: ( rule__Rule__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:279:2: rule__Rule__Group__0
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0_in_ruleRule531);
+            rule__Rule__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRule"
+
+
+    // $ANTLR start "entryRuleExtRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:291:1: entryRuleExtRule : ruleExtRule EOF ;
+    public final void entryRuleExtRule() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:292:1: ( ruleExtRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:293:1: ruleExtRule EOF
+            {
+             before(grammarAccess.getExtRuleRule()); 
+            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule558);
+            ruleExtRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getExtRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule565); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleExtRule"
+
+
+    // $ANTLR start "ruleExtRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:300:1: ruleExtRule : ( ( rule__ExtRule__Group__0 ) ) ;
+    public final void ruleExtRule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:304:2: ( ( ( rule__ExtRule__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:305:1: ( ( rule__ExtRule__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:305:1: ( ( rule__ExtRule__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:306:1: ( rule__ExtRule__Group__0 )
+            {
+             before(grammarAccess.getExtRuleAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:307:1: ( rule__ExtRule__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:307:2: rule__ExtRule__Group__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule591);
+            rule__ExtRule__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleExtRule"
+
+
+    // $ANTLR start "entryRuleMergeRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:319:1: entryRuleMergeRule : ruleMergeRule EOF ;
+    public final void entryRuleMergeRule() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:320:1: ( ruleMergeRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:321:1: ruleMergeRule EOF
+            {
+             before(grammarAccess.getMergeRuleRule()); 
+            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule618);
+            ruleMergeRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getMergeRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule625); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleMergeRule"
+
+
+    // $ANTLR start "ruleMergeRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:328:1: ruleMergeRule : ( ( rule__MergeRule__Alternatives ) ) ;
+    public final void ruleMergeRule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:332:2: ( ( ( rule__MergeRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:333:1: ( ( rule__MergeRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:333:1: ( ( rule__MergeRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:334:1: ( rule__MergeRule__Alternatives )
+            {
+             before(grammarAccess.getMergeRuleAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:1: ( rule__MergeRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:2: rule__MergeRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule651);
+            rule__MergeRule__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getMergeRuleAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleMergeRule"
+
+
+    // $ANTLR start "entryRuleGlobalCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:347:1: entryRuleGlobalCombinator : ruleGlobalCombinator EOF ;
+    public final void entryRuleGlobalCombinator() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:348:1: ( ruleGlobalCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:349:1: ruleGlobalCombinator EOF
+            {
+             before(grammarAccess.getGlobalCombinatorRule()); 
+            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator678);
+            ruleGlobalCombinator();
+
+            state._fsp--;
+
+             after(grammarAccess.getGlobalCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator685); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleGlobalCombinator"
+
+
+    // $ANTLR start "ruleGlobalCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:356:1: ruleGlobalCombinator : ( ( rule__GlobalCombinator__Group__0 ) ) ;
+    public final void ruleGlobalCombinator() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:360:2: ( ( ( rule__GlobalCombinator__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:361:1: ( ( rule__GlobalCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:361:1: ( ( rule__GlobalCombinator__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:362:1: ( rule__GlobalCombinator__Group__0 )
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:363:1: ( rule__GlobalCombinator__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:363:2: rule__GlobalCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator711);
+            rule__GlobalCombinator__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGlobalCombinatorAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleGlobalCombinator"
+
+
+    // $ANTLR start "entryRuleRuleCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:375:1: entryRuleRuleCombinator : ruleRuleCombinator EOF ;
+    public final void entryRuleRuleCombinator() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:376:1: ( ruleRuleCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:377:1: ruleRuleCombinator EOF
+            {
+             before(grammarAccess.getRuleCombinatorRule()); 
+            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator738);
+            ruleRuleCombinator();
+
+            state._fsp--;
+
+             after(grammarAccess.getRuleCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator745); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRuleCombinator"
+
+
+    // $ANTLR start "ruleRuleCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:384:1: ruleRuleCombinator : ( ( rule__RuleCombinator__Group__0 ) ) ;
+    public final void ruleRuleCombinator() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:388:2: ( ( ( rule__RuleCombinator__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:389:1: ( ( rule__RuleCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:389:1: ( ( rule__RuleCombinator__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:390:1: ( rule__RuleCombinator__Group__0 )
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391:1: ( rule__RuleCombinator__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391:2: rule__RuleCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator771);
+            rule__RuleCombinator__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRuleCombinator"
+
+
+    // $ANTLR start "entryRuleHookCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:403:1: entryRuleHookCombinator : ruleHookCombinator EOF ;
+    public final void entryRuleHookCombinator() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:404:1: ( ruleHookCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:405:1: ruleHookCombinator EOF
+            {
+             before(grammarAccess.getHookCombinatorRule()); 
+            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator798);
+            ruleHookCombinator();
+
+            state._fsp--;
+
+             after(grammarAccess.getHookCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator805); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleHookCombinator"
+
+
+    // $ANTLR start "ruleHookCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:412:1: ruleHookCombinator : ( ( rule__HookCombinator__Group__0 ) ) ;
+    public final void ruleHookCombinator() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:416:2: ( ( ( rule__HookCombinator__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:417:1: ( ( rule__HookCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:417:1: ( ( rule__HookCombinator__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:418:1: ( rule__HookCombinator__Group__0 )
+            {
+             before(grammarAccess.getHookCombinatorAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419:1: ( rule__HookCombinator__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419:2: rule__HookCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator831);
+            rule__HookCombinator__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleHookCombinator"
+
+
+    // $ANTLR start "entryRuleDefinitionList"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:431:1: entryRuleDefinitionList : ruleDefinitionList EOF ;
+    public final void entryRuleDefinitionList() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:432:1: ( ruleDefinitionList EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:433:1: ruleDefinitionList EOF
+            {
+             before(grammarAccess.getDefinitionListRule()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList858);
+            ruleDefinitionList();
+
+            state._fsp--;
+
+             after(grammarAccess.getDefinitionListRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList865); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleDefinitionList"
+
+
+    // $ANTLR start "ruleDefinitionList"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:440:1: ruleDefinitionList : ( ( rule__DefinitionList__Group__0 ) ) ;
+    public final void ruleDefinitionList() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:444:2: ( ( ( rule__DefinitionList__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:445:1: ( ( rule__DefinitionList__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:445:1: ( ( rule__DefinitionList__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:446:1: ( rule__DefinitionList__Group__0 )
+            {
+             before(grammarAccess.getDefinitionListAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447:1: ( rule__DefinitionList__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447:2: rule__DefinitionList__Group__0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList891);
+            rule__DefinitionList__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDefinitionListAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleDefinitionList"
+
+
+    // $ANTLR start "entryRuleSingleDefinition"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:459:1: entryRuleSingleDefinition : ruleSingleDefinition EOF ;
+    public final void entryRuleSingleDefinition() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:460:1: ( ruleSingleDefinition EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:461:1: ruleSingleDefinition EOF
+            {
+             before(grammarAccess.getSingleDefinitionRule()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition918);
+            ruleSingleDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getSingleDefinitionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition925); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleSingleDefinition"
+
+
+    // $ANTLR start "ruleSingleDefinition"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:468:1: ruleSingleDefinition : ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) ) ;
+    public final void ruleSingleDefinition() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:472:2: ( ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:473:1: ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:473:1: ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__SingleDefinition__TermsAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:475:1: ( rule__SingleDefinition__TermsAssignment )
+            {
+             before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:476:1: ( rule__SingleDefinition__TermsAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:476:2: rule__SingleDefinition__TermsAssignment
+            {
+            pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition953);
+            rule__SingleDefinition__TermsAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:479:1: ( ( rule__SingleDefinition__TermsAssignment )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:480:1: ( rule__SingleDefinition__TermsAssignment )*
+            {
+             before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:481:1: ( rule__SingleDefinition__TermsAssignment )*
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( (LA2_0==RULE_ID) ) {
+                    int LA2_2 = input.LA(2);
+
+                    if ( (LA2_2==EOF||(LA2_2>=RULE_ID && LA2_2<=RULE_INT)||LA2_2==RULE_COLON||(LA2_2>=13 && LA2_2<=16)||(LA2_2>=18 && LA2_2<=19)||LA2_2==23) ) {
+                        alt2=1;
+                    }
+                    else if ( (LA2_2==17) ) {
+                        int LA2_4 = input.LA(3);
+
+                        if ( (LA2_4==RULE_ID||LA2_4==RULE_STRING||LA2_4==RULE_COLON||(LA2_4>=17 && LA2_4<=19)) ) {
+                            alt2=1;
+                        }
+
+
+                    }
+
+
+                }
+                else if ( (LA2_0==RULE_STRING||LA2_0==RULE_COLON||(LA2_0>=17 && LA2_0<=19)) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:481:2: rule__SingleDefinition__TermsAssignment
+            	    {
+            	    pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition965);
+            	    rule__SingleDefinition__TermsAssignment();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop2;
+                }
+            } while (true);
+
+             after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleSingleDefinition"
+
+
+    // $ANTLR start "entryRuleTerm"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:494:1: entryRuleTerm : ruleTerm EOF ;
+    public final void entryRuleTerm() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:495:1: ( ruleTerm EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:496:1: ruleTerm EOF
+            {
+             before(grammarAccess.getTermRule()); 
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm995);
+            ruleTerm();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm1002); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleTerm"
+
+
+    // $ANTLR start "ruleTerm"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:503:1: ruleTerm : ( ( rule__Term__Alternatives ) ) ;
+    public final void ruleTerm() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:507:2: ( ( ( rule__Term__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:508:1: ( ( rule__Term__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:508:1: ( ( rule__Term__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:509:1: ( rule__Term__Alternatives )
+            {
+             before(grammarAccess.getTermAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:1: ( rule__Term__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:2: rule__Term__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Term__Alternatives_in_ruleTerm1028);
+            rule__Term__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getTermAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleTerm"
+
+
+    // $ANTLR start "entryRuleAtom"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:522:1: entryRuleAtom : ruleAtom EOF ;
+    public final void entryRuleAtom() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:523:1: ( ruleAtom EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:524:1: ruleAtom EOF
+            {
+             before(grammarAccess.getAtomRule()); 
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom1055);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getAtomRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom1062); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleAtom"
+
+
+    // $ANTLR start "ruleAtom"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:531:1: ruleAtom : ( ( rule__Atom__Alternatives ) ) ;
+    public final void ruleAtom() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:535:2: ( ( ( rule__Atom__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:536:1: ( ( rule__Atom__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:536:1: ( ( rule__Atom__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:537:1: ( rule__Atom__Alternatives )
+            {
+             before(grammarAccess.getAtomAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:1: ( rule__Atom__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:2: rule__Atom__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Atom__Alternatives_in_ruleAtom1088);
+            rule__Atom__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getAtomAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleAtom"
+
+
+    // $ANTLR start "entryRuleRuleReference"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:550:1: entryRuleRuleReference : ruleRuleReference EOF ;
+    public final void entryRuleRuleReference() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:551:1: ( ruleRuleReference EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:552:1: ruleRuleReference EOF
+            {
+             before(grammarAccess.getRuleReferenceRule()); 
+            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference1115);
+            ruleRuleReference();
+
+            state._fsp--;
+
+             after(grammarAccess.getRuleReferenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference1122); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRuleReference"
+
+
+    // $ANTLR start "ruleRuleReference"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:559:1: ruleRuleReference : ( ( rule__RuleReference__RulerefAssignment ) ) ;
+    public final void ruleRuleReference() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:563:2: ( ( ( rule__RuleReference__RulerefAssignment ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:564:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:564:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:565:1: ( rule__RuleReference__RulerefAssignment )
+            {
+             before(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:1: ( rule__RuleReference__RulerefAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:2: rule__RuleReference__RulerefAssignment
+            {
+            pushFollow(FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1148);
+            rule__RuleReference__RulerefAssignment();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRuleReference"
+
+
+    // $ANTLR start "entryRuleStringRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:578:1: entryRuleStringRule : ruleStringRule EOF ;
+    public final void entryRuleStringRule() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:579:1: ( ruleStringRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:580:1: ruleStringRule EOF
+            {
+             before(grammarAccess.getStringRuleRule()); 
+            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule1175);
+            ruleStringRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getStringRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule1182); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleStringRule"
+
+
+    // $ANTLR start "ruleStringRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:587:1: ruleStringRule : ( ( rule__StringRule__Alternatives ) ) ;
+    public final void ruleStringRule() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:591:2: ( ( ( rule__StringRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:592:1: ( ( rule__StringRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:592:1: ( ( rule__StringRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:593:1: ( rule__StringRule__Alternatives )
+            {
+             before(grammarAccess.getStringRuleAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:1: ( rule__StringRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:2: rule__StringRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1208);
+            rule__StringRule__Alternatives();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getStringRuleAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleStringRule"
+
+
+    // $ANTLR start "entryRuleGroupedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:606:1: entryRuleGroupedSequence : ruleGroupedSequence EOF ;
+    public final void entryRuleGroupedSequence() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:607:1: ( ruleGroupedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:608:1: ruleGroupedSequence EOF
+            {
+             before(grammarAccess.getGroupedSequenceRule()); 
+            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1235);
+            ruleGroupedSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getGroupedSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence1242); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleGroupedSequence"
+
+
+    // $ANTLR start "ruleGroupedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:615:1: ruleGroupedSequence : ( ( rule__GroupedSequence__Group__0 ) ) ;
+    public final void ruleGroupedSequence() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:619:2: ( ( ( rule__GroupedSequence__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:620:1: ( ( rule__GroupedSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:620:1: ( ( rule__GroupedSequence__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:621:1: ( rule__GroupedSequence__Group__0 )
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622:1: ( rule__GroupedSequence__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622:2: rule__GroupedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1268);
+            rule__GroupedSequence__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGroupedSequenceAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleGroupedSequence"
+
+
+    // $ANTLR start "entryRuleOptionalSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:634:1: entryRuleOptionalSequence : ruleOptionalSequence EOF ;
+    public final void entryRuleOptionalSequence() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:635:1: ( ruleOptionalSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:636:1: ruleOptionalSequence EOF
+            {
+             before(grammarAccess.getOptionalSequenceRule()); 
+            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1295);
+            ruleOptionalSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getOptionalSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence1302); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleOptionalSequence"
+
+
+    // $ANTLR start "ruleOptionalSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:643:1: ruleOptionalSequence : ( ( rule__OptionalSequence__Group__0 ) ) ;
+    public final void ruleOptionalSequence() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:647:2: ( ( ( rule__OptionalSequence__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:648:1: ( ( rule__OptionalSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:648:1: ( ( rule__OptionalSequence__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:649:1: ( rule__OptionalSequence__Group__0 )
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650:1: ( rule__OptionalSequence__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650:2: rule__OptionalSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1328);
+            rule__OptionalSequence__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOptionalSequenceAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleOptionalSequence"
+
+
+    // $ANTLR start "entryRuleRepeatedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:662:1: entryRuleRepeatedSequence : ruleRepeatedSequence EOF ;
+    public final void entryRuleRepeatedSequence() throws RecognitionException {
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:663:1: ( ruleRepeatedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:664:1: ruleRepeatedSequence EOF
+            {
+             before(grammarAccess.getRepeatedSequenceRule()); 
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1355);
+            ruleRepeatedSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getRepeatedSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence1362); 
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRepeatedSequence"
+
+
+    // $ANTLR start "ruleRepeatedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:671:1: ruleRepeatedSequence : ( ( rule__RepeatedSequence__Group__0 ) ) ;
+    public final void ruleRepeatedSequence() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:675:2: ( ( ( rule__RepeatedSequence__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:676:1: ( ( rule__RepeatedSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:676:1: ( ( rule__RepeatedSequence__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:677:1: ( rule__RepeatedSequence__Group__0 )
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getGroup()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:678:1: ( rule__RepeatedSequence__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:678:2: rule__RepeatedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1388);
+            rule__RepeatedSequence__Group__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRepeatedSequenceAccess().getGroup()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRepeatedSequence"
+
+
+    // $ANTLR start "rule__EtsiBnf__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:690:1: rule__EtsiBnf__Alternatives : ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) );
+    public final void rule__EtsiBnf__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:694:1: ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) )
+            int alt3=3;
+            switch ( input.LA(1) ) {
+            case 22:
+                {
+                alt3=1;
+                }
+                break;
+            case 35:
+                {
+                alt3=2;
+                }
+                break;
+            case 36:
+                {
+                alt3=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 3, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt3) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:695:1: ( ( rule__EtsiBnf__Group_0__0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:695:1: ( ( rule__EtsiBnf__Group_0__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:696:1: ( rule__EtsiBnf__Group_0__0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getGroup_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:697:1: ( rule__EtsiBnf__Group_0__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:697:2: rule__EtsiBnf__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1424);
+                    rule__EtsiBnf__Group_0__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getGroup_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:701:6: ( ( rule__EtsiBnf__Group_1__0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:701:6: ( ( rule__EtsiBnf__Group_1__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:702:1: ( rule__EtsiBnf__Group_1__0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getGroup_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:703:1: ( rule__EtsiBnf__Group_1__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:703:2: rule__EtsiBnf__Group_1__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1442);
+                    rule__EtsiBnf__Group_1__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getGroup_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:707:6: ( ( rule__EtsiBnf__Group_2__0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:707:6: ( ( rule__EtsiBnf__Group_2__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:708:1: ( rule__EtsiBnf__Group_2__0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getGroup_2()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:709:1: ( rule__EtsiBnf__Group_2__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:709:2: rule__EtsiBnf__Group_2__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1460);
+                    rule__EtsiBnf__Group_2__0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getGroup_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Alternatives"
+
+
+    // $ANTLR start "rule__BnfEntry__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:718:1: rule__BnfEntry__Alternatives : ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) );
+    public final void rule__BnfEntry__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:722:1: ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) )
+            int alt4=2;
+            int LA4_0 = input.LA(1);
+
+            if ( (LA4_0==RULE_SECTIONHEADER) ) {
+                alt4=1;
+            }
+            else if ( (LA4_0==RULE_ID||LA4_0==RULE_INT) ) {
+                alt4=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 4, 0, input);
+
+                throw nvae;
+            }
+            switch (alt4) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:723:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:723:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:724:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
+                    {
+                     before(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725:2: rule__BnfEntry__SectionheaderAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1493);
+                    rule__BnfEntry__SectionheaderAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:729:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:729:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:730:1: ( rule__BnfEntry__RuleAssignment_1 )
+                    {
+                     before(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731:1: ( rule__BnfEntry__RuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731:2: rule__BnfEntry__RuleAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1511);
+                    rule__BnfEntry__RuleAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BnfEntry__Alternatives"
+
+
+    // $ANTLR start "rule__DeltaEntry__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:740:1: rule__DeltaEntry__Alternatives : ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) );
+    public final void rule__DeltaEntry__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:744:1: ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) )
+            int alt5=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+                {
+                int LA5_1 = input.LA(2);
+
+                if ( (LA5_1==RULE_ID) ) {
+                    int LA5_4 = input.LA(3);
+
+                    if ( (LA5_4==28) ) {
+                        int LA5_5 = input.LA(4);
+
+                        if ( (LA5_5==RULE_ID) ) {
+                            int LA5_2 = input.LA(5);
+
+                            if ( (LA5_2==27) ) {
+                                alt5=1;
+                            }
+                            else if ( (LA5_2==17) ) {
+                                alt5=3;
+                            }
+                            else {
+                                NoViableAltException nvae =
+                                    new NoViableAltException("", 5, 2, input);
+
+                                throw nvae;
+                            }
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("", 5, 5, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 5, 4, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA5_1==28) ) {
+                    int LA5_5 = input.LA(3);
+
+                    if ( (LA5_5==RULE_ID) ) {
+                        int LA5_2 = input.LA(4);
+
+                        if ( (LA5_2==27) ) {
+                            alt5=1;
+                        }
+                        else if ( (LA5_2==17) ) {
+                            alt5=3;
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("", 5, 2, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 5, 5, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 5, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_ID:
+                {
+                int LA5_2 = input.LA(2);
+
+                if ( (LA5_2==27) ) {
+                    alt5=1;
+                }
+                else if ( (LA5_2==17) ) {
+                    alt5=3;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 5, 2, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_SECTIONHEADER:
+                {
+                alt5=2;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 5, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt5) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:745:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:745:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:746:1: ( rule__DeltaEntry__RuleAssignment_0 )
+                    {
+                     before(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:747:1: ( rule__DeltaEntry__RuleAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:747:2: rule__DeltaEntry__RuleAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1544);
+                    rule__DeltaEntry__RuleAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:751:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:751:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:752:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
+                    {
+                     before(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:2: rule__DeltaEntry__SectionheaderAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1562);
+                    rule__DeltaEntry__SectionheaderAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:757:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:757:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:758:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
+                    {
+                     before(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:2: rule__DeltaEntry__ExtRuleAssignment_2
+                    {
+                    pushFollow(FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1580);
+                    rule__DeltaEntry__ExtRuleAssignment_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DeltaEntry__Alternatives"
+
+
+    // $ANTLR start "rule__MergeEntry__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:768:1: rule__MergeEntry__Alternatives : ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) );
+    public final void rule__MergeEntry__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:772:1: ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) )
+            int alt6=2;
+            int LA6_0 = input.LA(1);
+
+            if ( (LA6_0==RULE_SECTIONHEADER) ) {
+                alt6=1;
+            }
+            else if ( (LA6_0==30||(LA6_0>=32 && LA6_0<=33)) ) {
+                alt6=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 6, 0, input);
+
+                throw nvae;
+            }
+            switch (alt6) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:773:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:773:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:774:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
+                    {
+                     before(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:2: rule__MergeEntry__SectionheaderAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1613);
+                    rule__MergeEntry__SectionheaderAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:779:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:779:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:780:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
+                    {
+                     before(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:2: rule__MergeEntry__MergeRuleAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1631);
+                    rule__MergeEntry__MergeRuleAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MergeEntry__Alternatives"
+
+
+    // $ANTLR start "rule__Import__Alternatives_2_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:790:1: rule__Import__Alternatives_2_1 : ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) );
+    public final void rule__Import__Alternatives_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:794:1: ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) )
+            int alt7=3;
+            switch ( input.LA(1) ) {
+            case 37:
+                {
+                alt7=1;
+                }
+                break;
+            case 38:
+                {
+                alt7=2;
+                }
+                break;
+            case 39:
+                {
+                alt7=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt7) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:795:1: ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:795:1: ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:796:1: ( rule__Import__GrammarTypeAssignment_2_1_0 )
+                    {
+                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:797:1: ( rule__Import__GrammarTypeAssignment_2_1_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:797:2: rule__Import__GrammarTypeAssignment_2_1_0
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11664);
+                    rule__Import__GrammarTypeAssignment_2_1_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:801:6: ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:801:6: ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:802:1: ( rule__Import__GrammarTypeAssignment_2_1_1 )
+                    {
+                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:1: ( rule__Import__GrammarTypeAssignment_2_1_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:2: rule__Import__GrammarTypeAssignment_2_1_1
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11682);
+                    rule__Import__GrammarTypeAssignment_2_1_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:807:6: ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:807:6: ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:808:1: ( rule__Import__GrammarTypeAssignment_2_1_2 )
+                    {
+                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:1: ( rule__Import__GrammarTypeAssignment_2_1_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:2: rule__Import__GrammarTypeAssignment_2_1_2
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11700);
+                    rule__Import__GrammarTypeAssignment_2_1_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Alternatives_2_1"
+
+
+    // $ANTLR start "rule__ExtRule__Alternatives_4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:818:1: rule__ExtRule__Alternatives_4 : ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) );
+    public final void rule__ExtRule__Alternatives_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:822:1: ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) )
+            int alt8=10;
+            switch ( input.LA(1) ) {
+            case RULE_ID:
+            case RULE_STRING:
+            case RULE_COLON:
+                {
+                alt8=1;
+                }
+                break;
+            case 13:
+                {
+                alt8=2;
+                }
+                break;
+            case 14:
+                {
+                alt8=3;
+                }
+                break;
+            case 15:
+                {
+                alt8=4;
+                }
+                break;
+            case 16:
+                {
+                alt8=5;
+                }
+                break;
+            case 17:
+                {
+                alt8=6;
+                }
+                break;
+            case 18:
+                {
+                alt8=7;
+                }
+                break;
+            case 19:
+                {
+                alt8=8;
+                }
+                break;
+            case 20:
+                {
+                alt8=9;
+                }
+                break;
+            case 21:
+                {
+                alt8=10;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt8) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:823:1: ( ( rule__ExtRule__ElementsAssignment_4_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:823:1: ( ( rule__ExtRule__ElementsAssignment_4_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:824:1: ( rule__ExtRule__ElementsAssignment_4_0 )
+                    {
+                     before(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825:1: ( rule__ExtRule__ElementsAssignment_4_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825:2: rule__ExtRule__ElementsAssignment_4_0
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41733);
+                    rule__ExtRule__ElementsAssignment_4_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:829:6: ( ')' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:829:6: ( ')' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:830:1: ')'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+                    match(input,13,FOLLOW_13_in_rule__ExtRule__Alternatives_41752); 
+                     after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837:6: ( ']' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837:6: ( ']' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:838:1: ']'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+                    match(input,14,FOLLOW_14_in_rule__ExtRule__Alternatives_41772); 
+                     after(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:845:6: ( '}' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:845:6: ( '}' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:846:1: '}'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+                    match(input,15,FOLLOW_15_in_rule__ExtRule__Alternatives_41792); 
+                     after(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853:6: ( '|' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853:6: ( '|' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:854:1: '|'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+                    match(input,16,FOLLOW_16_in_rule__ExtRule__Alternatives_41812); 
+                     after(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:861:6: ( '(' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:861:6: ( '(' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:862:1: '('
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+                    match(input,17,FOLLOW_17_in_rule__ExtRule__Alternatives_41832); 
+                     after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 7 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:869:6: ( '[' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:869:6: ( '[' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:870:1: '['
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+                    match(input,18,FOLLOW_18_in_rule__ExtRule__Alternatives_41852); 
+                     after(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 8 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:877:6: ( '{' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:877:6: ( '{' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:878:1: '{'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+                    match(input,19,FOLLOW_19_in_rule__ExtRule__Alternatives_41872); 
+                     after(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 9 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:885:6: ( '*' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:885:6: ( '*' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:886:1: '*'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+                    match(input,20,FOLLOW_20_in_rule__ExtRule__Alternatives_41892); 
+                     after(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 10 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:893:6: ( '+' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:893:6: ( '+' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:894:1: '+'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+                    match(input,21,FOLLOW_21_in_rule__ExtRule__Alternatives_41912); 
+                     after(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Alternatives_4"
+
+
+    // $ANTLR start "rule__MergeRule__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:906:1: rule__MergeRule__Alternatives : ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) );
+    public final void rule__MergeRule__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:910:1: ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) )
+            int alt9=3;
+            switch ( input.LA(1) ) {
+            case 30:
+                {
+                alt9=1;
+                }
+                break;
+            case 32:
+                {
+                alt9=2;
+                }
+                break;
+            case 33:
+                {
+                alt9=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 9, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt9) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:911:1: ( ruleGlobalCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:911:1: ( ruleGlobalCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:912:1: ruleGlobalCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1946);
+                    ruleGlobalCombinator();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:917:6: ( ruleRuleCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:917:6: ( ruleRuleCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:918:1: ruleRuleCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1963);
+                    ruleRuleCombinator();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( ruleHookCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( ruleHookCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:924:1: ruleHookCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                    pushFollow(FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1980);
+                    ruleHookCombinator();
+
+                    state._fsp--;
+
+                     after(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MergeRule__Alternatives"
+
+
+    // $ANTLR start "rule__Term__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:934:1: rule__Term__Alternatives : ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) );
+    public final void rule__Term__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:938:1: ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) )
+            int alt10=4;
+            switch ( input.LA(1) ) {
+            case RULE_ID:
+            case RULE_STRING:
+            case RULE_COLON:
+                {
+                alt10=1;
+                }
+                break;
+            case 17:
+                {
+                alt10=2;
+                }
+                break;
+            case 18:
+                {
+                alt10=3;
+                }
+                break;
+            case 19:
+                {
+                alt10=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 10, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt10) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:939:1: ( ( rule__Term__TermAtomAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:939:1: ( ( rule__Term__TermAtomAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:940:1: ( rule__Term__TermAtomAssignment_0 )
+                    {
+                     before(grammarAccess.getTermAccess().getTermAtomAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:1: ( rule__Term__TermAtomAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:2: rule__Term__TermAtomAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2012);
+                    rule__Term__TermAtomAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getTermAccess().getTermAtomAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:945:6: ( ( rule__Term__TermGroupedSequenceAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:945:6: ( ( rule__Term__TermGroupedSequenceAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:946:1: ( rule__Term__TermGroupedSequenceAssignment_1 )
+                    {
+                     before(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:1: ( rule__Term__TermGroupedSequenceAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:2: rule__Term__TermGroupedSequenceAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2030);
+                    rule__Term__TermGroupedSequenceAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:951:6: ( ( rule__Term__TermOptionalSequenceAssignment_2 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:951:6: ( ( rule__Term__TermOptionalSequenceAssignment_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:952:1: ( rule__Term__TermOptionalSequenceAssignment_2 )
+                    {
+                     before(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:1: ( rule__Term__TermOptionalSequenceAssignment_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:2: rule__Term__TermOptionalSequenceAssignment_2
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2048);
+                    rule__Term__TermOptionalSequenceAssignment_2();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:957:6: ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:957:6: ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:958:1: ( rule__Term__TermRepeatedSequenceAssignment_3 )
+                    {
+                     before(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:959:1: ( rule__Term__TermRepeatedSequenceAssignment_3 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:959:2: rule__Term__TermRepeatedSequenceAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2066);
+                    rule__Term__TermRepeatedSequenceAssignment_3();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__Alternatives"
+
+
+    // $ANTLR start "rule__Atom__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:968:1: rule__Atom__Alternatives : ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) );
+    public final void rule__Atom__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:972:1: ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) )
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==RULE_STRING||LA11_0==RULE_COLON) ) {
+                alt11=1;
+            }
+            else if ( (LA11_0==RULE_ID) ) {
+                alt11=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 11, 0, input);
+
+                throw nvae;
+            }
+            switch (alt11) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:973:1: ( ( rule__Atom__AtomStringRuleAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:973:1: ( ( rule__Atom__AtomStringRuleAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:974:1: ( rule__Atom__AtomStringRuleAssignment_0 )
+                    {
+                     before(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975:1: ( rule__Atom__AtomStringRuleAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975:2: rule__Atom__AtomStringRuleAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2099);
+                    rule__Atom__AtomStringRuleAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:979:6: ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:979:6: ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:980:1: ( rule__Atom__AtomRuleReferenceAssignment_1 )
+                    {
+                     before(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981:1: ( rule__Atom__AtomRuleReferenceAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981:2: rule__Atom__AtomRuleReferenceAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2117);
+                    rule__Atom__AtomRuleReferenceAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__Alternatives"
+
+
+    // $ANTLR start "rule__StringRule__Alternatives"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:990:1: rule__StringRule__Alternatives : ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) );
+    public final void rule__StringRule__Alternatives() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:994:1: ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) )
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==RULE_STRING) ) {
+                alt12=1;
+            }
+            else if ( (LA12_0==RULE_COLON) ) {
+                alt12=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:995:1: ( ( rule__StringRule__LiteralAssignment_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:995:1: ( ( rule__StringRule__LiteralAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:996:1: ( rule__StringRule__LiteralAssignment_0 )
+                    {
+                     before(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:997:1: ( rule__StringRule__LiteralAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:997:2: rule__StringRule__LiteralAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2150);
+                    rule__StringRule__LiteralAssignment_0();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1001:6: ( ( rule__StringRule__ColonAssignment_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1001:6: ( ( rule__StringRule__ColonAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1002:1: ( rule__StringRule__ColonAssignment_1 )
+                    {
+                     before(grammarAccess.getStringRuleAccess().getColonAssignment_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003:1: ( rule__StringRule__ColonAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003:2: rule__StringRule__ColonAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2168);
+                    rule__StringRule__ColonAssignment_1();
+
+                    state._fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getStringRuleAccess().getColonAssignment_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StringRule__Alternatives"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1014:1: rule__EtsiBnf__Group_0__0 : rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1 ;
+    public final void rule__EtsiBnf__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1018:1: ( rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1019:2: rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__02199);
+            rule__EtsiBnf__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02202);
+            rule__EtsiBnf__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__0"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1026:1: rule__EtsiBnf__Group_0__0__Impl : ( 'grammar' ) ;
+    public final void rule__EtsiBnf__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1030:1: ( ( 'grammar' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031:1: ( 'grammar' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031:1: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1032:1: 'grammar'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
+            match(input,22,FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2230); 
+             after(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1045:1: rule__EtsiBnf__Group_0__1 : rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2 ;
+    public final void rule__EtsiBnf__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1049:1: ( rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1050:2: rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12261);
+            rule__EtsiBnf__Group_0__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12264);
+            rule__EtsiBnf__Group_0__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__1"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1057:1: rule__EtsiBnf__Group_0__1__Impl : ( ( rule__EtsiBnf__NameAssignment_0_1 ) ) ;
+    public final void rule__EtsiBnf__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1061:1: ( ( ( rule__EtsiBnf__NameAssignment_0_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1062:1: ( ( rule__EtsiBnf__NameAssignment_0_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1062:1: ( ( rule__EtsiBnf__NameAssignment_0_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1063:1: ( rule__EtsiBnf__NameAssignment_0_1 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1064:1: ( rule__EtsiBnf__NameAssignment_0_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1064:2: rule__EtsiBnf__NameAssignment_0_1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2291);
+            rule__EtsiBnf__NameAssignment_0_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1074:1: rule__EtsiBnf__Group_0__2 : rule__EtsiBnf__Group_0__2__Impl ;
+    public final void rule__EtsiBnf__Group_0__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1078:1: ( rule__EtsiBnf__Group_0__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1079:2: rule__EtsiBnf__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22321);
+            rule__EtsiBnf__Group_0__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__2"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1085:1: rule__EtsiBnf__Group_0__2__Impl : ( ( rule__EtsiBnf__Group_0_2__0 ) ) ;
+    public final void rule__EtsiBnf__Group_0__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1089:1: ( ( ( rule__EtsiBnf__Group_0_2__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1090:1: ( ( rule__EtsiBnf__Group_0_2__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1090:1: ( ( rule__EtsiBnf__Group_0_2__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1091:1: ( rule__EtsiBnf__Group_0_2__0 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1092:1: ( rule__EtsiBnf__Group_0_2__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1092:2: rule__EtsiBnf__Group_0_2__0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2348);
+            rule__EtsiBnf__Group_0_2__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0__2__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1108:1: rule__EtsiBnf__Group_0_2__0 : rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1 ;
+    public final void rule__EtsiBnf__Group_0_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1112:1: ( rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1113:2: rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02384);
+            rule__EtsiBnf__Group_0_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02387);
+            rule__EtsiBnf__Group_0_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__0"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1120:1: rule__EtsiBnf__Group_0_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? ) ;
+    public final void rule__EtsiBnf__Group_0_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1124:1: ( ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1125:1: ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1125:1: ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1126:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1127:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0==34) ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1127:2: rule__EtsiBnf__TypeAssignment_0_2_0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2414);
+                    rule__EtsiBnf__TypeAssignment_0_2_0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__0__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1137:1: rule__EtsiBnf__Group_0_2__1 : rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2 ;
+    public final void rule__EtsiBnf__Group_0_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1141:1: ( rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1142:2: rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12445);
+            rule__EtsiBnf__Group_0_2__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12448);
+            rule__EtsiBnf__Group_0_2__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__1"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1149:1: rule__EtsiBnf__Group_0_2__1__Impl : ( ';' ) ;
+    public final void rule__EtsiBnf__Group_0_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1153:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1154:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1154:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1155:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2476); 
+             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__1__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1168:1: rule__EtsiBnf__Group_0_2__2 : rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3 ;
+    public final void rule__EtsiBnf__Group_0_2__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1172:1: ( rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1173:2: rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22507);
+            rule__EtsiBnf__Group_0_2__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22510);
+            rule__EtsiBnf__Group_0_2__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__2"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1180:1: rule__EtsiBnf__Group_0_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) ;
+    public final void rule__EtsiBnf__Group_0_2__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1184:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1185:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1185:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1186:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1187:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==24) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1187:2: rule__EtsiBnf__ImportSectionAssignment_0_2_2
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2537);
+                    rule__EtsiBnf__ImportSectionAssignment_0_2_2();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__2__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1197:1: rule__EtsiBnf__Group_0_2__3 : rule__EtsiBnf__Group_0_2__3__Impl ;
+    public final void rule__EtsiBnf__Group_0_2__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1201:1: ( rule__EtsiBnf__Group_0_2__3__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1202:2: rule__EtsiBnf__Group_0_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32568);
+            rule__EtsiBnf__Group_0_2__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__3"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_0_2__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1208:1: rule__EtsiBnf__Group_0_2__3__Impl : ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) ;
+    public final void rule__EtsiBnf__Group_0_2__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1212:1: ( ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1213:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1213:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1214:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1214:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1215:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1216:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1216:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2597);
+            rule__EtsiBnf__BnfEntryAssignment_0_2_3();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1219:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1220:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1221:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( ((LA15_0>=RULE_ID && LA15_0<=RULE_SECTIONHEADER)||LA15_0==RULE_INT) ) {
+                    alt15=1;
+                }
+
+
+                switch (alt15) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1221:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2609);
+            	    rule__EtsiBnf__BnfEntryAssignment_0_2_3();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_0_2__3__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1240:1: rule__EtsiBnf__Group_1__0 : rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1 ;
+    public final void rule__EtsiBnf__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1244:1: ( rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1245:2: rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02650);
+            rule__EtsiBnf__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02653);
+            rule__EtsiBnf__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__0"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1252:1: rule__EtsiBnf__Group_1__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_1_0 ) ) ;
+    public final void rule__EtsiBnf__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1256:1: ( ( ( rule__EtsiBnf__TypeAssignment_1_0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1257:1: ( ( rule__EtsiBnf__TypeAssignment_1_0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1257:1: ( ( rule__EtsiBnf__TypeAssignment_1_0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1258:1: ( rule__EtsiBnf__TypeAssignment_1_0 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1259:1: ( rule__EtsiBnf__TypeAssignment_1_0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1259:2: rule__EtsiBnf__TypeAssignment_1_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2680);
+            rule__EtsiBnf__TypeAssignment_1_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1269:1: rule__EtsiBnf__Group_1__1 : rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2 ;
+    public final void rule__EtsiBnf__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1273:1: ( rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1274:2: rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12710);
+            rule__EtsiBnf__Group_1__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12713);
+            rule__EtsiBnf__Group_1__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__1"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1281:1: rule__EtsiBnf__Group_1__1__Impl : ( ';' ) ;
+    public final void rule__EtsiBnf__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1285:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1286:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1286:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1287:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2741); 
+             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1300:1: rule__EtsiBnf__Group_1__2 : rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3 ;
+    public final void rule__EtsiBnf__Group_1__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1304:1: ( rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1305:2: rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22772);
+            rule__EtsiBnf__Group_1__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22775);
+            rule__EtsiBnf__Group_1__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__2"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1312:1: rule__EtsiBnf__Group_1__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) ;
+    public final void rule__EtsiBnf__Group_1__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1316:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1317:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1317:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1318:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1319:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==24) ) {
+                alt16=1;
+            }
+            switch (alt16) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1319:2: rule__EtsiBnf__ImportSectionAssignment_1_2
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2802);
+                    rule__EtsiBnf__ImportSectionAssignment_1_2();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__2__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1329:1: rule__EtsiBnf__Group_1__3 : rule__EtsiBnf__Group_1__3__Impl ;
+    public final void rule__EtsiBnf__Group_1__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1333:1: ( rule__EtsiBnf__Group_1__3__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1334:2: rule__EtsiBnf__Group_1__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32833);
+            rule__EtsiBnf__Group_1__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__3"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_1__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1340:1: rule__EtsiBnf__Group_1__3__Impl : ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) ;
+    public final void rule__EtsiBnf__Group_1__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1344:1: ( ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1345:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1345:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1346:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1347:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( ((LA17_0>=RULE_ID && LA17_0<=RULE_SECTIONHEADER)||LA17_0==RULE_INT) ) {
+                    alt17=1;
+                }
+
+
+                switch (alt17) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1347:2: rule__EtsiBnf__DeltaEntryAssignment_1_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2860);
+            	    rule__EtsiBnf__DeltaEntryAssignment_1_3();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_1__3__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1365:1: rule__EtsiBnf__Group_2__0 : rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1 ;
+    public final void rule__EtsiBnf__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1369:1: ( rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1370:2: rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__02899);
+            rule__EtsiBnf__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02902);
+            rule__EtsiBnf__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__0"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1377:1: rule__EtsiBnf__Group_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_2_0 ) ) ;
+    public final void rule__EtsiBnf__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1381:1: ( ( ( rule__EtsiBnf__TypeAssignment_2_0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1382:1: ( ( rule__EtsiBnf__TypeAssignment_2_0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1382:1: ( ( rule__EtsiBnf__TypeAssignment_2_0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1383:1: ( rule__EtsiBnf__TypeAssignment_2_0 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1384:1: ( rule__EtsiBnf__TypeAssignment_2_0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1384:2: rule__EtsiBnf__TypeAssignment_2_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2929);
+            rule__EtsiBnf__TypeAssignment_2_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1394:1: rule__EtsiBnf__Group_2__1 : rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2 ;
+    public final void rule__EtsiBnf__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1398:1: ( rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1399:2: rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__12959);
+            rule__EtsiBnf__Group_2__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12962);
+            rule__EtsiBnf__Group_2__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__1"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1406:1: rule__EtsiBnf__Group_2__1__Impl : ( ';' ) ;
+    public final void rule__EtsiBnf__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1410:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1411:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1411:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1412:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2990); 
+             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1425:1: rule__EtsiBnf__Group_2__2 : rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3 ;
+    public final void rule__EtsiBnf__Group_2__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1429:1: ( rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1430:2: rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__23021);
+            rule__EtsiBnf__Group_2__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23024);
+            rule__EtsiBnf__Group_2__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__2"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1437:1: rule__EtsiBnf__Group_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) ;
+    public final void rule__EtsiBnf__Group_2__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1441:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1442:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1442:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1443:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1444:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
+            int alt18=2;
+            int LA18_0 = input.LA(1);
+
+            if ( (LA18_0==24) ) {
+                alt18=1;
+            }
+            switch (alt18) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1444:2: rule__EtsiBnf__ImportSectionAssignment_2_2
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3051);
+                    rule__EtsiBnf__ImportSectionAssignment_2_2();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__2__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1454:1: rule__EtsiBnf__Group_2__3 : rule__EtsiBnf__Group_2__3__Impl ;
+    public final void rule__EtsiBnf__Group_2__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1458:1: ( rule__EtsiBnf__Group_2__3__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1459:2: rule__EtsiBnf__Group_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33082);
+            rule__EtsiBnf__Group_2__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__3"
+
+
+    // $ANTLR start "rule__EtsiBnf__Group_2__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1465:1: rule__EtsiBnf__Group_2__3__Impl : ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) ;
+    public final void rule__EtsiBnf__Group_2__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1469:1: ( ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1470:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1470:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1471:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1472:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
+            loop19:
+            do {
+                int alt19=2;
+                int LA19_0 = input.LA(1);
+
+                if ( (LA19_0==RULE_SECTIONHEADER||LA19_0==30||(LA19_0>=32 && LA19_0<=33)) ) {
+                    alt19=1;
+                }
+
+
+                switch (alt19) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1472:2: rule__EtsiBnf__MergeEntryAssignment_2_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3109);
+            	    rule__EtsiBnf__MergeEntryAssignment_2_3();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop19;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__Group_2__3__Impl"
+
+
+    // $ANTLR start "rule__SectionHeading__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1490:1: rule__SectionHeading__Group__0 : rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1 ;
+    public final void rule__SectionHeading__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1494:1: ( rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1495:2: rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03148);
+            rule__SectionHeading__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03151);
+            rule__SectionHeading__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SectionHeading__Group__0"
+
+
+    // $ANTLR start "rule__SectionHeading__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1502:1: rule__SectionHeading__Group__0__Impl : ( () ) ;
+    public final void rule__SectionHeading__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1506:1: ( ( () ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1507:1: ( () )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1507:1: ( () )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1508:1: ()
+            {
+             before(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1509:1: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1511:1: 
+            {
+            }
+
+             after(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); 
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SectionHeading__Group__0__Impl"
+
+
+    // $ANTLR start "rule__SectionHeading__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1521:1: rule__SectionHeading__Group__1 : rule__SectionHeading__Group__1__Impl ;
+    public final void rule__SectionHeading__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1525:1: ( rule__SectionHeading__Group__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1526:2: rule__SectionHeading__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13209);
+            rule__SectionHeading__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SectionHeading__Group__1"
+
+
+    // $ANTLR start "rule__SectionHeading__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1532:1: rule__SectionHeading__Group__1__Impl : ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) ) ;
+    public final void rule__SectionHeading__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1536:1: ( ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1537:1: ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1537:1: ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1538:1: ( rule__SectionHeading__SectionHeaderAssignment_1 )
+            {
+             before(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1539:1: ( rule__SectionHeading__SectionHeaderAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1539:2: rule__SectionHeading__SectionHeaderAssignment_1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3236);
+            rule__SectionHeading__SectionHeaderAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SectionHeading__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Import__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1553:1: rule__Import__Group__0 : rule__Import__Group__0__Impl rule__Import__Group__1 ;
+    public final void rule__Import__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1557:1: ( rule__Import__Group__0__Impl rule__Import__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1558:2: rule__Import__Group__0__Impl rule__Import__Group__1
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03270);
+            rule__Import__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03273);
+            rule__Import__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__0"
+
+
+    // $ANTLR start "rule__Import__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1565:1: rule__Import__Group__0__Impl : ( 'import' ) ;
+    public final void rule__Import__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1569:1: ( ( 'import' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1570:1: ( 'import' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1570:1: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1571:1: 'import'
+            {
+             before(grammarAccess.getImportAccess().getImportKeyword_0()); 
+            match(input,24,FOLLOW_24_in_rule__Import__Group__0__Impl3301); 
+             after(grammarAccess.getImportAccess().getImportKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Import__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1584:1: rule__Import__Group__1 : rule__Import__Group__1__Impl rule__Import__Group__2 ;
+    public final void rule__Import__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1588:1: ( rule__Import__Group__1__Impl rule__Import__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1589:2: rule__Import__Group__1__Impl rule__Import__Group__2
+            {
+            pushFollow(FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13332);
+            rule__Import__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13335);
+            rule__Import__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__1"
+
+
+    // $ANTLR start "rule__Import__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1596:1: rule__Import__Group__1__Impl : ( ( rule__Import__ImportURIAssignment_1 ) ) ;
+    public final void rule__Import__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1600:1: ( ( ( rule__Import__ImportURIAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1601:1: ( ( rule__Import__ImportURIAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1601:1: ( ( rule__Import__ImportURIAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1602:1: ( rule__Import__ImportURIAssignment_1 )
+            {
+             before(grammarAccess.getImportAccess().getImportURIAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1603:1: ( rule__Import__ImportURIAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1603:2: rule__Import__ImportURIAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3362);
+            rule__Import__ImportURIAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImportAccess().getImportURIAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Import__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1613:1: rule__Import__Group__2 : rule__Import__Group__2__Impl rule__Import__Group__3 ;
+    public final void rule__Import__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1617:1: ( rule__Import__Group__2__Impl rule__Import__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1618:2: rule__Import__Group__2__Impl rule__Import__Group__3
+            {
+            pushFollow(FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23392);
+            rule__Import__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23395);
+            rule__Import__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__2"
+
+
+    // $ANTLR start "rule__Import__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1625:1: rule__Import__Group__2__Impl : ( ( rule__Import__Group_2__0 )? ) ;
+    public final void rule__Import__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1629:1: ( ( ( rule__Import__Group_2__0 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1630:1: ( ( rule__Import__Group_2__0 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1630:1: ( ( rule__Import__Group_2__0 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1631:1: ( rule__Import__Group_2__0 )?
+            {
+             before(grammarAccess.getImportAccess().getGroup_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1632:1: ( rule__Import__Group_2__0 )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
+
+            if ( (LA20_0==25) ) {
+                alt20=1;
+            }
+            switch (alt20) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1632:2: rule__Import__Group_2__0
+                    {
+                    pushFollow(FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3422);
+                    rule__Import__Group_2__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getImportAccess().getGroup_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Import__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1642:1: rule__Import__Group__3 : rule__Import__Group__3__Impl rule__Import__Group__4 ;
+    public final void rule__Import__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1646:1: ( rule__Import__Group__3__Impl rule__Import__Group__4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1647:2: rule__Import__Group__3__Impl rule__Import__Group__4
+            {
+            pushFollow(FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33453);
+            rule__Import__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33456);
+            rule__Import__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__3"
+
+
+    // $ANTLR start "rule__Import__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1654:1: rule__Import__Group__3__Impl : ( ( rule__Import__Group_3__0 )? ) ;
+    public final void rule__Import__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1658:1: ( ( ( rule__Import__Group_3__0 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1659:1: ( ( rule__Import__Group_3__0 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1659:1: ( ( rule__Import__Group_3__0 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1660:1: ( rule__Import__Group_3__0 )?
+            {
+             before(grammarAccess.getImportAccess().getGroup_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1661:1: ( rule__Import__Group_3__0 )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==26) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1661:2: rule__Import__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3483);
+                    rule__Import__Group_3__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getImportAccess().getGroup_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Import__Group__4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1671:1: rule__Import__Group__4 : rule__Import__Group__4__Impl ;
+    public final void rule__Import__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1675:1: ( rule__Import__Group__4__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1676:2: rule__Import__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43514);
+            rule__Import__Group__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__4"
+
+
+    // $ANTLR start "rule__Import__Group__4__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1682:1: rule__Import__Group__4__Impl : ( ';' ) ;
+    public final void rule__Import__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1686:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1687:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1687:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1688:1: ';'
+            {
+             before(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
+            match(input,23,FOLLOW_23_in_rule__Import__Group__4__Impl3542); 
+             after(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group__4__Impl"
+
+
+    // $ANTLR start "rule__Import__Group_2__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1711:1: rule__Import__Group_2__0 : rule__Import__Group_2__0__Impl rule__Import__Group_2__1 ;
+    public final void rule__Import__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1715:1: ( rule__Import__Group_2__0__Impl rule__Import__Group_2__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1716:2: rule__Import__Group_2__0__Impl rule__Import__Group_2__1
+            {
+            pushFollow(FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03583);
+            rule__Import__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03586);
+            rule__Import__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_2__0"
+
+
+    // $ANTLR start "rule__Import__Group_2__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1723:1: rule__Import__Group_2__0__Impl : ( '/' ) ;
+    public final void rule__Import__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1727:1: ( ( '/' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1728:1: ( '/' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1728:1: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1729:1: '/'
+            {
+             before(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
+            match(input,25,FOLLOW_25_in_rule__Import__Group_2__0__Impl3614); 
+             after(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__Import__Group_2__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1742:1: rule__Import__Group_2__1 : rule__Import__Group_2__1__Impl ;
+    public final void rule__Import__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1746:1: ( rule__Import__Group_2__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1747:2: rule__Import__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13645);
+            rule__Import__Group_2__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_2__1"
+
+
+    // $ANTLR start "rule__Import__Group_2__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1753:1: rule__Import__Group_2__1__Impl : ( ( rule__Import__Alternatives_2_1 ) ) ;
+    public final void rule__Import__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1757:1: ( ( ( rule__Import__Alternatives_2_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1758:1: ( ( rule__Import__Alternatives_2_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1758:1: ( ( rule__Import__Alternatives_2_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1759:1: ( rule__Import__Alternatives_2_1 )
+            {
+             before(grammarAccess.getImportAccess().getAlternatives_2_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1760:1: ( rule__Import__Alternatives_2_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1760:2: rule__Import__Alternatives_2_1
+            {
+            pushFollow(FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3672);
+            rule__Import__Alternatives_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImportAccess().getAlternatives_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__Import__Group_3__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1774:1: rule__Import__Group_3__0 : rule__Import__Group_3__0__Impl rule__Import__Group_3__1 ;
+    public final void rule__Import__Group_3__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1778:1: ( rule__Import__Group_3__0__Impl rule__Import__Group_3__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1779:2: rule__Import__Group_3__0__Impl rule__Import__Group_3__1
+            {
+            pushFollow(FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03706);
+            rule__Import__Group_3__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03709);
+            rule__Import__Group_3__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_3__0"
+
+
+    // $ANTLR start "rule__Import__Group_3__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1786:1: rule__Import__Group_3__0__Impl : ( 'label:' ) ;
+    public final void rule__Import__Group_3__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1790:1: ( ( 'label:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1791:1: ( 'label:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1791:1: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1792:1: 'label:'
+            {
+             before(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
+            match(input,26,FOLLOW_26_in_rule__Import__Group_3__0__Impl3737); 
+             after(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_3__0__Impl"
+
+
+    // $ANTLR start "rule__Import__Group_3__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1805:1: rule__Import__Group_3__1 : rule__Import__Group_3__1__Impl ;
+    public final void rule__Import__Group_3__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1809:1: ( rule__Import__Group_3__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1810:2: rule__Import__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13768);
+            rule__Import__Group_3__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_3__1"
+
+
+    // $ANTLR start "rule__Import__Group_3__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1816:1: rule__Import__Group_3__1__Impl : ( ( rule__Import__LabelAssignment_3_1 ) ) ;
+    public final void rule__Import__Group_3__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1820:1: ( ( ( rule__Import__LabelAssignment_3_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1821:1: ( ( rule__Import__LabelAssignment_3_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1821:1: ( ( rule__Import__LabelAssignment_3_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1822:1: ( rule__Import__LabelAssignment_3_1 )
+            {
+             before(grammarAccess.getImportAccess().getLabelAssignment_3_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1823:1: ( rule__Import__LabelAssignment_3_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1823:2: rule__Import__LabelAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3795);
+            rule__Import__LabelAssignment_3_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getImportAccess().getLabelAssignment_3_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__Group_3__1__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1837:1: rule__Rule__Group__0 : rule__Rule__Group__0__Impl rule__Rule__Group__1 ;
+    public final void rule__Rule__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1841:1: ( rule__Rule__Group__0__Impl rule__Rule__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1842:2: rule__Rule__Group__0__Impl rule__Rule__Group__1
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03829);
+            rule__Rule__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03832);
+            rule__Rule__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__0"
+
+
+    // $ANTLR start "rule__Rule__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1849:1: rule__Rule__Group__0__Impl : ( ( rule__Rule__Group_0__0 )? ) ;
+    public final void rule__Rule__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1853:1: ( ( ( rule__Rule__Group_0__0 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1854:1: ( ( rule__Rule__Group_0__0 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1854:1: ( ( rule__Rule__Group_0__0 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1855:1: ( rule__Rule__Group_0__0 )?
+            {
+             before(grammarAccess.getRuleAccess().getGroup_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1856:1: ( rule__Rule__Group_0__0 )?
+            int alt22=2;
+            int LA22_0 = input.LA(1);
+
+            if ( (LA22_0==RULE_INT) ) {
+                alt22=1;
+            }
+            switch (alt22) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1856:2: rule__Rule__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3859);
+                    rule__Rule__Group_0__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRuleAccess().getGroup_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__0__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1866:1: rule__Rule__Group__1 : rule__Rule__Group__1__Impl rule__Rule__Group__2 ;
+    public final void rule__Rule__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1870:1: ( rule__Rule__Group__1__Impl rule__Rule__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1871:2: rule__Rule__Group__1__Impl rule__Rule__Group__2
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13890);
+            rule__Rule__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13893);
+            rule__Rule__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__1"
+
+
+    // $ANTLR start "rule__Rule__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1878:1: rule__Rule__Group__1__Impl : ( ( rule__Rule__NameAssignment_1 ) ) ;
+    public final void rule__Rule__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1882:1: ( ( ( rule__Rule__NameAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1883:1: ( ( rule__Rule__NameAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1883:1: ( ( rule__Rule__NameAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1884:1: ( rule__Rule__NameAssignment_1 )
+            {
+             before(grammarAccess.getRuleAccess().getNameAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1885:1: ( rule__Rule__NameAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1885:2: rule__Rule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3920);
+            rule__Rule__NameAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleAccess().getNameAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__1__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1895:1: rule__Rule__Group__2 : rule__Rule__Group__2__Impl rule__Rule__Group__3 ;
+    public final void rule__Rule__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1899:1: ( rule__Rule__Group__2__Impl rule__Rule__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1900:2: rule__Rule__Group__2__Impl rule__Rule__Group__3
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23950);
+            rule__Rule__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23953);
+            rule__Rule__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__2"
+
+
+    // $ANTLR start "rule__Rule__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1907:1: rule__Rule__Group__2__Impl : ( '::=' ) ;
+    public final void rule__Rule__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1911:1: ( ( '::=' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1912:1: ( '::=' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1912:1: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1913:1: '::='
+            {
+             before(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
+            match(input,27,FOLLOW_27_in_rule__Rule__Group__2__Impl3981); 
+             after(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__2__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1926:1: rule__Rule__Group__3 : rule__Rule__Group__3__Impl rule__Rule__Group__4 ;
+    public final void rule__Rule__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1930:1: ( rule__Rule__Group__3__Impl rule__Rule__Group__4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1931:2: rule__Rule__Group__3__Impl rule__Rule__Group__4
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34012);
+            rule__Rule__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34015);
+            rule__Rule__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__3"
+
+
+    // $ANTLR start "rule__Rule__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1938:1: rule__Rule__Group__3__Impl : ( ( rule__Rule__DefinitionListAssignment_3 )? ) ;
+    public final void rule__Rule__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1942:1: ( ( ( rule__Rule__DefinitionListAssignment_3 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1943:1: ( ( rule__Rule__DefinitionListAssignment_3 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1943:1: ( ( rule__Rule__DefinitionListAssignment_3 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1944:1: ( rule__Rule__DefinitionListAssignment_3 )?
+            {
+             before(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1945:1: ( rule__Rule__DefinitionListAssignment_3 )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==RULE_STRING||LA23_0==RULE_COLON||(LA23_0>=17 && LA23_0<=19)) ) {
+                alt23=1;
+            }
+            else if ( (LA23_0==RULE_ID) ) {
+                int LA23_2 = input.LA(2);
+
+                if ( (LA23_2==EOF||(LA23_2>=RULE_ID && LA23_2<=RULE_INT)||LA23_2==RULE_COLON||LA23_2==16||(LA23_2>=18 && LA23_2<=19)||LA23_2==23) ) {
+                    alt23=1;
+                }
+                else if ( (LA23_2==17) ) {
+                    int LA23_4 = input.LA(3);
+
+                    if ( (LA23_4==RULE_ID||LA23_4==RULE_STRING||LA23_4==RULE_COLON||(LA23_4>=17 && LA23_4<=19)) ) {
+                        alt23=1;
+                    }
+                }
+            }
+            switch (alt23) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1945:2: rule__Rule__DefinitionListAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4042);
+                    rule__Rule__DefinitionListAssignment_3();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__3__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group__4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1955:1: rule__Rule__Group__4 : rule__Rule__Group__4__Impl ;
+    public final void rule__Rule__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1959:1: ( rule__Rule__Group__4__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1960:2: rule__Rule__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44073);
+            rule__Rule__Group__4__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__4"
+
+
+    // $ANTLR start "rule__Rule__Group__4__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1966:1: rule__Rule__Group__4__Impl : ( ( ';' )? ) ;
+    public final void rule__Rule__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1970:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1971:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1971:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1972:1: ( ';' )?
+            {
+             before(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1973:1: ( ';' )?
+            int alt24=2;
+            int LA24_0 = input.LA(1);
+
+            if ( (LA24_0==23) ) {
+                alt24=1;
+            }
+            switch (alt24) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1974:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__Rule__Group__4__Impl4102); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group__4__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group_0__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1995:1: rule__Rule__Group_0__0 : rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1 ;
+    public final void rule__Rule__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1999:1: ( rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2000:2: rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__04145);
+            rule__Rule__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04148);
+            rule__Rule__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__0"
+
+
+    // $ANTLR start "rule__Rule__Group_0__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2007:1: rule__Rule__Group_0__0__Impl : ( ( rule__Rule__RulenumberAssignment_0_0 ) ) ;
+    public final void rule__Rule__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2011:1: ( ( ( rule__Rule__RulenumberAssignment_0_0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2012:1: ( ( rule__Rule__RulenumberAssignment_0_0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2012:1: ( ( rule__Rule__RulenumberAssignment_0_0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2013:1: ( rule__Rule__RulenumberAssignment_0_0 )
+            {
+             before(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2014:1: ( rule__Rule__RulenumberAssignment_0_0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2014:2: rule__Rule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4175);
+            rule__Rule__RulenumberAssignment_0_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group_0__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2024:1: rule__Rule__Group_0__1 : rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2 ;
+    public final void rule__Rule__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2028:1: ( rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2029:2: rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2
+            {
+            pushFollow(FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__14205);
+            rule__Rule__Group_0__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14208);
+            rule__Rule__Group_0__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__1"
+
+
+    // $ANTLR start "rule__Rule__Group_0__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2036:1: rule__Rule__Group_0__1__Impl : ( ( rule__Rule__RulevariantAssignment_0_1 )? ) ;
+    public final void rule__Rule__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2040:1: ( ( ( rule__Rule__RulevariantAssignment_0_1 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2041:1: ( ( rule__Rule__RulevariantAssignment_0_1 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2041:1: ( ( rule__Rule__RulevariantAssignment_0_1 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2042:1: ( rule__Rule__RulevariantAssignment_0_1 )?
+            {
+             before(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2043:1: ( rule__Rule__RulevariantAssignment_0_1 )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==RULE_ID) ) {
+                alt25=1;
+            }
+            switch (alt25) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2043:2: rule__Rule__RulevariantAssignment_0_1
+                    {
+                    pushFollow(FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4235);
+                    rule__Rule__RulevariantAssignment_0_1();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__Rule__Group_0__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2053:1: rule__Rule__Group_0__2 : rule__Rule__Group_0__2__Impl ;
+    public final void rule__Rule__Group_0__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2057:1: ( rule__Rule__Group_0__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2058:2: rule__Rule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24266);
+            rule__Rule__Group_0__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__2"
+
+
+    // $ANTLR start "rule__Rule__Group_0__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2064:1: rule__Rule__Group_0__2__Impl : ( '.' ) ;
+    public final void rule__Rule__Group_0__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2068:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2069:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2069:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2070:1: '.'
+            {
+             before(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
+            match(input,28,FOLLOW_28_in_rule__Rule__Group_0__2__Impl4294); 
+             after(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__Group_0__2__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2089:1: rule__ExtRule__Group__0 : rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1 ;
+    public final void rule__ExtRule__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2093:1: ( rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2094:2: rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04331);
+            rule__ExtRule__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04334);
+            rule__ExtRule__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__0"
+
+
+    // $ANTLR start "rule__ExtRule__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2101:1: rule__ExtRule__Group__0__Impl : ( ( rule__ExtRule__Group_0__0 )? ) ;
+    public final void rule__ExtRule__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2105:1: ( ( ( rule__ExtRule__Group_0__0 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2106:1: ( ( rule__ExtRule__Group_0__0 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2106:1: ( ( rule__ExtRule__Group_0__0 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2107:1: ( rule__ExtRule__Group_0__0 )?
+            {
+             before(grammarAccess.getExtRuleAccess().getGroup_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2108:1: ( rule__ExtRule__Group_0__0 )?
+            int alt26=2;
+            int LA26_0 = input.LA(1);
+
+            if ( (LA26_0==RULE_INT) ) {
+                alt26=1;
+            }
+            switch (alt26) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2108:2: rule__ExtRule__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4361);
+                    rule__ExtRule__Group_0__0();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getGroup_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__0__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2118:1: rule__ExtRule__Group__1 : rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2 ;
+    public final void rule__ExtRule__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2122:1: ( rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2123:2: rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14392);
+            rule__ExtRule__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14395);
+            rule__ExtRule__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__1"
+
+
+    // $ANTLR start "rule__ExtRule__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2130:1: rule__ExtRule__Group__1__Impl : ( ( rule__ExtRule__NameAssignment_1 ) ) ;
+    public final void rule__ExtRule__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2134:1: ( ( ( rule__ExtRule__NameAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2135:1: ( ( rule__ExtRule__NameAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2135:1: ( ( rule__ExtRule__NameAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2136:1: ( rule__ExtRule__NameAssignment_1 )
+            {
+             before(grammarAccess.getExtRuleAccess().getNameAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2137:1: ( rule__ExtRule__NameAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2137:2: rule__ExtRule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4422);
+            rule__ExtRule__NameAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getNameAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__1__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2147:1: rule__ExtRule__Group__2 : rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3 ;
+    public final void rule__ExtRule__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2151:1: ( rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2152:2: rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24452);
+            rule__ExtRule__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24455);
+            rule__ExtRule__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__2"
+
+
+    // $ANTLR start "rule__ExtRule__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2159:1: rule__ExtRule__Group__2__Impl : ( ( rule__ExtRule__Group_2__0 ) ) ;
+    public final void rule__ExtRule__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2163:1: ( ( ( rule__ExtRule__Group_2__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2164:1: ( ( rule__ExtRule__Group_2__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2164:1: ( ( rule__ExtRule__Group_2__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2165:1: ( rule__ExtRule__Group_2__0 )
+            {
+             before(grammarAccess.getExtRuleAccess().getGroup_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2166:1: ( rule__ExtRule__Group_2__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2166:2: rule__ExtRule__Group_2__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4482);
+            rule__ExtRule__Group_2__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getGroup_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__2__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2176:1: rule__ExtRule__Group__3 : rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4 ;
+    public final void rule__ExtRule__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2180:1: ( rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2181:2: rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34512);
+            rule__ExtRule__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34515);
+            rule__ExtRule__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__3"
+
+
+    // $ANTLR start "rule__ExtRule__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2188:1: rule__ExtRule__Group__3__Impl : ( '<-' ) ;
+    public final void rule__ExtRule__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2192:1: ( ( '<-' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2193:1: ( '<-' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2193:1: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2194:1: '<-'
+            {
+             before(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
+            match(input,29,FOLLOW_29_in_rule__ExtRule__Group__3__Impl4543); 
+             after(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__3__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2207:1: rule__ExtRule__Group__4 : rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5 ;
+    public final void rule__ExtRule__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2211:1: ( rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2212:2: rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44574);
+            rule__ExtRule__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44577);
+            rule__ExtRule__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__4"
+
+
+    // $ANTLR start "rule__ExtRule__Group__4__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2219:1: rule__ExtRule__Group__4__Impl : ( ( rule__ExtRule__Alternatives_4 )* ) ;
+    public final void rule__ExtRule__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2223:1: ( ( ( rule__ExtRule__Alternatives_4 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2224:1: ( ( rule__ExtRule__Alternatives_4 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2224:1: ( ( rule__ExtRule__Alternatives_4 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2225:1: ( rule__ExtRule__Alternatives_4 )*
+            {
+             before(grammarAccess.getExtRuleAccess().getAlternatives_4()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2226:1: ( rule__ExtRule__Alternatives_4 )*
+            loop27:
+            do {
+                int alt27=2;
+                int LA27_0 = input.LA(1);
+
+                if ( (LA27_0==RULE_ID) ) {
+                    int LA27_2 = input.LA(2);
+
+                    if ( (LA27_2==EOF||(LA27_2>=RULE_ID && LA27_2<=RULE_INT)||LA27_2==RULE_COLON||(LA27_2>=13 && LA27_2<=16)||(LA27_2>=18 && LA27_2<=21)||LA27_2==23) ) {
+                        alt27=1;
+                    }
+                    else if ( (LA27_2==17) ) {
+                        int LA27_4 = input.LA(3);
+
+                        if ( (LA27_4==RULE_INT) ) {
+                            int LA27_5 = input.LA(4);
+
+                            if ( (LA27_5==RULE_ID||LA27_5==28) ) {
+                                alt27=1;
+                            }
+
+
+                        }
+                        else if ( (LA27_4==EOF||(LA27_4>=RULE_ID && LA27_4<=RULE_STRING)||LA27_4==RULE_COLON||(LA27_4>=13 && LA27_4<=21)||LA27_4==23) ) {
+                            alt27=1;
+                        }
+
+
+                    }
+
+
+                }
+                else if ( (LA27_0==RULE_STRING||LA27_0==RULE_COLON||(LA27_0>=13 && LA27_0<=21)) ) {
+                    alt27=1;
+                }
+
+
+                switch (alt27) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2226:2: rule__ExtRule__Alternatives_4
+            	    {
+            	    pushFollow(FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4604);
+            	    rule__ExtRule__Alternatives_4();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop27;
+                }
+            } while (true);
+
+             after(grammarAccess.getExtRuleAccess().getAlternatives_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__4__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group__5"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2236:1: rule__ExtRule__Group__5 : rule__ExtRule__Group__5__Impl ;
+    public final void rule__ExtRule__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2240:1: ( rule__ExtRule__Group__5__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2241:2: rule__ExtRule__Group__5__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54635);
+            rule__ExtRule__Group__5__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__5"
+
+
+    // $ANTLR start "rule__ExtRule__Group__5__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2247:1: rule__ExtRule__Group__5__Impl : ( ( ';' )? ) ;
+    public final void rule__ExtRule__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2251:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2252:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2252:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2253:1: ( ';' )?
+            {
+             before(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2254:1: ( ';' )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==23) ) {
+                alt28=1;
+            }
+            switch (alt28) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2255:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__ExtRule__Group__5__Impl4664); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group__5__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2278:1: rule__ExtRule__Group_0__0 : rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1 ;
+    public final void rule__ExtRule__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2282:1: ( rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2283:2: rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04709);
+            rule__ExtRule__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04712);
+            rule__ExtRule__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__0"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2290:1: rule__ExtRule__Group_0__0__Impl : ( ( rule__ExtRule__RulenumberAssignment_0_0 ) ) ;
+    public final void rule__ExtRule__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2294:1: ( ( ( rule__ExtRule__RulenumberAssignment_0_0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2295:1: ( ( rule__ExtRule__RulenumberAssignment_0_0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2295:1: ( ( rule__ExtRule__RulenumberAssignment_0_0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2296:1: ( rule__ExtRule__RulenumberAssignment_0_0 )
+            {
+             before(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2297:1: ( rule__ExtRule__RulenumberAssignment_0_0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2297:2: rule__ExtRule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4739);
+            rule__ExtRule__RulenumberAssignment_0_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2307:1: rule__ExtRule__Group_0__1 : rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2 ;
+    public final void rule__ExtRule__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2311:1: ( rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2312:2: rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14769);
+            rule__ExtRule__Group_0__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14772);
+            rule__ExtRule__Group_0__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__1"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2319:1: rule__ExtRule__Group_0__1__Impl : ( ( rule__ExtRule__RulevariantAssignment_0_1 )? ) ;
+    public final void rule__ExtRule__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2323:1: ( ( ( rule__ExtRule__RulevariantAssignment_0_1 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2324:1: ( ( rule__ExtRule__RulevariantAssignment_0_1 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2324:1: ( ( rule__ExtRule__RulevariantAssignment_0_1 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2325:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
+            {
+             before(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2326:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
+
+            if ( (LA29_0==RULE_ID) ) {
+                alt29=1;
+            }
+            switch (alt29) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2326:2: rule__ExtRule__RulevariantAssignment_0_1
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4799);
+                    rule__ExtRule__RulevariantAssignment_0_1();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2336:1: rule__ExtRule__Group_0__2 : rule__ExtRule__Group_0__2__Impl ;
+    public final void rule__ExtRule__Group_0__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2340:1: ( rule__ExtRule__Group_0__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2341:2: rule__ExtRule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24830);
+            rule__ExtRule__Group_0__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__2"
+
+
+    // $ANTLR start "rule__ExtRule__Group_0__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2347:1: rule__ExtRule__Group_0__2__Impl : ( '.' ) ;
+    public final void rule__ExtRule__Group_0__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2351:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2352:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2352:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2353:1: '.'
+            {
+             before(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
+            match(input,28,FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4858); 
+             after(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_0__2__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2372:1: rule__ExtRule__Group_2__0 : rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1 ;
+    public final void rule__ExtRule__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2376:1: ( rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2377:2: rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__04895);
+            rule__ExtRule__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04898);
+            rule__ExtRule__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__0"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2384:1: rule__ExtRule__Group_2__0__Impl : ( '(' ) ;
+    public final void rule__ExtRule__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2388:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2389:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2389:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2390:1: '('
+            {
+             before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
+            match(input,17,FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4926); 
+             after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2403:1: rule__ExtRule__Group_2__1 : rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2 ;
+    public final void rule__ExtRule__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2407:1: ( rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2408:2: rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__14957);
+            rule__ExtRule__Group_2__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14960);
+            rule__ExtRule__Group_2__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__1"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2415:1: rule__ExtRule__Group_2__1__Impl : ( ( rule__ExtRule__RuleextAssignment_2_1 ) ) ;
+    public final void rule__ExtRule__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2419:1: ( ( ( rule__ExtRule__RuleextAssignment_2_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2420:1: ( ( rule__ExtRule__RuleextAssignment_2_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2420:1: ( ( rule__ExtRule__RuleextAssignment_2_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2421:1: ( rule__ExtRule__RuleextAssignment_2_1 )
+            {
+             before(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2422:1: ( rule__ExtRule__RuleextAssignment_2_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2422:2: rule__ExtRule__RuleextAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4987);
+            rule__ExtRule__RuleextAssignment_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2432:1: rule__ExtRule__Group_2__2 : rule__ExtRule__Group_2__2__Impl ;
+    public final void rule__ExtRule__Group_2__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2436:1: ( rule__ExtRule__Group_2__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2437:2: rule__ExtRule__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25017);
+            rule__ExtRule__Group_2__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__2"
+
+
+    // $ANTLR start "rule__ExtRule__Group_2__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2443:1: rule__ExtRule__Group_2__2__Impl : ( ')' ) ;
+    public final void rule__ExtRule__Group_2__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2447:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2448:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2448:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2449:1: ')'
+            {
+             before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
+            match(input,13,FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5045); 
+             after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__Group_2__2__Impl"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2468:1: rule__GlobalCombinator__Group__0 : rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1 ;
+    public final void rule__GlobalCombinator__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2472:1: ( rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2473:2: rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05082);
+            rule__GlobalCombinator__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05085);
+            rule__GlobalCombinator__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__0"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2480:1: rule__GlobalCombinator__Group__0__Impl : ( ( rule__GlobalCombinator__Group_0__0 ) ) ;
+    public final void rule__GlobalCombinator__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2484:1: ( ( ( rule__GlobalCombinator__Group_0__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2485:1: ( ( rule__GlobalCombinator__Group_0__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2485:1: ( ( rule__GlobalCombinator__Group_0__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2486:1: ( rule__GlobalCombinator__Group_0__0 )
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2487:1: ( rule__GlobalCombinator__Group_0__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2487:2: rule__GlobalCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5112);
+            rule__GlobalCombinator__Group_0__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__0__Impl"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2497:1: rule__GlobalCombinator__Group__1 : rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2 ;
+    public final void rule__GlobalCombinator__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2501:1: ( rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2502:2: rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15142);
+            rule__GlobalCombinator__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15145);
+            rule__GlobalCombinator__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__1"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2509:1: rule__GlobalCombinator__Group__1__Impl : ( ( rule__GlobalCombinator__LogicAssignment_1 ) ) ;
+    public final void rule__GlobalCombinator__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2513:1: ( ( ( rule__GlobalCombinator__LogicAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2514:1: ( ( rule__GlobalCombinator__LogicAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2514:1: ( ( rule__GlobalCombinator__LogicAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2515:1: ( rule__GlobalCombinator__LogicAssignment_1 )
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2516:1: ( rule__GlobalCombinator__LogicAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2516:2: rule__GlobalCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5172);
+            rule__GlobalCombinator__LogicAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__1__Impl"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2526:1: rule__GlobalCombinator__Group__2 : rule__GlobalCombinator__Group__2__Impl ;
+    public final void rule__GlobalCombinator__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2530:1: ( rule__GlobalCombinator__Group__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2531:2: rule__GlobalCombinator__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25202);
+            rule__GlobalCombinator__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__2"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2537:1: rule__GlobalCombinator__Group__2__Impl : ( ( ';' )? ) ;
+    public final void rule__GlobalCombinator__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2541:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2542:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2542:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2543:1: ( ';' )?
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2544:1: ( ';' )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
+
+            if ( (LA30_0==23) ) {
+                alt30=1;
+            }
+            switch (alt30) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2545:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5231); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group__2__Impl"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group_0__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2562:1: rule__GlobalCombinator__Group_0__0 : rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1 ;
+    public final void rule__GlobalCombinator__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2566:1: ( rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2567:2: rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05270);
+            rule__GlobalCombinator__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05273);
+            rule__GlobalCombinator__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group_0__0"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group_0__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2574:1: rule__GlobalCombinator__Group_0__0__Impl : ( 'global' ) ;
+    public final void rule__GlobalCombinator__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2578:1: ( ( 'global' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2579:1: ( 'global' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2579:1: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2580:1: 'global'
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
+            match(input,30,FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5301); 
+             after(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group_0__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2593:1: rule__GlobalCombinator__Group_0__1 : rule__GlobalCombinator__Group_0__1__Impl ;
+    public final void rule__GlobalCombinator__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2597:1: ( rule__GlobalCombinator__Group_0__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2598:2: rule__GlobalCombinator__Group_0__1__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15332);
+            rule__GlobalCombinator__Group_0__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group_0__1"
+
+
+    // $ANTLR start "rule__GlobalCombinator__Group_0__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2604:1: rule__GlobalCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
+    public final void rule__GlobalCombinator__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2608:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2609:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2609:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2610:1: 'combinator:'
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
+            match(input,31,FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5360); 
+             after(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2627:1: rule__RuleCombinator__Group__0 : rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1 ;
+    public final void rule__RuleCombinator__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2631:1: ( rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2632:2: rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05395);
+            rule__RuleCombinator__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05398);
+            rule__RuleCombinator__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__0"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2639:1: rule__RuleCombinator__Group__0__Impl : ( ( rule__RuleCombinator__Group_0__0 ) ) ;
+    public final void rule__RuleCombinator__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2643:1: ( ( ( rule__RuleCombinator__Group_0__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2644:1: ( ( rule__RuleCombinator__Group_0__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2644:1: ( ( rule__RuleCombinator__Group_0__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2645:1: ( rule__RuleCombinator__Group_0__0 )
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getGroup_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2646:1: ( rule__RuleCombinator__Group_0__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2646:2: rule__RuleCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5425);
+            rule__RuleCombinator__Group_0__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getGroup_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__0__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2656:1: rule__RuleCombinator__Group__1 : rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2 ;
+    public final void rule__RuleCombinator__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2660:1: ( rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2661:2: rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15455);
+            rule__RuleCombinator__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15458);
+            rule__RuleCombinator__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__1"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2668:1: rule__RuleCombinator__Group__1__Impl : ( ( rule__RuleCombinator__LogicAssignment_1 ) ) ;
+    public final void rule__RuleCombinator__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2672:1: ( ( ( rule__RuleCombinator__LogicAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2673:1: ( ( rule__RuleCombinator__LogicAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2673:1: ( ( rule__RuleCombinator__LogicAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2674:1: ( rule__RuleCombinator__LogicAssignment_1 )
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2675:1: ( rule__RuleCombinator__LogicAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2675:2: rule__RuleCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5485);
+            rule__RuleCombinator__LogicAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__1__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2685:1: rule__RuleCombinator__Group__2 : rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3 ;
+    public final void rule__RuleCombinator__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2689:1: ( rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2690:2: rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25515);
+            rule__RuleCombinator__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25518);
+            rule__RuleCombinator__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__2"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2697:1: rule__RuleCombinator__Group__2__Impl : ( ( rule__RuleCombinator__Group_2__0 )* ) ;
+    public final void rule__RuleCombinator__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2701:1: ( ( ( rule__RuleCombinator__Group_2__0 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2702:1: ( ( rule__RuleCombinator__Group_2__0 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2702:1: ( ( rule__RuleCombinator__Group_2__0 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2703:1: ( rule__RuleCombinator__Group_2__0 )*
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getGroup_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2704:1: ( rule__RuleCombinator__Group_2__0 )*
+            loop31:
+            do {
+                int alt31=2;
+                int LA31_0 = input.LA(1);
+
+                if ( (LA31_0==17) ) {
+                    alt31=1;
+                }
+
+
+                switch (alt31) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2704:2: rule__RuleCombinator__Group_2__0
+            	    {
+            	    pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5545);
+            	    rule__RuleCombinator__Group_2__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop31;
+                }
+            } while (true);
+
+             after(grammarAccess.getRuleCombinatorAccess().getGroup_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__2__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2714:1: rule__RuleCombinator__Group__3 : rule__RuleCombinator__Group__3__Impl ;
+    public final void rule__RuleCombinator__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2718:1: ( rule__RuleCombinator__Group__3__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2719:2: rule__RuleCombinator__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35576);
+            rule__RuleCombinator__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__3"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2725:1: rule__RuleCombinator__Group__3__Impl : ( ( ';' )? ) ;
+    public final void rule__RuleCombinator__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2729:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2730:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2730:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2731:1: ( ';' )?
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2732:1: ( ';' )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==23) ) {
+                alt32=1;
+            }
+            switch (alt32) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2733:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5605); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group__3__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2752:1: rule__RuleCombinator__Group_0__0 : rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1 ;
+    public final void rule__RuleCombinator__Group_0__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2756:1: ( rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2757:2: rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05646);
+            rule__RuleCombinator__Group_0__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05649);
+            rule__RuleCombinator__Group_0__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__0"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2764:1: rule__RuleCombinator__Group_0__0__Impl : ( 'rule' ) ;
+    public final void rule__RuleCombinator__Group_0__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2768:1: ( ( 'rule' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2769:1: ( 'rule' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2769:1: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2770:1: 'rule'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
+            match(input,32,FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5677); 
+             after(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__0__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2783:1: rule__RuleCombinator__Group_0__1 : rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2 ;
+    public final void rule__RuleCombinator__Group_0__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2787:1: ( rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2788:2: rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15708);
+            rule__RuleCombinator__Group_0__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15711);
+            rule__RuleCombinator__Group_0__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__1"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2795:1: rule__RuleCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
+    public final void rule__RuleCombinator__Group_0__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2799:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2800:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2800:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2801:1: 'combinator:'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
+            match(input,31,FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5739); 
+             after(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__1__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2814:1: rule__RuleCombinator__Group_0__2 : rule__RuleCombinator__Group_0__2__Impl ;
+    public final void rule__RuleCombinator__Group_0__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2818:1: ( rule__RuleCombinator__Group_0__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2819:2: rule__RuleCombinator__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25770);
+            rule__RuleCombinator__Group_0__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__2"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_0__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2825:1: rule__RuleCombinator__Group_0__2__Impl : ( ( rule__RuleCombinator__NameAssignment_0_2 ) ) ;
+    public final void rule__RuleCombinator__Group_0__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2829:1: ( ( ( rule__RuleCombinator__NameAssignment_0_2 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2830:1: ( ( rule__RuleCombinator__NameAssignment_0_2 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2830:1: ( ( rule__RuleCombinator__NameAssignment_0_2 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2831:1: ( rule__RuleCombinator__NameAssignment_0_2 )
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2832:1: ( rule__RuleCombinator__NameAssignment_0_2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2832:2: rule__RuleCombinator__NameAssignment_0_2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5797);
+            rule__RuleCombinator__NameAssignment_0_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_0__2__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2848:1: rule__RuleCombinator__Group_2__0 : rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1 ;
+    public final void rule__RuleCombinator__Group_2__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2852:1: ( rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2853:2: rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05833);
+            rule__RuleCombinator__Group_2__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05836);
+            rule__RuleCombinator__Group_2__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__0"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2860:1: rule__RuleCombinator__Group_2__0__Impl : ( '(' ) ;
+    public final void rule__RuleCombinator__Group_2__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2864:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2865:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2865:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2866:1: '('
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
+            match(input,17,FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5864); 
+             after(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__0__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2879:1: rule__RuleCombinator__Group_2__1 : rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2 ;
+    public final void rule__RuleCombinator__Group_2__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2883:1: ( rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2884:2: rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__15895);
+            rule__RuleCombinator__Group_2__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15898);
+            rule__RuleCombinator__Group_2__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__1"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2891:1: rule__RuleCombinator__Group_2__1__Impl : ( ( rule__RuleCombinator__LABELAssignment_2_1 ) ) ;
+    public final void rule__RuleCombinator__Group_2__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2895:1: ( ( ( rule__RuleCombinator__LABELAssignment_2_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2896:1: ( ( rule__RuleCombinator__LABELAssignment_2_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2896:1: ( ( rule__RuleCombinator__LABELAssignment_2_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2897:1: ( rule__RuleCombinator__LABELAssignment_2_1 )
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2898:1: ( rule__RuleCombinator__LABELAssignment_2_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2898:2: rule__RuleCombinator__LABELAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5925);
+            rule__RuleCombinator__LABELAssignment_2_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__1__Impl"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2908:1: rule__RuleCombinator__Group_2__2 : rule__RuleCombinator__Group_2__2__Impl ;
+    public final void rule__RuleCombinator__Group_2__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2912:1: ( rule__RuleCombinator__Group_2__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2913:2: rule__RuleCombinator__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25955);
+            rule__RuleCombinator__Group_2__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__2"
+
+
+    // $ANTLR start "rule__RuleCombinator__Group_2__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2919:1: rule__RuleCombinator__Group_2__2__Impl : ( ')' ) ;
+    public final void rule__RuleCombinator__Group_2__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2923:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2924:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2924:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2925:1: ')'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
+            match(input,13,FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5983); 
+             after(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__Group_2__2__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2944:1: rule__HookCombinator__Group__0 : rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1 ;
+    public final void rule__HookCombinator__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2948:1: ( rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2949:2: rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06020);
+            rule__HookCombinator__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06023);
+            rule__HookCombinator__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__0"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2956:1: rule__HookCombinator__Group__0__Impl : ( 'hook' ) ;
+    public final void rule__HookCombinator__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2960:1: ( ( 'hook' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2961:1: ( 'hook' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2961:1: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2962:1: 'hook'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
+            match(input,33,FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6051); 
+             after(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__0__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2975:1: rule__HookCombinator__Group__1 : rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2 ;
+    public final void rule__HookCombinator__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2979:1: ( rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2980:2: rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16082);
+            rule__HookCombinator__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16085);
+            rule__HookCombinator__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__1"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2987:1: rule__HookCombinator__Group__1__Impl : ( 'combinator:' ) ;
+    public final void rule__HookCombinator__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2991:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2992:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2992:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2993:1: 'combinator:'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
+            match(input,31,FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6113); 
+             after(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__1__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3006:1: rule__HookCombinator__Group__2 : rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3 ;
+    public final void rule__HookCombinator__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3010:1: ( rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3011:2: rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26144);
+            rule__HookCombinator__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26147);
+            rule__HookCombinator__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__2"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3018:1: rule__HookCombinator__Group__2__Impl : ( ( rule__HookCombinator__NameAssignment_2 ) ) ;
+    public final void rule__HookCombinator__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3022:1: ( ( ( rule__HookCombinator__NameAssignment_2 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3023:1: ( ( rule__HookCombinator__NameAssignment_2 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3023:1: ( ( rule__HookCombinator__NameAssignment_2 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3024:1: ( rule__HookCombinator__NameAssignment_2 )
+            {
+             before(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3025:1: ( rule__HookCombinator__NameAssignment_2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3025:2: rule__HookCombinator__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6174);
+            rule__HookCombinator__NameAssignment_2();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__2__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3035:1: rule__HookCombinator__Group__3 : rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4 ;
+    public final void rule__HookCombinator__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3039:1: ( rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3040:2: rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36204);
+            rule__HookCombinator__Group__3__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36207);
+            rule__HookCombinator__Group__4();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__3"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3047:1: rule__HookCombinator__Group__3__Impl : ( '(' ) ;
+    public final void rule__HookCombinator__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3051:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3052:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3052:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3053:1: '('
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6235); 
+             after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__3__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3066:1: rule__HookCombinator__Group__4 : rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5 ;
+    public final void rule__HookCombinator__Group__4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3070:1: ( rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3071:2: rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46266);
+            rule__HookCombinator__Group__4__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46269);
+            rule__HookCombinator__Group__5();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__4"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__4__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3078:1: rule__HookCombinator__Group__4__Impl : ( ( rule__HookCombinator__RuleextAssignment_4 ) ) ;
+    public final void rule__HookCombinator__Group__4__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3082:1: ( ( ( rule__HookCombinator__RuleextAssignment_4 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3083:1: ( ( rule__HookCombinator__RuleextAssignment_4 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3083:1: ( ( rule__HookCombinator__RuleextAssignment_4 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3084:1: ( rule__HookCombinator__RuleextAssignment_4 )
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3085:1: ( rule__HookCombinator__RuleextAssignment_4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3085:2: rule__HookCombinator__RuleextAssignment_4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6296);
+            rule__HookCombinator__RuleextAssignment_4();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__4__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__5"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3095:1: rule__HookCombinator__Group__5 : rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6 ;
+    public final void rule__HookCombinator__Group__5() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3099:1: ( rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3100:2: rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56326);
+            rule__HookCombinator__Group__5__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56329);
+            rule__HookCombinator__Group__6();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__5"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__5__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3107:1: rule__HookCombinator__Group__5__Impl : ( ')' ) ;
+    public final void rule__HookCombinator__Group__5__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3111:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3112:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3112:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3113:1: ')'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6357); 
+             after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__5__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__6"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3126:1: rule__HookCombinator__Group__6 : rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7 ;
+    public final void rule__HookCombinator__Group__6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3130:1: ( rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3131:2: rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66388);
+            rule__HookCombinator__Group__6__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66391);
+            rule__HookCombinator__Group__7();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__6"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__6__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3138:1: rule__HookCombinator__Group__6__Impl : ( ( rule__HookCombinator__LogicAssignment_6 )? ) ;
+    public final void rule__HookCombinator__Group__6__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3142:1: ( ( ( rule__HookCombinator__LogicAssignment_6 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3143:1: ( ( rule__HookCombinator__LogicAssignment_6 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3143:1: ( ( rule__HookCombinator__LogicAssignment_6 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3144:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3145:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            int alt33=2;
+            int LA33_0 = input.LA(1);
+
+            if ( (LA33_0==RULE_LOGIC) ) {
+                alt33=1;
+            }
+            switch (alt33) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3145:2: rule__HookCombinator__LogicAssignment_6
+                    {
+                    pushFollow(FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6418);
+                    rule__HookCombinator__LogicAssignment_6();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__6__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__7"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3155:1: rule__HookCombinator__Group__7 : rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8 ;
+    public final void rule__HookCombinator__Group__7() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3159:1: ( rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3160:2: rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76449);
+            rule__HookCombinator__Group__7__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76452);
+            rule__HookCombinator__Group__8();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__7"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__7__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3167:1: rule__HookCombinator__Group__7__Impl : ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) ) ;
+    public final void rule__HookCombinator__Group__7__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3171:1: ( ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3172:1: ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3172:1: ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3173:1: ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3173:1: ( ( rule__HookCombinator__Group_7__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3174:1: ( rule__HookCombinator__Group_7__0 )
+            {
+             before(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3175:1: ( rule__HookCombinator__Group_7__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3175:2: rule__HookCombinator__Group_7__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6481);
+            rule__HookCombinator__Group_7__0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3178:1: ( ( rule__HookCombinator__Group_7__0 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3179:1: ( rule__HookCombinator__Group_7__0 )*
+            {
+             before(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3180:1: ( rule__HookCombinator__Group_7__0 )*
+            loop34:
+            do {
+                int alt34=2;
+                int LA34_0 = input.LA(1);
+
+                if ( (LA34_0==17) ) {
+                    alt34=1;
+                }
+
+
+                switch (alt34) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3180:2: rule__HookCombinator__Group_7__0
+            	    {
+            	    pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6493);
+            	    rule__HookCombinator__Group_7__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop34;
+                }
+            } while (true);
+
+             after(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__7__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__8"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3191:1: rule__HookCombinator__Group__8 : rule__HookCombinator__Group__8__Impl ;
+    public final void rule__HookCombinator__Group__8() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3195:1: ( rule__HookCombinator__Group__8__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3196:2: rule__HookCombinator__Group__8__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86526);
+            rule__HookCombinator__Group__8__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__8"
+
+
+    // $ANTLR start "rule__HookCombinator__Group__8__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3202:1: rule__HookCombinator__Group__8__Impl : ( ( ';' )? ) ;
+    public final void rule__HookCombinator__Group__8__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3206:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3207:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3207:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3208:1: ( ';' )?
+            {
+             before(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3209:1: ( ';' )?
+            int alt35=2;
+            int LA35_0 = input.LA(1);
+
+            if ( (LA35_0==23) ) {
+                alt35=1;
+            }
+            switch (alt35) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3210:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6555); 
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group__8__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3239:1: rule__HookCombinator__Group_7__0 : rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1 ;
+    public final void rule__HookCombinator__Group_7__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3243:1: ( rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3244:2: rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06606);
+            rule__HookCombinator__Group_7__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06609);
+            rule__HookCombinator__Group_7__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__0"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3251:1: rule__HookCombinator__Group_7__0__Impl : ( '(' ) ;
+    public final void rule__HookCombinator__Group_7__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3255:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3256:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3256:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3257:1: '('
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6637); 
+             after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__0__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3270:1: rule__HookCombinator__Group_7__1 : rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2 ;
+    public final void rule__HookCombinator__Group_7__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3274:1: ( rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3275:2: rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16668);
+            rule__HookCombinator__Group_7__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16671);
+            rule__HookCombinator__Group_7__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__1"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3282:1: rule__HookCombinator__Group_7__1__Impl : ( ( rule__HookCombinator__LABELAssignment_7_1 ) ) ;
+    public final void rule__HookCombinator__Group_7__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3286:1: ( ( ( rule__HookCombinator__LABELAssignment_7_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3287:1: ( ( rule__HookCombinator__LABELAssignment_7_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3287:1: ( ( rule__HookCombinator__LABELAssignment_7_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3288:1: ( rule__HookCombinator__LABELAssignment_7_1 )
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3289:1: ( rule__HookCombinator__LABELAssignment_7_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3289:2: rule__HookCombinator__LABELAssignment_7_1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6698);
+            rule__HookCombinator__LABELAssignment_7_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__1__Impl"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3299:1: rule__HookCombinator__Group_7__2 : rule__HookCombinator__Group_7__2__Impl ;
+    public final void rule__HookCombinator__Group_7__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3303:1: ( rule__HookCombinator__Group_7__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3304:2: rule__HookCombinator__Group_7__2__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26728);
+            rule__HookCombinator__Group_7__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__2"
+
+
+    // $ANTLR start "rule__HookCombinator__Group_7__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3310:1: rule__HookCombinator__Group_7__2__Impl : ( ')' ) ;
+    public final void rule__HookCombinator__Group_7__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3314:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3315:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3315:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3316:1: ')'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6756); 
+             after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__Group_7__2__Impl"
+
+
+    // $ANTLR start "rule__DefinitionList__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3335:1: rule__DefinitionList__Group__0 : rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1 ;
+    public final void rule__DefinitionList__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3339:1: ( rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3340:2: rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06793);
+            rule__DefinitionList__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06796);
+            rule__DefinitionList__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group__0"
+
+
+    // $ANTLR start "rule__DefinitionList__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3347:1: rule__DefinitionList__Group__0__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) ) ;
+    public final void rule__DefinitionList__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3351:1: ( ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3352:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3352:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3353:1: ( rule__DefinitionList__SingleDefinitionAssignment_0 )
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3354:1: ( rule__DefinitionList__SingleDefinitionAssignment_0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3354:2: rule__DefinitionList__SingleDefinitionAssignment_0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6823);
+            rule__DefinitionList__SingleDefinitionAssignment_0();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group__0__Impl"
+
+
+    // $ANTLR start "rule__DefinitionList__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3364:1: rule__DefinitionList__Group__1 : rule__DefinitionList__Group__1__Impl ;
+    public final void rule__DefinitionList__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3368:1: ( rule__DefinitionList__Group__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3369:2: rule__DefinitionList__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16853);
+            rule__DefinitionList__Group__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group__1"
+
+
+    // $ANTLR start "rule__DefinitionList__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3375:1: rule__DefinitionList__Group__1__Impl : ( ( rule__DefinitionList__Group_1__0 )* ) ;
+    public final void rule__DefinitionList__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3379:1: ( ( ( rule__DefinitionList__Group_1__0 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3380:1: ( ( rule__DefinitionList__Group_1__0 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3380:1: ( ( rule__DefinitionList__Group_1__0 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3381:1: ( rule__DefinitionList__Group_1__0 )*
+            {
+             before(grammarAccess.getDefinitionListAccess().getGroup_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3382:1: ( rule__DefinitionList__Group_1__0 )*
+            loop36:
+            do {
+                int alt36=2;
+                int LA36_0 = input.LA(1);
+
+                if ( (LA36_0==16) ) {
+                    alt36=1;
+                }
+
+
+                switch (alt36) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3382:2: rule__DefinitionList__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6880);
+            	    rule__DefinitionList__Group_1__0();
+
+            	    state._fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop36;
+                }
+            } while (true);
+
+             after(grammarAccess.getDefinitionListAccess().getGroup_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group__1__Impl"
+
+
+    // $ANTLR start "rule__DefinitionList__Group_1__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3396:1: rule__DefinitionList__Group_1__0 : rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1 ;
+    public final void rule__DefinitionList__Group_1__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3400:1: ( rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3401:2: rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__06915);
+            rule__DefinitionList__Group_1__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06918);
+            rule__DefinitionList__Group_1__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group_1__0"
+
+
+    // $ANTLR start "rule__DefinitionList__Group_1__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3408:1: rule__DefinitionList__Group_1__0__Impl : ( '|' ) ;
+    public final void rule__DefinitionList__Group_1__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3412:1: ( ( '|' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3413:1: ( '|' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3413:1: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3414:1: '|'
+            {
+             before(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
+            match(input,16,FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6946); 
+             after(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group_1__0__Impl"
+
+
+    // $ANTLR start "rule__DefinitionList__Group_1__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3427:1: rule__DefinitionList__Group_1__1 : rule__DefinitionList__Group_1__1__Impl ;
+    public final void rule__DefinitionList__Group_1__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3431:1: ( rule__DefinitionList__Group_1__1__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3432:2: rule__DefinitionList__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16977);
+            rule__DefinitionList__Group_1__1__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group_1__1"
+
+
+    // $ANTLR start "rule__DefinitionList__Group_1__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3438:1: rule__DefinitionList__Group_1__1__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) ) ;
+    public final void rule__DefinitionList__Group_1__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3442:1: ( ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3443:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3443:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3444:1: ( rule__DefinitionList__SingleDefinitionAssignment_1_1 )
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3445:1: ( rule__DefinitionList__SingleDefinitionAssignment_1_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3445:2: rule__DefinitionList__SingleDefinitionAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7004);
+            rule__DefinitionList__SingleDefinitionAssignment_1_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__Group_1__1__Impl"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3459:1: rule__GroupedSequence__Group__0 : rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1 ;
+    public final void rule__GroupedSequence__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3463:1: ( rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3464:2: rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07038);
+            rule__GroupedSequence__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07041);
+            rule__GroupedSequence__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__0"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3471:1: rule__GroupedSequence__Group__0__Impl : ( '(' ) ;
+    public final void rule__GroupedSequence__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3475:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3476:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3476:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3477:1: '('
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
+            match(input,17,FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7069); 
+             after(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__0__Impl"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3490:1: rule__GroupedSequence__Group__1 : rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2 ;
+    public final void rule__GroupedSequence__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3494:1: ( rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3495:2: rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17100);
+            rule__GroupedSequence__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17103);
+            rule__GroupedSequence__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__1"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3502:1: rule__GroupedSequence__Group__1__Impl : ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) ) ;
+    public final void rule__GroupedSequence__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3506:1: ( ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3507:1: ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3507:1: ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3508:1: ( rule__GroupedSequence__DefinitionListAssignment_1 )
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3509:1: ( rule__GroupedSequence__DefinitionListAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3509:2: rule__GroupedSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7130);
+            rule__GroupedSequence__DefinitionListAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__1__Impl"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3519:1: rule__GroupedSequence__Group__2 : rule__GroupedSequence__Group__2__Impl ;
+    public final void rule__GroupedSequence__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3523:1: ( rule__GroupedSequence__Group__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3524:2: rule__GroupedSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27160);
+            rule__GroupedSequence__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__2"
+
+
+    // $ANTLR start "rule__GroupedSequence__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3530:1: rule__GroupedSequence__Group__2__Impl : ( ')' ) ;
+    public final void rule__GroupedSequence__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3534:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3535:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3535:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3536:1: ')'
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
+            match(input,13,FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7188); 
+             after(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__Group__2__Impl"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3555:1: rule__OptionalSequence__Group__0 : rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1 ;
+    public final void rule__OptionalSequence__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3559:1: ( rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3560:2: rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07225);
+            rule__OptionalSequence__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07228);
+            rule__OptionalSequence__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__0"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3567:1: rule__OptionalSequence__Group__0__Impl : ( '[' ) ;
+    public final void rule__OptionalSequence__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3571:1: ( ( '[' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3572:1: ( '[' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3572:1: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3573:1: '['
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
+            match(input,18,FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7256); 
+             after(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__0__Impl"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3586:1: rule__OptionalSequence__Group__1 : rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2 ;
+    public final void rule__OptionalSequence__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3590:1: ( rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3591:2: rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17287);
+            rule__OptionalSequence__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17290);
+            rule__OptionalSequence__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__1"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3598:1: rule__OptionalSequence__Group__1__Impl : ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) ) ;
+    public final void rule__OptionalSequence__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3602:1: ( ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3603:1: ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3603:1: ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3604:1: ( rule__OptionalSequence__DefinitionListAssignment_1 )
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3605:1: ( rule__OptionalSequence__DefinitionListAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3605:2: rule__OptionalSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7317);
+            rule__OptionalSequence__DefinitionListAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__1__Impl"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3615:1: rule__OptionalSequence__Group__2 : rule__OptionalSequence__Group__2__Impl ;
+    public final void rule__OptionalSequence__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3619:1: ( rule__OptionalSequence__Group__2__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3620:2: rule__OptionalSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27347);
+            rule__OptionalSequence__Group__2__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__2"
+
+
+    // $ANTLR start "rule__OptionalSequence__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3626:1: rule__OptionalSequence__Group__2__Impl : ( ']' ) ;
+    public final void rule__OptionalSequence__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3630:1: ( ( ']' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3631:1: ( ']' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3631:1: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3632:1: ']'
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
+            match(input,14,FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7375); 
+             after(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__Group__2__Impl"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3651:1: rule__RepeatedSequence__Group__0 : rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1 ;
+    public final void rule__RepeatedSequence__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3655:1: ( rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3656:2: rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07412);
+            rule__RepeatedSequence__Group__0__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07415);
+            rule__RepeatedSequence__Group__1();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__0"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3663:1: rule__RepeatedSequence__Group__0__Impl : ( '{' ) ;
+    public final void rule__RepeatedSequence__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3667:1: ( ( '{' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3668:1: ( '{' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3668:1: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3669:1: '{'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
+            match(input,19,FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7443); 
+             after(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__0__Impl"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3682:1: rule__RepeatedSequence__Group__1 : rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2 ;
+    public final void rule__RepeatedSequence__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3686:1: ( rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3687:2: rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17474);
+            rule__RepeatedSequence__Group__1__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17477);
+            rule__RepeatedSequence__Group__2();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__1"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3694:1: rule__RepeatedSequence__Group__1__Impl : ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) ) ;
+    public final void rule__RepeatedSequence__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3698:1: ( ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3699:1: ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3699:1: ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3700:1: ( rule__RepeatedSequence__DefinitionsAssignment_1 )
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3701:1: ( rule__RepeatedSequence__DefinitionsAssignment_1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3701:2: rule__RepeatedSequence__DefinitionsAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7504);
+            rule__RepeatedSequence__DefinitionsAssignment_1();
+
+            state._fsp--;
+
+
+            }
+
+             after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__1__Impl"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3711:1: rule__RepeatedSequence__Group__2 : rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3 ;
+    public final void rule__RepeatedSequence__Group__2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3715:1: ( rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3716:2: rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27534);
+            rule__RepeatedSequence__Group__2__Impl();
+
+            state._fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27537);
+            rule__RepeatedSequence__Group__3();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__2"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3723:1: rule__RepeatedSequence__Group__2__Impl : ( '}' ) ;
+    public final void rule__RepeatedSequence__Group__2__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3727:1: ( ( '}' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3728:1: ( '}' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3728:1: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3729:1: '}'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
+            match(input,15,FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7565); 
+             after(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__2__Impl"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3742:1: rule__RepeatedSequence__Group__3 : rule__RepeatedSequence__Group__3__Impl ;
+    public final void rule__RepeatedSequence__Group__3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3746:1: ( rule__RepeatedSequence__Group__3__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3747:2: rule__RepeatedSequence__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37596);
+            rule__RepeatedSequence__Group__3__Impl();
+
+            state._fsp--;
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__3"
+
+
+    // $ANTLR start "rule__RepeatedSequence__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3753:1: rule__RepeatedSequence__Group__3__Impl : ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? ) ;
+    public final void rule__RepeatedSequence__Group__3__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3757:1: ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3758:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3758:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3759:1: ( rule__RepeatedSequence__MorethanonceAssignment_3 )?
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3760:1: ( rule__RepeatedSequence__MorethanonceAssignment_3 )?
+            int alt37=2;
+            int LA37_0 = input.LA(1);
+
+            if ( (LA37_0==21) ) {
+                alt37=1;
+            }
+            switch (alt37) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3760:2: rule__RepeatedSequence__MorethanonceAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7623);
+                    rule__RepeatedSequence__MorethanonceAssignment_3();
+
+                    state._fsp--;
+
+
+                    }
+                    break;
+
+            }
+
+             after(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Group__3__Impl"
+
+
+    // $ANTLR start "rule__EtsiBnf__NameAssignment_0_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3779:1: rule__EtsiBnf__NameAssignment_0_1 : ( RULE_ID ) ;
+    public final void rule__EtsiBnf__NameAssignment_0_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3783:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3784:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3784:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3785:1: RULE_ID
+            {
+             before(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17667); 
+             after(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__NameAssignment_0_1"
+
+
+    // $ANTLR start "rule__EtsiBnf__TypeAssignment_0_2_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3794:1: rule__EtsiBnf__TypeAssignment_0_2_0 : ( ( '/bnf' ) ) ;
+    public final void rule__EtsiBnf__TypeAssignment_0_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3798:1: ( ( ( '/bnf' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3799:1: ( ( '/bnf' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3799:1: ( ( '/bnf' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3800:1: ( '/bnf' )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3801:1: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3802:1: '/bnf'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            match(input,34,FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07703); 
+             after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__TypeAssignment_0_2_0"
+
+
+    // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_0_2_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3817:1: rule__EtsiBnf__ImportSectionAssignment_0_2_2 : ( ruleImportSection ) ;
+    public final void rule__EtsiBnf__ImportSectionAssignment_0_2_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3821:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3822:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3822:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3823:1: ruleImportSection
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_27742);
+            ruleImportSection();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__ImportSectionAssignment_0_2_2"
+
+
+    // $ANTLR start "rule__EtsiBnf__BnfEntryAssignment_0_2_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3832:1: rule__EtsiBnf__BnfEntryAssignment_0_2_3 : ( ruleBnfEntry ) ;
+    public final void rule__EtsiBnf__BnfEntryAssignment_0_2_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3836:1: ( ( ruleBnfEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3837:1: ( ruleBnfEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3837:1: ( ruleBnfEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3838:1: ruleBnfEntry
+            {
+             before(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+            pushFollow(FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_37773);
+            ruleBnfEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__BnfEntryAssignment_0_2_3"
+
+
+    // $ANTLR start "rule__EtsiBnf__TypeAssignment_1_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3847:1: rule__EtsiBnf__TypeAssignment_1_0 : ( ( '/delta' ) ) ;
+    public final void rule__EtsiBnf__TypeAssignment_1_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3851:1: ( ( ( '/delta' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3852:1: ( ( '/delta' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3852:1: ( ( '/delta' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3853:1: ( '/delta' )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3854:1: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3855:1: '/delta'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            match(input,35,FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07809); 
+             after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__TypeAssignment_1_0"
+
+
+    // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_1_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3870:1: rule__EtsiBnf__ImportSectionAssignment_1_2 : ( ruleImportSection ) ;
+    public final void rule__EtsiBnf__ImportSectionAssignment_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3874:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3875:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3875:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3876:1: ruleImportSection
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_27848);
+            ruleImportSection();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__ImportSectionAssignment_1_2"
+
+
+    // $ANTLR start "rule__EtsiBnf__DeltaEntryAssignment_1_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3885:1: rule__EtsiBnf__DeltaEntryAssignment_1_3 : ( ruleDeltaEntry ) ;
+    public final void rule__EtsiBnf__DeltaEntryAssignment_1_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3889:1: ( ( ruleDeltaEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3890:1: ( ruleDeltaEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3890:1: ( ruleDeltaEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3891:1: ruleDeltaEntry
+            {
+             before(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+            pushFollow(FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_37879);
+            ruleDeltaEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__DeltaEntryAssignment_1_3"
+
+
+    // $ANTLR start "rule__EtsiBnf__TypeAssignment_2_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3900:1: rule__EtsiBnf__TypeAssignment_2_0 : ( ( '/merge' ) ) ;
+    public final void rule__EtsiBnf__TypeAssignment_2_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3904:1: ( ( ( '/merge' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3905:1: ( ( '/merge' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3905:1: ( ( '/merge' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3906:1: ( '/merge' )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3907:1: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3908:1: '/merge'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            match(input,36,FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07915); 
+             after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__TypeAssignment_2_0"
+
+
+    // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_2_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3923:1: rule__EtsiBnf__ImportSectionAssignment_2_2 : ( ruleImportSection ) ;
+    public final void rule__EtsiBnf__ImportSectionAssignment_2_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3927:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3928:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3928:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3929:1: ruleImportSection
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_27954);
+            ruleImportSection();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__ImportSectionAssignment_2_2"
+
+
+    // $ANTLR start "rule__EtsiBnf__MergeEntryAssignment_2_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3938:1: rule__EtsiBnf__MergeEntryAssignment_2_3 : ( ruleMergeEntry ) ;
+    public final void rule__EtsiBnf__MergeEntryAssignment_2_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3942:1: ( ( ruleMergeEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3943:1: ( ruleMergeEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3943:1: ( ruleMergeEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3944:1: ruleMergeEntry
+            {
+             before(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+            pushFollow(FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_37985);
+            ruleMergeEntry();
+
+            state._fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__EtsiBnf__MergeEntryAssignment_2_3"
+
+
+    // $ANTLR start "rule__ImportSection__ImportsAssignment"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3953:1: rule__ImportSection__ImportsAssignment : ( ruleImport ) ;
+    public final void rule__ImportSection__ImportsAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3957:1: ( ( ruleImport ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3958:1: ( ruleImport )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3958:1: ( ruleImport )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3959:1: ruleImport
+            {
+             before(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8016);
+            ruleImport();
+
+            state._fsp--;
+
+             after(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ImportSection__ImportsAssignment"
+
+
+    // $ANTLR start "rule__BnfEntry__SectionheaderAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3968:1: rule__BnfEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
+    public final void rule__BnfEntry__SectionheaderAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3972:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3973:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3973:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3974:1: ruleSectionHeading
+            {
+             before(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08047);
+            ruleSectionHeading();
+
+            state._fsp--;
+
+             after(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BnfEntry__SectionheaderAssignment_0"
+
+
+    // $ANTLR start "rule__BnfEntry__RuleAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3983:1: rule__BnfEntry__RuleAssignment_1 : ( ruleRule ) ;
+    public final void rule__BnfEntry__RuleAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3987:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3988:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3988:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3989:1: ruleRule
+            {
+             before(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18078);
+            ruleRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__BnfEntry__RuleAssignment_1"
+
+
+    // $ANTLR start "rule__DeltaEntry__RuleAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3998:1: rule__DeltaEntry__RuleAssignment_0 : ( ruleRule ) ;
+    public final void rule__DeltaEntry__RuleAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4002:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4003:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4003:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4004:1: ruleRule
+            {
+             before(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08109);
+            ruleRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DeltaEntry__RuleAssignment_0"
+
+
+    // $ANTLR start "rule__DeltaEntry__SectionheaderAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4013:1: rule__DeltaEntry__SectionheaderAssignment_1 : ( ruleSectionHeading ) ;
+    public final void rule__DeltaEntry__SectionheaderAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4017:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4018:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4018:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4019:1: ruleSectionHeading
+            {
+             before(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18140);
+            ruleSectionHeading();
+
+            state._fsp--;
+
+             after(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DeltaEntry__SectionheaderAssignment_1"
+
+
+    // $ANTLR start "rule__DeltaEntry__ExtRuleAssignment_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4028:1: rule__DeltaEntry__ExtRuleAssignment_2 : ( ruleExtRule ) ;
+    public final void rule__DeltaEntry__ExtRuleAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4032:1: ( ( ruleExtRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4033:1: ( ruleExtRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4033:1: ( ruleExtRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4034:1: ruleExtRule
+            {
+             before(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28171);
+            ruleExtRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DeltaEntry__ExtRuleAssignment_2"
+
+
+    // $ANTLR start "rule__MergeEntry__SectionheaderAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4043:1: rule__MergeEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
+    public final void rule__MergeEntry__SectionheaderAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4047:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4048:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4048:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4049:1: ruleSectionHeading
+            {
+             before(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08202);
+            ruleSectionHeading();
+
+            state._fsp--;
+
+             after(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MergeEntry__SectionheaderAssignment_0"
+
+
+    // $ANTLR start "rule__MergeEntry__MergeRuleAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4058:1: rule__MergeEntry__MergeRuleAssignment_1 : ( ruleMergeRule ) ;
+    public final void rule__MergeEntry__MergeRuleAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4062:1: ( ( ruleMergeRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4063:1: ( ruleMergeRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4063:1: ( ruleMergeRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4064:1: ruleMergeRule
+            {
+             before(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18233);
+            ruleMergeRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__MergeEntry__MergeRuleAssignment_1"
+
+
+    // $ANTLR start "rule__SectionHeading__SectionHeaderAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4073:1: rule__SectionHeading__SectionHeaderAssignment_1 : ( RULE_SECTIONHEADER ) ;
+    public final void rule__SectionHeading__SectionHeaderAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4077:1: ( ( RULE_SECTIONHEADER ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4078:1: ( RULE_SECTIONHEADER )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4078:1: ( RULE_SECTIONHEADER )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4079:1: RULE_SECTIONHEADER
+            {
+             before(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+            match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18264); 
+             after(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SectionHeading__SectionHeaderAssignment_1"
+
+
+    // $ANTLR start "rule__Import__ImportURIAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4088:1: rule__Import__ImportURIAssignment_1 : ( RULE_STRING ) ;
+    public final void rule__Import__ImportURIAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4092:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4093:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4093:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4094:1: RULE_STRING
+            {
+             before(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18295); 
+             after(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__ImportURIAssignment_1"
+
+
+    // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4103:1: rule__Import__GrammarTypeAssignment_2_1_0 : ( ( 'core' ) ) ;
+    public final void rule__Import__GrammarTypeAssignment_2_1_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4107:1: ( ( ( 'core' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4108:1: ( ( 'core' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4108:1: ( ( 'core' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4109:1: ( 'core' )
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4110:1: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4111:1: 'core'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            match(input,37,FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_08331); 
+             after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+
+            }
+
+             after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__GrammarTypeAssignment_2_1_0"
+
+
+    // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4126:1: rule__Import__GrammarTypeAssignment_2_1_1 : ( ( 'package' ) ) ;
+    public final void rule__Import__GrammarTypeAssignment_2_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4130:1: ( ( ( 'package' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4131:1: ( ( 'package' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4131:1: ( ( 'package' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4132:1: ( 'package' )
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4133:1: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4134:1: 'package'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            match(input,38,FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_18375); 
+             after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+
+            }
+
+             after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__GrammarTypeAssignment_2_1_1"
+
+
+    // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4149:1: rule__Import__GrammarTypeAssignment_2_1_2 : ( ( 'update' ) ) ;
+    public final void rule__Import__GrammarTypeAssignment_2_1_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4153:1: ( ( ( 'update' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4154:1: ( ( 'update' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4154:1: ( ( 'update' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4155:1: ( 'update' )
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4156:1: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4157:1: 'update'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            match(input,39,FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28419); 
+             after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+
+            }
+
+             after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__GrammarTypeAssignment_2_1_2"
+
+
+    // $ANTLR start "rule__Import__LabelAssignment_3_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4172:1: rule__Import__LabelAssignment_3_1 : ( RULE_ID ) ;
+    public final void rule__Import__LabelAssignment_3_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4176:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4177:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4177:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4178:1: RULE_ID
+            {
+             before(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18458); 
+             after(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Import__LabelAssignment_3_1"
+
+
+    // $ANTLR start "rule__Rule__RulenumberAssignment_0_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4187:1: rule__Rule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
+    public final void rule__Rule__RulenumberAssignment_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4191:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4192:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4192:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4193:1: RULE_INT
+            {
+             before(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08489); 
+             after(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__RulenumberAssignment_0_0"
+
+
+    // $ANTLR start "rule__Rule__RulevariantAssignment_0_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4202:1: rule__Rule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
+    public final void rule__Rule__RulevariantAssignment_0_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4206:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4207:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4207:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4208:1: RULE_ID
+            {
+             before(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18520); 
+             after(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__RulevariantAssignment_0_1"
+
+
+    // $ANTLR start "rule__Rule__NameAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4217:1: rule__Rule__NameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__Rule__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4221:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4222:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4222:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4223:1: RULE_ID
+            {
+             before(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18551); 
+             after(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__NameAssignment_1"
+
+
+    // $ANTLR start "rule__Rule__DefinitionListAssignment_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4232:1: rule__Rule__DefinitionListAssignment_3 : ( ruleDefinitionList ) ;
+    public final void rule__Rule__DefinitionListAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4236:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4237:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4237:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4238:1: ruleDefinitionList
+            {
+             before(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38582);
+            ruleDefinitionList();
+
+            state._fsp--;
+
+             after(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Rule__DefinitionListAssignment_3"
+
+
+    // $ANTLR start "rule__ExtRule__RulenumberAssignment_0_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4247:1: rule__ExtRule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
+    public final void rule__ExtRule__RulenumberAssignment_0_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4251:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4252:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4252:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4253:1: RULE_INT
+            {
+             before(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08613); 
+             after(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__RulenumberAssignment_0_0"
+
+
+    // $ANTLR start "rule__ExtRule__RulevariantAssignment_0_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4262:1: rule__ExtRule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
+    public final void rule__ExtRule__RulevariantAssignment_0_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4266:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4267:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4267:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4268:1: RULE_ID
+            {
+             before(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18644); 
+             after(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__RulevariantAssignment_0_1"
+
+
+    // $ANTLR start "rule__ExtRule__NameAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4277:1: rule__ExtRule__NameAssignment_1 : ( RULE_ID ) ;
+    public final void rule__ExtRule__NameAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4281:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4282:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4282:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4283:1: RULE_ID
+            {
+             before(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18675); 
+             after(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__NameAssignment_1"
+
+
+    // $ANTLR start "rule__ExtRule__RuleextAssignment_2_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4292:1: rule__ExtRule__RuleextAssignment_2_1 : ( RULE_INT ) ;
+    public final void rule__ExtRule__RuleextAssignment_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4296:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4297:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4297:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4298:1: RULE_INT
+            {
+             before(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18706); 
+             after(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__RuleextAssignment_2_1"
+
+
+    // $ANTLR start "rule__ExtRule__ElementsAssignment_4_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4307:1: rule__ExtRule__ElementsAssignment_4_0 : ( ruleAtom ) ;
+    public final void rule__ExtRule__ElementsAssignment_4_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4311:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4312:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4312:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4313:1: ruleAtom
+            {
+             before(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08737);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__ExtRule__ElementsAssignment_4_0"
+
+
+    // $ANTLR start "rule__GlobalCombinator__LogicAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4322:1: rule__GlobalCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
+    public final void rule__GlobalCombinator__LogicAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4326:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4327:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4327:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4328:1: RULE_LOGIC
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18768); 
+             after(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GlobalCombinator__LogicAssignment_1"
+
+
+    // $ANTLR start "rule__RuleCombinator__NameAssignment_0_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4337:1: rule__RuleCombinator__NameAssignment_0_2 : ( RULE_ID ) ;
+    public final void rule__RuleCombinator__NameAssignment_0_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4341:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4342:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4342:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4343:1: RULE_ID
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28799); 
+             after(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__NameAssignment_0_2"
+
+
+    // $ANTLR start "rule__RuleCombinator__LogicAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4352:1: rule__RuleCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
+    public final void rule__RuleCombinator__LogicAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4356:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4357:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4357:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4358:1: RULE_LOGIC
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18830); 
+             after(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__LogicAssignment_1"
+
+
+    // $ANTLR start "rule__RuleCombinator__LABELAssignment_2_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4367:1: rule__RuleCombinator__LABELAssignment_2_1 : ( RULE_STRING ) ;
+    public final void rule__RuleCombinator__LABELAssignment_2_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4371:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4372:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4372:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4373:1: RULE_STRING
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18861); 
+             after(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleCombinator__LABELAssignment_2_1"
+
+
+    // $ANTLR start "rule__HookCombinator__NameAssignment_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4382:1: rule__HookCombinator__NameAssignment_2 : ( RULE_ID ) ;
+    public final void rule__HookCombinator__NameAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4386:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4387:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4387:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4388:1: RULE_ID
+            {
+             before(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28892); 
+             after(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__NameAssignment_2"
+
+
+    // $ANTLR start "rule__HookCombinator__RuleextAssignment_4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4397:1: rule__HookCombinator__RuleextAssignment_4 : ( RULE_INT ) ;
+    public final void rule__HookCombinator__RuleextAssignment_4() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4401:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4402:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4402:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4403:1: RULE_INT
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48923); 
+             after(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__RuleextAssignment_4"
+
+
+    // $ANTLR start "rule__HookCombinator__LogicAssignment_6"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4412:1: rule__HookCombinator__LogicAssignment_6 : ( RULE_LOGIC ) ;
+    public final void rule__HookCombinator__LogicAssignment_6() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4416:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4417:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4417:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4418:1: RULE_LOGIC
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68954); 
+             after(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__LogicAssignment_6"
+
+
+    // $ANTLR start "rule__HookCombinator__LABELAssignment_7_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4427:1: rule__HookCombinator__LABELAssignment_7_1 : ( RULE_STRING ) ;
+    public final void rule__HookCombinator__LABELAssignment_7_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4431:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4432:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4432:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4433:1: RULE_STRING
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18985); 
+             after(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__HookCombinator__LABELAssignment_7_1"
+
+
+    // $ANTLR start "rule__DefinitionList__SingleDefinitionAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4442:1: rule__DefinitionList__SingleDefinitionAssignment_0 : ( ruleSingleDefinition ) ;
+    public final void rule__DefinitionList__SingleDefinitionAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4446:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4447:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4447:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4448:1: ruleSingleDefinition
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09016);
+            ruleSingleDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__SingleDefinitionAssignment_0"
+
+
+    // $ANTLR start "rule__DefinitionList__SingleDefinitionAssignment_1_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4457:1: rule__DefinitionList__SingleDefinitionAssignment_1_1 : ( ruleSingleDefinition ) ;
+    public final void rule__DefinitionList__SingleDefinitionAssignment_1_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4461:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4462:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4462:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4463:1: ruleSingleDefinition
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19047);
+            ruleSingleDefinition();
+
+            state._fsp--;
+
+             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__DefinitionList__SingleDefinitionAssignment_1_1"
+
+
+    // $ANTLR start "rule__SingleDefinition__TermsAssignment"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4472:1: rule__SingleDefinition__TermsAssignment : ( ruleTerm ) ;
+    public final void rule__SingleDefinition__TermsAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4476:1: ( ( ruleTerm ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4477:1: ( ruleTerm )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4477:1: ( ruleTerm )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4478:1: ruleTerm
+            {
+             before(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9078);
+            ruleTerm();
+
+            state._fsp--;
+
+             after(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__SingleDefinition__TermsAssignment"
+
+
+    // $ANTLR start "rule__Term__TermAtomAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4487:1: rule__Term__TermAtomAssignment_0 : ( ruleAtom ) ;
+    public final void rule__Term__TermAtomAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4491:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4492:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4492:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4493:1: ruleAtom
+            {
+             before(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09109);
+            ruleAtom();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__TermAtomAssignment_0"
+
+
+    // $ANTLR start "rule__Term__TermGroupedSequenceAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4502:1: rule__Term__TermGroupedSequenceAssignment_1 : ( ruleGroupedSequence ) ;
+    public final void rule__Term__TermGroupedSequenceAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4506:1: ( ( ruleGroupedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4507:1: ( ruleGroupedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4507:1: ( ruleGroupedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4508:1: ruleGroupedSequence
+            {
+             before(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19140);
+            ruleGroupedSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__TermGroupedSequenceAssignment_1"
+
+
+    // $ANTLR start "rule__Term__TermOptionalSequenceAssignment_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4517:1: rule__Term__TermOptionalSequenceAssignment_2 : ( ruleOptionalSequence ) ;
+    public final void rule__Term__TermOptionalSequenceAssignment_2() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521:1: ( ( ruleOptionalSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4522:1: ( ruleOptionalSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4522:1: ( ruleOptionalSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4523:1: ruleOptionalSequence
+            {
+             before(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29171);
+            ruleOptionalSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__TermOptionalSequenceAssignment_2"
+
+
+    // $ANTLR start "rule__Term__TermRepeatedSequenceAssignment_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4532:1: rule__Term__TermRepeatedSequenceAssignment_3 : ( ruleRepeatedSequence ) ;
+    public final void rule__Term__TermRepeatedSequenceAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4536:1: ( ( ruleRepeatedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4537:1: ( ruleRepeatedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4537:1: ( ruleRepeatedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4538:1: ruleRepeatedSequence
+            {
+             before(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39202);
+            ruleRepeatedSequence();
+
+            state._fsp--;
+
+             after(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Term__TermRepeatedSequenceAssignment_3"
+
+
+    // $ANTLR start "rule__Atom__AtomStringRuleAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4547:1: rule__Atom__AtomStringRuleAssignment_0 : ( ruleStringRule ) ;
+    public final void rule__Atom__AtomStringRuleAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4551:1: ( ( ruleStringRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4552:1: ( ruleStringRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4552:1: ( ruleStringRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4553:1: ruleStringRule
+            {
+             before(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09233);
+            ruleStringRule();
+
+            state._fsp--;
+
+             after(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__AtomStringRuleAssignment_0"
+
+
+    // $ANTLR start "rule__Atom__AtomRuleReferenceAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4562:1: rule__Atom__AtomRuleReferenceAssignment_1 : ( ruleRuleReference ) ;
+    public final void rule__Atom__AtomRuleReferenceAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4566:1: ( ( ruleRuleReference ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4567:1: ( ruleRuleReference )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4567:1: ( ruleRuleReference )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4568:1: ruleRuleReference
+            {
+             before(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19264);
+            ruleRuleReference();
+
+            state._fsp--;
+
+             after(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__Atom__AtomRuleReferenceAssignment_1"
+
+
+    // $ANTLR start "rule__RuleReference__RulerefAssignment"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4577:1: rule__RuleReference__RulerefAssignment : ( ( RULE_ID ) ) ;
+    public final void rule__RuleReference__RulerefAssignment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4581:1: ( ( ( RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4582:1: ( ( RULE_ID ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4582:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4583:1: ( RULE_ID )
+            {
+             before(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4584:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4585:1: RULE_ID
+            {
+             before(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9299); 
+             after(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
+
+            }
+
+             after(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RuleReference__RulerefAssignment"
+
+
+    // $ANTLR start "rule__StringRule__LiteralAssignment_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4596:1: rule__StringRule__LiteralAssignment_0 : ( RULE_STRING ) ;
+    public final void rule__StringRule__LiteralAssignment_0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4600:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4601:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4601:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4602:1: RULE_STRING
+            {
+             before(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09334); 
+             after(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StringRule__LiteralAssignment_0"
+
+
+    // $ANTLR start "rule__StringRule__ColonAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4611:1: rule__StringRule__ColonAssignment_1 : ( RULE_COLON ) ;
+    public final void rule__StringRule__ColonAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4615:1: ( ( RULE_COLON ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4616:1: ( RULE_COLON )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4616:1: ( RULE_COLON )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4617:1: RULE_COLON
+            {
+             before(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+            match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19365); 
+             after(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__StringRule__ColonAssignment_1"
+
+
+    // $ANTLR start "rule__GroupedSequence__DefinitionListAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4626:1: rule__GroupedSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
+    public final void rule__GroupedSequence__DefinitionListAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4630:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4631:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4631:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4632:1: ruleDefinitionList
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19396);
+            ruleDefinitionList();
+
+            state._fsp--;
+
+             after(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__GroupedSequence__DefinitionListAssignment_1"
+
+
+    // $ANTLR start "rule__OptionalSequence__DefinitionListAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4641:1: rule__OptionalSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
+    public final void rule__OptionalSequence__DefinitionListAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4645:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4646:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4646:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4647:1: ruleDefinitionList
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19427);
+            ruleDefinitionList();
+
+            state._fsp--;
+
+             after(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__OptionalSequence__DefinitionListAssignment_1"
+
+
+    // $ANTLR start "rule__RepeatedSequence__DefinitionsAssignment_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4656:1: rule__RepeatedSequence__DefinitionsAssignment_1 : ( ruleDefinitionList ) ;
+    public final void rule__RepeatedSequence__DefinitionsAssignment_1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4660:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4661:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4661:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4662:1: ruleDefinitionList
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19458);
+            ruleDefinitionList();
+
+            state._fsp--;
+
+             after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__DefinitionsAssignment_1"
+
+
+    // $ANTLR start "rule__RepeatedSequence__MorethanonceAssignment_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4671:1: rule__RepeatedSequence__MorethanonceAssignment_3 : ( ( '+' ) ) ;
+    public final void rule__RepeatedSequence__MorethanonceAssignment_3() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4675:1: ( ( ( '+' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4676:1: ( ( '+' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4676:1: ( ( '+' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4677:1: ( '+' )
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4678:1: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4679:1: '+'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
+            match(input,21,FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39494); 
+             after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
+
+            }
+
+             after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__MorethanonceAssignment_3"
+
+    // Delegated rules
+
+
+ 
+
+    public static final BitSet FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf61 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEtsiBnf68 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf94 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_entryRuleImportSection121 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImportSection128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection156 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection168 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry198 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBnfEntry205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry231 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry258 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry265 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry318 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry325 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry351 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading378 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading385 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading411 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport438 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImport445 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0_in_ruleImport471 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule498 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRule505 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0_in_ruleRule531 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule558 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule565 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule591 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule618 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule625 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule651 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator678 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator685 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator711 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator738 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator745 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator798 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList858 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition918 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition953 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition965 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm995 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm1002 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Alternatives_in_ruleTerm1028 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom1055 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom1062 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Alternatives_in_ruleAtom1088 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference1115 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference1122 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1148 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule1175 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule1182 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1208 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1235 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence1242 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1268 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1295 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence1302 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1328 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1355 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence1362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1388 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1424 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1442 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1460 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1493 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1511 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1562 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1613 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1631 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11664 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11700 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41733 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Alternatives_41752 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__ExtRule__Alternatives_41772 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__ExtRule__Alternatives_41792 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__ExtRule__Alternatives_41812 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Alternatives_41832 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__ExtRule__Alternatives_41852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__ExtRule__Alternatives_41872 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__ExtRule__Alternatives_41892 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__ExtRule__Alternatives_41912 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1946 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1963 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1980 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2012 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2030 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2048 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2066 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2099 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2117 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2150 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__02199 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02202 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2230 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12261 = new BitSet(new long[]{0x0000000400800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2291 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22321 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2348 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02384 = new BitSet(new long[]{0x0000000400800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12445 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12448 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22507 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22510 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2537 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32568 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2597 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2609 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02650 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02653 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2680 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12710 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12713 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2741 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22772 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2802 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32833 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2860 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__02899 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02902 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__12959 = new BitSet(new long[]{0x0000000341000020L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12962 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2990 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__23021 = new BitSet(new long[]{0x0000000341000020L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23024 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3051 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33082 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3109 = new BitSet(new long[]{0x0000000340000022L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03148 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03151 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13209 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3236 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03270 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_rule__Import__Group__0__Impl3301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13332 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13335 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23392 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3422 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33453 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3483 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43514 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Import__Group__4__Impl3542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03583 = new BitSet(new long[]{0x000000E000000000L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03586 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_rule__Import__Group_2__0__Impl3614 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13645 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3672 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03706 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03709 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_rule__Import__Group_3__0__Impl3737 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3795 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03829 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03832 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3859 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13890 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3920 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23950 = new BitSet(new long[]{0x00000000008E0250L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23953 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_rule__Rule__Group__2__Impl3981 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34012 = new BitSet(new long[]{0x00000000008E0250L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4042 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44073 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Rule__Group__4__Impl4102 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__04145 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04148 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4175 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__14205 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14208 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4235 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24266 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__Rule__Group_0__2__Impl4294 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04331 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4361 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14392 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4422 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24452 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34512 = new BitSet(new long[]{0x0000000000BFE250L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34515 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_rule__ExtRule__Group__3__Impl4543 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44574 = new BitSet(new long[]{0x0000000000BFE250L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44577 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4604 = new BitSet(new long[]{0x00000000003FE252L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54635 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__ExtRule__Group__5__Impl4664 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04709 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14769 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14772 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4799 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4858 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__04895 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4926 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__14957 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14960 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25017 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5045 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05082 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05085 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5112 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15142 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15145 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25202 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5231 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05270 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15332 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5360 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05395 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05398 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15455 = new BitSet(new long[]{0x0000000000820000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5485 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25515 = new BitSet(new long[]{0x0000000000820000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5545 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35576 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5605 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05646 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05649 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5677 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15708 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15711 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5739 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25770 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05833 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05836 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5864 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__15895 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25955 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5983 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06020 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06023 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6051 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16082 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16085 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26144 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26147 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6174 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36204 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36207 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6235 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46266 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46269 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6296 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56326 = new BitSet(new long[]{0x0000000000020100L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56329 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66388 = new BitSet(new long[]{0x0000000000020100L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66391 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76449 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76452 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6481 = new BitSet(new long[]{0x0000000000020102L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6493 = new BitSet(new long[]{0x0000000000020102L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86526 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6555 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06606 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6637 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16668 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16671 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6756 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06793 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06796 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6823 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16853 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6880 = new BitSet(new long[]{0x0000000000010002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__06915 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06918 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6946 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16977 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7004 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07038 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7069 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17100 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27160 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07225 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7256 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17287 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17290 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7317 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27347 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7375 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07412 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07415 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17474 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17477 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7504 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27534 = new BitSet(new long[]{0x0000000000200000L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27537 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7565 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7623 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17667 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07703 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_27742 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_37773 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07809 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_27848 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_37879 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07915 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_27954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_37985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08047 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18140 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28171 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08202 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18295 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_08331 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_18375 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28419 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08489 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18520 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18551 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38582 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08613 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18675 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18706 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08737 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28799 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18830 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18861 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28892 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48923 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68954 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19047 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19140 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29171 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39202 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09233 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19264 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9299 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19365 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19396 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39494 = new BitSet(new long[]{0x0000000000000002L});
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java	(revision 61)
@@ -0,0 +1,95 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.internal;
+
+import java.util.Collections;
+import java.util.Map;
+
+import org.apache.log4j.Logger;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.ui.shared.SharedStateModule;
+import org.eclipse.xtext.util.Modules2;
+import org.osgi.framework.BundleContext;
+
+import com.google.common.collect.Maps;
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+
+/**
+ * This class was generated. Customizations should only happen in a newly
+ * introduced subclass. 
+ */
+public class EbnfActivator extends AbstractUIPlugin {
+	
+	public static final String DE_UGOE_CS_SWE_BNFTOOLS_EBNF = "de.ugoe.cs.swe.bnftools.Ebnf";
+	
+	private static final Logger logger = Logger.getLogger(EbnfActivator.class);
+	
+	private static EbnfActivator INSTANCE;
+	
+	private Map<String, Injector> injectors = Collections.synchronizedMap(Maps.<String, Injector> newHashMapWithExpectedSize(1));
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		INSTANCE = this;
+	}
+	
+	@Override
+	public void stop(BundleContext context) throws Exception {
+		injectors.clear();
+		INSTANCE = null;
+		super.stop(context);
+	}
+	
+	public static EbnfActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	public Injector getInjector(String language) {
+		synchronized (injectors) {
+			Injector injector = injectors.get(language);
+			if (injector == null) {
+				injectors.put(language, injector = createInjector(language));
+			}
+			return injector;
+		}
+	}
+	
+	protected Injector createInjector(String language) {
+		try {
+			Module runtimeModule = getRuntimeModule(language);
+			Module sharedStateModule = getSharedStateModule();
+			Module uiModule = getUiModule(language);
+			Module mergedModule = Modules2.mixin(runtimeModule, sharedStateModule, uiModule);
+			return Guice.createInjector(mergedModule);
+		} catch (Exception e) {
+			logger.error("Failed to create injector for " + language);
+			logger.error(e.getMessage(), e);
+			throw new RuntimeException("Failed to create injector for " + language, e);
+		}
+	}
+
+	protected Module getRuntimeModule(String grammar) {
+		if (DE_UGOE_CS_SWE_BNFTOOLS_EBNF.equals(grammar)) {
+			return new de.ugoe.cs.swe.bnftools.EbnfRuntimeModule();
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getUiModule(String grammar) {
+		if (DE_UGOE_CS_SWE_BNFTOOLS_EBNF.equals(grammar)) {
+			return new de.ugoe.cs.swe.bnftools.ui.EbnfUiModule(this);
+		}
+		
+		throw new IllegalArgumentException(grammar);
+	}
+	
+	protected Module getSharedStateModule() {
+		return new SharedStateModule();
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java	(revision 61)
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+
+/**
+ * Use this class to register components to be used within the IDE.
+ */
+public class EbnfUiModule extends de.ugoe.cs.swe.bnftools.ui.AbstractEbnfUiModule {
+	public EbnfUiModule(AbstractUIPlugin plugin) {
+		super(plugin);
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.xtend	(revision 61)
@@ -0,0 +1,12 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.contentassist
+
+import de.ugoe.cs.swe.bnftools.ui.contentassist.AbstractEbnfProposalProvider
+
+/**
+ * see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant
+ */
+class EbnfProposalProvider extends AbstractEbnfProposalProvider {
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.xtend	(revision 61)
@@ -0,0 +1,24 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.labeling
+
+//import org.eclipse.xtext.resource.IEObjectDescription
+
+/**
+ * Provides labels for a IEObjectDescriptions and IResourceDescriptions.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#labelProvider
+ */
+class EbnfDescriptionLabelProvider extends org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider {
+
+	// Labels and icons can be computed like this:
+	
+//	override text(IEObjectDescription ele) {
+//		ele.name.toString
+//	}
+//	 
+//	override image(IEObjectDescription ele) {
+//		ele.EClass.name + '.gif'
+//	}	 
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.xtend	(revision 61)
@@ -0,0 +1,29 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.labeling
+
+import com.google.inject.Inject
+
+/**
+ * Provides labels for a EObjects.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#labelProvider
+ */
+class EbnfLabelProvider extends org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider {
+
+	@Inject
+	new(org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider delegate) {
+		super(delegate);
+	}
+
+	// Labels and icons can be computed like this:
+	
+//	def text(Greeting ele) {
+//		'A greeting to ' + ele.name
+//	}
+//
+//	def image(Greeting ele) {
+//		'Greeting.gif'
+//	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.xtend	(revision 61)
@@ -0,0 +1,13 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.outline
+
+/**
+ * Customization of the default outline structure.
+ *
+ * see http://www.eclipse.org/Xtext/documentation.html#outline
+ */
+class EbnfOutlineTreeProvider extends org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider {
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.xtend	(revision 61)
@@ -0,0 +1,42 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.quickfix
+
+import org.eclipse.xtext.ui.editor.quickfix.Fix
+import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor
+import org.eclipse.xtext.validation.Issue
+
+/**
+ * Custom quickfixes.
+ *
+ * see http://www.eclipse.org/Xtext/documentation.html#quickfixes
+ */
+class EbnfQuickfixProvider extends org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider {
+
+
+	static final String ruleReferencedOneDescription = "The rule is only referenced by one other rule";
+	
+//	@Fix(MyDslValidator::INVALID_NAME)
+//	def capitalizeName(Issue issue, IssueResolutionAcceptor acceptor) {
+//		acceptor.accept(issue, 'Capitalize name', 'Capitalize the name.', 'upcase.png') [
+//			context |
+//			val xtextDocument = context.xtextDocument
+//			val firstLetter = xtextDocument.get(issue.offset, 1)
+//			xtextDocument.replace(issue.offset, 1, firstLetter.toUpperCase)
+//		]
+//	}
+
+
+//	@Fix(value = ruleReferencedOneDescription)
+//	def void fixInlineRuleReferencedOnce(final Issue issue, IssueResolutionAcceptor acceptor) {
+//		InlineRuleModification inlineRuleModification = new InlineRuleModification(
+//				resourceDescriptions);
+//
+//		acceptor.accept(
+//				issue,
+//				"Inline the rule",
+//				"Delete the rule and replace its single reference by the rule's right side",
+//				"upcase.png", inlineRuleModification);
+//	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java	(revision 61)
@@ -0,0 +1,13 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.contentassist;
+
+import de.ugoe.cs.swe.bnftools.ui.contentassist.AbstractEbnfProposalProvider;
+
+/**
+ * see http://www.eclipse.org/Xtext/documentation.html#contentAssist on how to customize content assistant
+ */
+@SuppressWarnings("all")
+public class EbnfProposalProvider extends AbstractEbnfProposalProvider {
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java	(revision 61)
@@ -0,0 +1,15 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.labeling;
+
+import org.eclipse.xtext.ui.label.DefaultDescriptionLabelProvider;
+
+/**
+ * Provides labels for a IEObjectDescriptions and IResourceDescriptions.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#labelProvider
+ */
+@SuppressWarnings("all")
+public class EbnfDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java	(revision 61)
@@ -0,0 +1,21 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.labeling;
+
+import com.google.inject.Inject;
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;
+
+/**
+ * Provides labels for a EObjects.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#labelProvider
+ */
+@SuppressWarnings("all")
+public class EbnfLabelProvider extends DefaultEObjectLabelProvider {
+  @Inject
+  public EbnfLabelProvider(final AdapterFactoryLabelProvider delegate) {
+    super(delegate);
+  }
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineTreeProvider.java	(revision 61)
@@ -0,0 +1,15 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.outline;
+
+import org.eclipse.xtext.ui.editor.outline.impl.DefaultOutlineTreeProvider;
+
+/**
+ * Customization of the default outline structure.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#outline
+ */
+@SuppressWarnings("all")
+public class EbnfOutlineTreeProvider extends DefaultOutlineTreeProvider {
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/xtend-gen/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java	(revision 61)
@@ -0,0 +1,16 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.quickfix;
+
+import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
+
+/**
+ * Custom quickfixes.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#quickfixes
+ */
+@SuppressWarnings("all")
+public class EbnfQuickfixProvider extends DefaultQuickfixProvider {
+  private final static String ruleReferencedOneDescription = "The rule is only referenced by one other rule";
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.classpath
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.classpath	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.classpath	(revision 61)
@@ -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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Generate Language Infrastructure (de.ugoe.cs.swe.bnftools.ebnf).launch
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Generate Language Infrastructure (de.ugoe.cs.swe.bnftools.ebnf).launch	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Generate Language Infrastructure (de.ugoe.cs.swe.bnftools.ebnf).launch	(revision 61)
@@ -0,0 +1,18 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.emf.mwe2.launch.Mwe2LaunchConfigurationType">
+<stringAttribute key="org.eclipse.debug.core.ATTR_REFRESH_SCOPE" value="${working_set:&lt;?xml version=&quot;1.0&quot; encoding=&quot;UTF-8&quot;?&gt;&#10;&lt;launchConfigurationWorkingSet factoryID=&quot;org.eclipse.ui.internal.WorkingSetFactory&quot; id=&quot;1299248699643_13&quot; label=&quot;working set&quot; name=&quot;working set&quot;&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/de.ugoe.cs.swe.bnftools.ebnf&quot; type=&quot;4&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/de.ugoe.cs.swe.bnftools.ebnf.generator&quot; type=&quot;4&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/de.ugoe.cs.swe.bnftools.ebnf.tests&quot; type=&quot;4&quot;/&gt;&#10;&lt;item factoryID=&quot;org.eclipse.ui.internal.model.ResourceFactory&quot; path=&quot;/de.ugoe.cs.swe.bnftools.ebnf.ui&quot; type=&quot;4&quot;/&gt;&#10;&lt;/launchConfigurationWorkingSet&gt;}"/>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_PATHS">
+<listEntry value="/de.ugoe.cs.swe.bnftools.ebnf"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.core.MAPPED_RESOURCE_TYPES">
+<listEntry value="4"/>
+</listAttribute>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value="org.eclipse.emf.mwe2.launch.runtime.Mwe2Launcher"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="src/de/ugoe/cs/swe/bnftools/GenerateEBNF.mwe2"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="de.ugoe.cs.swe.bnftools.ebnf"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xmx512m"/>
+</launchConfiguration>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Launch Runtime Eclipse.launch
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Launch Runtime Eclipse.launch	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.launch/Launch Runtime Eclipse.launch	(revision 61)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8" standalone="no"?>
+<launchConfiguration type="org.eclipse.pde.ui.RuntimeWorkbench">
+<booleanAttribute key="append.args" value="true"/>
+<booleanAttribute key="askclear" value="true"/>
+<booleanAttribute key="automaticAdd" value="true"/>
+<booleanAttribute key="automaticValidate" value="false"/>
+<stringAttribute key="bad_container_name" value="/de.ugoe.cs.swe.bnftools.ebnf/.launch/"/>
+<stringAttribute key="bootstrap" value=""/>
+<stringAttribute key="checked" value="[NONE]"/>
+<booleanAttribute key="clearConfig" value="false"/>
+<booleanAttribute key="clearws" value="false"/>
+<booleanAttribute key="clearwslog" value="false"/>
+<stringAttribute key="configLocation" value="${workspace_loc}/.metadata/.plugins/org.eclipse.pde.core/Launch Runtime Eclipse"/>
+<booleanAttribute key="default" value="true"/>
+<booleanAttribute key="includeOptional" value="true"/>
+<stringAttribute key="location" value="${workspace_loc}/../runtime-EclipseXtext"/>
+<listAttribute key="org.eclipse.debug.ui.favoriteGroups">
+<listEntry value="org.eclipse.debug.ui.launchGroup.debug"/>
+<listEntry value="org.eclipse.debug.ui.launchGroup.run"/>
+</listAttribute>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5"/>
+<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl}"/>
+<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx512m -XX:MaxPermSize=256m"/>
+<stringAttribute key="pde.version" value="3.3"/>
+<stringAttribute key="product" value="org.eclipse.platform.ide"/>
+<booleanAttribute key="show_selected_only" value="false"/>
+<stringAttribute key="templateConfig" value="${target_home}/configuration/config.ini"/>
+<booleanAttribute key="tracing" value="false"/>
+<booleanAttribute key="useDefaultConfig" value="true"/>
+<booleanAttribute key="useDefaultConfigArea" value="true"/>
+<booleanAttribute key="useProduct" value="true"/>
+<booleanAttribute key="usefeatures" value="false"/>
+</launchConfiguration>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.project
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.project	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.project	(revision 61)
@@ -0,0 +1,34 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>de.ugoe.cs.swe.bnftools.ebnf</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>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.settings/org.eclipse.core.resources.prefs
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.settings/org.eclipse.core.resources.prefs	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/.settings/org.eclipse.core.resources.prefs	(revision 61)
@@ -0,0 +1,2 @@
+eclipse.preferences.version=1
+encoding/<project>=UTF-8
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/META-INF/MANIFEST.MF
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/META-INF/MANIFEST.MF	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/META-INF/MANIFEST.MF	(revision 61)
@@ -0,0 +1,34 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: de.ugoe.cs.swe.bnftools.ebnf
+Bundle-Vendor: My Company
+Bundle-Version: 1.0.0.qualifier
+Bundle-SymbolicName: de.ugoe.cs.swe.bnftools.ebnf; singleton:=true
+Bundle-ActivationPolicy: lazy
+Require-Bundle: org.eclipse.xtext;visibility:=reexport,
+ org.eclipse.xtext.xbase;resolution:=optional;visibility:=reexport,
+ org.eclipse.xtext.generator;resolution:=optional,
+ org.apache.commons.logging;bundle-version="1.0.4";resolution:=optional,
+ org.eclipse.emf.codegen.ecore;resolution:=optional,
+ org.eclipse.emf.mwe.utils;resolution:=optional,
+ org.eclipse.emf.mwe2.launch;resolution:=optional,
+ org.eclipse.xtext.util,
+ org.eclipse.emf.ecore,
+ org.eclipse.emf.common,
+ org.antlr.runtime,
+ org.eclipse.xtext.common.types
+Import-Package: org.apache.log4j,
+ org.eclipse.xtext.xbase.lib
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: de.ugoe.cs.swe.bnftools,
+ de.ugoe.cs.swe.bnftools.services,
+ de.ugoe.cs.swe.bnftools.ebnf,
+ de.ugoe.cs.swe.bnftools.ebnf.impl,
+ de.ugoe.cs.swe.bnftools.ebnf.util,
+ de.ugoe.cs.swe.bnftools.serializer,
+ de.ugoe.cs.swe.bnftools.parser.antlr,
+ de.ugoe.cs.swe.bnftools.parser.antlr.internal,
+ de.ugoe.cs.swe.bnftools.validation,
+ de.ugoe.cs.swe.bnftools.scoping,
+ de.ugoe.cs.swe.bnftools.generator,
+ de.ugoe.cs.swe.bnftools.formatting
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/build.properties
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/build.properties	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/build.properties	(revision 61)
@@ -0,0 +1,7 @@
+source.. = src/,\
+          src-gen/,\
+          xtend-gen/
+bin.includes = model/,\
+               META-INF/,\
+               .,\
+               plugin.xml
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.ecore
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.ecore	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.ecore	(revision 61)
@@ -0,0 +1,120 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<ecore:EPackage 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" name="ebnf" nsURI="http://www.ugoe.de/cs/swe/bnftools/Ebnf" nsPrefix="ebnf">
+  <eClassifiers xsi:type="ecore:EClass" name="EtsiBnf">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="type" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="importSection" eType="#//ImportSection"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="bnfEntry" upperBound="-1"
+        eType="#//BnfEntry" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="deltaEntry" upperBound="-1"
+        eType="#//DeltaEntry" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mergeEntry" upperBound="-1"
+        eType="#//MergeEntry" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ImportSection">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="imports" upperBound="-1"
+        eType="#//Import" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="BnfEntry">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sectionheader" eType="#//SectionHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rule" eType="#//Rule" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DeltaEntry">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="rule" eType="#//Rule" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sectionheader" eType="#//SectionHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="extRule" eType="#//ExtRule"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MergeEntry">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="sectionheader" eType="#//SectionHeading"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="mergeRule" eType="#//MergeRule"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SectionHeading">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="sectionHeader" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Import">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="importURI" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="grammarType" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="label" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Rule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rulenumber" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rulevariant" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionList" eType="#//DefinitionList"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="ExtRule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rulenumber" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="rulevariant" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ruleext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="elements" upperBound="-1"
+        eType="#//Atom" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="MergeRule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="logic" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GlobalCombinator" eSuperTypes="#//MergeRule"/>
+  <eClassifiers xsi:type="ecore:EClass" name="RuleCombinator" eSuperTypes="#//MergeRule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="LABEL" unique="false" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="HookCombinator" eSuperTypes="#//MergeRule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="name" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="ruleext" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EInt"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="LABEL" unique="false" upperBound="-1"
+        eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="DefinitionList">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="singleDefinition" upperBound="-1"
+        eType="#//SingleDefinition" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="SingleDefinition">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="terms" upperBound="-1"
+        eType="#//Term" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Term">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="termAtom" eType="#//Atom"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="termGroupedSequence" eType="#//GroupedSequence"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="termOptionalSequence" eType="#//OptionalSequence"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="termRepeatedSequence" eType="#//RepeatedSequence"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="Atom">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="atomStringRule" eType="#//StringRule"
+        containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EReference" name="atomRuleReference" eType="#//RuleReference"
+        containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RuleReference">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="ruleref" eType="#//Rule"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="StringRule">
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="literal" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="colon" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EString"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="GroupedSequence">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionList" upperBound="-1"
+        eType="#//DefinitionList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="OptionalSequence">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitionList" upperBound="-1"
+        eType="#//DefinitionList" containment="true"/>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="RepeatedSequence">
+    <eStructuralFeatures xsi:type="ecore:EReference" name="definitions" upperBound="-1"
+        eType="#//DefinitionList" containment="true"/>
+    <eStructuralFeatures xsi:type="ecore:EAttribute" name="morethanonce" eType="ecore:EDataType http://www.eclipse.org/emf/2002/Ecore#//EBoolean"/>
+  </eClassifiers>
+</ecore:EPackage>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.genmodel
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.genmodel	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/model/generated/Ebnf.genmodel	(revision 61)
@@ -0,0 +1,102 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<genmodel:GenModel xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:ecore="http://www.eclipse.org/emf/2002/Ecore"
+    xmlns:genmodel="http://www.eclipse.org/emf/2002/GenModel" modelDirectory="/de.ugoe.cs.swe.bnftools.ebnf/src-gen" editDirectory="/de.ugoe.cs.swe.bnftools.ebnf.edit/src"
+    editorDirectory="/de.ugoe.cs.swe.bnftools.ebnf.editor/src" modelPluginID="de.ugoe.cs.swe.bnftools.ebnf"
+    forceOverwrite="true" modelName="Ebnf" updateClasspath="false" rootExtendsClass="org.eclipse.emf.ecore.impl.MinimalEObjectImpl$Container"
+    complianceLevel="5.0" copyrightFields="false" editPluginID="de.ugoe.cs.swe.bnftools.ebnf.edit"
+    editorPluginID="de.ugoe.cs.swe.bnftools.ebnf.editor" runtimeVersion="2.9">
+  <genPackages prefix="Ebnf" basePackage="de.ugoe.cs.swe.bnftools" disposableProviderFactory="true"
+      fileExtensions="bnf" ecorePackage="Ebnf.ecore#/">
+    <genClasses ecoreClass="Ebnf.ecore#//EtsiBnf">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//EtsiBnf/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//EtsiBnf/type"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//EtsiBnf/importSection"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//EtsiBnf/bnfEntry"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//EtsiBnf/deltaEntry"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//EtsiBnf/mergeEntry"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//ImportSection">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//ImportSection/imports"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//BnfEntry">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//BnfEntry/sectionheader"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//BnfEntry/rule"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//DeltaEntry">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//DeltaEntry/rule"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//DeltaEntry/sectionheader"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//DeltaEntry/extRule"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//MergeEntry">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//MergeEntry/sectionheader"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//MergeEntry/mergeRule"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//SectionHeading">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//SectionHeading/sectionHeader"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//Import">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Import/importURI"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Import/grammarType"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Import/label"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//Rule">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Rule/rulenumber"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Rule/rulevariant"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//Rule/name"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Rule/definitionList"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//ExtRule">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//ExtRule/rulenumber"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//ExtRule/rulevariant"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//ExtRule/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//ExtRule/ruleext"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//ExtRule/elements"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//MergeRule">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//MergeRule/logic"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//GlobalCombinator"/>
+    <genClasses ecoreClass="Ebnf.ecore#//RuleCombinator">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//RuleCombinator/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//RuleCombinator/LABEL"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//HookCombinator">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//HookCombinator/name"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//HookCombinator/ruleext"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//HookCombinator/LABEL"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//DefinitionList">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//DefinitionList/singleDefinition"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//SingleDefinition">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//SingleDefinition/terms"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//Term">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Term/termAtom"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Term/termGroupedSequence"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Term/termOptionalSequence"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Term/termRepeatedSequence"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//Atom">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Atom/atomStringRule"/>
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//Atom/atomRuleReference"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//RuleReference">
+      <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Ebnf.ecore#//RuleReference/ruleref"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//StringRule">
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//StringRule/literal"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//StringRule/colon"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//GroupedSequence">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//GroupedSequence/definitionList"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//OptionalSequence">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//OptionalSequence/definitionList"/>
+    </genClasses>
+    <genClasses ecoreClass="Ebnf.ecore#//RepeatedSequence">
+      <genFeatures property="None" children="true" createChild="true" ecoreFeature="ecore:EReference Ebnf.ecore#//RepeatedSequence/definitions"/>
+      <genFeatures createChild="false" ecoreFeature="ecore:EAttribute Ebnf.ecore#//RepeatedSequence/morethanonce"/>
+    </genClasses>
+  </genPackages>
+</genmodel:GenModel>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml	(revision 61)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.ugoe.de/cs/swe/bnftools/Ebnf" 
+       class = "de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage"
+       genModel = "model/generated/Ebnf.genmodel" /> 
+	
+  </extension>
+
+
+
+</plugin>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml_gen
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml_gen	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/plugin.xml_gen	(revision 61)
@@ -0,0 +1,16 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.0"?>
+
+<plugin>
+
+  <extension point="org.eclipse.emf.ecore.generated_package">
+    <package 
+       uri = "http://www.ugoe.de/cs/swe/bnftools/Ebnf" 
+       class = "de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage"
+       genModel = "model/generated/Ebnf.genmodel" /> 
+	
+  </extension>
+
+
+
+</plugin>
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/AbstractEbnfRuntimeModule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/AbstractEbnfRuntimeModule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/AbstractEbnfRuntimeModule.java	(revision 61)
@@ -0,0 +1,172 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools;
+
+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 {de.ugoe.cs.swe.bnftools.EbnfRuntimeModule}
+ */
+ @SuppressWarnings("all")
+public abstract class AbstractEbnfRuntimeModule extends DefaultRuntimeModule {
+
+	protected Properties properties = null;
+
+	@Override
+	public void configure(Binder binder) {
+		properties = tryBindProperties(binder, "de/ugoe/cs/swe/bnftools/Ebnf.properties");
+		super.configure(binder);
+	}
+	
+	public void configureLanguageName(Binder binder) {
+		binder.bind(String.class).annotatedWith(Names.named(Constants.LANGUAGE_NAME)).toInstance("de.ugoe.cs.swe.bnftools.Ebnf");
+	}
+	
+	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("bnf");
+	}
+	
+	// contributed by org.eclipse.xtext.generator.grammarAccess.GrammarAccessFragment
+	public Class<? extends org.eclipse.xtext.IGrammarAccess> bindIGrammarAccess() {
+		return de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.sequencer.ISemanticSequencer> bindISemanticSequencer() {
+		return de.ugoe.cs.swe.bnftools.serializer.EbnfSemanticSequencer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.sequencer.ISyntacticSequencer> bindISyntacticSequencer() {
+		return de.ugoe.cs.swe.bnftools.serializer.EbnfSyntacticSequencer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.serializer.SerializerFragment
+	public Class<? extends org.eclipse.xtext.serializer.ISerializer> bindISerializer() {
+		return org.eclipse.xtext.serializer.impl.Serializer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.IParser> bindIParser() {
+		return de.ugoe.cs.swe.bnftools.parser.antlr.EbnfParser.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 de.ugoe.cs.swe.bnftools.parser.antlr.EbnfAntlrTokenFileProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public Class<? extends org.eclipse.xtext.parser.antlr.Lexer> bindLexer() {
+		return de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfLexer.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.parser.antlr.XtextAntlrGeneratorFragment
+	public com.google.inject.Provider<de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfLexer> provideInternalEbnfLexer() {
+		return org.eclipse.xtext.parser.antlr.LexerProvider.create(de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfLexer.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(de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfLexer.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.validation.ValidatorFragment
+	@org.eclipse.xtext.service.SingletonBinding(eager=true)	public Class<? extends de.ugoe.cs.swe.bnftools.validation.EbnfValidator> bindEbnfValidator() {
+		return de.ugoe.cs.swe.bnftools.validation.EbnfValidator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.scoping.AbstractScopingFragment
+	public Class<? extends org.eclipse.xtext.scoping.IScopeProvider> bindIScopeProvider() {
+		return de.ugoe.cs.swe.bnftools.scoping.EbnfScopeProvider.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.ImportedNamespaceAwareLocalScopeProvider.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.QualifiedNamesFragment
+	public Class<? extends org.eclipse.xtext.naming.IQualifiedNameProvider> bindIQualifiedNameProvider() {
+		return org.eclipse.xtext.naming.DefaultDeclarativeQualifiedNameProvider.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);
+	}
+
+	// contributed by org.eclipse.xtext.generator.generator.GeneratorFragment
+	public Class<? extends org.eclipse.xtext.generator.IGenerator> bindIGenerator() {
+		return de.ugoe.cs.swe.bnftools.generator.EbnfGenerator.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.formatting.FormatterFragment
+	public Class<? extends org.eclipse.xtext.formatting.IFormatter> bindIFormatter() {
+		return de.ugoe.cs.swe.bnftools.formatting.EbnfFormatter.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public java.lang.ClassLoader bindClassLoaderToInstance() {
+		return getClass().getClassLoader();
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public org.eclipse.xtext.common.types.TypesFactory bindTypesFactoryToInstance() {
+		return org.eclipse.xtext.common.types.TypesFactory.eINSTANCE;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.access.IJvmTypeProvider.Factory> bindIJvmTypeProvider$Factory() {
+		return org.eclipse.xtext.common.types.access.ClasspathTypeProviderFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.common.types.xtext.AbstractTypeScopeProvider> bindAbstractTypeScopeProvider() {
+		return org.eclipse.xtext.common.types.xtext.ClasspathBasedTypeScopeProvider.class;
+	}
+
+	// contributed by org.eclipse.xtext.generator.types.TypesGeneratorFragment
+	public Class<? extends org.eclipse.xtext.scoping.IGlobalScopeProvider> bindIGlobalScopeProvider() {
+		return org.eclipse.xtext.common.types.xtext.TypesAwareDefaultGlobalScopeProvider.class;
+	}
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetupGenerated.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetupGenerated.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetupGenerated.java	(revision 61)
@@ -0,0 +1,55 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools;
+
+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 EbnfStandaloneSetupGenerated implements ISetup {
+
+	public Injector createInjectorAndDoEMFRegistration() {
+		// register default ePackages
+		if (!Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().containsKey("ecore"))
+			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
+				"ecore", new org.eclipse.emf.ecore.xmi.impl.EcoreResourceFactoryImpl());
+		if (!Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().containsKey("xmi"))
+			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
+				"xmi", new org.eclipse.emf.ecore.xmi.impl.XMIResourceFactoryImpl());
+		if (!Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().containsKey("xtextbin"))
+			Resource.Factory.Registry.INSTANCE.getExtensionToFactoryMap().put(
+				"xtextbin", new org.eclipse.xtext.resource.impl.BinaryGrammarResourceFactoryImpl());
+		if (!EPackage.Registry.INSTANCE.containsKey(org.eclipse.xtext.XtextPackage.eNS_URI))
+			EPackage.Registry.INSTANCE.put(org.eclipse.xtext.XtextPackage.eNS_URI, org.eclipse.xtext.XtextPackage.eINSTANCE);
+
+		Injector injector = createInjector();
+		register(injector);
+		return injector;
+	}
+	
+	public Injector createInjector() {
+		return Guice.createInjector(new de.ugoe.cs.swe.bnftools.EbnfRuntimeModule());
+	}
+	
+	public void register(Injector injector) {
+	if (!EPackage.Registry.INSTANCE.containsKey("http://www.ugoe.de/cs/swe/bnftools/Ebnf")) {
+		EPackage.Registry.INSTANCE.put("http://www.ugoe.de/cs/swe/bnftools/Ebnf", de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage.eINSTANCE);
+	}
+
+		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("bnf", resourceFactory);
+		org.eclipse.xtext.resource.IResourceServiceProvider.Registry.INSTANCE.getExtensionToFactoryMap().put("bnf", serviceProvider);
+		
+
+
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Atom.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Atom.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Atom.java	(revision 61)
@@ -0,0 +1,78 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Atom</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomStringRule <em>Atom String Rule</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomRuleReference <em>Atom Rule Reference</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getAtom()
+ * @model
+ * @generated
+ */
+public interface Atom extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Atom String Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Atom String Rule</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Atom String Rule</em>' containment reference.
+   * @see #setAtomStringRule(StringRule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getAtom_AtomStringRule()
+   * @model containment="true"
+   * @generated
+   */
+  StringRule getAtomStringRule();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomStringRule <em>Atom String Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Atom String Rule</em>' containment reference.
+   * @see #getAtomStringRule()
+   * @generated
+   */
+  void setAtomStringRule(StringRule value);
+
+  /**
+   * Returns the value of the '<em><b>Atom Rule Reference</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Atom Rule Reference</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Atom Rule Reference</em>' containment reference.
+   * @see #setAtomRuleReference(RuleReference)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getAtom_AtomRuleReference()
+   * @model containment="true"
+   * @generated
+   */
+  RuleReference getAtomRuleReference();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomRuleReference <em>Atom Rule Reference</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Atom Rule Reference</em>' containment reference.
+   * @see #getAtomRuleReference()
+   * @generated
+   */
+  void setAtomRuleReference(RuleReference value);
+
+} // Atom
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/BnfEntry.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/BnfEntry.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/BnfEntry.java	(revision 61)
@@ -0,0 +1,78 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Bnf Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getRule <em>Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getBnfEntry()
+ * @model
+ * @generated
+ */
+public interface BnfEntry extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Sectionheader</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Sectionheader</em>' containment reference.
+   * @see #setSectionheader(SectionHeading)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getBnfEntry_Sectionheader()
+   * @model containment="true"
+   * @generated
+   */
+  SectionHeading getSectionheader();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getSectionheader <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Sectionheader</em>' containment reference.
+   * @see #getSectionheader()
+   * @generated
+   */
+  void setSectionheader(SectionHeading value);
+
+  /**
+   * Returns the value of the '<em><b>Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rule</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rule</em>' containment reference.
+   * @see #setRule(Rule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getBnfEntry_Rule()
+   * @model containment="true"
+   * @generated
+   */
+  Rule getRule();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getRule <em>Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rule</em>' containment reference.
+   * @see #getRule()
+   * @generated
+   */
+  void setRule(Rule value);
+
+} // BnfEntry
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DefinitionList.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DefinitionList.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DefinitionList.java	(revision 61)
@@ -0,0 +1,43 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Definition List</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList#getSingleDefinition <em>Single Definition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDefinitionList()
+ * @model
+ * @generated
+ */
+public interface DefinitionList extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Single Definition</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Single Definition</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Single Definition</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDefinitionList_SingleDefinition()
+   * @model containment="true"
+   * @generated
+   */
+  EList<SingleDefinition> getSingleDefinition();
+
+} // DefinitionList
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DeltaEntry.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DeltaEntry.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/DeltaEntry.java	(revision 61)
@@ -0,0 +1,105 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Delta Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getRule <em>Rule</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getExtRule <em>Ext Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDeltaEntry()
+ * @model
+ * @generated
+ */
+public interface DeltaEntry extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rule</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rule</em>' containment reference.
+   * @see #setRule(Rule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDeltaEntry_Rule()
+   * @model containment="true"
+   * @generated
+   */
+  Rule getRule();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getRule <em>Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rule</em>' containment reference.
+   * @see #getRule()
+   * @generated
+   */
+  void setRule(Rule value);
+
+  /**
+   * Returns the value of the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Sectionheader</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Sectionheader</em>' containment reference.
+   * @see #setSectionheader(SectionHeading)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDeltaEntry_Sectionheader()
+   * @model containment="true"
+   * @generated
+   */
+  SectionHeading getSectionheader();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getSectionheader <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Sectionheader</em>' containment reference.
+   * @see #getSectionheader()
+   * @generated
+   */
+  void setSectionheader(SectionHeading value);
+
+  /**
+   * Returns the value of the '<em><b>Ext Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ext Rule</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ext Rule</em>' containment reference.
+   * @see #setExtRule(ExtRule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getDeltaEntry_ExtRule()
+   * @model containment="true"
+   * @generated
+   */
+  ExtRule getExtRule();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getExtRule <em>Ext Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ext Rule</em>' containment reference.
+   * @see #getExtRule()
+   * @generated
+   */
+  void setExtRule(ExtRule value);
+
+} // DeltaEntry
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfFactory.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfFactory.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfFactory.java	(revision 61)
@@ -0,0 +1,232 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EFactory;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Factory</b> for the model.
+ * It provides a create method for each non-abstract class of the model.
+ * <!-- end-user-doc -->
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage
+ * @generated
+ */
+public interface EbnfFactory extends EFactory
+{
+  /**
+   * The singleton instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  EbnfFactory eINSTANCE = de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfFactoryImpl.init();
+
+  /**
+   * Returns a new object of class '<em>Etsi Bnf</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Etsi Bnf</em>'.
+   * @generated
+   */
+  EtsiBnf createEtsiBnf();
+
+  /**
+   * Returns a new object of class '<em>Import Section</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Import Section</em>'.
+   * @generated
+   */
+  ImportSection createImportSection();
+
+  /**
+   * Returns a new object of class '<em>Bnf Entry</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Bnf Entry</em>'.
+   * @generated
+   */
+  BnfEntry createBnfEntry();
+
+  /**
+   * Returns a new object of class '<em>Delta Entry</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Delta Entry</em>'.
+   * @generated
+   */
+  DeltaEntry createDeltaEntry();
+
+  /**
+   * Returns a new object of class '<em>Merge Entry</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Merge Entry</em>'.
+   * @generated
+   */
+  MergeEntry createMergeEntry();
+
+  /**
+   * Returns a new object of class '<em>Section Heading</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Section Heading</em>'.
+   * @generated
+   */
+  SectionHeading createSectionHeading();
+
+  /**
+   * Returns a new object of class '<em>Import</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Import</em>'.
+   * @generated
+   */
+  Import createImport();
+
+  /**
+   * Returns a new object of class '<em>Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Rule</em>'.
+   * @generated
+   */
+  Rule createRule();
+
+  /**
+   * Returns a new object of class '<em>Ext Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Ext Rule</em>'.
+   * @generated
+   */
+  ExtRule createExtRule();
+
+  /**
+   * Returns a new object of class '<em>Merge Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Merge Rule</em>'.
+   * @generated
+   */
+  MergeRule createMergeRule();
+
+  /**
+   * Returns a new object of class '<em>Global Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Global Combinator</em>'.
+   * @generated
+   */
+  GlobalCombinator createGlobalCombinator();
+
+  /**
+   * Returns a new object of class '<em>Rule Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Rule Combinator</em>'.
+   * @generated
+   */
+  RuleCombinator createRuleCombinator();
+
+  /**
+   * Returns a new object of class '<em>Hook Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Hook Combinator</em>'.
+   * @generated
+   */
+  HookCombinator createHookCombinator();
+
+  /**
+   * Returns a new object of class '<em>Definition List</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Definition List</em>'.
+   * @generated
+   */
+  DefinitionList createDefinitionList();
+
+  /**
+   * Returns a new object of class '<em>Single Definition</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Single Definition</em>'.
+   * @generated
+   */
+  SingleDefinition createSingleDefinition();
+
+  /**
+   * Returns a new object of class '<em>Term</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Term</em>'.
+   * @generated
+   */
+  Term createTerm();
+
+  /**
+   * Returns a new object of class '<em>Atom</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Atom</em>'.
+   * @generated
+   */
+  Atom createAtom();
+
+  /**
+   * Returns a new object of class '<em>Rule Reference</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Rule Reference</em>'.
+   * @generated
+   */
+  RuleReference createRuleReference();
+
+  /**
+   * Returns a new object of class '<em>String Rule</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>String Rule</em>'.
+   * @generated
+   */
+  StringRule createStringRule();
+
+  /**
+   * Returns a new object of class '<em>Grouped Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Grouped Sequence</em>'.
+   * @generated
+   */
+  GroupedSequence createGroupedSequence();
+
+  /**
+   * Returns a new object of class '<em>Optional Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Optional Sequence</em>'.
+   * @generated
+   */
+  OptionalSequence createOptionalSequence();
+
+  /**
+   * Returns a new object of class '<em>Repeated Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return a new object of class '<em>Repeated Sequence</em>'.
+   * @generated
+   */
+  RepeatedSequence createRepeatedSequence();
+
+  /**
+   * Returns the package supported by this factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the package supported by this factory.
+   * @generated
+   */
+  EbnfPackage getEbnfPackage();
+
+} //EbnfFactory
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfPackage.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfPackage.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EbnfPackage.java	(revision 61)
@@ -0,0 +1,2314 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Package</b> for the model.
+ * It contains accessors for the meta objects to represent
+ * <ul>
+ *   <li>each class,</li>
+ *   <li>each feature of each class,</li>
+ *   <li>each enum,</li>
+ *   <li>and each data type</li>
+ * </ul>
+ * <!-- end-user-doc -->
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfFactory
+ * @model kind="package"
+ * @generated
+ */
+public interface EbnfPackage extends EPackage
+{
+  /**
+   * The package name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNAME = "ebnf";
+
+  /**
+   * The package namespace URI.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_URI = "http://www.ugoe.de/cs/swe/bnftools/Ebnf";
+
+  /**
+   * The package namespace name.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  String eNS_PREFIX = "ebnf";
+
+  /**
+   * The singleton instance of the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  EbnfPackage eINSTANCE = de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl.init();
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl <em>Etsi Bnf</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getEtsiBnf()
+   * @generated
+   */
+  int ETSI_BNF = 0;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__NAME = 0;
+
+  /**
+   * The feature id for the '<em><b>Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__TYPE = 1;
+
+  /**
+   * The feature id for the '<em><b>Import Section</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__IMPORT_SECTION = 2;
+
+  /**
+   * The feature id for the '<em><b>Bnf Entry</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__BNF_ENTRY = 3;
+
+  /**
+   * The feature id for the '<em><b>Delta Entry</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__DELTA_ENTRY = 4;
+
+  /**
+   * The feature id for the '<em><b>Merge Entry</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF__MERGE_ENTRY = 5;
+
+  /**
+   * The number of structural features of the '<em>Etsi Bnf</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ETSI_BNF_FEATURE_COUNT = 6;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportSectionImpl <em>Import Section</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ImportSectionImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getImportSection()
+   * @generated
+   */
+  int IMPORT_SECTION = 1;
+
+  /**
+   * The feature id for the '<em><b>Imports</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_SECTION__IMPORTS = 0;
+
+  /**
+   * The number of structural features of the '<em>Import Section</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_SECTION_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl <em>Bnf Entry</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getBnfEntry()
+   * @generated
+   */
+  int BNF_ENTRY = 2;
+
+  /**
+   * The feature id for the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BNF_ENTRY__SECTIONHEADER = 0;
+
+  /**
+   * The feature id for the '<em><b>Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BNF_ENTRY__RULE = 1;
+
+  /**
+   * The number of structural features of the '<em>Bnf Entry</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int BNF_ENTRY_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl <em>Delta Entry</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getDeltaEntry()
+   * @generated
+   */
+  int DELTA_ENTRY = 3;
+
+  /**
+   * The feature id for the '<em><b>Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DELTA_ENTRY__RULE = 0;
+
+  /**
+   * The feature id for the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DELTA_ENTRY__SECTIONHEADER = 1;
+
+  /**
+   * The feature id for the '<em><b>Ext Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DELTA_ENTRY__EXT_RULE = 2;
+
+  /**
+   * The number of structural features of the '<em>Delta Entry</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DELTA_ENTRY_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl <em>Merge Entry</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getMergeEntry()
+   * @generated
+   */
+  int MERGE_ENTRY = 4;
+
+  /**
+   * The feature id for the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MERGE_ENTRY__SECTIONHEADER = 0;
+
+  /**
+   * The feature id for the '<em><b>Merge Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MERGE_ENTRY__MERGE_RULE = 1;
+
+  /**
+   * The number of structural features of the '<em>Merge Entry</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MERGE_ENTRY_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SectionHeadingImpl <em>Section Heading</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.SectionHeadingImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getSectionHeading()
+   * @generated
+   */
+  int SECTION_HEADING = 5;
+
+  /**
+   * The feature id for the '<em><b>Section Header</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SECTION_HEADING__SECTION_HEADER = 0;
+
+  /**
+   * The number of structural features of the '<em>Section Heading</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SECTION_HEADING_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl <em>Import</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getImport()
+   * @generated
+   */
+  int IMPORT = 6;
+
+  /**
+   * The feature id for the '<em><b>Import URI</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT__IMPORT_URI = 0;
+
+  /**
+   * The feature id for the '<em><b>Grammar Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT__GRAMMAR_TYPE = 1;
+
+  /**
+   * The feature id for the '<em><b>Label</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT__LABEL = 2;
+
+  /**
+   * The number of structural features of the '<em>Import</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int IMPORT_FEATURE_COUNT = 3;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl <em>Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRule()
+   * @generated
+   */
+  int RULE = 7;
+
+  /**
+   * The feature id for the '<em><b>Rulenumber</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE__RULENUMBER = 0;
+
+  /**
+   * The feature id for the '<em><b>Rulevariant</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE__RULEVARIANT = 1;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE__NAME = 2;
+
+  /**
+   * The feature id for the '<em><b>Definition List</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE__DEFINITION_LIST = 3;
+
+  /**
+   * The number of structural features of the '<em>Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl <em>Ext Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getExtRule()
+   * @generated
+   */
+  int EXT_RULE = 8;
+
+  /**
+   * The feature id for the '<em><b>Rulenumber</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE__RULENUMBER = 0;
+
+  /**
+   * The feature id for the '<em><b>Rulevariant</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE__RULEVARIANT = 1;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE__NAME = 2;
+
+  /**
+   * The feature id for the '<em><b>Ruleext</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE__RULEEXT = 3;
+
+  /**
+   * The feature id for the '<em><b>Elements</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE__ELEMENTS = 4;
+
+  /**
+   * The number of structural features of the '<em>Ext Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int EXT_RULE_FEATURE_COUNT = 5;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeRuleImpl <em>Merge Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.MergeRuleImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getMergeRule()
+   * @generated
+   */
+  int MERGE_RULE = 9;
+
+  /**
+   * The feature id for the '<em><b>Logic</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MERGE_RULE__LOGIC = 0;
+
+  /**
+   * The number of structural features of the '<em>Merge Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int MERGE_RULE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.GlobalCombinatorImpl <em>Global Combinator</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.GlobalCombinatorImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getGlobalCombinator()
+   * @generated
+   */
+  int GLOBAL_COMBINATOR = 10;
+
+  /**
+   * The feature id for the '<em><b>Logic</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GLOBAL_COMBINATOR__LOGIC = MERGE_RULE__LOGIC;
+
+  /**
+   * The number of structural features of the '<em>Global Combinator</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GLOBAL_COMBINATOR_FEATURE_COUNT = MERGE_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl <em>Rule Combinator</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRuleCombinator()
+   * @generated
+   */
+  int RULE_COMBINATOR = 11;
+
+  /**
+   * The feature id for the '<em><b>Logic</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_COMBINATOR__LOGIC = MERGE_RULE__LOGIC;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_COMBINATOR__NAME = MERGE_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>LABEL</b></em>' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_COMBINATOR__LABEL = MERGE_RULE_FEATURE_COUNT + 1;
+
+  /**
+   * The number of structural features of the '<em>Rule Combinator</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_COMBINATOR_FEATURE_COUNT = MERGE_RULE_FEATURE_COUNT + 2;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl <em>Hook Combinator</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getHookCombinator()
+   * @generated
+   */
+  int HOOK_COMBINATOR = 12;
+
+  /**
+   * The feature id for the '<em><b>Logic</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int HOOK_COMBINATOR__LOGIC = MERGE_RULE__LOGIC;
+
+  /**
+   * The feature id for the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int HOOK_COMBINATOR__NAME = MERGE_RULE_FEATURE_COUNT + 0;
+
+  /**
+   * The feature id for the '<em><b>Ruleext</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int HOOK_COMBINATOR__RULEEXT = MERGE_RULE_FEATURE_COUNT + 1;
+
+  /**
+   * The feature id for the '<em><b>LABEL</b></em>' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int HOOK_COMBINATOR__LABEL = MERGE_RULE_FEATURE_COUNT + 2;
+
+  /**
+   * The number of structural features of the '<em>Hook Combinator</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int HOOK_COMBINATOR_FEATURE_COUNT = MERGE_RULE_FEATURE_COUNT + 3;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DefinitionListImpl <em>Definition List</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.DefinitionListImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getDefinitionList()
+   * @generated
+   */
+  int DEFINITION_LIST = 13;
+
+  /**
+   * The feature id for the '<em><b>Single Definition</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DEFINITION_LIST__SINGLE_DEFINITION = 0;
+
+  /**
+   * The number of structural features of the '<em>Definition List</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int DEFINITION_LIST_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SingleDefinitionImpl <em>Single Definition</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.SingleDefinitionImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getSingleDefinition()
+   * @generated
+   */
+  int SINGLE_DEFINITION = 14;
+
+  /**
+   * The feature id for the '<em><b>Terms</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SINGLE_DEFINITION__TERMS = 0;
+
+  /**
+   * The number of structural features of the '<em>Single Definition</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int SINGLE_DEFINITION_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl <em>Term</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getTerm()
+   * @generated
+   */
+  int TERM = 15;
+
+  /**
+   * The feature id for the '<em><b>Term Atom</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__TERM_ATOM = 0;
+
+  /**
+   * The feature id for the '<em><b>Term Grouped Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__TERM_GROUPED_SEQUENCE = 1;
+
+  /**
+   * The feature id for the '<em><b>Term Optional Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__TERM_OPTIONAL_SEQUENCE = 2;
+
+  /**
+   * The feature id for the '<em><b>Term Repeated Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM__TERM_REPEATED_SEQUENCE = 3;
+
+  /**
+   * The number of structural features of the '<em>Term</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int TERM_FEATURE_COUNT = 4;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl <em>Atom</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getAtom()
+   * @generated
+   */
+  int ATOM = 16;
+
+  /**
+   * The feature id for the '<em><b>Atom String Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ATOM__ATOM_STRING_RULE = 0;
+
+  /**
+   * The feature id for the '<em><b>Atom Rule Reference</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ATOM__ATOM_RULE_REFERENCE = 1;
+
+  /**
+   * The number of structural features of the '<em>Atom</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int ATOM_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleReferenceImpl <em>Rule Reference</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleReferenceImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRuleReference()
+   * @generated
+   */
+  int RULE_REFERENCE = 17;
+
+  /**
+   * The feature id for the '<em><b>Ruleref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_REFERENCE__RULEREF = 0;
+
+  /**
+   * The number of structural features of the '<em>Rule Reference</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int RULE_REFERENCE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl <em>String Rule</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getStringRule()
+   * @generated
+   */
+  int STRING_RULE = 18;
+
+  /**
+   * The feature id for the '<em><b>Literal</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STRING_RULE__LITERAL = 0;
+
+  /**
+   * The feature id for the '<em><b>Colon</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STRING_RULE__COLON = 1;
+
+  /**
+   * The number of structural features of the '<em>String Rule</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int STRING_RULE_FEATURE_COUNT = 2;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.GroupedSequenceImpl <em>Grouped Sequence</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.GroupedSequenceImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getGroupedSequence()
+   * @generated
+   */
+  int GROUPED_SEQUENCE = 19;
+
+  /**
+   * The feature id for the '<em><b>Definition List</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GROUPED_SEQUENCE__DEFINITION_LIST = 0;
+
+  /**
+   * The number of structural features of the '<em>Grouped Sequence</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int GROUPED_SEQUENCE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.OptionalSequenceImpl <em>Optional Sequence</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.OptionalSequenceImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getOptionalSequence()
+   * @generated
+   */
+  int OPTIONAL_SEQUENCE = 20;
+
+  /**
+   * The feature id for the '<em><b>Definition List</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OPTIONAL_SEQUENCE__DEFINITION_LIST = 0;
+
+  /**
+   * The number of structural features of the '<em>Optional Sequence</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int OPTIONAL_SEQUENCE_FEATURE_COUNT = 1;
+
+  /**
+   * The meta object id for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl <em>Repeated Sequence</em>}' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl
+   * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRepeatedSequence()
+   * @generated
+   */
+  int REPEATED_SEQUENCE = 21;
+
+  /**
+   * The feature id for the '<em><b>Definitions</b></em>' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPEATED_SEQUENCE__DEFINITIONS = 0;
+
+  /**
+   * The feature id for the '<em><b>Morethanonce</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPEATED_SEQUENCE__MORETHANONCE = 1;
+
+  /**
+   * The number of structural features of the '<em>Repeated Sequence</em>' class.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   * @ordered
+   */
+  int REPEATED_SEQUENCE_FEATURE_COUNT = 2;
+
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf <em>Etsi Bnf</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Etsi Bnf</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf
+   * @generated
+   */
+  EClass getEtsiBnf();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getName()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EAttribute getEtsiBnf_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getType <em>Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Type</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getType()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EAttribute getEtsiBnf_Type();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getImportSection <em>Import Section</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Import Section</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getImportSection()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EReference getEtsiBnf_ImportSection();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getBnfEntry <em>Bnf Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Bnf Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getBnfEntry()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EReference getEtsiBnf_BnfEntry();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getDeltaEntry <em>Delta Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Delta Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getDeltaEntry()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EReference getEtsiBnf_DeltaEntry();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getMergeEntry <em>Merge Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Merge Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getMergeEntry()
+   * @see #getEtsiBnf()
+   * @generated
+   */
+  EReference getEtsiBnf_MergeEntry();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.ImportSection <em>Import Section</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Import Section</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ImportSection
+   * @generated
+   */
+  EClass getImportSection();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.ImportSection#getImports <em>Imports</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Imports</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ImportSection#getImports()
+   * @see #getImportSection()
+   * @generated
+   */
+  EReference getImportSection_Imports();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry <em>Bnf Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Bnf Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.BnfEntry
+   * @generated
+   */
+  EClass getBnfEntry();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getSectionheader <em>Sectionheader</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Sectionheader</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getSectionheader()
+   * @see #getBnfEntry()
+   * @generated
+   */
+  EReference getBnfEntry_Sectionheader();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getRule <em>Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.BnfEntry#getRule()
+   * @see #getBnfEntry()
+   * @generated
+   */
+  EReference getBnfEntry_Rule();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry <em>Delta Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Delta Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry
+   * @generated
+   */
+  EClass getDeltaEntry();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getRule <em>Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getRule()
+   * @see #getDeltaEntry()
+   * @generated
+   */
+  EReference getDeltaEntry_Rule();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getSectionheader <em>Sectionheader</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Sectionheader</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getSectionheader()
+   * @see #getDeltaEntry()
+   * @generated
+   */
+  EReference getDeltaEntry_Sectionheader();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getExtRule <em>Ext Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Ext Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry#getExtRule()
+   * @see #getDeltaEntry()
+   * @generated
+   */
+  EReference getDeltaEntry_ExtRule();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry <em>Merge Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Merge Entry</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeEntry
+   * @generated
+   */
+  EClass getMergeEntry();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getSectionheader <em>Sectionheader</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Sectionheader</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getSectionheader()
+   * @see #getMergeEntry()
+   * @generated
+   */
+  EReference getMergeEntry_Sectionheader();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getMergeRule <em>Merge Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Merge Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getMergeRule()
+   * @see #getMergeEntry()
+   * @generated
+   */
+  EReference getMergeEntry_MergeRule();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.SectionHeading <em>Section Heading</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Section Heading</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SectionHeading
+   * @generated
+   */
+  EClass getSectionHeading();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.SectionHeading#getSectionHeader <em>Section Header</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Section Header</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SectionHeading#getSectionHeader()
+   * @see #getSectionHeading()
+   * @generated
+   */
+  EAttribute getSectionHeading_SectionHeader();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.Import <em>Import</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Import</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Import
+   * @generated
+   */
+  EClass getImport();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getImportURI <em>Import URI</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Import URI</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Import#getImportURI()
+   * @see #getImport()
+   * @generated
+   */
+  EAttribute getImport_ImportURI();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getGrammarType <em>Grammar Type</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Grammar Type</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Import#getGrammarType()
+   * @see #getImport()
+   * @generated
+   */
+  EAttribute getImport_GrammarType();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getLabel <em>Label</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Label</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Import#getLabel()
+   * @see #getImport()
+   * @generated
+   */
+  EAttribute getImport_Label();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule <em>Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule
+   * @generated
+   */
+  EClass getRule();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulenumber <em>Rulenumber</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Rulenumber</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulenumber()
+   * @see #getRule()
+   * @generated
+   */
+  EAttribute getRule_Rulenumber();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulevariant <em>Rulevariant</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Rulevariant</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulevariant()
+   * @see #getRule()
+   * @generated
+   */
+  EAttribute getRule_Rulevariant();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule#getName()
+   * @see #getRule()
+   * @generated
+   */
+  EAttribute getRule_Name();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getDefinitionList <em>Definition List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Definition List</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule#getDefinitionList()
+   * @see #getRule()
+   * @generated
+   */
+  EReference getRule_DefinitionList();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule <em>Ext Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Ext Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule
+   * @generated
+   */
+  EClass getExtRule();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulenumber <em>Rulenumber</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Rulenumber</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulenumber()
+   * @see #getExtRule()
+   * @generated
+   */
+  EAttribute getExtRule_Rulenumber();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulevariant <em>Rulevariant</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Rulevariant</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulevariant()
+   * @see #getExtRule()
+   * @generated
+   */
+  EAttribute getExtRule_Rulevariant();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getName()
+   * @see #getExtRule()
+   * @generated
+   */
+  EAttribute getExtRule_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRuleext <em>Ruleext</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Ruleext</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRuleext()
+   * @see #getExtRule()
+   * @generated
+   */
+  EAttribute getExtRule_Ruleext();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getElements <em>Elements</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Elements</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getElements()
+   * @see #getExtRule()
+   * @generated
+   */
+  EReference getExtRule_Elements();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeRule <em>Merge Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Merge Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeRule
+   * @generated
+   */
+  EClass getMergeRule();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeRule#getLogic <em>Logic</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Logic</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeRule#getLogic()
+   * @see #getMergeRule()
+   * @generated
+   */
+  EAttribute getMergeRule_Logic();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator <em>Global Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Global Combinator</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator
+   * @generated
+   */
+  EClass getGlobalCombinator();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator <em>Rule Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Rule Combinator</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator
+   * @generated
+   */
+  EClass getRuleCombinator();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getName()
+   * @see #getRuleCombinator()
+   * @generated
+   */
+  EAttribute getRuleCombinator_Name();
+
+  /**
+   * Returns the meta object for the attribute list '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getLABEL <em>LABEL</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute list '<em>LABEL</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getLABEL()
+   * @see #getRuleCombinator()
+   * @generated
+   */
+  EAttribute getRuleCombinator_LABEL();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator <em>Hook Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Hook Combinator</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.HookCombinator
+   * @generated
+   */
+  EClass getHookCombinator();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getName <em>Name</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Name</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getName()
+   * @see #getHookCombinator()
+   * @generated
+   */
+  EAttribute getHookCombinator_Name();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getRuleext <em>Ruleext</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Ruleext</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getRuleext()
+   * @see #getHookCombinator()
+   * @generated
+   */
+  EAttribute getHookCombinator_Ruleext();
+
+  /**
+   * Returns the meta object for the attribute list '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getLABEL <em>LABEL</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute list '<em>LABEL</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getLABEL()
+   * @see #getHookCombinator()
+   * @generated
+   */
+  EAttribute getHookCombinator_LABEL();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList <em>Definition List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Definition List</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DefinitionList
+   * @generated
+   */
+  EClass getDefinitionList();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList#getSingleDefinition <em>Single Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Single Definition</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DefinitionList#getSingleDefinition()
+   * @see #getDefinitionList()
+   * @generated
+   */
+  EReference getDefinitionList_SingleDefinition();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition <em>Single Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Single Definition</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition
+   * @generated
+   */
+  EClass getSingleDefinition();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition#getTerms <em>Terms</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Terms</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition#getTerms()
+   * @see #getSingleDefinition()
+   * @generated
+   */
+  EReference getSingleDefinition_Terms();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.Term <em>Term</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Term</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term
+   * @generated
+   */
+  EClass getTerm();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermAtom <em>Term Atom</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Term Atom</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term#getTermAtom()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_TermAtom();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermGroupedSequence <em>Term Grouped Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Term Grouped Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term#getTermGroupedSequence()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_TermGroupedSequence();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermOptionalSequence <em>Term Optional Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Term Optional Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term#getTermOptionalSequence()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_TermOptionalSequence();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermRepeatedSequence <em>Term Repeated Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Term Repeated Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term#getTermRepeatedSequence()
+   * @see #getTerm()
+   * @generated
+   */
+  EReference getTerm_TermRepeatedSequence();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom <em>Atom</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Atom</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Atom
+   * @generated
+   */
+  EClass getAtom();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomStringRule <em>Atom String Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Atom String Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomStringRule()
+   * @see #getAtom()
+   * @generated
+   */
+  EReference getAtom_AtomStringRule();
+
+  /**
+   * Returns the meta object for the containment reference '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomRuleReference <em>Atom Rule Reference</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference '<em>Atom Rule Reference</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Atom#getAtomRuleReference()
+   * @see #getAtom()
+   * @generated
+   */
+  EReference getAtom_AtomRuleReference();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleReference <em>Rule Reference</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Rule Reference</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleReference
+   * @generated
+   */
+  EClass getRuleReference();
+
+  /**
+   * Returns the meta object for the reference '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleReference#getRuleref <em>Ruleref</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the reference '<em>Ruleref</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleReference#getRuleref()
+   * @see #getRuleReference()
+   * @generated
+   */
+  EReference getRuleReference_Ruleref();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule <em>String Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>String Rule</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.StringRule
+   * @generated
+   */
+  EClass getStringRule();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getLiteral <em>Literal</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Literal</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.StringRule#getLiteral()
+   * @see #getStringRule()
+   * @generated
+   */
+  EAttribute getStringRule_Literal();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getColon <em>Colon</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Colon</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.StringRule#getColon()
+   * @see #getStringRule()
+   * @generated
+   */
+  EAttribute getStringRule_Colon();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence <em>Grouped Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Grouped Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence
+   * @generated
+   */
+  EClass getGroupedSequence();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence#getDefinitionList <em>Definition List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Definition List</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence#getDefinitionList()
+   * @see #getGroupedSequence()
+   * @generated
+   */
+  EReference getGroupedSequence_DefinitionList();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence <em>Optional Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Optional Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence
+   * @generated
+   */
+  EClass getOptionalSequence();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence#getDefinitionList <em>Definition List</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Definition List</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence#getDefinitionList()
+   * @see #getOptionalSequence()
+   * @generated
+   */
+  EReference getOptionalSequence_DefinitionList();
+
+  /**
+   * Returns the meta object for class '{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence <em>Repeated Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for class '<em>Repeated Sequence</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence
+   * @generated
+   */
+  EClass getRepeatedSequence();
+
+  /**
+   * Returns the meta object for the containment reference list '{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#getDefinitions <em>Definitions</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the containment reference list '<em>Definitions</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#getDefinitions()
+   * @see #getRepeatedSequence()
+   * @generated
+   */
+  EReference getRepeatedSequence_Definitions();
+
+  /**
+   * Returns the meta object for the attribute '{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#isMorethanonce <em>Morethanonce</em>}'.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the meta object for the attribute '<em>Morethanonce</em>'.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#isMorethanonce()
+   * @see #getRepeatedSequence()
+   * @generated
+   */
+  EAttribute getRepeatedSequence_Morethanonce();
+
+  /**
+   * Returns the factory that creates the instances of the model.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the factory that creates the instances of the model.
+   * @generated
+   */
+  EbnfFactory getEbnfFactory();
+
+  /**
+   * <!-- begin-user-doc -->
+   * Defines literals for the meta objects that represent
+   * <ul>
+   *   <li>each class,</li>
+   *   <li>each feature of each class,</li>
+   *   <li>each enum,</li>
+   *   <li>and each data type</li>
+   * </ul>
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  interface Literals
+  {
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl <em>Etsi Bnf</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getEtsiBnf()
+     * @generated
+     */
+    EClass ETSI_BNF = eINSTANCE.getEtsiBnf();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ETSI_BNF__NAME = eINSTANCE.getEtsiBnf_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute ETSI_BNF__TYPE = eINSTANCE.getEtsiBnf_Type();
+
+    /**
+     * The meta object literal for the '<em><b>Import Section</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ETSI_BNF__IMPORT_SECTION = eINSTANCE.getEtsiBnf_ImportSection();
+
+    /**
+     * The meta object literal for the '<em><b>Bnf Entry</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ETSI_BNF__BNF_ENTRY = eINSTANCE.getEtsiBnf_BnfEntry();
+
+    /**
+     * The meta object literal for the '<em><b>Delta Entry</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ETSI_BNF__DELTA_ENTRY = eINSTANCE.getEtsiBnf_DeltaEntry();
+
+    /**
+     * The meta object literal for the '<em><b>Merge Entry</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ETSI_BNF__MERGE_ENTRY = eINSTANCE.getEtsiBnf_MergeEntry();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportSectionImpl <em>Import Section</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ImportSectionImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getImportSection()
+     * @generated
+     */
+    EClass IMPORT_SECTION = eINSTANCE.getImportSection();
+
+    /**
+     * The meta object literal for the '<em><b>Imports</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference IMPORT_SECTION__IMPORTS = eINSTANCE.getImportSection_Imports();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl <em>Bnf Entry</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getBnfEntry()
+     * @generated
+     */
+    EClass BNF_ENTRY = eINSTANCE.getBnfEntry();
+
+    /**
+     * The meta object literal for the '<em><b>Sectionheader</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BNF_ENTRY__SECTIONHEADER = eINSTANCE.getBnfEntry_Sectionheader();
+
+    /**
+     * The meta object literal for the '<em><b>Rule</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference BNF_ENTRY__RULE = eINSTANCE.getBnfEntry_Rule();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl <em>Delta Entry</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getDeltaEntry()
+     * @generated
+     */
+    EClass DELTA_ENTRY = eINSTANCE.getDeltaEntry();
+
+    /**
+     * The meta object literal for the '<em><b>Rule</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference DELTA_ENTRY__RULE = eINSTANCE.getDeltaEntry_Rule();
+
+    /**
+     * The meta object literal for the '<em><b>Sectionheader</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference DELTA_ENTRY__SECTIONHEADER = eINSTANCE.getDeltaEntry_Sectionheader();
+
+    /**
+     * The meta object literal for the '<em><b>Ext Rule</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference DELTA_ENTRY__EXT_RULE = eINSTANCE.getDeltaEntry_ExtRule();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl <em>Merge Entry</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getMergeEntry()
+     * @generated
+     */
+    EClass MERGE_ENTRY = eINSTANCE.getMergeEntry();
+
+    /**
+     * The meta object literal for the '<em><b>Sectionheader</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MERGE_ENTRY__SECTIONHEADER = eINSTANCE.getMergeEntry_Sectionheader();
+
+    /**
+     * The meta object literal for the '<em><b>Merge Rule</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference MERGE_ENTRY__MERGE_RULE = eINSTANCE.getMergeEntry_MergeRule();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SectionHeadingImpl <em>Section Heading</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.SectionHeadingImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getSectionHeading()
+     * @generated
+     */
+    EClass SECTION_HEADING = eINSTANCE.getSectionHeading();
+
+    /**
+     * The meta object literal for the '<em><b>Section Header</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute SECTION_HEADING__SECTION_HEADER = eINSTANCE.getSectionHeading_SectionHeader();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl <em>Import</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getImport()
+     * @generated
+     */
+    EClass IMPORT = eINSTANCE.getImport();
+
+    /**
+     * The meta object literal for the '<em><b>Import URI</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute IMPORT__IMPORT_URI = eINSTANCE.getImport_ImportURI();
+
+    /**
+     * The meta object literal for the '<em><b>Grammar Type</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute IMPORT__GRAMMAR_TYPE = eINSTANCE.getImport_GrammarType();
+
+    /**
+     * The meta object literal for the '<em><b>Label</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute IMPORT__LABEL = eINSTANCE.getImport_Label();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl <em>Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRule()
+     * @generated
+     */
+    EClass RULE = eINSTANCE.getRule();
+
+    /**
+     * The meta object literal for the '<em><b>Rulenumber</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute RULE__RULENUMBER = eINSTANCE.getRule_Rulenumber();
+
+    /**
+     * The meta object literal for the '<em><b>Rulevariant</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute RULE__RULEVARIANT = eINSTANCE.getRule_Rulevariant();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute RULE__NAME = eINSTANCE.getRule_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Definition List</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference RULE__DEFINITION_LIST = eINSTANCE.getRule_DefinitionList();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl <em>Ext Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getExtRule()
+     * @generated
+     */
+    EClass EXT_RULE = eINSTANCE.getExtRule();
+
+    /**
+     * The meta object literal for the '<em><b>Rulenumber</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXT_RULE__RULENUMBER = eINSTANCE.getExtRule_Rulenumber();
+
+    /**
+     * The meta object literal for the '<em><b>Rulevariant</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXT_RULE__RULEVARIANT = eINSTANCE.getExtRule_Rulevariant();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXT_RULE__NAME = eINSTANCE.getExtRule_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Ruleext</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute EXT_RULE__RULEEXT = eINSTANCE.getExtRule_Ruleext();
+
+    /**
+     * The meta object literal for the '<em><b>Elements</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference EXT_RULE__ELEMENTS = eINSTANCE.getExtRule_Elements();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeRuleImpl <em>Merge Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.MergeRuleImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getMergeRule()
+     * @generated
+     */
+    EClass MERGE_RULE = eINSTANCE.getMergeRule();
+
+    /**
+     * The meta object literal for the '<em><b>Logic</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute MERGE_RULE__LOGIC = eINSTANCE.getMergeRule_Logic();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.GlobalCombinatorImpl <em>Global Combinator</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.GlobalCombinatorImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getGlobalCombinator()
+     * @generated
+     */
+    EClass GLOBAL_COMBINATOR = eINSTANCE.getGlobalCombinator();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl <em>Rule Combinator</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRuleCombinator()
+     * @generated
+     */
+    EClass RULE_COMBINATOR = eINSTANCE.getRuleCombinator();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute RULE_COMBINATOR__NAME = eINSTANCE.getRuleCombinator_Name();
+
+    /**
+     * The meta object literal for the '<em><b>LABEL</b></em>' attribute list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute RULE_COMBINATOR__LABEL = eINSTANCE.getRuleCombinator_LABEL();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl <em>Hook Combinator</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getHookCombinator()
+     * @generated
+     */
+    EClass HOOK_COMBINATOR = eINSTANCE.getHookCombinator();
+
+    /**
+     * The meta object literal for the '<em><b>Name</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute HOOK_COMBINATOR__NAME = eINSTANCE.getHookCombinator_Name();
+
+    /**
+     * The meta object literal for the '<em><b>Ruleext</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute HOOK_COMBINATOR__RULEEXT = eINSTANCE.getHookCombinator_Ruleext();
+
+    /**
+     * The meta object literal for the '<em><b>LABEL</b></em>' attribute list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute HOOK_COMBINATOR__LABEL = eINSTANCE.getHookCombinator_LABEL();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DefinitionListImpl <em>Definition List</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.DefinitionListImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getDefinitionList()
+     * @generated
+     */
+    EClass DEFINITION_LIST = eINSTANCE.getDefinitionList();
+
+    /**
+     * The meta object literal for the '<em><b>Single Definition</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference DEFINITION_LIST__SINGLE_DEFINITION = eINSTANCE.getDefinitionList_SingleDefinition();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SingleDefinitionImpl <em>Single Definition</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.SingleDefinitionImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getSingleDefinition()
+     * @generated
+     */
+    EClass SINGLE_DEFINITION = eINSTANCE.getSingleDefinition();
+
+    /**
+     * The meta object literal for the '<em><b>Terms</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference SINGLE_DEFINITION__TERMS = eINSTANCE.getSingleDefinition_Terms();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl <em>Term</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getTerm()
+     * @generated
+     */
+    EClass TERM = eINSTANCE.getTerm();
+
+    /**
+     * The meta object literal for the '<em><b>Term Atom</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__TERM_ATOM = eINSTANCE.getTerm_TermAtom();
+
+    /**
+     * The meta object literal for the '<em><b>Term Grouped Sequence</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__TERM_GROUPED_SEQUENCE = eINSTANCE.getTerm_TermGroupedSequence();
+
+    /**
+     * The meta object literal for the '<em><b>Term Optional Sequence</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__TERM_OPTIONAL_SEQUENCE = eINSTANCE.getTerm_TermOptionalSequence();
+
+    /**
+     * The meta object literal for the '<em><b>Term Repeated Sequence</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference TERM__TERM_REPEATED_SEQUENCE = eINSTANCE.getTerm_TermRepeatedSequence();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl <em>Atom</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getAtom()
+     * @generated
+     */
+    EClass ATOM = eINSTANCE.getAtom();
+
+    /**
+     * The meta object literal for the '<em><b>Atom String Rule</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ATOM__ATOM_STRING_RULE = eINSTANCE.getAtom_AtomStringRule();
+
+    /**
+     * The meta object literal for the '<em><b>Atom Rule Reference</b></em>' containment reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference ATOM__ATOM_RULE_REFERENCE = eINSTANCE.getAtom_AtomRuleReference();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleReferenceImpl <em>Rule Reference</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RuleReferenceImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRuleReference()
+     * @generated
+     */
+    EClass RULE_REFERENCE = eINSTANCE.getRuleReference();
+
+    /**
+     * The meta object literal for the '<em><b>Ruleref</b></em>' reference feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference RULE_REFERENCE__RULEREF = eINSTANCE.getRuleReference_Ruleref();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl <em>String Rule</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getStringRule()
+     * @generated
+     */
+    EClass STRING_RULE = eINSTANCE.getStringRule();
+
+    /**
+     * The meta object literal for the '<em><b>Literal</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute STRING_RULE__LITERAL = eINSTANCE.getStringRule_Literal();
+
+    /**
+     * The meta object literal for the '<em><b>Colon</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute STRING_RULE__COLON = eINSTANCE.getStringRule_Colon();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.GroupedSequenceImpl <em>Grouped Sequence</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.GroupedSequenceImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getGroupedSequence()
+     * @generated
+     */
+    EClass GROUPED_SEQUENCE = eINSTANCE.getGroupedSequence();
+
+    /**
+     * The meta object literal for the '<em><b>Definition List</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference GROUPED_SEQUENCE__DEFINITION_LIST = eINSTANCE.getGroupedSequence_DefinitionList();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.OptionalSequenceImpl <em>Optional Sequence</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.OptionalSequenceImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getOptionalSequence()
+     * @generated
+     */
+    EClass OPTIONAL_SEQUENCE = eINSTANCE.getOptionalSequence();
+
+    /**
+     * The meta object literal for the '<em><b>Definition List</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference OPTIONAL_SEQUENCE__DEFINITION_LIST = eINSTANCE.getOptionalSequence_DefinitionList();
+
+    /**
+     * The meta object literal for the '{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl <em>Repeated Sequence</em>}' class.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl
+     * @see de.ugoe.cs.swe.bnftools.ebnf.impl.EbnfPackageImpl#getRepeatedSequence()
+     * @generated
+     */
+    EClass REPEATED_SEQUENCE = eINSTANCE.getRepeatedSequence();
+
+    /**
+     * The meta object literal for the '<em><b>Definitions</b></em>' containment reference list feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EReference REPEATED_SEQUENCE__DEFINITIONS = eINSTANCE.getRepeatedSequence_Definitions();
+
+    /**
+     * The meta object literal for the '<em><b>Morethanonce</b></em>' attribute feature.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    EAttribute REPEATED_SEQUENCE__MORETHANONCE = eINSTANCE.getRepeatedSequence_Morethanonce();
+
+  }
+
+} //EbnfPackage
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EtsiBnf.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EtsiBnf.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/EtsiBnf.java	(revision 61)
@@ -0,0 +1,158 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Etsi Bnf</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getType <em>Type</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getImportSection <em>Import Section</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getBnfEntry <em>Bnf Entry</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getDeltaEntry <em>Delta Entry</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getMergeEntry <em>Merge Entry</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf()
+ * @model
+ * @generated
+ */
+public interface EtsiBnf extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Type</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Type</em>' attribute.
+   * @see #setType(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_Type()
+   * @model
+   * @generated
+   */
+  String getType();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getType <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Type</em>' attribute.
+   * @see #getType()
+   * @generated
+   */
+  void setType(String value);
+
+  /**
+   * Returns the value of the '<em><b>Import Section</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Import Section</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Import Section</em>' containment reference.
+   * @see #setImportSection(ImportSection)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_ImportSection()
+   * @model containment="true"
+   * @generated
+   */
+  ImportSection getImportSection();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf#getImportSection <em>Import Section</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Import Section</em>' containment reference.
+   * @see #getImportSection()
+   * @generated
+   */
+  void setImportSection(ImportSection value);
+
+  /**
+   * Returns the value of the '<em><b>Bnf Entry</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Bnf Entry</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Bnf Entry</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_BnfEntry()
+   * @model containment="true"
+   * @generated
+   */
+  EList<BnfEntry> getBnfEntry();
+
+  /**
+   * Returns the value of the '<em><b>Delta Entry</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Delta Entry</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Delta Entry</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_DeltaEntry()
+   * @model containment="true"
+   * @generated
+   */
+  EList<DeltaEntry> getDeltaEntry();
+
+  /**
+   * Returns the value of the '<em><b>Merge Entry</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Merge Entry</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Merge Entry</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getEtsiBnf_MergeEntry()
+   * @model containment="true"
+   * @generated
+   */
+  EList<MergeEntry> getMergeEntry();
+
+} // EtsiBnf
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ExtRule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ExtRule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ExtRule.java	(revision 61)
@@ -0,0 +1,151 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Ext Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulenumber <em>Rulenumber</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulevariant <em>Rulevariant</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRuleext <em>Ruleext</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule()
+ * @model
+ * @generated
+ */
+public interface ExtRule extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Rulenumber</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rulenumber</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rulenumber</em>' attribute.
+   * @see #setRulenumber(int)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule_Rulenumber()
+   * @model
+   * @generated
+   */
+  int getRulenumber();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulenumber <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rulenumber</em>' attribute.
+   * @see #getRulenumber()
+   * @generated
+   */
+  void setRulenumber(int value);
+
+  /**
+   * Returns the value of the '<em><b>Rulevariant</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rulevariant</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rulevariant</em>' attribute.
+   * @see #setRulevariant(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule_Rulevariant()
+   * @model
+   * @generated
+   */
+  String getRulevariant();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRulevariant <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rulevariant</em>' attribute.
+   * @see #getRulevariant()
+   * @generated
+   */
+  void setRulevariant(String value);
+
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Ruleext</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ruleext</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ruleext</em>' attribute.
+   * @see #setRuleext(int)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule_Ruleext()
+   * @model
+   * @generated
+   */
+  int getRuleext();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule#getRuleext <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ruleext</em>' attribute.
+   * @see #getRuleext()
+   * @generated
+   */
+  void setRuleext(int value);
+
+  /**
+   * Returns the value of the '<em><b>Elements</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.Atom}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Elements</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Elements</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getExtRule_Elements()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Atom> getElements();
+
+} // ExtRule
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GlobalCombinator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GlobalCombinator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GlobalCombinator.java	(revision 61)
@@ -0,0 +1,18 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Global Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getGlobalCombinator()
+ * @model
+ * @generated
+ */
+public interface GlobalCombinator extends MergeRule
+{
+} // GlobalCombinator
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GroupedSequence.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GroupedSequence.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/GroupedSequence.java	(revision 61)
@@ -0,0 +1,43 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Grouped Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getGroupedSequence()
+ * @model
+ * @generated
+ */
+public interface GroupedSequence extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Definition List</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Definition List</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Definition List</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getGroupedSequence_DefinitionList()
+   * @model containment="true"
+   * @generated
+   */
+  EList<DefinitionList> getDefinitionList();
+
+} // GroupedSequence
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/HookCombinator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/HookCombinator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/HookCombinator.java	(revision 61)
@@ -0,0 +1,95 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Hook Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getRuleext <em>Ruleext</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getLABEL <em>LABEL</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getHookCombinator()
+ * @model
+ * @generated
+ */
+public interface HookCombinator extends MergeRule
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getHookCombinator_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Ruleext</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ruleext</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ruleext</em>' attribute.
+   * @see #setRuleext(int)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getHookCombinator_Ruleext()
+   * @model
+   * @generated
+   */
+  int getRuleext();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator#getRuleext <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ruleext</em>' attribute.
+   * @see #getRuleext()
+   * @generated
+   */
+  void setRuleext(int value);
+
+  /**
+   * Returns the value of the '<em><b>LABEL</b></em>' attribute list.
+   * The list contents are of type {@link java.lang.String}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>LABEL</em>' attribute list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>LABEL</em>' attribute list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getHookCombinator_LABEL()
+   * @model unique="false"
+   * @generated
+   */
+  EList<String> getLABEL();
+
+} // HookCombinator
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Import.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Import.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Import.java	(revision 61)
@@ -0,0 +1,105 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Import</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getImportURI <em>Import URI</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getGrammarType <em>Grammar Type</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getLabel <em>Label</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImport()
+ * @model
+ * @generated
+ */
+public interface Import extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Import URI</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Import URI</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Import URI</em>' attribute.
+   * @see #setImportURI(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImport_ImportURI()
+   * @model
+   * @generated
+   */
+  String getImportURI();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getImportURI <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Import URI</em>' attribute.
+   * @see #getImportURI()
+   * @generated
+   */
+  void setImportURI(String value);
+
+  /**
+   * Returns the value of the '<em><b>Grammar Type</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Grammar Type</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Grammar Type</em>' attribute.
+   * @see #setGrammarType(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImport_GrammarType()
+   * @model
+   * @generated
+   */
+  String getGrammarType();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getGrammarType <em>Grammar Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Grammar Type</em>' attribute.
+   * @see #getGrammarType()
+   * @generated
+   */
+  void setGrammarType(String value);
+
+  /**
+   * Returns the value of the '<em><b>Label</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Label</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Label</em>' attribute.
+   * @see #setLabel(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImport_Label()
+   * @model
+   * @generated
+   */
+  String getLabel();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Import#getLabel <em>Label</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Label</em>' attribute.
+   * @see #getLabel()
+   * @generated
+   */
+  void setLabel(String value);
+
+} // Import
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ImportSection.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ImportSection.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/ImportSection.java	(revision 61)
@@ -0,0 +1,43 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Import Section</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.ImportSection#getImports <em>Imports</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImportSection()
+ * @model
+ * @generated
+ */
+public interface ImportSection extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Imports</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.Import}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Imports</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Imports</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getImportSection_Imports()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Import> getImports();
+
+} // ImportSection
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeEntry.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeEntry.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeEntry.java	(revision 61)
@@ -0,0 +1,78 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Merge Entry</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getMergeRule <em>Merge Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getMergeEntry()
+ * @model
+ * @generated
+ */
+public interface MergeEntry extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Sectionheader</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Sectionheader</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Sectionheader</em>' containment reference.
+   * @see #setSectionheader(SectionHeading)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getMergeEntry_Sectionheader()
+   * @model containment="true"
+   * @generated
+   */
+  SectionHeading getSectionheader();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getSectionheader <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Sectionheader</em>' containment reference.
+   * @see #getSectionheader()
+   * @generated
+   */
+  void setSectionheader(SectionHeading value);
+
+  /**
+   * Returns the value of the '<em><b>Merge Rule</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Merge Rule</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Merge Rule</em>' containment reference.
+   * @see #setMergeRule(MergeRule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getMergeEntry_MergeRule()
+   * @model containment="true"
+   * @generated
+   */
+  MergeRule getMergeRule();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry#getMergeRule <em>Merge Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Merge Rule</em>' containment reference.
+   * @see #getMergeRule()
+   * @generated
+   */
+  void setMergeRule(MergeRule value);
+
+} // MergeEntry
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeRule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeRule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/MergeRule.java	(revision 61)
@@ -0,0 +1,51 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Merge Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.MergeRule#getLogic <em>Logic</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getMergeRule()
+ * @model
+ * @generated
+ */
+public interface MergeRule extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Logic</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Logic</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Logic</em>' attribute.
+   * @see #setLogic(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getMergeRule_Logic()
+   * @model
+   * @generated
+   */
+  String getLogic();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeRule#getLogic <em>Logic</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Logic</em>' attribute.
+   * @see #getLogic()
+   * @generated
+   */
+  void setLogic(String value);
+
+} // MergeRule
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/OptionalSequence.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/OptionalSequence.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/OptionalSequence.java	(revision 61)
@@ -0,0 +1,43 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Optional Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getOptionalSequence()
+ * @model
+ * @generated
+ */
+public interface OptionalSequence extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Definition List</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Definition List</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Definition List</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getOptionalSequence_DefinitionList()
+   * @model containment="true"
+   * @generated
+   */
+  EList<DefinitionList> getDefinitionList();
+
+} // OptionalSequence
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RepeatedSequence.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RepeatedSequence.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RepeatedSequence.java	(revision 61)
@@ -0,0 +1,70 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Repeated Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#getDefinitions <em>Definitions</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#isMorethanonce <em>Morethanonce</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRepeatedSequence()
+ * @model
+ * @generated
+ */
+public interface RepeatedSequence extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Definitions</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Definitions</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Definitions</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRepeatedSequence_Definitions()
+   * @model containment="true"
+   * @generated
+   */
+  EList<DefinitionList> getDefinitions();
+
+  /**
+   * Returns the value of the '<em><b>Morethanonce</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Morethanonce</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Morethanonce</em>' attribute.
+   * @see #setMorethanonce(boolean)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRepeatedSequence_Morethanonce()
+   * @model
+   * @generated
+   */
+  boolean isMorethanonce();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence#isMorethanonce <em>Morethanonce</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Morethanonce</em>' attribute.
+   * @see #isMorethanonce()
+   * @generated
+   */
+  void setMorethanonce(boolean value);
+
+} // RepeatedSequence
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Rule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Rule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Rule.java	(revision 61)
@@ -0,0 +1,132 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulenumber <em>Rulenumber</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulevariant <em>Rulevariant</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRule()
+ * @model
+ * @generated
+ */
+public interface Rule extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Rulenumber</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rulenumber</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rulenumber</em>' attribute.
+   * @see #setRulenumber(int)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRule_Rulenumber()
+   * @model
+   * @generated
+   */
+  int getRulenumber();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulenumber <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rulenumber</em>' attribute.
+   * @see #getRulenumber()
+   * @generated
+   */
+  void setRulenumber(int value);
+
+  /**
+   * Returns the value of the '<em><b>Rulevariant</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Rulevariant</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Rulevariant</em>' attribute.
+   * @see #setRulevariant(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRule_Rulevariant()
+   * @model
+   * @generated
+   */
+  String getRulevariant();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getRulevariant <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Rulevariant</em>' attribute.
+   * @see #getRulevariant()
+   * @generated
+   */
+  void setRulevariant(String value);
+
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRule_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>Definition List</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Definition List</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Definition List</em>' containment reference.
+   * @see #setDefinitionList(DefinitionList)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRule_DefinitionList()
+   * @model containment="true"
+   * @generated
+   */
+  DefinitionList getDefinitionList();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule#getDefinitionList <em>Definition List</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Definition List</em>' containment reference.
+   * @see #getDefinitionList()
+   * @generated
+   */
+  void setDefinitionList(DefinitionList value);
+
+} // Rule
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleCombinator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleCombinator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleCombinator.java	(revision 61)
@@ -0,0 +1,68 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Rule Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getLABEL <em>LABEL</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRuleCombinator()
+ * @model
+ * @generated
+ */
+public interface RuleCombinator extends MergeRule
+{
+  /**
+   * Returns the value of the '<em><b>Name</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Name</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Name</em>' attribute.
+   * @see #setName(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRuleCombinator_Name()
+   * @model
+   * @generated
+   */
+  String getName();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator#getName <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Name</em>' attribute.
+   * @see #getName()
+   * @generated
+   */
+  void setName(String value);
+
+  /**
+   * Returns the value of the '<em><b>LABEL</b></em>' attribute list.
+   * The list contents are of type {@link java.lang.String}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>LABEL</em>' attribute list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>LABEL</em>' attribute list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRuleCombinator_LABEL()
+   * @model unique="false"
+   * @generated
+   */
+  EList<String> getLABEL();
+
+} // RuleCombinator
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleReference.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleReference.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/RuleReference.java	(revision 61)
@@ -0,0 +1,51 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Rule Reference</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.RuleReference#getRuleref <em>Ruleref</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRuleReference()
+ * @model
+ * @generated
+ */
+public interface RuleReference extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Ruleref</b></em>' reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Ruleref</em>' reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Ruleref</em>' reference.
+   * @see #setRuleref(Rule)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getRuleReference_Ruleref()
+   * @model
+   * @generated
+   */
+  Rule getRuleref();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleReference#getRuleref <em>Ruleref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Ruleref</em>' reference.
+   * @see #getRuleref()
+   * @generated
+   */
+  void setRuleref(Rule value);
+
+} // RuleReference
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SectionHeading.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SectionHeading.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SectionHeading.java	(revision 61)
@@ -0,0 +1,51 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Section Heading</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.SectionHeading#getSectionHeader <em>Section Header</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getSectionHeading()
+ * @model
+ * @generated
+ */
+public interface SectionHeading extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Section Header</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Section Header</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Section Header</em>' attribute.
+   * @see #setSectionHeader(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getSectionHeading_SectionHeader()
+   * @model
+   * @generated
+   */
+  String getSectionHeader();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.SectionHeading#getSectionHeader <em>Section Header</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Section Header</em>' attribute.
+   * @see #getSectionHeader()
+   * @generated
+   */
+  void setSectionHeader(String value);
+
+} // SectionHeading
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SingleDefinition.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SingleDefinition.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/SingleDefinition.java	(revision 61)
@@ -0,0 +1,43 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Single Definition</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition#getTerms <em>Terms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getSingleDefinition()
+ * @model
+ * @generated
+ */
+public interface SingleDefinition extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Terms</b></em>' containment reference list.
+   * The list contents are of type {@link de.ugoe.cs.swe.bnftools.ebnf.Term}.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Terms</em>' containment reference list isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Terms</em>' containment reference list.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getSingleDefinition_Terms()
+   * @model containment="true"
+   * @generated
+   */
+  EList<Term> getTerms();
+
+} // SingleDefinition
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/StringRule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/StringRule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/StringRule.java	(revision 61)
@@ -0,0 +1,78 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>String Rule</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getLiteral <em>Literal</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getColon <em>Colon</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getStringRule()
+ * @model
+ * @generated
+ */
+public interface StringRule extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Literal</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Literal</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Literal</em>' attribute.
+   * @see #setLiteral(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getStringRule_Literal()
+   * @model
+   * @generated
+   */
+  String getLiteral();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getLiteral <em>Literal</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Literal</em>' attribute.
+   * @see #getLiteral()
+   * @generated
+   */
+  void setLiteral(String value);
+
+  /**
+   * Returns the value of the '<em><b>Colon</b></em>' attribute.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Colon</em>' attribute isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Colon</em>' attribute.
+   * @see #setColon(String)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getStringRule_Colon()
+   * @model
+   * @generated
+   */
+  String getColon();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule#getColon <em>Colon</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Colon</em>' attribute.
+   * @see #getColon()
+   * @generated
+   */
+  void setColon(String value);
+
+} // StringRule
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Term.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Term.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/Term.java	(revision 61)
@@ -0,0 +1,132 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Term</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <p>
+ * The following features are supported:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermAtom <em>Term Atom</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermGroupedSequence <em>Term Grouped Sequence</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermOptionalSequence <em>Term Optional Sequence</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermRepeatedSequence <em>Term Repeated Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getTerm()
+ * @model
+ * @generated
+ */
+public interface Term extends EObject
+{
+  /**
+   * Returns the value of the '<em><b>Term Atom</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Term Atom</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Term Atom</em>' containment reference.
+   * @see #setTermAtom(Atom)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getTerm_TermAtom()
+   * @model containment="true"
+   * @generated
+   */
+  Atom getTermAtom();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermAtom <em>Term Atom</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Term Atom</em>' containment reference.
+   * @see #getTermAtom()
+   * @generated
+   */
+  void setTermAtom(Atom value);
+
+  /**
+   * Returns the value of the '<em><b>Term Grouped Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Term Grouped Sequence</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Term Grouped Sequence</em>' containment reference.
+   * @see #setTermGroupedSequence(GroupedSequence)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getTerm_TermGroupedSequence()
+   * @model containment="true"
+   * @generated
+   */
+  GroupedSequence getTermGroupedSequence();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermGroupedSequence <em>Term Grouped Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Term Grouped Sequence</em>' containment reference.
+   * @see #getTermGroupedSequence()
+   * @generated
+   */
+  void setTermGroupedSequence(GroupedSequence value);
+
+  /**
+   * Returns the value of the '<em><b>Term Optional Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Term Optional Sequence</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Term Optional Sequence</em>' containment reference.
+   * @see #setTermOptionalSequence(OptionalSequence)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getTerm_TermOptionalSequence()
+   * @model containment="true"
+   * @generated
+   */
+  OptionalSequence getTermOptionalSequence();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermOptionalSequence <em>Term Optional Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Term Optional Sequence</em>' containment reference.
+   * @see #getTermOptionalSequence()
+   * @generated
+   */
+  void setTermOptionalSequence(OptionalSequence value);
+
+  /**
+   * Returns the value of the '<em><b>Term Repeated Sequence</b></em>' containment reference.
+   * <!-- begin-user-doc -->
+   * <p>
+   * If the meaning of the '<em>Term Repeated Sequence</em>' containment reference isn't clear,
+   * there really should be more of a description here...
+   * </p>
+   * <!-- end-user-doc -->
+   * @return the value of the '<em>Term Repeated Sequence</em>' containment reference.
+   * @see #setTermRepeatedSequence(RepeatedSequence)
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#getTerm_TermRepeatedSequence()
+   * @model containment="true"
+   * @generated
+   */
+  RepeatedSequence getTermRepeatedSequence();
+
+  /**
+   * Sets the value of the '{@link de.ugoe.cs.swe.bnftools.ebnf.Term#getTermRepeatedSequence <em>Term Repeated Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param value the new value of the '<em>Term Repeated Sequence</em>' containment reference.
+   * @see #getTermRepeatedSequence()
+   * @generated
+   */
+  void setTermRepeatedSequence(RepeatedSequence value);
+
+} // Term
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/AtomImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/AtomImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/AtomImpl.java	(revision 61)
@@ -0,0 +1,266 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Atom</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl#getAtomStringRule <em>Atom String Rule</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.AtomImpl#getAtomRuleReference <em>Atom Rule Reference</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class AtomImpl extends MinimalEObjectImpl.Container implements Atom
+{
+  /**
+   * The cached value of the '{@link #getAtomStringRule() <em>Atom String Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAtomStringRule()
+   * @generated
+   * @ordered
+   */
+  protected StringRule atomStringRule;
+
+  /**
+   * The cached value of the '{@link #getAtomRuleReference() <em>Atom Rule Reference</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getAtomRuleReference()
+   * @generated
+   * @ordered
+   */
+  protected RuleReference atomRuleReference;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected AtomImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.ATOM;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StringRule getAtomStringRule()
+  {
+    return atomStringRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAtomStringRule(StringRule newAtomStringRule, NotificationChain msgs)
+  {
+    StringRule oldAtomStringRule = atomStringRule;
+    atomStringRule = newAtomStringRule;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.ATOM__ATOM_STRING_RULE, oldAtomStringRule, newAtomStringRule);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAtomStringRule(StringRule newAtomStringRule)
+  {
+    if (newAtomStringRule != atomStringRule)
+    {
+      NotificationChain msgs = null;
+      if (atomStringRule != null)
+        msgs = ((InternalEObject)atomStringRule).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ATOM__ATOM_STRING_RULE, null, msgs);
+      if (newAtomStringRule != null)
+        msgs = ((InternalEObject)newAtomStringRule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ATOM__ATOM_STRING_RULE, null, msgs);
+      msgs = basicSetAtomStringRule(newAtomStringRule, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.ATOM__ATOM_STRING_RULE, newAtomStringRule, newAtomStringRule));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RuleReference getAtomRuleReference()
+  {
+    return atomRuleReference;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetAtomRuleReference(RuleReference newAtomRuleReference, NotificationChain msgs)
+  {
+    RuleReference oldAtomRuleReference = atomRuleReference;
+    atomRuleReference = newAtomRuleReference;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.ATOM__ATOM_RULE_REFERENCE, oldAtomRuleReference, newAtomRuleReference);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setAtomRuleReference(RuleReference newAtomRuleReference)
+  {
+    if (newAtomRuleReference != atomRuleReference)
+    {
+      NotificationChain msgs = null;
+      if (atomRuleReference != null)
+        msgs = ((InternalEObject)atomRuleReference).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ATOM__ATOM_RULE_REFERENCE, null, msgs);
+      if (newAtomRuleReference != null)
+        msgs = ((InternalEObject)newAtomRuleReference).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ATOM__ATOM_RULE_REFERENCE, null, msgs);
+      msgs = basicSetAtomRuleReference(newAtomRuleReference, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.ATOM__ATOM_RULE_REFERENCE, newAtomRuleReference, newAtomRuleReference));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ATOM__ATOM_STRING_RULE:
+        return basicSetAtomStringRule(null, msgs);
+      case EbnfPackage.ATOM__ATOM_RULE_REFERENCE:
+        return basicSetAtomRuleReference(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ATOM__ATOM_STRING_RULE:
+        return getAtomStringRule();
+      case EbnfPackage.ATOM__ATOM_RULE_REFERENCE:
+        return getAtomRuleReference();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ATOM__ATOM_STRING_RULE:
+        setAtomStringRule((StringRule)newValue);
+        return;
+      case EbnfPackage.ATOM__ATOM_RULE_REFERENCE:
+        setAtomRuleReference((RuleReference)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ATOM__ATOM_STRING_RULE:
+        setAtomStringRule((StringRule)null);
+        return;
+      case EbnfPackage.ATOM__ATOM_RULE_REFERENCE:
+        setAtomRuleReference((RuleReference)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ATOM__ATOM_STRING_RULE:
+        return atomStringRule != null;
+      case EbnfPackage.ATOM__ATOM_RULE_REFERENCE:
+        return atomRuleReference != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //AtomImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/BnfEntryImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/BnfEntryImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/BnfEntryImpl.java	(revision 61)
@@ -0,0 +1,266 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Bnf Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.BnfEntryImpl#getRule <em>Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class BnfEntryImpl extends MinimalEObjectImpl.Container implements BnfEntry
+{
+  /**
+   * The cached value of the '{@link #getSectionheader() <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSectionheader()
+   * @generated
+   * @ordered
+   */
+  protected SectionHeading sectionheader;
+
+  /**
+   * The cached value of the '{@link #getRule() <em>Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRule()
+   * @generated
+   * @ordered
+   */
+  protected Rule rule;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected BnfEntryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.BNF_ENTRY;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SectionHeading getSectionheader()
+  {
+    return sectionheader;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetSectionheader(SectionHeading newSectionheader, NotificationChain msgs)
+  {
+    SectionHeading oldSectionheader = sectionheader;
+    sectionheader = newSectionheader;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.BNF_ENTRY__SECTIONHEADER, oldSectionheader, newSectionheader);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSectionheader(SectionHeading newSectionheader)
+  {
+    if (newSectionheader != sectionheader)
+    {
+      NotificationChain msgs = null;
+      if (sectionheader != null)
+        msgs = ((InternalEObject)sectionheader).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.BNF_ENTRY__SECTIONHEADER, null, msgs);
+      if (newSectionheader != null)
+        msgs = ((InternalEObject)newSectionheader).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.BNF_ENTRY__SECTIONHEADER, null, msgs);
+      msgs = basicSetSectionheader(newSectionheader, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.BNF_ENTRY__SECTIONHEADER, newSectionheader, newSectionheader));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rule getRule()
+  {
+    return rule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRule(Rule newRule, NotificationChain msgs)
+  {
+    Rule oldRule = rule;
+    rule = newRule;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.BNF_ENTRY__RULE, oldRule, newRule);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRule(Rule newRule)
+  {
+    if (newRule != rule)
+    {
+      NotificationChain msgs = null;
+      if (rule != null)
+        msgs = ((InternalEObject)rule).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.BNF_ENTRY__RULE, null, msgs);
+      if (newRule != null)
+        msgs = ((InternalEObject)newRule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.BNF_ENTRY__RULE, null, msgs);
+      msgs = basicSetRule(newRule, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.BNF_ENTRY__RULE, newRule, newRule));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.BNF_ENTRY__SECTIONHEADER:
+        return basicSetSectionheader(null, msgs);
+      case EbnfPackage.BNF_ENTRY__RULE:
+        return basicSetRule(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.BNF_ENTRY__SECTIONHEADER:
+        return getSectionheader();
+      case EbnfPackage.BNF_ENTRY__RULE:
+        return getRule();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.BNF_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)newValue);
+        return;
+      case EbnfPackage.BNF_ENTRY__RULE:
+        setRule((Rule)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.BNF_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)null);
+        return;
+      case EbnfPackage.BNF_ENTRY__RULE:
+        setRule((Rule)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.BNF_ENTRY__SECTIONHEADER:
+        return sectionheader != null;
+      case EbnfPackage.BNF_ENTRY__RULE:
+        return rule != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //BnfEntryImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DefinitionListImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DefinitionListImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DefinitionListImpl.java	(revision 61)
@@ -0,0 +1,167 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Definition List</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DefinitionListImpl#getSingleDefinition <em>Single Definition</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DefinitionListImpl extends MinimalEObjectImpl.Container implements DefinitionList
+{
+  /**
+   * The cached value of the '{@link #getSingleDefinition() <em>Single Definition</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSingleDefinition()
+   * @generated
+   * @ordered
+   */
+  protected EList<SingleDefinition> singleDefinition;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected DefinitionListImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.DEFINITION_LIST;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<SingleDefinition> getSingleDefinition()
+  {
+    if (singleDefinition == null)
+    {
+      singleDefinition = new EObjectContainmentEList<SingleDefinition>(SingleDefinition.class, this, EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION);
+    }
+    return singleDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION:
+        return ((InternalEList<?>)getSingleDefinition()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION:
+        return getSingleDefinition();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION:
+        getSingleDefinition().clear();
+        getSingleDefinition().addAll((Collection<? extends SingleDefinition>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION:
+        getSingleDefinition().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DEFINITION_LIST__SINGLE_DEFINITION:
+        return singleDefinition != null && !singleDefinition.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //DefinitionListImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DeltaEntryImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DeltaEntryImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/DeltaEntryImpl.java	(revision 61)
@@ -0,0 +1,338 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Delta Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl#getRule <em>Rule</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.DeltaEntryImpl#getExtRule <em>Ext Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class DeltaEntryImpl extends MinimalEObjectImpl.Container implements DeltaEntry
+{
+  /**
+   * The cached value of the '{@link #getRule() <em>Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRule()
+   * @generated
+   * @ordered
+   */
+  protected Rule rule;
+
+  /**
+   * The cached value of the '{@link #getSectionheader() <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSectionheader()
+   * @generated
+   * @ordered
+   */
+  protected SectionHeading sectionheader;
+
+  /**
+   * The cached value of the '{@link #getExtRule() <em>Ext Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getExtRule()
+   * @generated
+   * @ordered
+   */
+  protected ExtRule extRule;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected DeltaEntryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.DELTA_ENTRY;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rule getRule()
+  {
+    return rule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetRule(Rule newRule, NotificationChain msgs)
+  {
+    Rule oldRule = rule;
+    rule = newRule;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__RULE, oldRule, newRule);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRule(Rule newRule)
+  {
+    if (newRule != rule)
+    {
+      NotificationChain msgs = null;
+      if (rule != null)
+        msgs = ((InternalEObject)rule).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__RULE, null, msgs);
+      if (newRule != null)
+        msgs = ((InternalEObject)newRule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__RULE, null, msgs);
+      msgs = basicSetRule(newRule, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__RULE, newRule, newRule));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SectionHeading getSectionheader()
+  {
+    return sectionheader;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetSectionheader(SectionHeading newSectionheader, NotificationChain msgs)
+  {
+    SectionHeading oldSectionheader = sectionheader;
+    sectionheader = newSectionheader;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__SECTIONHEADER, oldSectionheader, newSectionheader);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSectionheader(SectionHeading newSectionheader)
+  {
+    if (newSectionheader != sectionheader)
+    {
+      NotificationChain msgs = null;
+      if (sectionheader != null)
+        msgs = ((InternalEObject)sectionheader).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__SECTIONHEADER, null, msgs);
+      if (newSectionheader != null)
+        msgs = ((InternalEObject)newSectionheader).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__SECTIONHEADER, null, msgs);
+      msgs = basicSetSectionheader(newSectionheader, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__SECTIONHEADER, newSectionheader, newSectionheader));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ExtRule getExtRule()
+  {
+    return extRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetExtRule(ExtRule newExtRule, NotificationChain msgs)
+  {
+    ExtRule oldExtRule = extRule;
+    extRule = newExtRule;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__EXT_RULE, oldExtRule, newExtRule);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setExtRule(ExtRule newExtRule)
+  {
+    if (newExtRule != extRule)
+    {
+      NotificationChain msgs = null;
+      if (extRule != null)
+        msgs = ((InternalEObject)extRule).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__EXT_RULE, null, msgs);
+      if (newExtRule != null)
+        msgs = ((InternalEObject)newExtRule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.DELTA_ENTRY__EXT_RULE, null, msgs);
+      msgs = basicSetExtRule(newExtRule, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.DELTA_ENTRY__EXT_RULE, newExtRule, newExtRule));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DELTA_ENTRY__RULE:
+        return basicSetRule(null, msgs);
+      case EbnfPackage.DELTA_ENTRY__SECTIONHEADER:
+        return basicSetSectionheader(null, msgs);
+      case EbnfPackage.DELTA_ENTRY__EXT_RULE:
+        return basicSetExtRule(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DELTA_ENTRY__RULE:
+        return getRule();
+      case EbnfPackage.DELTA_ENTRY__SECTIONHEADER:
+        return getSectionheader();
+      case EbnfPackage.DELTA_ENTRY__EXT_RULE:
+        return getExtRule();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DELTA_ENTRY__RULE:
+        setRule((Rule)newValue);
+        return;
+      case EbnfPackage.DELTA_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)newValue);
+        return;
+      case EbnfPackage.DELTA_ENTRY__EXT_RULE:
+        setExtRule((ExtRule)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DELTA_ENTRY__RULE:
+        setRule((Rule)null);
+        return;
+      case EbnfPackage.DELTA_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)null);
+        return;
+      case EbnfPackage.DELTA_ENTRY__EXT_RULE:
+        setExtRule((ExtRule)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.DELTA_ENTRY__RULE:
+        return rule != null;
+      case EbnfPackage.DELTA_ENTRY__SECTIONHEADER:
+        return sectionheader != null;
+      case EbnfPackage.DELTA_ENTRY__EXT_RULE:
+        return extRule != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //DeltaEntryImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfFactoryImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfFactoryImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfFactoryImpl.java	(revision 61)
@@ -0,0 +1,358 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.*;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.impl.EFactoryImpl;
+
+import org.eclipse.emf.ecore.plugin.EcorePlugin;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Factory</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EbnfFactoryImpl extends EFactoryImpl implements EbnfFactory
+{
+  /**
+   * Creates the default factory implementation.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public static EbnfFactory init()
+  {
+    try
+    {
+      EbnfFactory theEbnfFactory = (EbnfFactory)EPackage.Registry.INSTANCE.getEFactory(EbnfPackage.eNS_URI);
+      if (theEbnfFactory != null)
+      {
+        return theEbnfFactory;
+      }
+    }
+    catch (Exception exception)
+    {
+      EcorePlugin.INSTANCE.log(exception);
+    }
+    return new EbnfFactoryImpl();
+  }
+
+  /**
+   * Creates an instance of the factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EbnfFactoryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public EObject create(EClass eClass)
+  {
+    switch (eClass.getClassifierID())
+    {
+      case EbnfPackage.ETSI_BNF: return createEtsiBnf();
+      case EbnfPackage.IMPORT_SECTION: return createImportSection();
+      case EbnfPackage.BNF_ENTRY: return createBnfEntry();
+      case EbnfPackage.DELTA_ENTRY: return createDeltaEntry();
+      case EbnfPackage.MERGE_ENTRY: return createMergeEntry();
+      case EbnfPackage.SECTION_HEADING: return createSectionHeading();
+      case EbnfPackage.IMPORT: return createImport();
+      case EbnfPackage.RULE: return createRule();
+      case EbnfPackage.EXT_RULE: return createExtRule();
+      case EbnfPackage.MERGE_RULE: return createMergeRule();
+      case EbnfPackage.GLOBAL_COMBINATOR: return createGlobalCombinator();
+      case EbnfPackage.RULE_COMBINATOR: return createRuleCombinator();
+      case EbnfPackage.HOOK_COMBINATOR: return createHookCombinator();
+      case EbnfPackage.DEFINITION_LIST: return createDefinitionList();
+      case EbnfPackage.SINGLE_DEFINITION: return createSingleDefinition();
+      case EbnfPackage.TERM: return createTerm();
+      case EbnfPackage.ATOM: return createAtom();
+      case EbnfPackage.RULE_REFERENCE: return createRuleReference();
+      case EbnfPackage.STRING_RULE: return createStringRule();
+      case EbnfPackage.GROUPED_SEQUENCE: return createGroupedSequence();
+      case EbnfPackage.OPTIONAL_SEQUENCE: return createOptionalSequence();
+      case EbnfPackage.REPEATED_SEQUENCE: return createRepeatedSequence();
+      default:
+        throw new IllegalArgumentException("The class '" + eClass.getName() + "' is not a valid classifier");
+    }
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EtsiBnf createEtsiBnf()
+  {
+    EtsiBnfImpl etsiBnf = new EtsiBnfImpl();
+    return etsiBnf;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ImportSection createImportSection()
+  {
+    ImportSectionImpl importSection = new ImportSectionImpl();
+    return importSection;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public BnfEntry createBnfEntry()
+  {
+    BnfEntryImpl bnfEntry = new BnfEntryImpl();
+    return bnfEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public DeltaEntry createDeltaEntry()
+  {
+    DeltaEntryImpl deltaEntry = new DeltaEntryImpl();
+    return deltaEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MergeEntry createMergeEntry()
+  {
+    MergeEntryImpl mergeEntry = new MergeEntryImpl();
+    return mergeEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SectionHeading createSectionHeading()
+  {
+    SectionHeadingImpl sectionHeading = new SectionHeadingImpl();
+    return sectionHeading;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Import createImport()
+  {
+    ImportImpl import_ = new ImportImpl();
+    return import_;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rule createRule()
+  {
+    RuleImpl rule = new RuleImpl();
+    return rule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ExtRule createExtRule()
+  {
+    ExtRuleImpl extRule = new ExtRuleImpl();
+    return extRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MergeRule createMergeRule()
+  {
+    MergeRuleImpl mergeRule = new MergeRuleImpl();
+    return mergeRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public GlobalCombinator createGlobalCombinator()
+  {
+    GlobalCombinatorImpl globalCombinator = new GlobalCombinatorImpl();
+    return globalCombinator;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RuleCombinator createRuleCombinator()
+  {
+    RuleCombinatorImpl ruleCombinator = new RuleCombinatorImpl();
+    return ruleCombinator;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public HookCombinator createHookCombinator()
+  {
+    HookCombinatorImpl hookCombinator = new HookCombinatorImpl();
+    return hookCombinator;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public DefinitionList createDefinitionList()
+  {
+    DefinitionListImpl definitionList = new DefinitionListImpl();
+    return definitionList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SingleDefinition createSingleDefinition()
+  {
+    SingleDefinitionImpl singleDefinition = new SingleDefinitionImpl();
+    return singleDefinition;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Term createTerm()
+  {
+    TermImpl term = new TermImpl();
+    return term;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Atom createAtom()
+  {
+    AtomImpl atom = new AtomImpl();
+    return atom;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RuleReference createRuleReference()
+  {
+    RuleReferenceImpl ruleReference = new RuleReferenceImpl();
+    return ruleReference;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public StringRule createStringRule()
+  {
+    StringRuleImpl stringRule = new StringRuleImpl();
+    return stringRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public GroupedSequence createGroupedSequence()
+  {
+    GroupedSequenceImpl groupedSequence = new GroupedSequenceImpl();
+    return groupedSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public OptionalSequence createOptionalSequence()
+  {
+    OptionalSequenceImpl optionalSequence = new OptionalSequenceImpl();
+    return optionalSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RepeatedSequence createRepeatedSequence()
+  {
+    RepeatedSequenceImpl repeatedSequence = new RepeatedSequenceImpl();
+    return repeatedSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EbnfPackage getEbnfPackage()
+  {
+    return (EbnfPackage)getEPackage();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @deprecated
+   * @generated
+   */
+  @Deprecated
+  public static EbnfPackage getPackage()
+  {
+    return EbnfPackage.eINSTANCE;
+  }
+
+} //EbnfFactoryImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfPackageImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfPackageImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EbnfPackageImpl.java	(revision 61)
@@ -0,0 +1,1215 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfFactory;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+
+import org.eclipse.emf.ecore.EAttribute;
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.EPackage;
+import org.eclipse.emf.ecore.EReference;
+
+import org.eclipse.emf.ecore.impl.EPackageImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model <b>Package</b>.
+ * <!-- end-user-doc -->
+ * @generated
+ */
+public class EbnfPackageImpl extends EPackageImpl implements EbnfPackage
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass etsiBnfEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass importSectionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass bnfEntryEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass deltaEntryEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass mergeEntryEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass sectionHeadingEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass importEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass ruleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass extRuleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass mergeRuleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass globalCombinatorEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass ruleCombinatorEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass hookCombinatorEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass definitionListEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass singleDefinitionEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass termEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass atomEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass ruleReferenceEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass stringRuleEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass groupedSequenceEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass optionalSequenceEClass = null;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private EClass repeatedSequenceEClass = null;
+
+  /**
+   * Creates an instance of the model <b>Package</b>, registered with
+   * {@link org.eclipse.emf.ecore.EPackage.Registry EPackage.Registry} by the package
+   * package URI value.
+   * <p>Note: the correct way to create the package is via the static
+   * factory method {@link #init init()}, which also performs
+   * initialization of the package, or returns the registered package,
+   * if one already exists.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see org.eclipse.emf.ecore.EPackage.Registry
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage#eNS_URI
+   * @see #init()
+   * @generated
+   */
+  private EbnfPackageImpl()
+  {
+    super(eNS_URI, EbnfFactory.eINSTANCE);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private static boolean isInited = false;
+
+  /**
+   * Creates, registers, and initializes the <b>Package</b> for this model, and for any others upon which it depends.
+   * 
+   * <p>This method is used to initialize {@link EbnfPackage#eINSTANCE} when that field is accessed.
+   * Clients should not invoke it directly. Instead, they should simply access that field to obtain the package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #eNS_URI
+   * @see #createPackageContents()
+   * @see #initializePackageContents()
+   * @generated
+   */
+  public static EbnfPackage init()
+  {
+    if (isInited) return (EbnfPackage)EPackage.Registry.INSTANCE.getEPackage(EbnfPackage.eNS_URI);
+
+    // Obtain or create and register package
+    EbnfPackageImpl theEbnfPackage = (EbnfPackageImpl)(EPackage.Registry.INSTANCE.get(eNS_URI) instanceof EbnfPackageImpl ? EPackage.Registry.INSTANCE.get(eNS_URI) : new EbnfPackageImpl());
+
+    isInited = true;
+
+    // Create package meta-data objects
+    theEbnfPackage.createPackageContents();
+
+    // Initialize created meta-data
+    theEbnfPackage.initializePackageContents();
+
+    // Mark meta-data to indicate it can't be changed
+    theEbnfPackage.freeze();
+
+  
+    // Update the registry and return the package
+    EPackage.Registry.INSTANCE.put(EbnfPackage.eNS_URI, theEbnfPackage);
+    return theEbnfPackage;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getEtsiBnf()
+  {
+    return etsiBnfEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getEtsiBnf_Name()
+  {
+    return (EAttribute)etsiBnfEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getEtsiBnf_Type()
+  {
+    return (EAttribute)etsiBnfEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEtsiBnf_ImportSection()
+  {
+    return (EReference)etsiBnfEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEtsiBnf_BnfEntry()
+  {
+    return (EReference)etsiBnfEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEtsiBnf_DeltaEntry()
+  {
+    return (EReference)etsiBnfEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getEtsiBnf_MergeEntry()
+  {
+    return (EReference)etsiBnfEClass.getEStructuralFeatures().get(5);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getImportSection()
+  {
+    return importSectionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getImportSection_Imports()
+  {
+    return (EReference)importSectionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getBnfEntry()
+  {
+    return bnfEntryEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBnfEntry_Sectionheader()
+  {
+    return (EReference)bnfEntryEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getBnfEntry_Rule()
+  {
+    return (EReference)bnfEntryEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getDeltaEntry()
+  {
+    return deltaEntryEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getDeltaEntry_Rule()
+  {
+    return (EReference)deltaEntryEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getDeltaEntry_Sectionheader()
+  {
+    return (EReference)deltaEntryEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getDeltaEntry_ExtRule()
+  {
+    return (EReference)deltaEntryEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMergeEntry()
+  {
+    return mergeEntryEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMergeEntry_Sectionheader()
+  {
+    return (EReference)mergeEntryEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getMergeEntry_MergeRule()
+  {
+    return (EReference)mergeEntryEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getSectionHeading()
+  {
+    return sectionHeadingEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getSectionHeading_SectionHeader()
+  {
+    return (EAttribute)sectionHeadingEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getImport()
+  {
+    return importEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getImport_ImportURI()
+  {
+    return (EAttribute)importEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getImport_GrammarType()
+  {
+    return (EAttribute)importEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getImport_Label()
+  {
+    return (EAttribute)importEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRule()
+  {
+    return ruleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRule_Rulenumber()
+  {
+    return (EAttribute)ruleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRule_Rulevariant()
+  {
+    return (EAttribute)ruleEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRule_Name()
+  {
+    return (EAttribute)ruleEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getRule_DefinitionList()
+  {
+    return (EReference)ruleEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getExtRule()
+  {
+    return extRuleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExtRule_Rulenumber()
+  {
+    return (EAttribute)extRuleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExtRule_Rulevariant()
+  {
+    return (EAttribute)extRuleEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExtRule_Name()
+  {
+    return (EAttribute)extRuleEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getExtRule_Ruleext()
+  {
+    return (EAttribute)extRuleEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getExtRule_Elements()
+  {
+    return (EReference)extRuleEClass.getEStructuralFeatures().get(4);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getMergeRule()
+  {
+    return mergeRuleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getMergeRule_Logic()
+  {
+    return (EAttribute)mergeRuleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getGlobalCombinator()
+  {
+    return globalCombinatorEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRuleCombinator()
+  {
+    return ruleCombinatorEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRuleCombinator_Name()
+  {
+    return (EAttribute)ruleCombinatorEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRuleCombinator_LABEL()
+  {
+    return (EAttribute)ruleCombinatorEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getHookCombinator()
+  {
+    return hookCombinatorEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getHookCombinator_Name()
+  {
+    return (EAttribute)hookCombinatorEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getHookCombinator_Ruleext()
+  {
+    return (EAttribute)hookCombinatorEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getHookCombinator_LABEL()
+  {
+    return (EAttribute)hookCombinatorEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getDefinitionList()
+  {
+    return definitionListEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getDefinitionList_SingleDefinition()
+  {
+    return (EReference)definitionListEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getSingleDefinition()
+  {
+    return singleDefinitionEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getSingleDefinition_Terms()
+  {
+    return (EReference)singleDefinitionEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getTerm()
+  {
+    return termEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_TermAtom()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_TermGroupedSequence()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_TermOptionalSequence()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(2);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getTerm_TermRepeatedSequence()
+  {
+    return (EReference)termEClass.getEStructuralFeatures().get(3);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getAtom()
+  {
+    return atomEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getAtom_AtomStringRule()
+  {
+    return (EReference)atomEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getAtom_AtomRuleReference()
+  {
+    return (EReference)atomEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRuleReference()
+  {
+    return ruleReferenceEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getRuleReference_Ruleref()
+  {
+    return (EReference)ruleReferenceEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getStringRule()
+  {
+    return stringRuleEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getStringRule_Literal()
+  {
+    return (EAttribute)stringRuleEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getStringRule_Colon()
+  {
+    return (EAttribute)stringRuleEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getGroupedSequence()
+  {
+    return groupedSequenceEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getGroupedSequence_DefinitionList()
+  {
+    return (EReference)groupedSequenceEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getOptionalSequence()
+  {
+    return optionalSequenceEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getOptionalSequence_DefinitionList()
+  {
+    return (EReference)optionalSequenceEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EClass getRepeatedSequence()
+  {
+    return repeatedSequenceEClass;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EReference getRepeatedSequence_Definitions()
+  {
+    return (EReference)repeatedSequenceEClass.getEStructuralFeatures().get(0);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EAttribute getRepeatedSequence_Morethanonce()
+  {
+    return (EAttribute)repeatedSequenceEClass.getEStructuralFeatures().get(1);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EbnfFactory getEbnfFactory()
+  {
+    return (EbnfFactory)getEFactoryInstance();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isCreated = false;
+
+  /**
+   * Creates the meta-model objects for the package.  This method is
+   * guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void createPackageContents()
+  {
+    if (isCreated) return;
+    isCreated = true;
+
+    // Create classes and their features
+    etsiBnfEClass = createEClass(ETSI_BNF);
+    createEAttribute(etsiBnfEClass, ETSI_BNF__NAME);
+    createEAttribute(etsiBnfEClass, ETSI_BNF__TYPE);
+    createEReference(etsiBnfEClass, ETSI_BNF__IMPORT_SECTION);
+    createEReference(etsiBnfEClass, ETSI_BNF__BNF_ENTRY);
+    createEReference(etsiBnfEClass, ETSI_BNF__DELTA_ENTRY);
+    createEReference(etsiBnfEClass, ETSI_BNF__MERGE_ENTRY);
+
+    importSectionEClass = createEClass(IMPORT_SECTION);
+    createEReference(importSectionEClass, IMPORT_SECTION__IMPORTS);
+
+    bnfEntryEClass = createEClass(BNF_ENTRY);
+    createEReference(bnfEntryEClass, BNF_ENTRY__SECTIONHEADER);
+    createEReference(bnfEntryEClass, BNF_ENTRY__RULE);
+
+    deltaEntryEClass = createEClass(DELTA_ENTRY);
+    createEReference(deltaEntryEClass, DELTA_ENTRY__RULE);
+    createEReference(deltaEntryEClass, DELTA_ENTRY__SECTIONHEADER);
+    createEReference(deltaEntryEClass, DELTA_ENTRY__EXT_RULE);
+
+    mergeEntryEClass = createEClass(MERGE_ENTRY);
+    createEReference(mergeEntryEClass, MERGE_ENTRY__SECTIONHEADER);
+    createEReference(mergeEntryEClass, MERGE_ENTRY__MERGE_RULE);
+
+    sectionHeadingEClass = createEClass(SECTION_HEADING);
+    createEAttribute(sectionHeadingEClass, SECTION_HEADING__SECTION_HEADER);
+
+    importEClass = createEClass(IMPORT);
+    createEAttribute(importEClass, IMPORT__IMPORT_URI);
+    createEAttribute(importEClass, IMPORT__GRAMMAR_TYPE);
+    createEAttribute(importEClass, IMPORT__LABEL);
+
+    ruleEClass = createEClass(RULE);
+    createEAttribute(ruleEClass, RULE__RULENUMBER);
+    createEAttribute(ruleEClass, RULE__RULEVARIANT);
+    createEAttribute(ruleEClass, RULE__NAME);
+    createEReference(ruleEClass, RULE__DEFINITION_LIST);
+
+    extRuleEClass = createEClass(EXT_RULE);
+    createEAttribute(extRuleEClass, EXT_RULE__RULENUMBER);
+    createEAttribute(extRuleEClass, EXT_RULE__RULEVARIANT);
+    createEAttribute(extRuleEClass, EXT_RULE__NAME);
+    createEAttribute(extRuleEClass, EXT_RULE__RULEEXT);
+    createEReference(extRuleEClass, EXT_RULE__ELEMENTS);
+
+    mergeRuleEClass = createEClass(MERGE_RULE);
+    createEAttribute(mergeRuleEClass, MERGE_RULE__LOGIC);
+
+    globalCombinatorEClass = createEClass(GLOBAL_COMBINATOR);
+
+    ruleCombinatorEClass = createEClass(RULE_COMBINATOR);
+    createEAttribute(ruleCombinatorEClass, RULE_COMBINATOR__NAME);
+    createEAttribute(ruleCombinatorEClass, RULE_COMBINATOR__LABEL);
+
+    hookCombinatorEClass = createEClass(HOOK_COMBINATOR);
+    createEAttribute(hookCombinatorEClass, HOOK_COMBINATOR__NAME);
+    createEAttribute(hookCombinatorEClass, HOOK_COMBINATOR__RULEEXT);
+    createEAttribute(hookCombinatorEClass, HOOK_COMBINATOR__LABEL);
+
+    definitionListEClass = createEClass(DEFINITION_LIST);
+    createEReference(definitionListEClass, DEFINITION_LIST__SINGLE_DEFINITION);
+
+    singleDefinitionEClass = createEClass(SINGLE_DEFINITION);
+    createEReference(singleDefinitionEClass, SINGLE_DEFINITION__TERMS);
+
+    termEClass = createEClass(TERM);
+    createEReference(termEClass, TERM__TERM_ATOM);
+    createEReference(termEClass, TERM__TERM_GROUPED_SEQUENCE);
+    createEReference(termEClass, TERM__TERM_OPTIONAL_SEQUENCE);
+    createEReference(termEClass, TERM__TERM_REPEATED_SEQUENCE);
+
+    atomEClass = createEClass(ATOM);
+    createEReference(atomEClass, ATOM__ATOM_STRING_RULE);
+    createEReference(atomEClass, ATOM__ATOM_RULE_REFERENCE);
+
+    ruleReferenceEClass = createEClass(RULE_REFERENCE);
+    createEReference(ruleReferenceEClass, RULE_REFERENCE__RULEREF);
+
+    stringRuleEClass = createEClass(STRING_RULE);
+    createEAttribute(stringRuleEClass, STRING_RULE__LITERAL);
+    createEAttribute(stringRuleEClass, STRING_RULE__COLON);
+
+    groupedSequenceEClass = createEClass(GROUPED_SEQUENCE);
+    createEReference(groupedSequenceEClass, GROUPED_SEQUENCE__DEFINITION_LIST);
+
+    optionalSequenceEClass = createEClass(OPTIONAL_SEQUENCE);
+    createEReference(optionalSequenceEClass, OPTIONAL_SEQUENCE__DEFINITION_LIST);
+
+    repeatedSequenceEClass = createEClass(REPEATED_SEQUENCE);
+    createEReference(repeatedSequenceEClass, REPEATED_SEQUENCE__DEFINITIONS);
+    createEAttribute(repeatedSequenceEClass, REPEATED_SEQUENCE__MORETHANONCE);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  private boolean isInitialized = false;
+
+  /**
+   * Complete the initialization of the package and its meta-model.  This
+   * method is guarded to have no affect on any invocation but its first.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void initializePackageContents()
+  {
+    if (isInitialized) return;
+    isInitialized = true;
+
+    // Initialize package
+    setName(eNAME);
+    setNsPrefix(eNS_PREFIX);
+    setNsURI(eNS_URI);
+
+    // Create type parameters
+
+    // Set bounds for type parameters
+
+    // Add supertypes to classes
+    globalCombinatorEClass.getESuperTypes().add(this.getMergeRule());
+    ruleCombinatorEClass.getESuperTypes().add(this.getMergeRule());
+    hookCombinatorEClass.getESuperTypes().add(this.getMergeRule());
+
+    // Initialize classes and features; add operations and parameters
+    initEClass(etsiBnfEClass, EtsiBnf.class, "EtsiBnf", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getEtsiBnf_Name(), ecorePackage.getEString(), "name", null, 0, 1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getEtsiBnf_Type(), ecorePackage.getEString(), "type", null, 0, 1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEtsiBnf_ImportSection(), this.getImportSection(), null, "importSection", null, 0, 1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEtsiBnf_BnfEntry(), this.getBnfEntry(), null, "bnfEntry", null, 0, -1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEtsiBnf_DeltaEntry(), this.getDeltaEntry(), null, "deltaEntry", null, 0, -1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getEtsiBnf_MergeEntry(), this.getMergeEntry(), null, "mergeEntry", null, 0, -1, EtsiBnf.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(importSectionEClass, ImportSection.class, "ImportSection", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getImportSection_Imports(), this.getImport(), null, "imports", null, 0, -1, ImportSection.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(bnfEntryEClass, BnfEntry.class, "BnfEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getBnfEntry_Sectionheader(), this.getSectionHeading(), null, "sectionheader", null, 0, 1, BnfEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getBnfEntry_Rule(), this.getRule(), null, "rule", null, 0, 1, BnfEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(deltaEntryEClass, DeltaEntry.class, "DeltaEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getDeltaEntry_Rule(), this.getRule(), null, "rule", null, 0, 1, DeltaEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getDeltaEntry_Sectionheader(), this.getSectionHeading(), null, "sectionheader", null, 0, 1, DeltaEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getDeltaEntry_ExtRule(), this.getExtRule(), null, "extRule", null, 0, 1, DeltaEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(mergeEntryEClass, MergeEntry.class, "MergeEntry", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getMergeEntry_Sectionheader(), this.getSectionHeading(), null, "sectionheader", null, 0, 1, MergeEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getMergeEntry_MergeRule(), this.getMergeRule(), null, "mergeRule", null, 0, 1, MergeEntry.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(sectionHeadingEClass, SectionHeading.class, "SectionHeading", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getSectionHeading_SectionHeader(), ecorePackage.getEString(), "sectionHeader", null, 0, 1, SectionHeading.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(importEClass, Import.class, "Import", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getImport_ImportURI(), ecorePackage.getEString(), "importURI", null, 0, 1, Import.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getImport_GrammarType(), ecorePackage.getEString(), "grammarType", null, 0, 1, Import.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getImport_Label(), ecorePackage.getEString(), "label", null, 0, 1, Import.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(ruleEClass, Rule.class, "Rule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getRule_Rulenumber(), ecorePackage.getEInt(), "rulenumber", null, 0, 1, Rule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getRule_Rulevariant(), ecorePackage.getEString(), "rulevariant", null, 0, 1, Rule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getRule_Name(), ecorePackage.getEString(), "name", null, 0, 1, Rule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getRule_DefinitionList(), this.getDefinitionList(), null, "definitionList", null, 0, 1, Rule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(extRuleEClass, ExtRule.class, "ExtRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getExtRule_Rulenumber(), ecorePackage.getEInt(), "rulenumber", null, 0, 1, ExtRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getExtRule_Rulevariant(), ecorePackage.getEString(), "rulevariant", null, 0, 1, ExtRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getExtRule_Name(), ecorePackage.getEString(), "name", null, 0, 1, ExtRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getExtRule_Ruleext(), ecorePackage.getEInt(), "ruleext", null, 0, 1, ExtRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getExtRule_Elements(), this.getAtom(), null, "elements", null, 0, -1, ExtRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(mergeRuleEClass, MergeRule.class, "MergeRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getMergeRule_Logic(), ecorePackage.getEString(), "logic", null, 0, 1, MergeRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(globalCombinatorEClass, GlobalCombinator.class, "GlobalCombinator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+
+    initEClass(ruleCombinatorEClass, RuleCombinator.class, "RuleCombinator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getRuleCombinator_Name(), ecorePackage.getEString(), "name", null, 0, 1, RuleCombinator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getRuleCombinator_LABEL(), ecorePackage.getEString(), "LABEL", null, 0, -1, RuleCombinator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(hookCombinatorEClass, HookCombinator.class, "HookCombinator", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getHookCombinator_Name(), ecorePackage.getEString(), "name", null, 0, 1, HookCombinator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getHookCombinator_Ruleext(), ecorePackage.getEInt(), "ruleext", null, 0, 1, HookCombinator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getHookCombinator_LABEL(), ecorePackage.getEString(), "LABEL", null, 0, -1, HookCombinator.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, !IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(definitionListEClass, DefinitionList.class, "DefinitionList", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getDefinitionList_SingleDefinition(), this.getSingleDefinition(), null, "singleDefinition", null, 0, -1, DefinitionList.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(singleDefinitionEClass, SingleDefinition.class, "SingleDefinition", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getSingleDefinition_Terms(), this.getTerm(), null, "terms", null, 0, -1, SingleDefinition.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(termEClass, Term.class, "Term", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getTerm_TermAtom(), this.getAtom(), null, "termAtom", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getTerm_TermGroupedSequence(), this.getGroupedSequence(), null, "termGroupedSequence", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getTerm_TermOptionalSequence(), this.getOptionalSequence(), null, "termOptionalSequence", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getTerm_TermRepeatedSequence(), this.getRepeatedSequence(), null, "termRepeatedSequence", null, 0, 1, Term.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(atomEClass, Atom.class, "Atom", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getAtom_AtomStringRule(), this.getStringRule(), null, "atomStringRule", null, 0, 1, Atom.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEReference(getAtom_AtomRuleReference(), this.getRuleReference(), null, "atomRuleReference", null, 0, 1, Atom.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(ruleReferenceEClass, RuleReference.class, "RuleReference", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getRuleReference_Ruleref(), this.getRule(), null, "ruleref", null, 0, 1, RuleReference.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_COMPOSITE, IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(stringRuleEClass, StringRule.class, "StringRule", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEAttribute(getStringRule_Literal(), ecorePackage.getEString(), "literal", null, 0, 1, StringRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getStringRule_Colon(), ecorePackage.getEString(), "colon", null, 0, 1, StringRule.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(groupedSequenceEClass, GroupedSequence.class, "GroupedSequence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getGroupedSequence_DefinitionList(), this.getDefinitionList(), null, "definitionList", null, 0, -1, GroupedSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(optionalSequenceEClass, OptionalSequence.class, "OptionalSequence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getOptionalSequence_DefinitionList(), this.getDefinitionList(), null, "definitionList", null, 0, -1, OptionalSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    initEClass(repeatedSequenceEClass, RepeatedSequence.class, "RepeatedSequence", !IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
+    initEReference(getRepeatedSequence_Definitions(), this.getDefinitionList(), null, "definitions", null, 0, -1, RepeatedSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, IS_COMPOSITE, !IS_RESOLVE_PROXIES, !IS_UNSETTABLE, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+    initEAttribute(getRepeatedSequence_Morethanonce(), ecorePackage.getEBoolean(), "morethanonce", null, 0, 1, RepeatedSequence.class, !IS_TRANSIENT, !IS_VOLATILE, IS_CHANGEABLE, !IS_UNSETTABLE, !IS_ID, IS_UNIQUE, !IS_DERIVED, IS_ORDERED);
+
+    // Create resource
+    createResource(eNS_URI);
+  }
+
+} //EbnfPackageImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EtsiBnfImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EtsiBnfImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/EtsiBnfImpl.java	(revision 61)
@@ -0,0 +1,446 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Etsi Bnf</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getType <em>Type</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getImportSection <em>Import Section</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getBnfEntry <em>Bnf Entry</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getDeltaEntry <em>Delta Entry</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl#getMergeEntry <em>Merge Entry</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class EtsiBnfImpl extends MinimalEObjectImpl.Container implements EtsiBnf
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getType() <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getType()
+   * @generated
+   * @ordered
+   */
+  protected static final String TYPE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getType() <em>Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getType()
+   * @generated
+   * @ordered
+   */
+  protected String type = TYPE_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getImportSection() <em>Import Section</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImportSection()
+   * @generated
+   * @ordered
+   */
+  protected ImportSection importSection;
+
+  /**
+   * The cached value of the '{@link #getBnfEntry() <em>Bnf Entry</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getBnfEntry()
+   * @generated
+   * @ordered
+   */
+  protected EList<BnfEntry> bnfEntry;
+
+  /**
+   * The cached value of the '{@link #getDeltaEntry() <em>Delta Entry</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDeltaEntry()
+   * @generated
+   * @ordered
+   */
+  protected EList<DeltaEntry> deltaEntry;
+
+  /**
+   * The cached value of the '{@link #getMergeEntry() <em>Merge Entry</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMergeEntry()
+   * @generated
+   * @ordered
+   */
+  protected EList<MergeEntry> mergeEntry;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected EtsiBnfImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.ETSI_BNF;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.ETSI_BNF__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getType()
+  {
+    return type;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setType(String newType)
+  {
+    String oldType = type;
+    type = newType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.ETSI_BNF__TYPE, oldType, type));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public ImportSection getImportSection()
+  {
+    return importSection;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetImportSection(ImportSection newImportSection, NotificationChain msgs)
+  {
+    ImportSection oldImportSection = importSection;
+    importSection = newImportSection;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.ETSI_BNF__IMPORT_SECTION, oldImportSection, newImportSection);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setImportSection(ImportSection newImportSection)
+  {
+    if (newImportSection != importSection)
+    {
+      NotificationChain msgs = null;
+      if (importSection != null)
+        msgs = ((InternalEObject)importSection).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ETSI_BNF__IMPORT_SECTION, null, msgs);
+      if (newImportSection != null)
+        msgs = ((InternalEObject)newImportSection).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.ETSI_BNF__IMPORT_SECTION, null, msgs);
+      msgs = basicSetImportSection(newImportSection, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.ETSI_BNF__IMPORT_SECTION, newImportSection, newImportSection));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<BnfEntry> getBnfEntry()
+  {
+    if (bnfEntry == null)
+    {
+      bnfEntry = new EObjectContainmentEList<BnfEntry>(BnfEntry.class, this, EbnfPackage.ETSI_BNF__BNF_ENTRY);
+    }
+    return bnfEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<DeltaEntry> getDeltaEntry()
+  {
+    if (deltaEntry == null)
+    {
+      deltaEntry = new EObjectContainmentEList<DeltaEntry>(DeltaEntry.class, this, EbnfPackage.ETSI_BNF__DELTA_ENTRY);
+    }
+    return deltaEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<MergeEntry> getMergeEntry()
+  {
+    if (mergeEntry == null)
+    {
+      mergeEntry = new EObjectContainmentEList<MergeEntry>(MergeEntry.class, this, EbnfPackage.ETSI_BNF__MERGE_ENTRY);
+    }
+    return mergeEntry;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ETSI_BNF__IMPORT_SECTION:
+        return basicSetImportSection(null, msgs);
+      case EbnfPackage.ETSI_BNF__BNF_ENTRY:
+        return ((InternalEList<?>)getBnfEntry()).basicRemove(otherEnd, msgs);
+      case EbnfPackage.ETSI_BNF__DELTA_ENTRY:
+        return ((InternalEList<?>)getDeltaEntry()).basicRemove(otherEnd, msgs);
+      case EbnfPackage.ETSI_BNF__MERGE_ENTRY:
+        return ((InternalEList<?>)getMergeEntry()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ETSI_BNF__NAME:
+        return getName();
+      case EbnfPackage.ETSI_BNF__TYPE:
+        return getType();
+      case EbnfPackage.ETSI_BNF__IMPORT_SECTION:
+        return getImportSection();
+      case EbnfPackage.ETSI_BNF__BNF_ENTRY:
+        return getBnfEntry();
+      case EbnfPackage.ETSI_BNF__DELTA_ENTRY:
+        return getDeltaEntry();
+      case EbnfPackage.ETSI_BNF__MERGE_ENTRY:
+        return getMergeEntry();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ETSI_BNF__NAME:
+        setName((String)newValue);
+        return;
+      case EbnfPackage.ETSI_BNF__TYPE:
+        setType((String)newValue);
+        return;
+      case EbnfPackage.ETSI_BNF__IMPORT_SECTION:
+        setImportSection((ImportSection)newValue);
+        return;
+      case EbnfPackage.ETSI_BNF__BNF_ENTRY:
+        getBnfEntry().clear();
+        getBnfEntry().addAll((Collection<? extends BnfEntry>)newValue);
+        return;
+      case EbnfPackage.ETSI_BNF__DELTA_ENTRY:
+        getDeltaEntry().clear();
+        getDeltaEntry().addAll((Collection<? extends DeltaEntry>)newValue);
+        return;
+      case EbnfPackage.ETSI_BNF__MERGE_ENTRY:
+        getMergeEntry().clear();
+        getMergeEntry().addAll((Collection<? extends MergeEntry>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ETSI_BNF__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case EbnfPackage.ETSI_BNF__TYPE:
+        setType(TYPE_EDEFAULT);
+        return;
+      case EbnfPackage.ETSI_BNF__IMPORT_SECTION:
+        setImportSection((ImportSection)null);
+        return;
+      case EbnfPackage.ETSI_BNF__BNF_ENTRY:
+        getBnfEntry().clear();
+        return;
+      case EbnfPackage.ETSI_BNF__DELTA_ENTRY:
+        getDeltaEntry().clear();
+        return;
+      case EbnfPackage.ETSI_BNF__MERGE_ENTRY:
+        getMergeEntry().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.ETSI_BNF__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case EbnfPackage.ETSI_BNF__TYPE:
+        return TYPE_EDEFAULT == null ? type != null : !TYPE_EDEFAULT.equals(type);
+      case EbnfPackage.ETSI_BNF__IMPORT_SECTION:
+        return importSection != null;
+      case EbnfPackage.ETSI_BNF__BNF_ENTRY:
+        return bnfEntry != null && !bnfEntry.isEmpty();
+      case EbnfPackage.ETSI_BNF__DELTA_ENTRY:
+        return deltaEntry != null && !deltaEntry.isEmpty();
+      case EbnfPackage.ETSI_BNF__MERGE_ENTRY:
+        return mergeEntry != null && !mergeEntry.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(", type: ");
+    result.append(type);
+    result.append(')');
+    return result.toString();
+  }
+
+} //EtsiBnfImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ExtRuleImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ExtRuleImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ExtRuleImpl.java	(revision 61)
@@ -0,0 +1,408 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Ext Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl#getRulenumber <em>Rulenumber</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl#getRulevariant <em>Rulevariant</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl#getRuleext <em>Ruleext</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ExtRuleImpl#getElements <em>Elements</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ExtRuleImpl extends MinimalEObjectImpl.Container implements ExtRule
+{
+  /**
+   * The default value of the '{@link #getRulenumber() <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulenumber()
+   * @generated
+   * @ordered
+   */
+  protected static final int RULENUMBER_EDEFAULT = 0;
+
+  /**
+   * The cached value of the '{@link #getRulenumber() <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulenumber()
+   * @generated
+   * @ordered
+   */
+  protected int rulenumber = RULENUMBER_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getRulevariant() <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulevariant()
+   * @generated
+   * @ordered
+   */
+  protected static final String RULEVARIANT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getRulevariant() <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulevariant()
+   * @generated
+   * @ordered
+   */
+  protected String rulevariant = RULEVARIANT_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getRuleext() <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRuleext()
+   * @generated
+   * @ordered
+   */
+  protected static final int RULEEXT_EDEFAULT = 0;
+
+  /**
+   * The cached value of the '{@link #getRuleext() <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRuleext()
+   * @generated
+   * @ordered
+   */
+  protected int ruleext = RULEEXT_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getElements() <em>Elements</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getElements()
+   * @generated
+   * @ordered
+   */
+  protected EList<Atom> elements;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ExtRuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.EXT_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getRulenumber()
+  {
+    return rulenumber;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRulenumber(int newRulenumber)
+  {
+    int oldRulenumber = rulenumber;
+    rulenumber = newRulenumber;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.EXT_RULE__RULENUMBER, oldRulenumber, rulenumber));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getRulevariant()
+  {
+    return rulevariant;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRulevariant(String newRulevariant)
+  {
+    String oldRulevariant = rulevariant;
+    rulevariant = newRulevariant;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.EXT_RULE__RULEVARIANT, oldRulevariant, rulevariant));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.EXT_RULE__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getRuleext()
+  {
+    return ruleext;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRuleext(int newRuleext)
+  {
+    int oldRuleext = ruleext;
+    ruleext = newRuleext;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.EXT_RULE__RULEEXT, oldRuleext, ruleext));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Atom> getElements()
+  {
+    if (elements == null)
+    {
+      elements = new EObjectContainmentEList<Atom>(Atom.class, this, EbnfPackage.EXT_RULE__ELEMENTS);
+    }
+    return elements;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.EXT_RULE__ELEMENTS:
+        return ((InternalEList<?>)getElements()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.EXT_RULE__RULENUMBER:
+        return getRulenumber();
+      case EbnfPackage.EXT_RULE__RULEVARIANT:
+        return getRulevariant();
+      case EbnfPackage.EXT_RULE__NAME:
+        return getName();
+      case EbnfPackage.EXT_RULE__RULEEXT:
+        return getRuleext();
+      case EbnfPackage.EXT_RULE__ELEMENTS:
+        return getElements();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.EXT_RULE__RULENUMBER:
+        setRulenumber((Integer)newValue);
+        return;
+      case EbnfPackage.EXT_RULE__RULEVARIANT:
+        setRulevariant((String)newValue);
+        return;
+      case EbnfPackage.EXT_RULE__NAME:
+        setName((String)newValue);
+        return;
+      case EbnfPackage.EXT_RULE__RULEEXT:
+        setRuleext((Integer)newValue);
+        return;
+      case EbnfPackage.EXT_RULE__ELEMENTS:
+        getElements().clear();
+        getElements().addAll((Collection<? extends Atom>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.EXT_RULE__RULENUMBER:
+        setRulenumber(RULENUMBER_EDEFAULT);
+        return;
+      case EbnfPackage.EXT_RULE__RULEVARIANT:
+        setRulevariant(RULEVARIANT_EDEFAULT);
+        return;
+      case EbnfPackage.EXT_RULE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case EbnfPackage.EXT_RULE__RULEEXT:
+        setRuleext(RULEEXT_EDEFAULT);
+        return;
+      case EbnfPackage.EXT_RULE__ELEMENTS:
+        getElements().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.EXT_RULE__RULENUMBER:
+        return rulenumber != RULENUMBER_EDEFAULT;
+      case EbnfPackage.EXT_RULE__RULEVARIANT:
+        return RULEVARIANT_EDEFAULT == null ? rulevariant != null : !RULEVARIANT_EDEFAULT.equals(rulevariant);
+      case EbnfPackage.EXT_RULE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case EbnfPackage.EXT_RULE__RULEEXT:
+        return ruleext != RULEEXT_EDEFAULT;
+      case EbnfPackage.EXT_RULE__ELEMENTS:
+        return elements != null && !elements.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (rulenumber: ");
+    result.append(rulenumber);
+    result.append(", rulevariant: ");
+    result.append(rulevariant);
+    result.append(", name: ");
+    result.append(name);
+    result.append(", ruleext: ");
+    result.append(ruleext);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ExtRuleImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GlobalCombinatorImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GlobalCombinatorImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GlobalCombinatorImpl.java	(revision 61)
@@ -0,0 +1,42 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
+
+import org.eclipse.emf.ecore.EClass;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Global Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * </p>
+ *
+ * @generated
+ */
+public class GlobalCombinatorImpl extends MergeRuleImpl implements GlobalCombinator
+{
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected GlobalCombinatorImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.GLOBAL_COMBINATOR;
+  }
+
+} //GlobalCombinatorImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GroupedSequenceImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GroupedSequenceImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/GroupedSequenceImpl.java	(revision 61)
@@ -0,0 +1,167 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Grouped Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.GroupedSequenceImpl#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class GroupedSequenceImpl extends MinimalEObjectImpl.Container implements GroupedSequence
+{
+  /**
+   * The cached value of the '{@link #getDefinitionList() <em>Definition List</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDefinitionList()
+   * @generated
+   * @ordered
+   */
+  protected EList<DefinitionList> definitionList;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected GroupedSequenceImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.GROUPED_SEQUENCE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<DefinitionList> getDefinitionList()
+  {
+    if (definitionList == null)
+    {
+      definitionList = new EObjectContainmentEList<DefinitionList>(DefinitionList.class, this, EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST);
+    }
+    return definitionList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST:
+        return ((InternalEList<?>)getDefinitionList()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST:
+        return getDefinitionList();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST:
+        getDefinitionList().clear();
+        getDefinitionList().addAll((Collection<? extends DefinitionList>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST:
+        getDefinitionList().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.GROUPED_SEQUENCE__DEFINITION_LIST:
+        return definitionList != null && !definitionList.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //GroupedSequenceImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/HookCombinatorImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/HookCombinatorImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/HookCombinatorImpl.java	(revision 61)
@@ -0,0 +1,277 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Hook Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl#getRuleext <em>Ruleext</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.HookCombinatorImpl#getLABEL <em>LABEL</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class HookCombinatorImpl extends MergeRuleImpl implements HookCombinator
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getRuleext() <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRuleext()
+   * @generated
+   * @ordered
+   */
+  protected static final int RULEEXT_EDEFAULT = 0;
+
+  /**
+   * The cached value of the '{@link #getRuleext() <em>Ruleext</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRuleext()
+   * @generated
+   * @ordered
+   */
+  protected int ruleext = RULEEXT_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getLABEL() <em>LABEL</em>}' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLABEL()
+   * @generated
+   * @ordered
+   */
+  protected EList<String> label;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected HookCombinatorImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.HOOK_COMBINATOR;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.HOOK_COMBINATOR__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getRuleext()
+  {
+    return ruleext;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRuleext(int newRuleext)
+  {
+    int oldRuleext = ruleext;
+    ruleext = newRuleext;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.HOOK_COMBINATOR__RULEEXT, oldRuleext, ruleext));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<String> getLABEL()
+  {
+    if (label == null)
+    {
+      label = new EDataTypeEList<String>(String.class, this, EbnfPackage.HOOK_COMBINATOR__LABEL);
+    }
+    return label;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.HOOK_COMBINATOR__NAME:
+        return getName();
+      case EbnfPackage.HOOK_COMBINATOR__RULEEXT:
+        return getRuleext();
+      case EbnfPackage.HOOK_COMBINATOR__LABEL:
+        return getLABEL();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.HOOK_COMBINATOR__NAME:
+        setName((String)newValue);
+        return;
+      case EbnfPackage.HOOK_COMBINATOR__RULEEXT:
+        setRuleext((Integer)newValue);
+        return;
+      case EbnfPackage.HOOK_COMBINATOR__LABEL:
+        getLABEL().clear();
+        getLABEL().addAll((Collection<? extends String>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.HOOK_COMBINATOR__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case EbnfPackage.HOOK_COMBINATOR__RULEEXT:
+        setRuleext(RULEEXT_EDEFAULT);
+        return;
+      case EbnfPackage.HOOK_COMBINATOR__LABEL:
+        getLABEL().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.HOOK_COMBINATOR__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case EbnfPackage.HOOK_COMBINATOR__RULEEXT:
+        return ruleext != RULEEXT_EDEFAULT;
+      case EbnfPackage.HOOK_COMBINATOR__LABEL:
+        return label != null && !label.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(", ruleext: ");
+    result.append(ruleext);
+    result.append(", LABEL: ");
+    result.append(label);
+    result.append(')');
+    return result.toString();
+  }
+
+} //HookCombinatorImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportImpl.java	(revision 61)
@@ -0,0 +1,289 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Import</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl#getImportURI <em>Import URI</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl#getGrammarType <em>Grammar Type</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportImpl#getLabel <em>Label</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ImportImpl extends MinimalEObjectImpl.Container implements Import
+{
+  /**
+   * The default value of the '{@link #getImportURI() <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImportURI()
+   * @generated
+   * @ordered
+   */
+  protected static final String IMPORT_URI_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getImportURI() <em>Import URI</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImportURI()
+   * @generated
+   * @ordered
+   */
+  protected String importURI = IMPORT_URI_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getGrammarType() <em>Grammar Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getGrammarType()
+   * @generated
+   * @ordered
+   */
+  protected static final String GRAMMAR_TYPE_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getGrammarType() <em>Grammar Type</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getGrammarType()
+   * @generated
+   * @ordered
+   */
+  protected String grammarType = GRAMMAR_TYPE_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getLabel() <em>Label</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLabel()
+   * @generated
+   * @ordered
+   */
+  protected static final String LABEL_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getLabel() <em>Label</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLabel()
+   * @generated
+   * @ordered
+   */
+  protected String label = LABEL_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ImportImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.IMPORT;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getImportURI()
+  {
+    return importURI;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setImportURI(String newImportURI)
+  {
+    String oldImportURI = importURI;
+    importURI = newImportURI;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.IMPORT__IMPORT_URI, oldImportURI, importURI));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getGrammarType()
+  {
+    return grammarType;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setGrammarType(String newGrammarType)
+  {
+    String oldGrammarType = grammarType;
+    grammarType = newGrammarType;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.IMPORT__GRAMMAR_TYPE, oldGrammarType, grammarType));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLabel()
+  {
+    return label;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLabel(String newLabel)
+  {
+    String oldLabel = label;
+    label = newLabel;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.IMPORT__LABEL, oldLabel, label));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT__IMPORT_URI:
+        return getImportURI();
+      case EbnfPackage.IMPORT__GRAMMAR_TYPE:
+        return getGrammarType();
+      case EbnfPackage.IMPORT__LABEL:
+        return getLabel();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT__IMPORT_URI:
+        setImportURI((String)newValue);
+        return;
+      case EbnfPackage.IMPORT__GRAMMAR_TYPE:
+        setGrammarType((String)newValue);
+        return;
+      case EbnfPackage.IMPORT__LABEL:
+        setLabel((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT__IMPORT_URI:
+        setImportURI(IMPORT_URI_EDEFAULT);
+        return;
+      case EbnfPackage.IMPORT__GRAMMAR_TYPE:
+        setGrammarType(GRAMMAR_TYPE_EDEFAULT);
+        return;
+      case EbnfPackage.IMPORT__LABEL:
+        setLabel(LABEL_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT__IMPORT_URI:
+        return IMPORT_URI_EDEFAULT == null ? importURI != null : !IMPORT_URI_EDEFAULT.equals(importURI);
+      case EbnfPackage.IMPORT__GRAMMAR_TYPE:
+        return GRAMMAR_TYPE_EDEFAULT == null ? grammarType != null : !GRAMMAR_TYPE_EDEFAULT.equals(grammarType);
+      case EbnfPackage.IMPORT__LABEL:
+        return LABEL_EDEFAULT == null ? label != null : !LABEL_EDEFAULT.equals(label);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (importURI: ");
+    result.append(importURI);
+    result.append(", grammarType: ");
+    result.append(grammarType);
+    result.append(", label: ");
+    result.append(label);
+    result.append(')');
+    return result.toString();
+  }
+
+} //ImportImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportSectionImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportSectionImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/ImportSectionImpl.java	(revision 61)
@@ -0,0 +1,167 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Import Section</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.ImportSectionImpl#getImports <em>Imports</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class ImportSectionImpl extends MinimalEObjectImpl.Container implements ImportSection
+{
+  /**
+   * The cached value of the '{@link #getImports() <em>Imports</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getImports()
+   * @generated
+   * @ordered
+   */
+  protected EList<Import> imports;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected ImportSectionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.IMPORT_SECTION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Import> getImports()
+  {
+    if (imports == null)
+    {
+      imports = new EObjectContainmentEList<Import>(Import.class, this, EbnfPackage.IMPORT_SECTION__IMPORTS);
+    }
+    return imports;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT_SECTION__IMPORTS:
+        return ((InternalEList<?>)getImports()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT_SECTION__IMPORTS:
+        return getImports();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT_SECTION__IMPORTS:
+        getImports().clear();
+        getImports().addAll((Collection<? extends Import>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT_SECTION__IMPORTS:
+        getImports().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.IMPORT_SECTION__IMPORTS:
+        return imports != null && !imports.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //ImportSectionImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeEntryImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeEntryImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeEntryImpl.java	(revision 61)
@@ -0,0 +1,266 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Merge Entry</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl#getSectionheader <em>Sectionheader</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeEntryImpl#getMergeRule <em>Merge Rule</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MergeEntryImpl extends MinimalEObjectImpl.Container implements MergeEntry
+{
+  /**
+   * The cached value of the '{@link #getSectionheader() <em>Sectionheader</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSectionheader()
+   * @generated
+   * @ordered
+   */
+  protected SectionHeading sectionheader;
+
+  /**
+   * The cached value of the '{@link #getMergeRule() <em>Merge Rule</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getMergeRule()
+   * @generated
+   * @ordered
+   */
+  protected MergeRule mergeRule;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected MergeEntryImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.MERGE_ENTRY;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public SectionHeading getSectionheader()
+  {
+    return sectionheader;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetSectionheader(SectionHeading newSectionheader, NotificationChain msgs)
+  {
+    SectionHeading oldSectionheader = sectionheader;
+    sectionheader = newSectionheader;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.MERGE_ENTRY__SECTIONHEADER, oldSectionheader, newSectionheader);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSectionheader(SectionHeading newSectionheader)
+  {
+    if (newSectionheader != sectionheader)
+    {
+      NotificationChain msgs = null;
+      if (sectionheader != null)
+        msgs = ((InternalEObject)sectionheader).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.MERGE_ENTRY__SECTIONHEADER, null, msgs);
+      if (newSectionheader != null)
+        msgs = ((InternalEObject)newSectionheader).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.MERGE_ENTRY__SECTIONHEADER, null, msgs);
+      msgs = basicSetSectionheader(newSectionheader, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.MERGE_ENTRY__SECTIONHEADER, newSectionheader, newSectionheader));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public MergeRule getMergeRule()
+  {
+    return mergeRule;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetMergeRule(MergeRule newMergeRule, NotificationChain msgs)
+  {
+    MergeRule oldMergeRule = mergeRule;
+    mergeRule = newMergeRule;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.MERGE_ENTRY__MERGE_RULE, oldMergeRule, newMergeRule);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMergeRule(MergeRule newMergeRule)
+  {
+    if (newMergeRule != mergeRule)
+    {
+      NotificationChain msgs = null;
+      if (mergeRule != null)
+        msgs = ((InternalEObject)mergeRule).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.MERGE_ENTRY__MERGE_RULE, null, msgs);
+      if (newMergeRule != null)
+        msgs = ((InternalEObject)newMergeRule).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.MERGE_ENTRY__MERGE_RULE, null, msgs);
+      msgs = basicSetMergeRule(newMergeRule, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.MERGE_ENTRY__MERGE_RULE, newMergeRule, newMergeRule));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_ENTRY__SECTIONHEADER:
+        return basicSetSectionheader(null, msgs);
+      case EbnfPackage.MERGE_ENTRY__MERGE_RULE:
+        return basicSetMergeRule(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_ENTRY__SECTIONHEADER:
+        return getSectionheader();
+      case EbnfPackage.MERGE_ENTRY__MERGE_RULE:
+        return getMergeRule();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)newValue);
+        return;
+      case EbnfPackage.MERGE_ENTRY__MERGE_RULE:
+        setMergeRule((MergeRule)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_ENTRY__SECTIONHEADER:
+        setSectionheader((SectionHeading)null);
+        return;
+      case EbnfPackage.MERGE_ENTRY__MERGE_RULE:
+        setMergeRule((MergeRule)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_ENTRY__SECTIONHEADER:
+        return sectionheader != null;
+      case EbnfPackage.MERGE_ENTRY__MERGE_RULE:
+        return mergeRule != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //MergeEntryImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeRuleImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeRuleImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/MergeRuleImpl.java	(revision 61)
@@ -0,0 +1,177 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeRule;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Merge Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.MergeRuleImpl#getLogic <em>Logic</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class MergeRuleImpl extends MinimalEObjectImpl.Container implements MergeRule
+{
+  /**
+   * The default value of the '{@link #getLogic() <em>Logic</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLogic()
+   * @generated
+   * @ordered
+   */
+  protected static final String LOGIC_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getLogic() <em>Logic</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLogic()
+   * @generated
+   * @ordered
+   */
+  protected String logic = LOGIC_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected MergeRuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.MERGE_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLogic()
+  {
+    return logic;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLogic(String newLogic)
+  {
+    String oldLogic = logic;
+    logic = newLogic;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.MERGE_RULE__LOGIC, oldLogic, logic));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_RULE__LOGIC:
+        return getLogic();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_RULE__LOGIC:
+        setLogic((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_RULE__LOGIC:
+        setLogic(LOGIC_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.MERGE_RULE__LOGIC:
+        return LOGIC_EDEFAULT == null ? logic != null : !LOGIC_EDEFAULT.equals(logic);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (logic: ");
+    result.append(logic);
+    result.append(')');
+    return result.toString();
+  }
+
+} //MergeRuleImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/OptionalSequenceImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/OptionalSequenceImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/OptionalSequenceImpl.java	(revision 61)
@@ -0,0 +1,167 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Optional Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.OptionalSequenceImpl#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class OptionalSequenceImpl extends MinimalEObjectImpl.Container implements OptionalSequence
+{
+  /**
+   * The cached value of the '{@link #getDefinitionList() <em>Definition List</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDefinitionList()
+   * @generated
+   * @ordered
+   */
+  protected EList<DefinitionList> definitionList;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected OptionalSequenceImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.OPTIONAL_SEQUENCE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<DefinitionList> getDefinitionList()
+  {
+    if (definitionList == null)
+    {
+      definitionList = new EObjectContainmentEList<DefinitionList>(DefinitionList.class, this, EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST);
+    }
+    return definitionList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST:
+        return ((InternalEList<?>)getDefinitionList()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST:
+        return getDefinitionList();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST:
+        getDefinitionList().clear();
+        getDefinitionList().addAll((Collection<? extends DefinitionList>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST:
+        getDefinitionList().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.OPTIONAL_SEQUENCE__DEFINITION_LIST:
+        return definitionList != null && !definitionList.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //OptionalSequenceImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RepeatedSequenceImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RepeatedSequenceImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RepeatedSequenceImpl.java	(revision 61)
@@ -0,0 +1,240 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Repeated Sequence</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl#getDefinitions <em>Definitions</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RepeatedSequenceImpl#isMorethanonce <em>Morethanonce</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RepeatedSequenceImpl extends MinimalEObjectImpl.Container implements RepeatedSequence
+{
+  /**
+   * The cached value of the '{@link #getDefinitions() <em>Definitions</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDefinitions()
+   * @generated
+   * @ordered
+   */
+  protected EList<DefinitionList> definitions;
+
+  /**
+   * The default value of the '{@link #isMorethanonce() <em>Morethanonce</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isMorethanonce()
+   * @generated
+   * @ordered
+   */
+  protected static final boolean MORETHANONCE_EDEFAULT = false;
+
+  /**
+   * The cached value of the '{@link #isMorethanonce() <em>Morethanonce</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #isMorethanonce()
+   * @generated
+   * @ordered
+   */
+  protected boolean morethanonce = MORETHANONCE_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RepeatedSequenceImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.REPEATED_SEQUENCE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<DefinitionList> getDefinitions()
+  {
+    if (definitions == null)
+    {
+      definitions = new EObjectContainmentEList<DefinitionList>(DefinitionList.class, this, EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS);
+    }
+    return definitions;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public boolean isMorethanonce()
+  {
+    return morethanonce;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setMorethanonce(boolean newMorethanonce)
+  {
+    boolean oldMorethanonce = morethanonce;
+    morethanonce = newMorethanonce;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.REPEATED_SEQUENCE__MORETHANONCE, oldMorethanonce, morethanonce));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS:
+        return ((InternalEList<?>)getDefinitions()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS:
+        return getDefinitions();
+      case EbnfPackage.REPEATED_SEQUENCE__MORETHANONCE:
+        return isMorethanonce();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS:
+        getDefinitions().clear();
+        getDefinitions().addAll((Collection<? extends DefinitionList>)newValue);
+        return;
+      case EbnfPackage.REPEATED_SEQUENCE__MORETHANONCE:
+        setMorethanonce((Boolean)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS:
+        getDefinitions().clear();
+        return;
+      case EbnfPackage.REPEATED_SEQUENCE__MORETHANONCE:
+        setMorethanonce(MORETHANONCE_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.REPEATED_SEQUENCE__DEFINITIONS:
+        return definitions != null && !definitions.isEmpty();
+      case EbnfPackage.REPEATED_SEQUENCE__MORETHANONCE:
+        return morethanonce != MORETHANONCE_EDEFAULT;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (morethanonce: ");
+    result.append(morethanonce);
+    result.append(')');
+    return result.toString();
+  }
+
+} //RepeatedSequenceImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleCombinatorImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleCombinatorImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleCombinatorImpl.java	(revision 61)
@@ -0,0 +1,221 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+
+import org.eclipse.emf.ecore.util.EDataTypeEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Rule Combinator</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleCombinatorImpl#getLABEL <em>LABEL</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RuleCombinatorImpl extends MergeRuleImpl implements RuleCombinator
+{
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getLABEL() <em>LABEL</em>}' attribute list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLABEL()
+   * @generated
+   * @ordered
+   */
+  protected EList<String> label;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RuleCombinatorImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.RULE_COMBINATOR;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE_COMBINATOR__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<String> getLABEL()
+  {
+    if (label == null)
+    {
+      label = new EDataTypeEList<String>(String.class, this, EbnfPackage.RULE_COMBINATOR__LABEL);
+    }
+    return label;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_COMBINATOR__NAME:
+        return getName();
+      case EbnfPackage.RULE_COMBINATOR__LABEL:
+        return getLABEL();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_COMBINATOR__NAME:
+        setName((String)newValue);
+        return;
+      case EbnfPackage.RULE_COMBINATOR__LABEL:
+        getLABEL().clear();
+        getLABEL().addAll((Collection<? extends String>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_COMBINATOR__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case EbnfPackage.RULE_COMBINATOR__LABEL:
+        getLABEL().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_COMBINATOR__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case EbnfPackage.RULE_COMBINATOR__LABEL:
+        return label != null && !label.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (name: ");
+    result.append(name);
+    result.append(", LABEL: ");
+    result.append(label);
+    result.append(')');
+    return result.toString();
+  }
+
+} //RuleCombinatorImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleImpl.java	(revision 61)
@@ -0,0 +1,377 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl#getRulenumber <em>Rulenumber</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl#getRulevariant <em>Rulevariant</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl#getName <em>Name</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleImpl#getDefinitionList <em>Definition List</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RuleImpl extends MinimalEObjectImpl.Container implements Rule
+{
+  /**
+   * The default value of the '{@link #getRulenumber() <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulenumber()
+   * @generated
+   * @ordered
+   */
+  protected static final int RULENUMBER_EDEFAULT = 0;
+
+  /**
+   * The cached value of the '{@link #getRulenumber() <em>Rulenumber</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulenumber()
+   * @generated
+   * @ordered
+   */
+  protected int rulenumber = RULENUMBER_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getRulevariant() <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulevariant()
+   * @generated
+   * @ordered
+   */
+  protected static final String RULEVARIANT_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getRulevariant() <em>Rulevariant</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRulevariant()
+   * @generated
+   * @ordered
+   */
+  protected String rulevariant = RULEVARIANT_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected static final String NAME_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getName() <em>Name</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getName()
+   * @generated
+   * @ordered
+   */
+  protected String name = NAME_EDEFAULT;
+
+  /**
+   * The cached value of the '{@link #getDefinitionList() <em>Definition List</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getDefinitionList()
+   * @generated
+   * @ordered
+   */
+  protected DefinitionList definitionList;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public int getRulenumber()
+  {
+    return rulenumber;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRulenumber(int newRulenumber)
+  {
+    int oldRulenumber = rulenumber;
+    rulenumber = newRulenumber;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE__RULENUMBER, oldRulenumber, rulenumber));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getRulevariant()
+  {
+    return rulevariant;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRulevariant(String newRulevariant)
+  {
+    String oldRulevariant = rulevariant;
+    rulevariant = newRulevariant;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE__RULEVARIANT, oldRulevariant, rulevariant));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getName()
+  {
+    return name;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setName(String newName)
+  {
+    String oldName = name;
+    name = newName;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE__NAME, oldName, name));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public DefinitionList getDefinitionList()
+  {
+    return definitionList;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetDefinitionList(DefinitionList newDefinitionList, NotificationChain msgs)
+  {
+    DefinitionList oldDefinitionList = definitionList;
+    definitionList = newDefinitionList;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE__DEFINITION_LIST, oldDefinitionList, newDefinitionList);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setDefinitionList(DefinitionList newDefinitionList)
+  {
+    if (newDefinitionList != definitionList)
+    {
+      NotificationChain msgs = null;
+      if (definitionList != null)
+        msgs = ((InternalEObject)definitionList).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.RULE__DEFINITION_LIST, null, msgs);
+      if (newDefinitionList != null)
+        msgs = ((InternalEObject)newDefinitionList).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.RULE__DEFINITION_LIST, null, msgs);
+      msgs = basicSetDefinitionList(newDefinitionList, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE__DEFINITION_LIST, newDefinitionList, newDefinitionList));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE__DEFINITION_LIST:
+        return basicSetDefinitionList(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE__RULENUMBER:
+        return getRulenumber();
+      case EbnfPackage.RULE__RULEVARIANT:
+        return getRulevariant();
+      case EbnfPackage.RULE__NAME:
+        return getName();
+      case EbnfPackage.RULE__DEFINITION_LIST:
+        return getDefinitionList();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE__RULENUMBER:
+        setRulenumber((Integer)newValue);
+        return;
+      case EbnfPackage.RULE__RULEVARIANT:
+        setRulevariant((String)newValue);
+        return;
+      case EbnfPackage.RULE__NAME:
+        setName((String)newValue);
+        return;
+      case EbnfPackage.RULE__DEFINITION_LIST:
+        setDefinitionList((DefinitionList)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE__RULENUMBER:
+        setRulenumber(RULENUMBER_EDEFAULT);
+        return;
+      case EbnfPackage.RULE__RULEVARIANT:
+        setRulevariant(RULEVARIANT_EDEFAULT);
+        return;
+      case EbnfPackage.RULE__NAME:
+        setName(NAME_EDEFAULT);
+        return;
+      case EbnfPackage.RULE__DEFINITION_LIST:
+        setDefinitionList((DefinitionList)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE__RULENUMBER:
+        return rulenumber != RULENUMBER_EDEFAULT;
+      case EbnfPackage.RULE__RULEVARIANT:
+        return RULEVARIANT_EDEFAULT == null ? rulevariant != null : !RULEVARIANT_EDEFAULT.equals(rulevariant);
+      case EbnfPackage.RULE__NAME:
+        return NAME_EDEFAULT == null ? name != null : !NAME_EDEFAULT.equals(name);
+      case EbnfPackage.RULE__DEFINITION_LIST:
+        return definitionList != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (rulenumber: ");
+    result.append(rulenumber);
+    result.append(", rulevariant: ");
+    result.append(rulevariant);
+    result.append(", name: ");
+    result.append(name);
+    result.append(')');
+    return result.toString();
+  }
+
+} //RuleImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleReferenceImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleReferenceImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/RuleReferenceImpl.java	(revision 61)
@@ -0,0 +1,173 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Rule Reference</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.RuleReferenceImpl#getRuleref <em>Ruleref</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class RuleReferenceImpl extends MinimalEObjectImpl.Container implements RuleReference
+{
+  /**
+   * The cached value of the '{@link #getRuleref() <em>Ruleref</em>}' reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getRuleref()
+   * @generated
+   * @ordered
+   */
+  protected Rule ruleref;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected RuleReferenceImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.RULE_REFERENCE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rule getRuleref()
+  {
+    if (ruleref != null && ruleref.eIsProxy())
+    {
+      InternalEObject oldRuleref = (InternalEObject)ruleref;
+      ruleref = (Rule)eResolveProxy(oldRuleref);
+      if (ruleref != oldRuleref)
+      {
+        if (eNotificationRequired())
+          eNotify(new ENotificationImpl(this, Notification.RESOLVE, EbnfPackage.RULE_REFERENCE__RULEREF, oldRuleref, ruleref));
+      }
+    }
+    return ruleref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Rule basicGetRuleref()
+  {
+    return ruleref;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setRuleref(Rule newRuleref)
+  {
+    Rule oldRuleref = ruleref;
+    ruleref = newRuleref;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.RULE_REFERENCE__RULEREF, oldRuleref, ruleref));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_REFERENCE__RULEREF:
+        if (resolve) return getRuleref();
+        return basicGetRuleref();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_REFERENCE__RULEREF:
+        setRuleref((Rule)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_REFERENCE__RULEREF:
+        setRuleref((Rule)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.RULE_REFERENCE__RULEREF:
+        return ruleref != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //RuleReferenceImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SectionHeadingImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SectionHeadingImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SectionHeadingImpl.java	(revision 61)
@@ -0,0 +1,177 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Section Heading</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SectionHeadingImpl#getSectionHeader <em>Section Header</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SectionHeadingImpl extends MinimalEObjectImpl.Container implements SectionHeading
+{
+  /**
+   * The default value of the '{@link #getSectionHeader() <em>Section Header</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSectionHeader()
+   * @generated
+   * @ordered
+   */
+  protected static final String SECTION_HEADER_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getSectionHeader() <em>Section Header</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getSectionHeader()
+   * @generated
+   * @ordered
+   */
+  protected String sectionHeader = SECTION_HEADER_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected SectionHeadingImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.SECTION_HEADING;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getSectionHeader()
+  {
+    return sectionHeader;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setSectionHeader(String newSectionHeader)
+  {
+    String oldSectionHeader = sectionHeader;
+    sectionHeader = newSectionHeader;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.SECTION_HEADING__SECTION_HEADER, oldSectionHeader, sectionHeader));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SECTION_HEADING__SECTION_HEADER:
+        return getSectionHeader();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SECTION_HEADING__SECTION_HEADER:
+        setSectionHeader((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SECTION_HEADING__SECTION_HEADER:
+        setSectionHeader(SECTION_HEADER_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SECTION_HEADING__SECTION_HEADER:
+        return SECTION_HEADER_EDEFAULT == null ? sectionHeader != null : !SECTION_HEADER_EDEFAULT.equals(sectionHeader);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (sectionHeader: ");
+    result.append(sectionHeader);
+    result.append(')');
+    return result.toString();
+  }
+
+} //SectionHeadingImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SingleDefinitionImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SingleDefinitionImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/SingleDefinitionImpl.java	(revision 61)
@@ -0,0 +1,167 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+
+import java.util.Collection;
+
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.common.util.EList;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+import org.eclipse.emf.ecore.util.EObjectContainmentEList;
+import org.eclipse.emf.ecore.util.InternalEList;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Single Definition</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.SingleDefinitionImpl#getTerms <em>Terms</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class SingleDefinitionImpl extends MinimalEObjectImpl.Container implements SingleDefinition
+{
+  /**
+   * The cached value of the '{@link #getTerms() <em>Terms</em>}' containment reference list.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTerms()
+   * @generated
+   * @ordered
+   */
+  protected EList<Term> terms;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected SingleDefinitionImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.SINGLE_DEFINITION;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EList<Term> getTerms()
+  {
+    if (terms == null)
+    {
+      terms = new EObjectContainmentEList<Term>(Term.class, this, EbnfPackage.SINGLE_DEFINITION__TERMS);
+    }
+    return terms;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SINGLE_DEFINITION__TERMS:
+        return ((InternalEList<?>)getTerms()).basicRemove(otherEnd, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SINGLE_DEFINITION__TERMS:
+        return getTerms();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @SuppressWarnings("unchecked")
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SINGLE_DEFINITION__TERMS:
+        getTerms().clear();
+        getTerms().addAll((Collection<? extends Term>)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SINGLE_DEFINITION__TERMS:
+        getTerms().clear();
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.SINGLE_DEFINITION__TERMS:
+        return terms != null && !terms.isEmpty();
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //SingleDefinitionImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/StringRuleImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/StringRuleImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/StringRuleImpl.java	(revision 61)
@@ -0,0 +1,233 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+
+import org.eclipse.emf.common.notify.Notification;
+
+import org.eclipse.emf.ecore.EClass;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>String Rule</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl#getLiteral <em>Literal</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.StringRuleImpl#getColon <em>Colon</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class StringRuleImpl extends MinimalEObjectImpl.Container implements StringRule
+{
+  /**
+   * The default value of the '{@link #getLiteral() <em>Literal</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLiteral()
+   * @generated
+   * @ordered
+   */
+  protected static final String LITERAL_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getLiteral() <em>Literal</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getLiteral()
+   * @generated
+   * @ordered
+   */
+  protected String literal = LITERAL_EDEFAULT;
+
+  /**
+   * The default value of the '{@link #getColon() <em>Colon</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getColon()
+   * @generated
+   * @ordered
+   */
+  protected static final String COLON_EDEFAULT = null;
+
+  /**
+   * The cached value of the '{@link #getColon() <em>Colon</em>}' attribute.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getColon()
+   * @generated
+   * @ordered
+   */
+  protected String colon = COLON_EDEFAULT;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected StringRuleImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.STRING_RULE;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getLiteral()
+  {
+    return literal;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setLiteral(String newLiteral)
+  {
+    String oldLiteral = literal;
+    literal = newLiteral;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.STRING_RULE__LITERAL, oldLiteral, literal));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public String getColon()
+  {
+    return colon;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setColon(String newColon)
+  {
+    String oldColon = colon;
+    colon = newColon;
+    if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.STRING_RULE__COLON, oldColon, colon));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.STRING_RULE__LITERAL:
+        return getLiteral();
+      case EbnfPackage.STRING_RULE__COLON:
+        return getColon();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.STRING_RULE__LITERAL:
+        setLiteral((String)newValue);
+        return;
+      case EbnfPackage.STRING_RULE__COLON:
+        setColon((String)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.STRING_RULE__LITERAL:
+        setLiteral(LITERAL_EDEFAULT);
+        return;
+      case EbnfPackage.STRING_RULE__COLON:
+        setColon(COLON_EDEFAULT);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.STRING_RULE__LITERAL:
+        return LITERAL_EDEFAULT == null ? literal != null : !LITERAL_EDEFAULT.equals(literal);
+      case EbnfPackage.STRING_RULE__COLON:
+        return COLON_EDEFAULT == null ? colon != null : !COLON_EDEFAULT.equals(colon);
+    }
+    return super.eIsSet(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public String toString()
+  {
+    if (eIsProxy()) return super.toString();
+
+    StringBuffer result = new StringBuffer(super.toString());
+    result.append(" (literal: ");
+    result.append(literal);
+    result.append(", colon: ");
+    result.append(colon);
+    result.append(')');
+    return result.toString();
+  }
+
+} //StringRuleImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/TermImpl.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/TermImpl.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/impl/TermImpl.java	(revision 61)
@@ -0,0 +1,410 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.impl;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+
+import org.eclipse.emf.common.notify.Notification;
+import org.eclipse.emf.common.notify.NotificationChain;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.emf.ecore.InternalEObject;
+
+import org.eclipse.emf.ecore.impl.ENotificationImpl;
+import org.eclipse.emf.ecore.impl.MinimalEObjectImpl;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Term</b></em>'.
+ * <!-- end-user-doc -->
+ * <p>
+ * The following features are implemented:
+ * <ul>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl#getTermAtom <em>Term Atom</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl#getTermGroupedSequence <em>Term Grouped Sequence</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl#getTermOptionalSequence <em>Term Optional Sequence</em>}</li>
+ *   <li>{@link de.ugoe.cs.swe.bnftools.ebnf.impl.TermImpl#getTermRepeatedSequence <em>Term Repeated Sequence</em>}</li>
+ * </ul>
+ * </p>
+ *
+ * @generated
+ */
+public class TermImpl extends MinimalEObjectImpl.Container implements Term
+{
+  /**
+   * The cached value of the '{@link #getTermAtom() <em>Term Atom</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTermAtom()
+   * @generated
+   * @ordered
+   */
+  protected Atom termAtom;
+
+  /**
+   * The cached value of the '{@link #getTermGroupedSequence() <em>Term Grouped Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTermGroupedSequence()
+   * @generated
+   * @ordered
+   */
+  protected GroupedSequence termGroupedSequence;
+
+  /**
+   * The cached value of the '{@link #getTermOptionalSequence() <em>Term Optional Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTermOptionalSequence()
+   * @generated
+   * @ordered
+   */
+  protected OptionalSequence termOptionalSequence;
+
+  /**
+   * The cached value of the '{@link #getTermRepeatedSequence() <em>Term Repeated Sequence</em>}' containment reference.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @see #getTermRepeatedSequence()
+   * @generated
+   * @ordered
+   */
+  protected RepeatedSequence termRepeatedSequence;
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected TermImpl()
+  {
+    super();
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  protected EClass eStaticClass()
+  {
+    return EbnfPackage.Literals.TERM;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public Atom getTermAtom()
+  {
+    return termAtom;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTermAtom(Atom newTermAtom, NotificationChain msgs)
+  {
+    Atom oldTermAtom = termAtom;
+    termAtom = newTermAtom;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_ATOM, oldTermAtom, newTermAtom);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTermAtom(Atom newTermAtom)
+  {
+    if (newTermAtom != termAtom)
+    {
+      NotificationChain msgs = null;
+      if (termAtom != null)
+        msgs = ((InternalEObject)termAtom).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_ATOM, null, msgs);
+      if (newTermAtom != null)
+        msgs = ((InternalEObject)newTermAtom).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_ATOM, null, msgs);
+      msgs = basicSetTermAtom(newTermAtom, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_ATOM, newTermAtom, newTermAtom));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public GroupedSequence getTermGroupedSequence()
+  {
+    return termGroupedSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTermGroupedSequence(GroupedSequence newTermGroupedSequence, NotificationChain msgs)
+  {
+    GroupedSequence oldTermGroupedSequence = termGroupedSequence;
+    termGroupedSequence = newTermGroupedSequence;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_GROUPED_SEQUENCE, oldTermGroupedSequence, newTermGroupedSequence);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTermGroupedSequence(GroupedSequence newTermGroupedSequence)
+  {
+    if (newTermGroupedSequence != termGroupedSequence)
+    {
+      NotificationChain msgs = null;
+      if (termGroupedSequence != null)
+        msgs = ((InternalEObject)termGroupedSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_GROUPED_SEQUENCE, null, msgs);
+      if (newTermGroupedSequence != null)
+        msgs = ((InternalEObject)newTermGroupedSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_GROUPED_SEQUENCE, null, msgs);
+      msgs = basicSetTermGroupedSequence(newTermGroupedSequence, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_GROUPED_SEQUENCE, newTermGroupedSequence, newTermGroupedSequence));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public OptionalSequence getTermOptionalSequence()
+  {
+    return termOptionalSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTermOptionalSequence(OptionalSequence newTermOptionalSequence, NotificationChain msgs)
+  {
+    OptionalSequence oldTermOptionalSequence = termOptionalSequence;
+    termOptionalSequence = newTermOptionalSequence;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE, oldTermOptionalSequence, newTermOptionalSequence);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTermOptionalSequence(OptionalSequence newTermOptionalSequence)
+  {
+    if (newTermOptionalSequence != termOptionalSequence)
+    {
+      NotificationChain msgs = null;
+      if (termOptionalSequence != null)
+        msgs = ((InternalEObject)termOptionalSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE, null, msgs);
+      if (newTermOptionalSequence != null)
+        msgs = ((InternalEObject)newTermOptionalSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE, null, msgs);
+      msgs = basicSetTermOptionalSequence(newTermOptionalSequence, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE, newTermOptionalSequence, newTermOptionalSequence));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public RepeatedSequence getTermRepeatedSequence()
+  {
+    return termRepeatedSequence;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public NotificationChain basicSetTermRepeatedSequence(RepeatedSequence newTermRepeatedSequence, NotificationChain msgs)
+  {
+    RepeatedSequence oldTermRepeatedSequence = termRepeatedSequence;
+    termRepeatedSequence = newTermRepeatedSequence;
+    if (eNotificationRequired())
+    {
+      ENotificationImpl notification = new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_REPEATED_SEQUENCE, oldTermRepeatedSequence, newTermRepeatedSequence);
+      if (msgs == null) msgs = notification; else msgs.add(notification);
+    }
+    return msgs;
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public void setTermRepeatedSequence(RepeatedSequence newTermRepeatedSequence)
+  {
+    if (newTermRepeatedSequence != termRepeatedSequence)
+    {
+      NotificationChain msgs = null;
+      if (termRepeatedSequence != null)
+        msgs = ((InternalEObject)termRepeatedSequence).eInverseRemove(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_REPEATED_SEQUENCE, null, msgs);
+      if (newTermRepeatedSequence != null)
+        msgs = ((InternalEObject)newTermRepeatedSequence).eInverseAdd(this, EOPPOSITE_FEATURE_BASE - EbnfPackage.TERM__TERM_REPEATED_SEQUENCE, null, msgs);
+      msgs = basicSetTermRepeatedSequence(newTermRepeatedSequence, msgs);
+      if (msgs != null) msgs.dispatch();
+    }
+    else if (eNotificationRequired())
+      eNotify(new ENotificationImpl(this, Notification.SET, EbnfPackage.TERM__TERM_REPEATED_SEQUENCE, newTermRepeatedSequence, newTermRepeatedSequence));
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public NotificationChain eInverseRemove(InternalEObject otherEnd, int featureID, NotificationChain msgs)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.TERM__TERM_ATOM:
+        return basicSetTermAtom(null, msgs);
+      case EbnfPackage.TERM__TERM_GROUPED_SEQUENCE:
+        return basicSetTermGroupedSequence(null, msgs);
+      case EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE:
+        return basicSetTermOptionalSequence(null, msgs);
+      case EbnfPackage.TERM__TERM_REPEATED_SEQUENCE:
+        return basicSetTermRepeatedSequence(null, msgs);
+    }
+    return super.eInverseRemove(otherEnd, featureID, msgs);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public Object eGet(int featureID, boolean resolve, boolean coreType)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.TERM__TERM_ATOM:
+        return getTermAtom();
+      case EbnfPackage.TERM__TERM_GROUPED_SEQUENCE:
+        return getTermGroupedSequence();
+      case EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE:
+        return getTermOptionalSequence();
+      case EbnfPackage.TERM__TERM_REPEATED_SEQUENCE:
+        return getTermRepeatedSequence();
+    }
+    return super.eGet(featureID, resolve, coreType);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eSet(int featureID, Object newValue)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.TERM__TERM_ATOM:
+        setTermAtom((Atom)newValue);
+        return;
+      case EbnfPackage.TERM__TERM_GROUPED_SEQUENCE:
+        setTermGroupedSequence((GroupedSequence)newValue);
+        return;
+      case EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE:
+        setTermOptionalSequence((OptionalSequence)newValue);
+        return;
+      case EbnfPackage.TERM__TERM_REPEATED_SEQUENCE:
+        setTermRepeatedSequence((RepeatedSequence)newValue);
+        return;
+    }
+    super.eSet(featureID, newValue);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public void eUnset(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.TERM__TERM_ATOM:
+        setTermAtom((Atom)null);
+        return;
+      case EbnfPackage.TERM__TERM_GROUPED_SEQUENCE:
+        setTermGroupedSequence((GroupedSequence)null);
+        return;
+      case EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE:
+        setTermOptionalSequence((OptionalSequence)null);
+        return;
+      case EbnfPackage.TERM__TERM_REPEATED_SEQUENCE:
+        setTermRepeatedSequence((RepeatedSequence)null);
+        return;
+    }
+    super.eUnset(featureID);
+  }
+
+  /**
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  @Override
+  public boolean eIsSet(int featureID)
+  {
+    switch (featureID)
+    {
+      case EbnfPackage.TERM__TERM_ATOM:
+        return termAtom != null;
+      case EbnfPackage.TERM__TERM_GROUPED_SEQUENCE:
+        return termGroupedSequence != null;
+      case EbnfPackage.TERM__TERM_OPTIONAL_SEQUENCE:
+        return termOptionalSequence != null;
+      case EbnfPackage.TERM__TERM_REPEATED_SEQUENCE:
+        return termRepeatedSequence != null;
+    }
+    return super.eIsSet(featureID);
+  }
+
+} //TermImpl
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfAdapterFactory.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfAdapterFactory.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfAdapterFactory.java	(revision 61)
@@ -0,0 +1,552 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.util;
+
+import de.ugoe.cs.swe.bnftools.ebnf.*;
+
+import org.eclipse.emf.common.notify.Adapter;
+import org.eclipse.emf.common.notify.Notifier;
+
+import org.eclipse.emf.common.notify.impl.AdapterFactoryImpl;
+
+import org.eclipse.emf.ecore.EObject;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Adapter Factory</b> for the model.
+ * It provides an adapter <code>createXXX</code> method for each class of the model.
+ * <!-- end-user-doc -->
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage
+ * @generated
+ */
+public class EbnfAdapterFactory extends AdapterFactoryImpl
+{
+  /**
+   * The cached model package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static EbnfPackage modelPackage;
+
+  /**
+   * Creates an instance of the adapter factory.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EbnfAdapterFactory()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = EbnfPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Returns whether this factory is applicable for the type of the object.
+   * <!-- begin-user-doc -->
+   * This implementation returns <code>true</code> if the object is either the model's package or is an instance object of the model.
+   * <!-- end-user-doc -->
+   * @return whether this factory is applicable for the type of the object.
+   * @generated
+   */
+  @Override
+  public boolean isFactoryForType(Object object)
+  {
+    if (object == modelPackage)
+    {
+      return true;
+    }
+    if (object instanceof EObject)
+    {
+      return ((EObject)object).eClass().getEPackage() == modelPackage;
+    }
+    return false;
+  }
+
+  /**
+   * The switch that delegates to the <code>createXXX</code> methods.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected EbnfSwitch<Adapter> modelSwitch =
+    new EbnfSwitch<Adapter>()
+    {
+      @Override
+      public Adapter caseEtsiBnf(EtsiBnf object)
+      {
+        return createEtsiBnfAdapter();
+      }
+      @Override
+      public Adapter caseImportSection(ImportSection object)
+      {
+        return createImportSectionAdapter();
+      }
+      @Override
+      public Adapter caseBnfEntry(BnfEntry object)
+      {
+        return createBnfEntryAdapter();
+      }
+      @Override
+      public Adapter caseDeltaEntry(DeltaEntry object)
+      {
+        return createDeltaEntryAdapter();
+      }
+      @Override
+      public Adapter caseMergeEntry(MergeEntry object)
+      {
+        return createMergeEntryAdapter();
+      }
+      @Override
+      public Adapter caseSectionHeading(SectionHeading object)
+      {
+        return createSectionHeadingAdapter();
+      }
+      @Override
+      public Adapter caseImport(Import object)
+      {
+        return createImportAdapter();
+      }
+      @Override
+      public Adapter caseRule(Rule object)
+      {
+        return createRuleAdapter();
+      }
+      @Override
+      public Adapter caseExtRule(ExtRule object)
+      {
+        return createExtRuleAdapter();
+      }
+      @Override
+      public Adapter caseMergeRule(MergeRule object)
+      {
+        return createMergeRuleAdapter();
+      }
+      @Override
+      public Adapter caseGlobalCombinator(GlobalCombinator object)
+      {
+        return createGlobalCombinatorAdapter();
+      }
+      @Override
+      public Adapter caseRuleCombinator(RuleCombinator object)
+      {
+        return createRuleCombinatorAdapter();
+      }
+      @Override
+      public Adapter caseHookCombinator(HookCombinator object)
+      {
+        return createHookCombinatorAdapter();
+      }
+      @Override
+      public Adapter caseDefinitionList(DefinitionList object)
+      {
+        return createDefinitionListAdapter();
+      }
+      @Override
+      public Adapter caseSingleDefinition(SingleDefinition object)
+      {
+        return createSingleDefinitionAdapter();
+      }
+      @Override
+      public Adapter caseTerm(Term object)
+      {
+        return createTermAdapter();
+      }
+      @Override
+      public Adapter caseAtom(Atom object)
+      {
+        return createAtomAdapter();
+      }
+      @Override
+      public Adapter caseRuleReference(RuleReference object)
+      {
+        return createRuleReferenceAdapter();
+      }
+      @Override
+      public Adapter caseStringRule(StringRule object)
+      {
+        return createStringRuleAdapter();
+      }
+      @Override
+      public Adapter caseGroupedSequence(GroupedSequence object)
+      {
+        return createGroupedSequenceAdapter();
+      }
+      @Override
+      public Adapter caseOptionalSequence(OptionalSequence object)
+      {
+        return createOptionalSequenceAdapter();
+      }
+      @Override
+      public Adapter caseRepeatedSequence(RepeatedSequence object)
+      {
+        return createRepeatedSequenceAdapter();
+      }
+      @Override
+      public Adapter defaultCase(EObject object)
+      {
+        return createEObjectAdapter();
+      }
+    };
+
+  /**
+   * Creates an adapter for the <code>target</code>.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @param target the object to adapt.
+   * @return the adapter for the <code>target</code>.
+   * @generated
+   */
+  @Override
+  public Adapter createAdapter(Notifier target)
+  {
+    return modelSwitch.doSwitch((EObject)target);
+  }
+
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf <em>Etsi Bnf</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf
+   * @generated
+   */
+  public Adapter createEtsiBnfAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.ImportSection <em>Import Section</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ImportSection
+   * @generated
+   */
+  public Adapter createImportSectionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.BnfEntry <em>Bnf Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.BnfEntry
+   * @generated
+   */
+  public Adapter createBnfEntryAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry <em>Delta Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry
+   * @generated
+   */
+  public Adapter createDeltaEntryAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeEntry <em>Merge Entry</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeEntry
+   * @generated
+   */
+  public Adapter createMergeEntryAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.SectionHeading <em>Section Heading</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SectionHeading
+   * @generated
+   */
+  public Adapter createSectionHeadingAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.Import <em>Import</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Import
+   * @generated
+   */
+  public Adapter createImportAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.Rule <em>Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Rule
+   * @generated
+   */
+  public Adapter createRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.ExtRule <em>Ext Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.ExtRule
+   * @generated
+   */
+  public Adapter createExtRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.MergeRule <em>Merge Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.MergeRule
+   * @generated
+   */
+  public Adapter createMergeRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator <em>Global Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator
+   * @generated
+   */
+  public Adapter createGlobalCombinatorAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator <em>Rule Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator
+   * @generated
+   */
+  public Adapter createRuleCombinatorAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.HookCombinator <em>Hook Combinator</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.HookCombinator
+   * @generated
+   */
+  public Adapter createHookCombinatorAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.DefinitionList <em>Definition List</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.DefinitionList
+   * @generated
+   */
+  public Adapter createDefinitionListAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition <em>Single Definition</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition
+   * @generated
+   */
+  public Adapter createSingleDefinitionAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.Term <em>Term</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Term
+   * @generated
+   */
+  public Adapter createTermAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.Atom <em>Atom</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.Atom
+   * @generated
+   */
+  public Adapter createAtomAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.RuleReference <em>Rule Reference</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RuleReference
+   * @generated
+   */
+  public Adapter createRuleReferenceAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.StringRule <em>String Rule</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.StringRule
+   * @generated
+   */
+  public Adapter createStringRuleAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence <em>Grouped Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence
+   * @generated
+   */
+  public Adapter createGroupedSequenceAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence <em>Optional Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence
+   * @generated
+   */
+  public Adapter createOptionalSequenceAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for an object of class '{@link de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence <em>Repeated Sequence</em>}'.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null so that we can easily ignore cases;
+   * it's useful to ignore a case when inheritance will catch all the cases anyway.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @see de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence
+   * @generated
+   */
+  public Adapter createRepeatedSequenceAdapter()
+  {
+    return null;
+  }
+
+  /**
+   * Creates a new adapter for the default case.
+   * <!-- begin-user-doc -->
+   * This default implementation returns null.
+   * <!-- end-user-doc -->
+   * @return the new adapter.
+   * @generated
+   */
+  public Adapter createEObjectAdapter()
+  {
+    return null;
+  }
+
+} //EbnfAdapterFactory
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfSwitch.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfSwitch.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/ebnf/util/EbnfSwitch.java	(revision 61)
@@ -0,0 +1,605 @@
+/**
+ */
+package de.ugoe.cs.swe.bnftools.ebnf.util;
+
+import de.ugoe.cs.swe.bnftools.ebnf.*;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EPackage;
+
+import org.eclipse.emf.ecore.util.Switch;
+
+/**
+ * <!-- begin-user-doc -->
+ * The <b>Switch</b> for the model's inheritance hierarchy.
+ * It supports the call {@link #doSwitch(EObject) doSwitch(object)}
+ * to invoke the <code>caseXXX</code> method for each class of the model,
+ * starting with the actual class of the object
+ * and proceeding up the inheritance hierarchy
+ * until a non-null result is returned,
+ * which is the result of the switch.
+ * <!-- end-user-doc -->
+ * @see de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage
+ * @generated
+ */
+public class EbnfSwitch<T> extends Switch<T>
+{
+  /**
+   * The cached model package
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  protected static EbnfPackage modelPackage;
+
+  /**
+   * Creates an instance of the switch.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @generated
+   */
+  public EbnfSwitch()
+  {
+    if (modelPackage == null)
+    {
+      modelPackage = EbnfPackage.eINSTANCE;
+    }
+  }
+
+  /**
+   * Checks whether this is a switch for the given package.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @parameter ePackage the package in question.
+   * @return whether this is a switch for the given package.
+   * @generated
+   */
+  @Override
+  protected boolean isSwitchFor(EPackage ePackage)
+  {
+    return ePackage == modelPackage;
+  }
+
+  /**
+   * Calls <code>caseXXX</code> for each class of the model until one returns a non null result; it yields that result.
+   * <!-- begin-user-doc -->
+   * <!-- end-user-doc -->
+   * @return the first non-null result returned by a <code>caseXXX</code> call.
+   * @generated
+   */
+  @Override
+  protected T doSwitch(int classifierID, EObject theEObject)
+  {
+    switch (classifierID)
+    {
+      case EbnfPackage.ETSI_BNF:
+      {
+        EtsiBnf etsiBnf = (EtsiBnf)theEObject;
+        T result = caseEtsiBnf(etsiBnf);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.IMPORT_SECTION:
+      {
+        ImportSection importSection = (ImportSection)theEObject;
+        T result = caseImportSection(importSection);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.BNF_ENTRY:
+      {
+        BnfEntry bnfEntry = (BnfEntry)theEObject;
+        T result = caseBnfEntry(bnfEntry);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.DELTA_ENTRY:
+      {
+        DeltaEntry deltaEntry = (DeltaEntry)theEObject;
+        T result = caseDeltaEntry(deltaEntry);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.MERGE_ENTRY:
+      {
+        MergeEntry mergeEntry = (MergeEntry)theEObject;
+        T result = caseMergeEntry(mergeEntry);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.SECTION_HEADING:
+      {
+        SectionHeading sectionHeading = (SectionHeading)theEObject;
+        T result = caseSectionHeading(sectionHeading);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.IMPORT:
+      {
+        Import import_ = (Import)theEObject;
+        T result = caseImport(import_);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.RULE:
+      {
+        Rule rule = (Rule)theEObject;
+        T result = caseRule(rule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.EXT_RULE:
+      {
+        ExtRule extRule = (ExtRule)theEObject;
+        T result = caseExtRule(extRule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.MERGE_RULE:
+      {
+        MergeRule mergeRule = (MergeRule)theEObject;
+        T result = caseMergeRule(mergeRule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.GLOBAL_COMBINATOR:
+      {
+        GlobalCombinator globalCombinator = (GlobalCombinator)theEObject;
+        T result = caseGlobalCombinator(globalCombinator);
+        if (result == null) result = caseMergeRule(globalCombinator);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.RULE_COMBINATOR:
+      {
+        RuleCombinator ruleCombinator = (RuleCombinator)theEObject;
+        T result = caseRuleCombinator(ruleCombinator);
+        if (result == null) result = caseMergeRule(ruleCombinator);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.HOOK_COMBINATOR:
+      {
+        HookCombinator hookCombinator = (HookCombinator)theEObject;
+        T result = caseHookCombinator(hookCombinator);
+        if (result == null) result = caseMergeRule(hookCombinator);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.DEFINITION_LIST:
+      {
+        DefinitionList definitionList = (DefinitionList)theEObject;
+        T result = caseDefinitionList(definitionList);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.SINGLE_DEFINITION:
+      {
+        SingleDefinition singleDefinition = (SingleDefinition)theEObject;
+        T result = caseSingleDefinition(singleDefinition);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.TERM:
+      {
+        Term term = (Term)theEObject;
+        T result = caseTerm(term);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.ATOM:
+      {
+        Atom atom = (Atom)theEObject;
+        T result = caseAtom(atom);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.RULE_REFERENCE:
+      {
+        RuleReference ruleReference = (RuleReference)theEObject;
+        T result = caseRuleReference(ruleReference);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.STRING_RULE:
+      {
+        StringRule stringRule = (StringRule)theEObject;
+        T result = caseStringRule(stringRule);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.GROUPED_SEQUENCE:
+      {
+        GroupedSequence groupedSequence = (GroupedSequence)theEObject;
+        T result = caseGroupedSequence(groupedSequence);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.OPTIONAL_SEQUENCE:
+      {
+        OptionalSequence optionalSequence = (OptionalSequence)theEObject;
+        T result = caseOptionalSequence(optionalSequence);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      case EbnfPackage.REPEATED_SEQUENCE:
+      {
+        RepeatedSequence repeatedSequence = (RepeatedSequence)theEObject;
+        T result = caseRepeatedSequence(repeatedSequence);
+        if (result == null) result = defaultCase(theEObject);
+        return result;
+      }
+      default: return defaultCase(theEObject);
+    }
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Etsi Bnf</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Etsi Bnf</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseEtsiBnf(EtsiBnf object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Import Section</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Import Section</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseImportSection(ImportSection object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Bnf Entry</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Bnf Entry</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseBnfEntry(BnfEntry object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Delta Entry</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Delta Entry</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseDeltaEntry(DeltaEntry object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Merge Entry</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Merge Entry</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMergeEntry(MergeEntry object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Section Heading</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Section Heading</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseSectionHeading(SectionHeading object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Import</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Import</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseImport(Import object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Rule</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRule(Rule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Ext Rule</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Ext Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseExtRule(ExtRule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Merge Rule</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Merge Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseMergeRule(MergeRule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Global Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Global Combinator</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseGlobalCombinator(GlobalCombinator object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Rule Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Rule Combinator</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRuleCombinator(RuleCombinator object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Hook Combinator</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Hook Combinator</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseHookCombinator(HookCombinator object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Definition List</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Definition List</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseDefinitionList(DefinitionList object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Single Definition</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Single Definition</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseSingleDefinition(SingleDefinition object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Term</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Term</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseTerm(Term object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Atom</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Atom</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseAtom(Atom object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Rule Reference</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Rule Reference</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRuleReference(RuleReference object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>String Rule</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>String Rule</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseStringRule(StringRule object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Grouped Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Grouped Sequence</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseGroupedSequence(GroupedSequence object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Optional Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Optional Sequence</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseOptionalSequence(OptionalSequence object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>Repeated Sequence</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>Repeated Sequence</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+   * @generated
+   */
+  public T caseRepeatedSequence(RepeatedSequence object)
+  {
+    return null;
+  }
+
+  /**
+   * Returns the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * <!-- begin-user-doc -->
+   * This implementation returns null;
+   * returning a non-null result will terminate the switch, but this is the last case anyway.
+   * <!-- end-user-doc -->
+   * @param object the target of the switch.
+   * @return the result of interpreting the object as an instance of '<em>EObject</em>'.
+   * @see #doSwitch(org.eclipse.emf.ecore.EObject)
+   * @generated
+   */
+  @Override
+  public T defaultCase(EObject object)
+  {
+    return null;
+  }
+
+} //EbnfSwitch
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfAntlrTokenFileProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfAntlrTokenFileProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfAntlrTokenFileProvider.java	(revision 61)
@@ -0,0 +1,15 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.parser.antlr;
+
+import java.io.InputStream;
+import org.eclipse.xtext.parser.antlr.IAntlrTokenFileProvider;
+
+public class EbnfAntlrTokenFileProvider implements IAntlrTokenFileProvider {
+	
+	public InputStream getAntlrTokenFile() {
+		ClassLoader classLoader = getClass().getClassLoader();
+    	return classLoader.getResourceAsStream("de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.tokens");
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfParser.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfParser.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/EbnfParser.java	(revision 61)
@@ -0,0 +1,39 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.parser.antlr;
+
+import com.google.inject.Inject;
+
+import org.eclipse.xtext.parser.antlr.XtextTokenStream;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+public class EbnfParser extends org.eclipse.xtext.parser.antlr.AbstractAntlrParser {
+	
+	@Inject
+	private EbnfGrammarAccess grammarAccess;
+	
+	@Override
+	protected void setInitialHiddenTokens(XtextTokenStream tokenStream) {
+		tokenStream.setInitialHiddenTokens("RULE_WS", "RULE_ML_COMMENT", "RULE_SL_COMMENT");
+	}
+	
+	@Override
+	protected de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfParser createParser(XtextTokenStream stream) {
+		return new de.ugoe.cs.swe.bnftools.parser.antlr.internal.InternalEbnfParser(stream, getGrammarAccess());
+	}
+	
+	@Override 
+	protected String getDefaultRuleName() {
+		return "EtsiBnf";
+	}
+	
+	public EbnfGrammarAccess getGrammarAccess() {
+		return this.grammarAccess;
+	}
+	
+	public void setGrammarAccess(EbnfGrammarAccess grammarAccess) {
+		this.grammarAccess = grammarAccess;
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g	(revision 61)
@@ -0,0 +1,1791 @@
+/*
+* generated by Xtext
+*/
+grammar InternalEbnf;
+
+options {
+	superClass=AbstractInternalAntlrParser;
+	
+}
+
+@lexer::header {
+package de.ugoe.cs.swe.bnftools.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 de.ugoe.cs.swe.bnftools.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.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 de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+}
+
+@parser::members {
+
+ 	private EbnfGrammarAccess grammarAccess;
+ 	
+    public InternalEbnfParser(TokenStream input, EbnfGrammarAccess grammarAccess) {
+        this(input);
+        this.grammarAccess = grammarAccess;
+        registerRules(grammarAccess.getGrammar());
+    }
+    
+    @Override
+    protected String getFirstRuleName() {
+    	return "EtsiBnf";	
+   	}
+   	
+   	@Override
+   	protected EbnfGrammarAccess getGrammarAccess() {
+   		return grammarAccess;
+   	}
+}
+
+@rulecatch { 
+    catch (RecognitionException re) { 
+        recover(input,re); 
+        appendSkippedTokens();
+    } 
+}
+
+
+
+
+// Entry rule entryRuleEtsiBnf
+entryRuleEtsiBnf returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getEtsiBnfRule()); }
+	 iv_ruleEtsiBnf=ruleEtsiBnf 
+	 { $current=$iv_ruleEtsiBnf.current; } 
+	 EOF 
+;
+
+// Rule EtsiBnf
+ruleEtsiBnf returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((	otherlv_0='grammar' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0());
+    }
+(
+(
+		lv_name_1_0=RULE_ID
+		{
+			newLeafNode(lv_name_1_0, grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getEtsiBnfRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_1_0, 
+        		"ID");
+	    }
+
+)
+)((
+(
+		lv_type_2_0=	'/bnf' 
+    {
+        newLeafNode(lv_type_2_0, grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getEtsiBnfRule());
+	        }
+       		setWithLastConsumed($current, "type", lv_type_2_0, "/bnf");
+	    }
+
+)
+)?	otherlv_3=';' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+	    }
+		lv_importSection_4_0=ruleImportSection		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		set(
+       			$current, 
+       			"importSection",
+        		lv_importSection_4_0, 
+        		"ImportSection");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+	    }
+		lv_bnfEntry_5_0=ruleBnfEntry		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		add(
+       			$current, 
+       			"bnfEntry",
+        		lv_bnfEntry_5_0, 
+        		"BnfEntry");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)+))
+    |((
+(
+		lv_type_6_0=	'/delta' 
+    {
+        newLeafNode(lv_type_6_0, grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getEtsiBnfRule());
+	        }
+       		setWithLastConsumed($current, "type", lv_type_6_0, "/delta");
+	    }
+
+)
+)	otherlv_7=';' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+	    }
+		lv_importSection_8_0=ruleImportSection		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		set(
+       			$current, 
+       			"importSection",
+        		lv_importSection_8_0, 
+        		"ImportSection");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+	    }
+		lv_deltaEntry_9_0=ruleDeltaEntry		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		add(
+       			$current, 
+       			"deltaEntry",
+        		lv_deltaEntry_9_0, 
+        		"DeltaEntry");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*)
+    |((
+(
+		lv_type_10_0=	'/merge' 
+    {
+        newLeafNode(lv_type_10_0, grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getEtsiBnfRule());
+	        }
+       		setWithLastConsumed($current, "type", lv_type_10_0, "/merge");
+	    }
+
+)
+)	otherlv_11=';' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+	    }
+		lv_importSection_12_0=ruleImportSection		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		set(
+       			$current, 
+       			"importSection",
+        		lv_importSection_12_0, 
+        		"ImportSection");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+	    }
+		lv_mergeEntry_13_0=ruleMergeEntry		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+	        }
+       		add(
+       			$current, 
+       			"mergeEntry",
+        		lv_mergeEntry_13_0, 
+        		"MergeEntry");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)*))
+;
+
+
+
+
+
+// Entry rule entryRuleImportSection
+entryRuleImportSection returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getImportSectionRule()); }
+	 iv_ruleImportSection=ruleImportSection 
+	 { $current=$iv_ruleImportSection.current; } 
+	 EOF 
+;
+
+// Rule ImportSection
+ruleImportSection returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+	    }
+		lv_imports_0_0=ruleImport		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getImportSectionRule());
+	        }
+       		add(
+       			$current, 
+       			"imports",
+        		lv_imports_0_0, 
+        		"Import");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)+
+;
+
+
+
+
+
+// Entry rule entryRuleBnfEntry
+entryRuleBnfEntry returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getBnfEntryRule()); }
+	 iv_ruleBnfEntry=ruleBnfEntry 
+	 { $current=$iv_ruleBnfEntry.current; } 
+	 EOF 
+;
+
+// Rule BnfEntry
+ruleBnfEntry returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+	    }
+		lv_sectionheader_0_0=ruleSectionHeading		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBnfEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"sectionheader",
+        		lv_sectionheader_0_0, 
+        		"SectionHeading");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+	    }
+		lv_rule_1_0=ruleRule		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getBnfEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"rule",
+        		lv_rule_1_0, 
+        		"Rule");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleDeltaEntry
+entryRuleDeltaEntry returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getDeltaEntryRule()); }
+	 iv_ruleDeltaEntry=ruleDeltaEntry 
+	 { $current=$iv_ruleDeltaEntry.current; } 
+	 EOF 
+;
+
+// Rule DeltaEntry
+ruleDeltaEntry returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+	    }
+		lv_rule_0_0=ruleRule		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"rule",
+        		lv_rule_0_0, 
+        		"Rule");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+	    }
+		lv_sectionheader_1_0=ruleSectionHeading		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"sectionheader",
+        		lv_sectionheader_1_0, 
+        		"SectionHeading");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+	    }
+		lv_extRule_2_0=ruleExtRule		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"extRule",
+        		lv_extRule_2_0, 
+        		"ExtRule");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleMergeEntry
+entryRuleMergeEntry returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getMergeEntryRule()); }
+	 iv_ruleMergeEntry=ruleMergeEntry 
+	 { $current=$iv_ruleMergeEntry.current; } 
+	 EOF 
+;
+
+// Rule MergeEntry
+ruleMergeEntry returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+	    }
+		lv_sectionheader_0_0=ruleSectionHeading		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMergeEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"sectionheader",
+        		lv_sectionheader_0_0, 
+        		"SectionHeading");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+	    }
+		lv_mergeRule_1_0=ruleMergeRule		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getMergeEntryRule());
+	        }
+       		set(
+       			$current, 
+       			"mergeRule",
+        		lv_mergeRule_1_0, 
+        		"MergeRule");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleSectionHeading
+entryRuleSectionHeading returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getSectionHeadingRule()); }
+	 iv_ruleSectionHeading=ruleSectionHeading 
+	 { $current=$iv_ruleSectionHeading.current; } 
+	 EOF 
+;
+
+// Rule SectionHeading
+ruleSectionHeading returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0(),
+            $current);
+    }
+)(
+(
+		lv_sectionHeader_1_0=RULE_SECTIONHEADER
+		{
+			newLeafNode(lv_sectionHeader_1_0, grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getSectionHeadingRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"sectionHeader",
+        		lv_sectionHeader_1_0, 
+        		"SECTIONHEADER");
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleImport
+entryRuleImport returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getImportRule()); }
+	 iv_ruleImport=ruleImport 
+	 { $current=$iv_ruleImport.current; } 
+	 EOF 
+;
+
+// Rule Import
+ruleImport returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='import' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getImportAccess().getImportKeyword_0());
+    }
+(
+(
+		lv_importURI_1_0=RULE_STRING
+		{
+			newLeafNode(lv_importURI_1_0, grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getImportRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"importURI",
+        		lv_importURI_1_0, 
+        		"STRING");
+	    }
+
+)
+)(	otherlv_2='/' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getImportAccess().getSolidusKeyword_2_0());
+    }
+((
+(
+		lv_grammarType_3_0=	'core' 
+    {
+        newLeafNode(lv_grammarType_3_0, grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getImportRule());
+	        }
+       		setWithLastConsumed($current, "grammarType", lv_grammarType_3_0, "core");
+	    }
+
+)
+)
+    |(
+(
+		lv_grammarType_4_0=	'package' 
+    {
+        newLeafNode(lv_grammarType_4_0, grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getImportRule());
+	        }
+       		setWithLastConsumed($current, "grammarType", lv_grammarType_4_0, "package");
+	    }
+
+)
+)
+    |(
+(
+		lv_grammarType_5_0=	'update' 
+    {
+        newLeafNode(lv_grammarType_5_0, grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getImportRule());
+	        }
+       		setWithLastConsumed($current, "grammarType", lv_grammarType_5_0, "update");
+	    }
+
+)
+)))?(	otherlv_6='label:' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getImportAccess().getLabelKeyword_3_0());
+    }
+(
+(
+		lv_label_7_0=RULE_ID
+		{
+			newLeafNode(lv_label_7_0, grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getImportRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"label",
+        		lv_label_7_0, 
+        		"ID");
+	    }
+
+)
+))?	otherlv_8=';' 
+    {
+    	newLeafNode(otherlv_8, grammarAccess.getImportAccess().getSemicolonKeyword_4());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleRule
+entryRuleRule returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRuleRule()); }
+	 iv_ruleRule=ruleRule 
+	 { $current=$iv_ruleRule.current; } 
+	 EOF 
+;
+
+// Rule Rule
+ruleRule returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(((
+(
+		lv_rulenumber_0_0=RULE_INT
+		{
+			newLeafNode(lv_rulenumber_0_0, grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"rulenumber",
+        		lv_rulenumber_0_0, 
+        		"INT");
+	    }
+
+)
+)(
+(
+		lv_rulevariant_1_0=RULE_ID
+		{
+			newLeafNode(lv_rulevariant_1_0, grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"rulevariant",
+        		lv_rulevariant_1_0, 
+        		"ID");
+	    }
+
+)
+)?	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRuleAccess().getFullStopKeyword_0_2());
+    }
+)?(
+(
+		lv_name_3_0=RULE_ID
+		{
+			newLeafNode(lv_name_3_0, grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_3_0, 
+        		"ID");
+	    }
+
+)
+)	otherlv_4='::=' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+	    }
+		lv_definitionList_5_0=ruleDefinitionList		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRuleRule());
+	        }
+       		set(
+       			$current, 
+       			"definitionList",
+        		lv_definitionList_5_0, 
+        		"DefinitionList");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)?(	otherlv_6=';' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getRuleAccess().getSemicolonKeyword_4());
+    }
+)?)
+;
+
+
+
+
+
+// Entry rule entryRuleExtRule
+entryRuleExtRule returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getExtRuleRule()); }
+	 iv_ruleExtRule=ruleExtRule 
+	 { $current=$iv_ruleExtRule.current; } 
+	 EOF 
+;
+
+// Rule ExtRule
+ruleExtRule returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(((
+(
+		lv_rulenumber_0_0=RULE_INT
+		{
+			newLeafNode(lv_rulenumber_0_0, grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getExtRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"rulenumber",
+        		lv_rulenumber_0_0, 
+        		"INT");
+	    }
+
+)
+)(
+(
+		lv_rulevariant_1_0=RULE_ID
+		{
+			newLeafNode(lv_rulevariant_1_0, grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getExtRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"rulevariant",
+        		lv_rulevariant_1_0, 
+        		"ID");
+	    }
+
+)
+)?	otherlv_2='.' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2());
+    }
+)?(
+(
+		lv_name_3_0=RULE_ID
+		{
+			newLeafNode(lv_name_3_0, grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getExtRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_3_0, 
+        		"ID");
+	    }
+
+)
+)(	otherlv_4='(' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0());
+    }
+(
+(
+		lv_ruleext_5_0=RULE_INT
+		{
+			newLeafNode(lv_ruleext_5_0, grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getExtRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"ruleext",
+        		lv_ruleext_5_0, 
+        		"INT");
+	    }
+
+)
+)	otherlv_6=')' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2());
+    }
+)	otherlv_7='<-' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3());
+    }
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+	    }
+		lv_elements_8_0=ruleAtom		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getExtRuleRule());
+	        }
+       		add(
+       			$current, 
+       			"elements",
+        		lv_elements_8_0, 
+        		"Atom");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |	otherlv_9=')' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1());
+    }
+
+    |	otherlv_10=']' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2());
+    }
+
+    |	otherlv_11='}' 
+    {
+    	newLeafNode(otherlv_11, grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3());
+    }
+
+    |	otherlv_12='|' 
+    {
+    	newLeafNode(otherlv_12, grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4());
+    }
+
+    |	otherlv_13='(' 
+    {
+    	newLeafNode(otherlv_13, grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5());
+    }
+
+    |	otherlv_14='[' 
+    {
+    	newLeafNode(otherlv_14, grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6());
+    }
+
+    |	otherlv_15='{' 
+    {
+    	newLeafNode(otherlv_15, grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7());
+    }
+
+    |	otherlv_16='*' 
+    {
+    	newLeafNode(otherlv_16, grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8());
+    }
+
+    |	otherlv_17='+' 
+    {
+    	newLeafNode(otherlv_17, grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9());
+    }
+)*(	otherlv_18=';' 
+    {
+    	newLeafNode(otherlv_18, grammarAccess.getExtRuleAccess().getSemicolonKeyword_5());
+    }
+)?)
+;
+
+
+
+
+
+// Entry rule entryRuleMergeRule
+entryRuleMergeRule returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getMergeRuleRule()); }
+	 iv_ruleMergeRule=ruleMergeRule 
+	 { $current=$iv_ruleMergeRule.current; } 
+	 EOF 
+;
+
+// Rule MergeRule
+ruleMergeRule returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+    { 
+        newCompositeNode(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+    }
+    this_GlobalCombinator_0=ruleGlobalCombinator
+    { 
+        $current = $this_GlobalCombinator_0.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+    }
+    this_RuleCombinator_1=ruleRuleCombinator
+    { 
+        $current = $this_RuleCombinator_1.current; 
+        afterParserOrEnumRuleCall();
+    }
+
+    |
+    { 
+        newCompositeNode(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+    }
+    this_HookCombinator_2=ruleHookCombinator
+    { 
+        $current = $this_HookCombinator_2.current; 
+        afterParserOrEnumRuleCall();
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleGlobalCombinator
+entryRuleGlobalCombinator returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getGlobalCombinatorRule()); }
+	 iv_ruleGlobalCombinator=ruleGlobalCombinator 
+	 { $current=$iv_ruleGlobalCombinator.current; } 
+	 EOF 
+;
+
+// Rule GlobalCombinator
+ruleGlobalCombinator returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((	otherlv_0='global' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0());
+    }
+	otherlv_1='combinator:' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1());
+    }
+)(
+(
+		lv_logic_2_0=RULE_LOGIC
+		{
+			newLeafNode(lv_logic_2_0, grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getGlobalCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"logic",
+        		lv_logic_2_0, 
+        		"LOGIC");
+	    }
+
+)
+)(	otherlv_3=';' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2());
+    }
+)?)
+;
+
+
+
+
+
+// Entry rule entryRuleRuleCombinator
+entryRuleRuleCombinator returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRuleCombinatorRule()); }
+	 iv_ruleRuleCombinator=ruleRuleCombinator 
+	 { $current=$iv_ruleRuleCombinator.current; } 
+	 EOF 
+;
+
+// Rule RuleCombinator
+ruleRuleCombinator returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((	otherlv_0='rule' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0());
+    }
+	otherlv_1='combinator:' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1());
+    }
+(
+(
+		lv_name_2_0=RULE_ID
+		{
+			newLeafNode(lv_name_2_0, grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_2_0, 
+        		"ID");
+	    }
+
+)
+))(
+(
+		lv_logic_3_0=RULE_LOGIC
+		{
+			newLeafNode(lv_logic_3_0, grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"logic",
+        		lv_logic_3_0, 
+        		"LOGIC");
+	    }
+
+)
+)(	otherlv_4='(' 
+    {
+    	newLeafNode(otherlv_4, grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0());
+    }
+(
+(
+		lv_LABEL_5_0=RULE_STRING
+		{
+			newLeafNode(lv_LABEL_5_0, grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleCombinatorRule());
+	        }
+       		addWithLastConsumed(
+       			$current, 
+       			"LABEL",
+        		lv_LABEL_5_0, 
+        		"STRING");
+	    }
+
+)
+)	otherlv_6=')' 
+    {
+    	newLeafNode(otherlv_6, grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2());
+    }
+)*(	otherlv_7=';' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3());
+    }
+)?)
+;
+
+
+
+
+
+// Entry rule entryRuleHookCombinator
+entryRuleHookCombinator returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getHookCombinatorRule()); }
+	 iv_ruleHookCombinator=ruleHookCombinator 
+	 { $current=$iv_ruleHookCombinator.current; } 
+	 EOF 
+;
+
+// Rule HookCombinator
+ruleHookCombinator returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='hook' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getHookCombinatorAccess().getHookKeyword_0());
+    }
+	otherlv_1='combinator:' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1());
+    }
+(
+(
+		lv_name_2_0=RULE_ID
+		{
+			newLeafNode(lv_name_2_0, grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getHookCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"name",
+        		lv_name_2_0, 
+        		"ID");
+	    }
+
+)
+)	otherlv_3='(' 
+    {
+    	newLeafNode(otherlv_3, grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3());
+    }
+(
+(
+		lv_ruleext_4_0=RULE_INT
+		{
+			newLeafNode(lv_ruleext_4_0, grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getHookCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"ruleext",
+        		lv_ruleext_4_0, 
+        		"INT");
+	    }
+
+)
+)	otherlv_5=')' 
+    {
+    	newLeafNode(otherlv_5, grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5());
+    }
+(
+(
+		lv_logic_6_0=RULE_LOGIC
+		{
+			newLeafNode(lv_logic_6_0, grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getHookCombinatorRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"logic",
+        		lv_logic_6_0, 
+        		"LOGIC");
+	    }
+
+)
+)?(	otherlv_7='(' 
+    {
+    	newLeafNode(otherlv_7, grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0());
+    }
+(
+(
+		lv_LABEL_8_0=RULE_STRING
+		{
+			newLeafNode(lv_LABEL_8_0, grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getHookCombinatorRule());
+	        }
+       		addWithLastConsumed(
+       			$current, 
+       			"LABEL",
+        		lv_LABEL_8_0, 
+        		"STRING");
+	    }
+
+)
+)	otherlv_9=')' 
+    {
+    	newLeafNode(otherlv_9, grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2());
+    }
+)+(	otherlv_10=';' 
+    {
+    	newLeafNode(otherlv_10, grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8());
+    }
+)?)
+;
+
+
+
+
+
+// Entry rule entryRuleDefinitionList
+entryRuleDefinitionList returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getDefinitionListRule()); }
+	 iv_ruleDefinitionList=ruleDefinitionList 
+	 { $current=$iv_ruleDefinitionList.current; } 
+	 EOF 
+;
+
+// Rule DefinitionList
+ruleDefinitionList returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+	    }
+		lv_singleDefinition_0_0=ruleSingleDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDefinitionListRule());
+	        }
+       		add(
+       			$current, 
+       			"singleDefinition",
+        		lv_singleDefinition_0_0, 
+        		"SingleDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)(	otherlv_1='|' 
+    {
+    	newLeafNode(otherlv_1, grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+	    }
+		lv_singleDefinition_2_0=ruleSingleDefinition		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getDefinitionListRule());
+	        }
+       		add(
+       			$current, 
+       			"singleDefinition",
+        		lv_singleDefinition_2_0, 
+        		"SingleDefinition");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))*)
+;
+
+
+
+
+
+// Entry rule entryRuleSingleDefinition
+entryRuleSingleDefinition returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getSingleDefinitionRule()); }
+	 iv_ruleSingleDefinition=ruleSingleDefinition 
+	 { $current=$iv_ruleSingleDefinition.current; } 
+	 EOF 
+;
+
+// Rule SingleDefinition
+ruleSingleDefinition returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+	    }
+		lv_terms_0_0=ruleTerm		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getSingleDefinitionRule());
+	        }
+       		add(
+       			$current, 
+       			"terms",
+        		lv_terms_0_0, 
+        		"Term");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)+
+;
+
+
+
+
+
+// Entry rule entryRuleTerm
+entryRuleTerm returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getTermRule()); }
+	 iv_ruleTerm=ruleTerm 
+	 { $current=$iv_ruleTerm.current; } 
+	 EOF 
+;
+
+// Rule Term
+ruleTerm returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+	    }
+		lv_termAtom_0_0=ruleAtom		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
+       			$current, 
+       			"termAtom",
+        		lv_termAtom_0_0, 
+        		"Atom");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+	    }
+		lv_termGroupedSequence_1_0=ruleGroupedSequence		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
+       			$current, 
+       			"termGroupedSequence",
+        		lv_termGroupedSequence_1_0, 
+        		"GroupedSequence");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+	    }
+		lv_termOptionalSequence_2_0=ruleOptionalSequence		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
+       			$current, 
+       			"termOptionalSequence",
+        		lv_termOptionalSequence_2_0, 
+        		"OptionalSequence");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+	    }
+		lv_termRepeatedSequence_3_0=ruleRepeatedSequence		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getTermRule());
+	        }
+       		set(
+       			$current, 
+       			"termRepeatedSequence",
+        		lv_termRepeatedSequence_3_0, 
+        		"RepeatedSequence");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleAtom
+entryRuleAtom returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getAtomRule()); }
+	 iv_ruleAtom=ruleAtom 
+	 { $current=$iv_ruleAtom.current; } 
+	 EOF 
+;
+
+// Rule Atom
+ruleAtom returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+	    }
+		lv_atomStringRule_0_0=ruleStringRule		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAtomRule());
+	        }
+       		set(
+       			$current, 
+       			"atomStringRule",
+        		lv_atomStringRule_0_0, 
+        		"StringRule");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)
+    |(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+	    }
+		lv_atomRuleReference_1_0=ruleRuleReference		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getAtomRule());
+	        }
+       		set(
+       			$current, 
+       			"atomRuleReference",
+        		lv_atomRuleReference_1_0, 
+        		"RuleReference");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleRuleReference
+entryRuleRuleReference returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRuleReferenceRule()); }
+	 iv_ruleRuleReference=ruleRuleReference 
+	 { $current=$iv_ruleRuleReference.current; } 
+	 EOF 
+;
+
+// Rule RuleReference
+ruleRuleReference returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(
+(
+		{
+			if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRuleReferenceRule());
+	        }
+        }
+	otherlv_0=RULE_ID
+	{
+		newLeafNode(otherlv_0, grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
+	}
+
+)
+)
+;
+
+
+
+
+
+// Entry rule entryRuleStringRule
+entryRuleStringRule returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getStringRuleRule()); }
+	 iv_ruleStringRule=ruleStringRule 
+	 { $current=$iv_ruleStringRule.current; } 
+	 EOF 
+;
+
+// Rule StringRule
+ruleStringRule returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+((
+(
+		lv_literal_0_0=RULE_STRING
+		{
+			newLeafNode(lv_literal_0_0, grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStringRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"literal",
+        		lv_literal_0_0, 
+        		"STRING");
+	    }
+
+)
+)
+    |(
+(
+		lv_colon_1_0=RULE_COLON
+		{
+			newLeafNode(lv_colon_1_0, grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+		}
+		{
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getStringRuleRule());
+	        }
+       		setWithLastConsumed(
+       			$current, 
+       			"colon",
+        		lv_colon_1_0, 
+        		"COLON");
+	    }
+
+)
+))
+;
+
+
+
+
+
+// Entry rule entryRuleGroupedSequence
+entryRuleGroupedSequence returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getGroupedSequenceRule()); }
+	 iv_ruleGroupedSequence=ruleGroupedSequence 
+	 { $current=$iv_ruleGroupedSequence.current; } 
+	 EOF 
+;
+
+// Rule GroupedSequence
+ruleGroupedSequence returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='(' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+	    }
+		lv_definitionList_1_0=ruleDefinitionList		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getGroupedSequenceRule());
+	        }
+       		add(
+       			$current, 
+       			"definitionList",
+        		lv_definitionList_1_0, 
+        		"DefinitionList");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2=')' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleOptionalSequence
+entryRuleOptionalSequence returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getOptionalSequenceRule()); }
+	 iv_ruleOptionalSequence=ruleOptionalSequence 
+	 { $current=$iv_ruleOptionalSequence.current; } 
+	 EOF 
+;
+
+// Rule OptionalSequence
+ruleOptionalSequence returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='[' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+	    }
+		lv_definitionList_1_0=ruleDefinitionList		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getOptionalSequenceRule());
+	        }
+       		add(
+       			$current, 
+       			"definitionList",
+        		lv_definitionList_1_0, 
+        		"DefinitionList");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2=']' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2());
+    }
+)
+;
+
+
+
+
+
+// Entry rule entryRuleRepeatedSequence
+entryRuleRepeatedSequence returns [EObject current=null] 
+	:
+	{ newCompositeNode(grammarAccess.getRepeatedSequenceRule()); }
+	 iv_ruleRepeatedSequence=ruleRepeatedSequence 
+	 { $current=$iv_ruleRepeatedSequence.current; } 
+	 EOF 
+;
+
+// Rule RepeatedSequence
+ruleRepeatedSequence returns [EObject current=null] 
+    @init { enterRule(); 
+    }
+    @after { leaveRule(); }:
+(	otherlv_0='{' 
+    {
+    	newLeafNode(otherlv_0, grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0());
+    }
+(
+(
+		{ 
+	        newCompositeNode(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+	    }
+		lv_definitions_1_0=ruleDefinitionList		{
+	        if ($current==null) {
+	            $current = createModelElementForParent(grammarAccess.getRepeatedSequenceRule());
+	        }
+       		add(
+       			$current, 
+       			"definitions",
+        		lv_definitions_1_0, 
+        		"DefinitionList");
+	        afterParserOrEnumRuleCall();
+	    }
+
+)
+)	otherlv_2='}' 
+    {
+    	newLeafNode(otherlv_2, grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2());
+    }
+(
+(
+		lv_morethanonce_3_0=	'+' 
+    {
+        newLeafNode(lv_morethanonce_3_0, grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0());
+    }
+ 
+	    {
+	        if ($current==null) {
+	            $current = createModelElement(grammarAccess.getRepeatedSequenceRule());
+	        }
+       		setWithLastConsumed($current, "morethanonce", true, "+");
+	    }
+
+)
+)?)
+;
+
+
+
+
+
+RULE_ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
+
+RULE_INT : ('0'..'9')+;
+
+RULE_WS : (' '|'\t'|'\r'? '\n')+;
+
+RULE_COLON : '"' '"' '"';
+
+RULE_STRING : ('"' ~('"')* '"'|'\'' ~('\'')* '\'');
+
+RULE_SECTIONHEADER : ('a'..'z'|'A'..'Z') ('.'|'0'..'9')+ (' '|'\t') ~(('\n'|'\r'))* '\r'? '\n';
+
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+RULE_LOGIC : ('/and'|'/or'|'/andr'|'/orr'|'/any'|'/together');
+
+
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.tokens
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.tokens	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.tokens	(revision 61)
@@ -0,0 +1,63 @@
+RULE_ID=4
+RULE_SECTIONHEADER=5
+T__29=29
+T__28=28
+T__27=27
+T__26=26
+T__25=25
+T__24=24
+T__23=23
+T__22=22
+T__21=21
+T__20=20
+RULE_SL_COMMENT=11
+RULE_ML_COMMENT=12
+T__30=30
+T__19=19
+RULE_COLON=9
+T__31=31
+RULE_STRING=6
+T__32=32
+T__33=33
+T__16=16
+T__34=34
+T__15=15
+T__35=35
+T__18=18
+T__36=36
+T__17=17
+RULE_LOGIC=8
+T__37=37
+T__38=38
+T__39=39
+T__14=14
+T__13=13
+RULE_INT=7
+RULE_WS=10
+'update'=22
+'|'=31
+'::='=25
+'/'=19
+';'=15
+'grammar'=13
+'global'=36
+'core'=20
+'+'=35
+'.'=24
+')'=27
+'import'=18
+'hook'=39
+'<-'=28
+'}'=30
+'rule'=38
+'/delta'=16
+'/merge'=17
+'/bnf'=14
+'{'=33
+'package'=21
+'label:'=23
+'combinator:'=37
+'('=26
+'['=32
+'*'=34
+']'=29
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfLexer.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfLexer.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfLexer.java	(revision 61)
@@ -0,0 +1,1837 @@
+package de.ugoe.cs.swe.bnftools.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 InternalEbnfLexer extends Lexer {
+    public static final int RULE_ID=4;
+    public static final int RULE_SECTIONHEADER=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    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 T__21=21;
+    public static final int T__20=20;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int RULE_ML_COMMENT=12;
+    public static final int T__19=19;
+    public static final int T__30=30;
+    public static final int T__31=31;
+    public static final int RULE_COLON=9;
+    public static final int T__32=32;
+    public static final int RULE_STRING=6;
+    public static final int T__16=16;
+    public static final int T__33=33;
+    public static final int T__15=15;
+    public static final int T__34=34;
+    public static final int T__18=18;
+    public static final int T__35=35;
+    public static final int T__17=17;
+    public static final int T__36=36;
+    public static final int T__37=37;
+    public static final int RULE_LOGIC=8;
+    public static final int T__38=38;
+    public static final int T__14=14;
+    public static final int T__39=39;
+    public static final int T__13=13;
+    public static final int RULE_INT=7;
+    public static final int RULE_WS=10;
+
+    // delegates
+    // delegators
+
+    public InternalEbnfLexer() {;} 
+    public InternalEbnfLexer(CharStream input) {
+        this(input, new RecognizerSharedState());
+    }
+    public InternalEbnfLexer(CharStream input, RecognizerSharedState state) {
+        super(input,state);
+
+    }
+    public String getGrammarFileName() { return "../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g"; }
+
+    // $ANTLR start "T__13"
+    public final void mT__13() throws RecognitionException {
+        try {
+            int _type = T__13;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:11:7: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:11:9: 'grammar'
+            {
+            match("grammar"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:12:7: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:12:9: '/bnf'
+            {
+            match("/bnf"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:13:7: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:13: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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:14:7: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:14:9: '/delta'
+            {
+            match("/delta"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:15:7: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:15:9: '/merge'
+            {
+            match("/merge"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:16:7: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:16:9: 'import'
+            {
+            match("import"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:17:7: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:17:9: '/'
+            {
+            match('/'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:18:7: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:18:9: 'core'
+            {
+            match("core"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:19:7: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:19:9: 'package'
+            {
+            match("package"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:20:7: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:20:9: 'update'
+            {
+            match("update"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:21:7: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:21:9: 'label:'
+            {
+            match("label:"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:22:7: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:22:9: '.'
+            {
+            match('.'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:23:7: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:23:9: '::='
+            {
+            match("::="); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:24:7: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:24:9: '('
+            {
+            match('('); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:25:7: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:25:9: ')'
+            {
+            match(')'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:26:7: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:26:9: '<-'
+            {
+            match("<-"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:27:7: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:27:9: ']'
+            {
+            match(']'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:28:7: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:28:9: '}'
+            {
+            match('}'); 
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:29:7: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:29:9: '|'
+            {
+            match('|'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__31"
+
+    // $ANTLR start "T__32"
+    public final void mT__32() throws RecognitionException {
+        try {
+            int _type = T__32;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:30:7: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:30:9: '['
+            {
+            match('['); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__32"
+
+    // $ANTLR start "T__33"
+    public final void mT__33() throws RecognitionException {
+        try {
+            int _type = T__33;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:31:7: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:31:9: '{'
+            {
+            match('{'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__33"
+
+    // $ANTLR start "T__34"
+    public final void mT__34() throws RecognitionException {
+        try {
+            int _type = T__34;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:32:7: ( '*' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:32:9: '*'
+            {
+            match('*'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__34"
+
+    // $ANTLR start "T__35"
+    public final void mT__35() throws RecognitionException {
+        try {
+            int _type = T__35;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:33:7: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:33:9: '+'
+            {
+            match('+'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__35"
+
+    // $ANTLR start "T__36"
+    public final void mT__36() throws RecognitionException {
+        try {
+            int _type = T__36;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:34:7: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:34:9: 'global'
+            {
+            match("global"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:35:7: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:35:9: 'combinator:'
+            {
+            match("combinator:"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:36:7: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:36:9: 'rule'
+            {
+            match("rule"); 
+
+
+            }
+
+            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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:37:7: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:37:9: 'hook'
+            {
+            match("hook"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__39"
+
+    // $ANTLR start "RULE_ID"
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:9: ( ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:11: ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+            {
+            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;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:35: ( 'a' .. 'z' | 'A' .. 'Z' | '0' .. '9' | '_' )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( ((LA1_0>='0' && LA1_0<='9')||(LA1_0>='A' && LA1_0<='Z')||LA1_0=='_'||(LA1_0>='a' && LA1_0<='z')) ) {
+                    alt1=1;
+                }
+
+
+                switch (alt1) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.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 loop1;
+                }
+            } 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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:10: ( ( '0' .. '9' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:12: ( '0' .. '9' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:12: ( '0' .. '9' )+
+            int cnt2=0;
+            loop2:
+            do {
+                int alt2=2;
+                int LA2_0 = input.LA(1);
+
+                if ( ((LA2_0>='0' && LA2_0<='9')) ) {
+                    alt2=1;
+                }
+
+
+                switch (alt2) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_INT"
+
+    // $ANTLR start "RULE_WS"
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:9: ( ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:11: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:11: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+
+            int cnt4=0;
+            loop4:
+            do {
+                int alt4=4;
+                switch ( input.LA(1) ) {
+                case ' ':
+                    {
+                    alt4=1;
+                    }
+                    break;
+                case '\t':
+                    {
+                    alt4=2;
+                    }
+                    break;
+                case '\n':
+                case '\r':
+                    {
+                    alt4=3;
+                    }
+                    break;
+
+                }
+
+                switch (alt4) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:12: ' '
+            	    {
+            	    match(' '); 
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:16: '\\t'
+            	    {
+            	    match('\t'); 
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:21: ( '\\r' )? '\\n'
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:21: ( '\\r' )?
+            	    int alt3=2;
+            	    int LA3_0 = input.LA(1);
+
+            	    if ( (LA3_0=='\r') ) {
+            	        alt3=1;
+            	    }
+            	    switch (alt3) {
+            	        case 1 :
+            	            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1777:21: '\\r'
+            	            {
+            	            match('\r'); 
+
+            	            }
+            	            break;
+
+            	    }
+
+            	    match('\n'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt4 >= 1 ) break loop4;
+                        EarlyExitException eee =
+                            new EarlyExitException(4, input);
+                        throw eee;
+                }
+                cnt4++;
+            } while (true);
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_WS"
+
+    // $ANTLR start "RULE_COLON"
+    public final void mRULE_COLON() throws RecognitionException {
+        try {
+            int _type = RULE_COLON;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1779:12: ( '\"' '\"' '\"' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1779:14: '\"' '\"' '\"'
+            {
+            match('\"'); 
+            match('\"'); 
+            match('\"'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_COLON"
+
+    // $ANTLR start "RULE_STRING"
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:13: ( ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )
+            int alt7=2;
+            int LA7_0 = input.LA(1);
+
+            if ( (LA7_0=='\"') ) {
+                alt7=1;
+            }
+            else if ( (LA7_0=='\'') ) {
+                alt7=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 7, 0, input);
+
+                throw nvae;
+            }
+            switch (alt7) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:16: '\"' (~ ( '\"' ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:20: (~ ( '\"' ) )*
+                    loop5:
+                    do {
+                        int alt5=2;
+                        int LA5_0 = input.LA(1);
+
+                        if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='\uFFFF')) ) {
+                            alt5=1;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:20: ~ ( '\"' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && 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;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:32: '\\'' (~ ( '\\'' ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:37: (~ ( '\\'' ) )*
+                    loop6:
+                    do {
+                        int alt6=2;
+                        int LA6_0 = input.LA(1);
+
+                        if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='\uFFFF')) ) {
+                            alt6=1;
+                        }
+
+
+                        switch (alt6) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1781:37: ~ ( '\\'' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && 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 loop6;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_STRING"
+
+    // $ANTLR start "RULE_SECTIONHEADER"
+    public final void mRULE_SECTIONHEADER() throws RecognitionException {
+        try {
+            int _type = RULE_SECTIONHEADER;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:20: ( ( 'a' .. 'z' | 'A' .. 'Z' ) ( '.' | '0' .. '9' )+ ( ' ' | '\\t' ) (~ ( ( '\\n' | '\\r' ) ) )* ( '\\r' )? '\\n' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:22: ( 'a' .. 'z' | 'A' .. 'Z' ) ( '.' | '0' .. '9' )+ ( ' ' | '\\t' ) (~ ( ( '\\n' | '\\r' ) ) )* ( '\\r' )? '\\n'
+            {
+            if ( (input.LA(1)>='A' && input.LA(1)<='Z')||(input.LA(1)>='a' && input.LA(1)<='z') ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:42: ( '.' | '0' .. '9' )+
+            int cnt8=0;
+            loop8:
+            do {
+                int alt8=2;
+                int LA8_0 = input.LA(1);
+
+                if ( (LA8_0=='.'||(LA8_0>='0' && LA8_0<='9')) ) {
+                    alt8=1;
+                }
+
+
+                switch (alt8) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:
+            	    {
+            	    if ( input.LA(1)=='.'||(input.LA(1)>='0' && input.LA(1)<='9') ) {
+            	        input.consume();
+
+            	    }
+            	    else {
+            	        MismatchedSetException mse = new MismatchedSetException(null,input);
+            	        recover(mse);
+            	        throw mse;}
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt8 >= 1 ) break loop8;
+                        EarlyExitException eee =
+                            new EarlyExitException(8, input);
+                        throw eee;
+                }
+                cnt8++;
+            } while (true);
+
+            if ( input.LA(1)=='\t'||input.LA(1)==' ' ) {
+                input.consume();
+
+            }
+            else {
+                MismatchedSetException mse = new MismatchedSetException(null,input);
+                recover(mse);
+                throw mse;}
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:69: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( ((LA9_0>='\u0000' && LA9_0<='\t')||(LA9_0>='\u000B' && LA9_0<='\f')||(LA9_0>='\u000E' && LA9_0<='\uFFFF')) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:69: ~ ( ( '\\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 loop9;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:85: ( '\\r' )?
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0=='\r') ) {
+                alt10=1;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1783:85: '\\r'
+                    {
+                    match('\r'); 
+
+                    }
+                    break;
+
+            }
+
+            match('\n'); 
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SECTIONHEADER"
+
+    // $ANTLR start "RULE_SL_COMMENT"
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            {
+            match("//"); 
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            loop11:
+            do {
+                int alt11=2;
+                int LA11_0 = input.LA(1);
+
+                if ( ((LA11_0>='\u0000' && LA11_0<='\t')||(LA11_0>='\u000B' && LA11_0<='\f')||(LA11_0>='\u000E' && LA11_0<='\uFFFF')) ) {
+                    alt11=1;
+                }
+
+
+                switch (alt11) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785: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 loop11;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:40: ( ( '\\r' )? '\\n' )?
+            int alt13=2;
+            int LA13_0 = input.LA(1);
+
+            if ( (LA13_0=='\n'||LA13_0=='\r') ) {
+                alt13=1;
+            }
+            switch (alt13) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:41: ( '\\r' )? '\\n'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:41: ( '\\r' )?
+                    int alt12=2;
+                    int LA12_0 = input.LA(1);
+
+                    if ( (LA12_0=='\r') ) {
+                        alt12=1;
+                    }
+                    switch (alt12) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1785:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_SL_COMMENT"
+
+    // $ANTLR start "RULE_ML_COMMENT"
+    public final void mRULE_ML_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_ML_COMMENT;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1787:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1787:19: '/*' ( options {greedy=false; } : . )* '*/'
+            {
+            match("/*"); 
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1787:24: ( options {greedy=false; } : . )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( (LA14_0=='*') ) {
+                    int LA14_1 = input.LA(2);
+
+                    if ( (LA14_1=='/') ) {
+                        alt14=2;
+                    }
+                    else if ( ((LA14_1>='\u0000' && LA14_1<='.')||(LA14_1>='0' && LA14_1<='\uFFFF')) ) {
+                        alt14=1;
+                    }
+
+
+                }
+                else if ( ((LA14_0>='\u0000' && LA14_0<=')')||(LA14_0>='+' && LA14_0<='\uFFFF')) ) {
+                    alt14=1;
+                }
+
+
+                switch (alt14) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1787:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_ML_COMMENT"
+
+    // $ANTLR start "RULE_LOGIC"
+    public final void mRULE_LOGIC() throws RecognitionException {
+        try {
+            int _type = RULE_LOGIC;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:12: ( ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )
+            int alt15=6;
+            alt15 = dfa15.predict(input);
+            switch (alt15) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:15: '/and'
+                    {
+                    match("/and"); 
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:22: '/or'
+                    {
+                    match("/or"); 
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:28: '/andr'
+                    {
+                    match("/andr"); 
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:36: '/orr'
+                    {
+                    match("/orr"); 
+
+
+                    }
+                    break;
+                case 5 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:43: '/any'
+                    {
+                    match("/any"); 
+
+
+                    }
+                    break;
+                case 6 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:50: '/together'
+                    {
+                    match("/together"); 
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "RULE_LOGIC"
+
+    public void mTokens() throws RecognitionException {
+        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:8: ( 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 | RULE_ID | RULE_INT | RULE_WS | RULE_COLON | RULE_STRING | RULE_SECTIONHEADER | RULE_SL_COMMENT | RULE_ML_COMMENT | RULE_LOGIC )
+        int alt16=36;
+        alt16 = dfa16.predict(input);
+        switch (alt16) {
+            case 1 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:10: T__13
+                {
+                mT__13(); 
+
+                }
+                break;
+            case 2 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:16: T__14
+                {
+                mT__14(); 
+
+                }
+                break;
+            case 3 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:22: T__15
+                {
+                mT__15(); 
+
+                }
+                break;
+            case 4 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:28: T__16
+                {
+                mT__16(); 
+
+                }
+                break;
+            case 5 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:34: T__17
+                {
+                mT__17(); 
+
+                }
+                break;
+            case 6 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:40: T__18
+                {
+                mT__18(); 
+
+                }
+                break;
+            case 7 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:46: T__19
+                {
+                mT__19(); 
+
+                }
+                break;
+            case 8 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:52: T__20
+                {
+                mT__20(); 
+
+                }
+                break;
+            case 9 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:58: T__21
+                {
+                mT__21(); 
+
+                }
+                break;
+            case 10 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:64: T__22
+                {
+                mT__22(); 
+
+                }
+                break;
+            case 11 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:70: T__23
+                {
+                mT__23(); 
+
+                }
+                break;
+            case 12 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:76: T__24
+                {
+                mT__24(); 
+
+                }
+                break;
+            case 13 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:82: T__25
+                {
+                mT__25(); 
+
+                }
+                break;
+            case 14 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:88: T__26
+                {
+                mT__26(); 
+
+                }
+                break;
+            case 15 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:94: T__27
+                {
+                mT__27(); 
+
+                }
+                break;
+            case 16 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:100: T__28
+                {
+                mT__28(); 
+
+                }
+                break;
+            case 17 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:106: T__29
+                {
+                mT__29(); 
+
+                }
+                break;
+            case 18 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:112: T__30
+                {
+                mT__30(); 
+
+                }
+                break;
+            case 19 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:118: T__31
+                {
+                mT__31(); 
+
+                }
+                break;
+            case 20 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:124: T__32
+                {
+                mT__32(); 
+
+                }
+                break;
+            case 21 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:130: T__33
+                {
+                mT__33(); 
+
+                }
+                break;
+            case 22 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:136: T__34
+                {
+                mT__34(); 
+
+                }
+                break;
+            case 23 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:142: T__35
+                {
+                mT__35(); 
+
+                }
+                break;
+            case 24 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:148: T__36
+                {
+                mT__36(); 
+
+                }
+                break;
+            case 25 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:154: T__37
+                {
+                mT__37(); 
+
+                }
+                break;
+            case 26 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:160: T__38
+                {
+                mT__38(); 
+
+                }
+                break;
+            case 27 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:166: T__39
+                {
+                mT__39(); 
+
+                }
+                break;
+            case 28 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:172: RULE_ID
+                {
+                mRULE_ID(); 
+
+                }
+                break;
+            case 29 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:180: RULE_INT
+                {
+                mRULE_INT(); 
+
+                }
+                break;
+            case 30 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:189: RULE_WS
+                {
+                mRULE_WS(); 
+
+                }
+                break;
+            case 31 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:197: RULE_COLON
+                {
+                mRULE_COLON(); 
+
+                }
+                break;
+            case 32 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:208: RULE_STRING
+                {
+                mRULE_STRING(); 
+
+                }
+                break;
+            case 33 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:220: RULE_SECTIONHEADER
+                {
+                mRULE_SECTIONHEADER(); 
+
+                }
+                break;
+            case 34 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:239: RULE_SL_COMMENT
+                {
+                mRULE_SL_COMMENT(); 
+
+                }
+                break;
+            case 35 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:255: RULE_ML_COMMENT
+                {
+                mRULE_ML_COMMENT(); 
+
+                }
+                break;
+            case 36 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1:271: RULE_LOGIC
+                {
+                mRULE_LOGIC(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    protected DFA16 dfa16 = new DFA16(this);
+    static final String DFA15_eotS =
+        "\6\uffff\1\12\1\14\5\uffff";
+    static final String DFA15_eofS =
+        "\15\uffff";
+    static final String DFA15_minS =
+        "\1\57\1\141\1\156\1\162\1\uffff\1\144\2\162\5\uffff";
+    static final String DFA15_maxS =
+        "\1\57\1\164\1\156\1\162\1\uffff\1\171\2\162\5\uffff";
+    static final String DFA15_acceptS =
+        "\4\uffff\1\6\3\uffff\1\5\1\4\1\2\1\3\1\1";
+    static final String DFA15_specialS =
+        "\15\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\1\1",
+            "\1\2\15\uffff\1\3\4\uffff\1\4",
+            "\1\5",
+            "\1\6",
+            "",
+            "\1\7\24\uffff\1\10",
+            "\1\11",
+            "\1\13",
+            "",
+            "",
+            "",
+            "",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "1789:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )";
+        }
+    }
+    static final String DFA16_eotS =
+        "\1\uffff\1\34\1\47\1\uffff\5\34\14\uffff\3\34\5\uffff\3\34\10\uffff"+
+        "\7\34\1\33\12\34\1\uffff\3\34\1\110\4\34\1\115\1\116\3\34\1\uffff"+
+        "\4\34\2\uffff\1\34\1\127\1\130\2\34\1\133\1\uffff\1\134\2\uffff"+
+        "\1\34\1\136\2\uffff\1\34\1\uffff\2\34\1\uffff";
+    static final String DFA16_eofS =
+        "\142\uffff";
+    static final String DFA16_minS =
+        "\1\11\1\56\1\52\1\uffff\5\56\14\uffff\3\56\2\uffff\1\0\2\uffff"+
+        "\1\141\1\157\1\11\10\uffff\1\160\1\155\1\143\1\144\1\142\1\154\1"+
+        "\157\1\42\1\155\1\142\1\157\1\145\1\142\1\153\1\141\2\145\1\153"+
+        "\1\uffff\1\155\1\141\1\162\1\60\1\151\1\141\1\164\1\154\2\60\1\141"+
+        "\1\154\1\164\1\uffff\1\156\1\147\1\145\1\72\2\uffff\1\162\2\60\1"+
+        "\141\1\145\1\60\1\uffff\1\60\2\uffff\1\164\1\60\2\uffff\1\157\1"+
+        "\uffff\1\162\1\72\1\uffff";
+    static final String DFA16_maxS =
+        "\1\175\1\162\1\164\1\uffff\1\155\1\157\1\141\1\160\1\141\14\uffff"+
+        "\1\165\1\157\1\71\2\uffff\1\uffff\2\uffff\1\141\1\157\1\71\10\uffff"+
+        "\1\160\1\162\1\143\1\144\1\142\1\154\1\157\1\42\1\155\1\142\1\157"+
+        "\1\145\1\142\1\153\1\141\2\145\1\153\1\uffff\1\155\1\141\1\162\1"+
+        "\172\1\151\1\141\1\164\1\154\2\172\1\141\1\154\1\164\1\uffff\1\156"+
+        "\1\147\1\145\1\72\2\uffff\1\162\2\172\1\141\1\145\1\172\1\uffff"+
+        "\1\172\2\uffff\1\164\1\172\2\uffff\1\157\1\uffff\1\162\1\72\1\uffff";
+    static final String DFA16_acceptS =
+        "\3\uffff\1\3\5\uffff\1\14\1\15\1\16\1\17\1\20\1\21\1\22\1\23\1"+
+        "\24\1\25\1\26\1\27\3\uffff\1\35\1\36\1\uffff\1\40\1\34\3\uffff\1"+
+        "\41\1\2\1\4\1\5\1\42\1\43\1\44\1\7\22\uffff\1\37\15\uffff\1\10\4"+
+        "\uffff\1\32\1\33\6\uffff\1\13\1\uffff\1\30\1\6\2\uffff\1\12\1\1"+
+        "\1\uffff\1\11\2\uffff\1\31";
+    static final String DFA16_specialS =
+        "\32\uffff\1\0\107\uffff}>";
+    static final String[] DFA16_transitionS = {
+            "\2\31\2\uffff\1\31\22\uffff\1\31\1\uffff\1\32\4\uffff\1\33"+
+            "\1\13\1\14\1\23\1\24\2\uffff\1\11\1\2\12\30\1\12\1\3\1\15\4"+
+            "\uffff\32\27\1\21\1\uffff\1\16\1\uffff\1\34\1\uffff\2\27\1\5"+
+            "\3\27\1\1\1\26\1\4\2\27\1\10\3\27\1\6\1\27\1\25\2\27\1\7\5\27"+
+            "\1\22\1\20\1\17",
+            "\1\40\1\uffff\12\37\62\uffff\1\36\5\uffff\1\35",
+            "\1\45\4\uffff\1\44\61\uffff\1\46\1\41\1\uffff\1\42\10\uffff"+
+            "\1\43\1\uffff\1\46\4\uffff\1\46",
+            "",
+            "\1\40\1\uffff\12\37\63\uffff\1\50",
+            "\1\40\1\uffff\12\37\65\uffff\1\51",
+            "\1\40\1\uffff\12\37\47\uffff\1\52",
+            "\1\40\1\uffff\12\37\66\uffff\1\53",
+            "\1\40\1\uffff\12\37\47\uffff\1\54",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\40\1\uffff\12\37\73\uffff\1\55",
+            "\1\40\1\uffff\12\37\65\uffff\1\56",
+            "\1\40\1\uffff\12\37",
+            "",
+            "",
+            "\42\33\1\57\uffdd\33",
+            "",
+            "",
+            "\1\60",
+            "\1\61",
+            "\1\40\26\uffff\1\40\15\uffff\1\40\1\uffff\12\37",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\62",
+            "\1\64\4\uffff\1\63",
+            "\1\65",
+            "\1\66",
+            "\1\67",
+            "\1\70",
+            "\1\71",
+            "\1\72",
+            "\1\73",
+            "\1\74",
+            "\1\75",
+            "\1\76",
+            "\1\77",
+            "\1\100",
+            "\1\101",
+            "\1\102",
+            "\1\103",
+            "\1\104",
+            "",
+            "\1\105",
+            "\1\106",
+            "\1\107",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\111",
+            "\1\112",
+            "\1\113",
+            "\1\114",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\117",
+            "\1\120",
+            "\1\121",
+            "",
+            "\1\122",
+            "\1\123",
+            "\1\124",
+            "\1\125",
+            "",
+            "",
+            "\1\126",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\131",
+            "\1\132",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "",
+            "\1\135",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "",
+            "",
+            "\1\137",
+            "",
+            "\1\140",
+            "\1\141",
+            ""
+    };
+
+    static final short[] DFA16_eot = DFA.unpackEncodedString(DFA16_eotS);
+    static final short[] DFA16_eof = DFA.unpackEncodedString(DFA16_eofS);
+    static final char[] DFA16_min = DFA.unpackEncodedStringToUnsignedChars(DFA16_minS);
+    static final char[] DFA16_max = DFA.unpackEncodedStringToUnsignedChars(DFA16_maxS);
+    static final short[] DFA16_accept = DFA.unpackEncodedString(DFA16_acceptS);
+    static final short[] DFA16_special = DFA.unpackEncodedString(DFA16_specialS);
+    static final short[][] DFA16_transition;
+
+    static {
+        int numStates = DFA16_transitionS.length;
+        DFA16_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA16_transition[i] = DFA.unpackEncodedString(DFA16_transitionS[i]);
+        }
+    }
+
+    class DFA16 extends DFA {
+
+        public DFA16(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 16;
+            this.eot = DFA16_eot;
+            this.eof = DFA16_eof;
+            this.min = DFA16_min;
+            this.max = DFA16_max;
+            this.accept = DFA16_accept;
+            this.special = DFA16_special;
+            this.transition = DFA16_transition;
+        }
+        public String getDescription() {
+            return "1:1: Tokens : ( 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 | RULE_ID | RULE_INT | RULE_WS | RULE_COLON | RULE_STRING | RULE_SECTIONHEADER | RULE_SL_COMMENT | RULE_ML_COMMENT | RULE_LOGIC );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            IntStream input = _input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA16_26 = input.LA(1);
+
+                        s = -1;
+                        if ( (LA16_26=='\"') ) {s = 47;}
+
+                        else if ( ((LA16_26>='\u0000' && LA16_26<='!')||(LA16_26>='#' && LA16_26<='\uFFFF')) ) {s = 27;}
+
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 16, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
+ 
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java	(revision 61)
@@ -0,0 +1,4821 @@
+package de.ugoe.cs.swe.bnftools.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.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 de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+
+
+
+import org.antlr.runtime.*;
+import java.util.Stack;
+import java.util.List;
+import java.util.ArrayList;
+
+@SuppressWarnings("all")
+public class InternalEbnfParser extends AbstractInternalAntlrParser {
+    public static final String[] tokenNames = new String[] {
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_SECTIONHEADER", "RULE_STRING", "RULE_INT", "RULE_LOGIC", "RULE_COLON", "RULE_WS", "RULE_SL_COMMENT", "RULE_ML_COMMENT", "'grammar'", "'/bnf'", "';'", "'/delta'", "'/merge'", "'import'", "'/'", "'core'", "'package'", "'update'", "'label:'", "'.'", "'::='", "'('", "')'", "'<-'", "']'", "'}'", "'|'", "'['", "'{'", "'*'", "'+'", "'global'", "'combinator:'", "'rule'", "'hook'"
+    };
+    public static final int RULE_ID=4;
+    public static final int RULE_SECTIONHEADER=5;
+    public static final int T__29=29;
+    public static final int T__28=28;
+    public static final int T__27=27;
+    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 T__21=21;
+    public static final int T__20=20;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=12;
+    public static final int T__30=30;
+    public static final int T__19=19;
+    public static final int RULE_COLON=9;
+    public static final int T__31=31;
+    public static final int RULE_STRING=6;
+    public static final int T__32=32;
+    public static final int T__33=33;
+    public static final int T__16=16;
+    public static final int T__34=34;
+    public static final int T__15=15;
+    public static final int T__35=35;
+    public static final int T__18=18;
+    public static final int T__36=36;
+    public static final int T__17=17;
+    public static final int RULE_LOGIC=8;
+    public static final int T__37=37;
+    public static final int T__38=38;
+    public static final int T__39=39;
+    public static final int T__14=14;
+    public static final int T__13=13;
+    public static final int RULE_INT=7;
+    public static final int RULE_WS=10;
+
+    // delegates
+    // delegators
+
+
+        public InternalEbnfParser(TokenStream input) {
+            this(input, new RecognizerSharedState());
+        }
+        public InternalEbnfParser(TokenStream input, RecognizerSharedState state) {
+            super(input, state);
+             
+        }
+        
+
+    public String[] getTokenNames() { return InternalEbnfParser.tokenNames; }
+    public String getGrammarFileName() { return "../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g"; }
+
+
+
+     	private EbnfGrammarAccess grammarAccess;
+     	
+        public InternalEbnfParser(TokenStream input, EbnfGrammarAccess grammarAccess) {
+            this(input);
+            this.grammarAccess = grammarAccess;
+            registerRules(grammarAccess.getGrammar());
+        }
+        
+        @Override
+        protected String getFirstRuleName() {
+        	return "EtsiBnf";	
+       	}
+       	
+       	@Override
+       	protected EbnfGrammarAccess getGrammarAccess() {
+       		return grammarAccess;
+       	}
+
+
+
+    // $ANTLR start "entryRuleEtsiBnf"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:67:1: entryRuleEtsiBnf returns [EObject current=null] : iv_ruleEtsiBnf= ruleEtsiBnf EOF ;
+    public final EObject entryRuleEtsiBnf() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleEtsiBnf = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:68:2: (iv_ruleEtsiBnf= ruleEtsiBnf EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:69:2: iv_ruleEtsiBnf= ruleEtsiBnf EOF
+            {
+             newCompositeNode(grammarAccess.getEtsiBnfRule()); 
+            pushFollow(FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf75);
+            iv_ruleEtsiBnf=ruleEtsiBnf();
+
+            state._fsp--;
+
+             current =iv_ruleEtsiBnf; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEtsiBnf85); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleEtsiBnf"
+
+
+    // $ANTLR start "ruleEtsiBnf"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:76:1: ruleEtsiBnf returns [EObject current=null] : ( (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) ) | ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* ) | ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* ) ) ;
+    public final EObject ruleEtsiBnf() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_name_1_0=null;
+        Token lv_type_2_0=null;
+        Token otherlv_3=null;
+        Token lv_type_6_0=null;
+        Token otherlv_7=null;
+        Token lv_type_10_0=null;
+        Token otherlv_11=null;
+        EObject lv_importSection_4_0 = null;
+
+        EObject lv_bnfEntry_5_0 = null;
+
+        EObject lv_importSection_8_0 = null;
+
+        EObject lv_deltaEntry_9_0 = null;
+
+        EObject lv_importSection_12_0 = null;
+
+        EObject lv_mergeEntry_13_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:79:28: ( ( (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) ) | ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* ) | ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:80:1: ( (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) ) | ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* ) | ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:80:1: ( (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) ) | ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* ) | ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* ) )
+            int alt8=3;
+            switch ( input.LA(1) ) {
+            case 13:
+                {
+                alt8=1;
+                }
+                break;
+            case 16:
+                {
+                alt8=2;
+                }
+                break;
+            case 17:
+                {
+                alt8=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 8, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt8) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:80:2: (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:80:2: (otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:80:4: otherlv_0= 'grammar' ( (lv_name_1_0= RULE_ID ) ) ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ )
+                    {
+                    otherlv_0=(Token)match(input,13,FOLLOW_13_in_ruleEtsiBnf123); 
+
+                        	newLeafNode(otherlv_0, grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:84:1: ( (lv_name_1_0= RULE_ID ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:85:1: (lv_name_1_0= RULE_ID )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:85:1: (lv_name_1_0= RULE_ID )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:86:3: lv_name_1_0= RULE_ID
+                    {
+                    lv_name_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleEtsiBnf140); 
+
+                    			newLeafNode(lv_name_1_0, grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getEtsiBnfRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"name",
+                            		lv_name_1_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:102:2: ( ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+ )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:102:3: ( (lv_type_2_0= '/bnf' ) )? otherlv_3= ';' ( (lv_importSection_4_0= ruleImportSection ) )? ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:102:3: ( (lv_type_2_0= '/bnf' ) )?
+                    int alt1=2;
+                    int LA1_0 = input.LA(1);
+
+                    if ( (LA1_0==14) ) {
+                        alt1=1;
+                    }
+                    switch (alt1) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:103:1: (lv_type_2_0= '/bnf' )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:103:1: (lv_type_2_0= '/bnf' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:104:3: lv_type_2_0= '/bnf'
+                            {
+                            lv_type_2_0=(Token)match(input,14,FOLLOW_14_in_ruleEtsiBnf164); 
+
+                                    newLeafNode(lv_type_2_0, grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0());
+                                
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getEtsiBnfRule());
+                            	        }
+                                   		setWithLastConsumed(current, "type", lv_type_2_0, "/bnf");
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    otherlv_3=(Token)match(input,15,FOLLOW_15_in_ruleEtsiBnf190); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:121:1: ( (lv_importSection_4_0= ruleImportSection ) )?
+                    int alt2=2;
+                    int LA2_0 = input.LA(1);
+
+                    if ( (LA2_0==18) ) {
+                        alt2=1;
+                    }
+                    switch (alt2) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:122:1: (lv_importSection_4_0= ruleImportSection )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:122:1: (lv_importSection_4_0= ruleImportSection )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:123:3: lv_importSection_4_0= ruleImportSection
+                            {
+                             
+                            	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+                            	    
+                            pushFollow(FOLLOW_ruleImportSection_in_ruleEtsiBnf211);
+                            lv_importSection_4_0=ruleImportSection();
+
+                            state._fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                            	        }
+                                   		set(
+                                   			current, 
+                                   			"importSection",
+                                    		lv_importSection_4_0, 
+                                    		"ImportSection");
+                            	        afterParserOrEnumRuleCall();
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:139:3: ( (lv_bnfEntry_5_0= ruleBnfEntry ) )+
+                    int cnt3=0;
+                    loop3:
+                    do {
+                        int alt3=2;
+                        int LA3_0 = input.LA(1);
+
+                        if ( ((LA3_0>=RULE_ID && LA3_0<=RULE_SECTIONHEADER)||LA3_0==RULE_INT) ) {
+                            alt3=1;
+                        }
+
+
+                        switch (alt3) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:140:1: (lv_bnfEntry_5_0= ruleBnfEntry )
+                    	    {
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:140:1: (lv_bnfEntry_5_0= ruleBnfEntry )
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:141:3: lv_bnfEntry_5_0= ruleBnfEntry
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleBnfEntry_in_ruleEtsiBnf233);
+                    	    lv_bnfEntry_5_0=ruleBnfEntry();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"bnfEntry",
+                    	            		lv_bnfEntry_5_0, 
+                    	            		"BnfEntry");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    if ( cnt3 >= 1 ) break loop3;
+                                EarlyExitException eee =
+                                    new EarlyExitException(3, input);
+                                throw eee;
+                        }
+                        cnt3++;
+                    } while (true);
+
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:158:6: ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:158:6: ( ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )* )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:158:7: ( (lv_type_6_0= '/delta' ) ) otherlv_7= ';' ( (lv_importSection_8_0= ruleImportSection ) )? ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )*
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:158:7: ( (lv_type_6_0= '/delta' ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:159:1: (lv_type_6_0= '/delta' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:159:1: (lv_type_6_0= '/delta' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:160:3: lv_type_6_0= '/delta'
+                    {
+                    lv_type_6_0=(Token)match(input,16,FOLLOW_16_in_ruleEtsiBnf261); 
+
+                            newLeafNode(lv_type_6_0, grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getEtsiBnfRule());
+                    	        }
+                           		setWithLastConsumed(current, "type", lv_type_6_0, "/delta");
+                    	    
+
+                    }
+
+
+                    }
+
+                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleEtsiBnf286); 
+
+                        	newLeafNode(otherlv_7, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:177:1: ( (lv_importSection_8_0= ruleImportSection ) )?
+                    int alt4=2;
+                    int LA4_0 = input.LA(1);
+
+                    if ( (LA4_0==18) ) {
+                        alt4=1;
+                    }
+                    switch (alt4) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:178:1: (lv_importSection_8_0= ruleImportSection )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:178:1: (lv_importSection_8_0= ruleImportSection )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:179:3: lv_importSection_8_0= ruleImportSection
+                            {
+                             
+                            	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+                            	    
+                            pushFollow(FOLLOW_ruleImportSection_in_ruleEtsiBnf307);
+                            lv_importSection_8_0=ruleImportSection();
+
+                            state._fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                            	        }
+                                   		set(
+                                   			current, 
+                                   			"importSection",
+                                    		lv_importSection_8_0, 
+                                    		"ImportSection");
+                            	        afterParserOrEnumRuleCall();
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:195:3: ( (lv_deltaEntry_9_0= ruleDeltaEntry ) )*
+                    loop5:
+                    do {
+                        int alt5=2;
+                        int LA5_0 = input.LA(1);
+
+                        if ( ((LA5_0>=RULE_ID && LA5_0<=RULE_SECTIONHEADER)||LA5_0==RULE_INT) ) {
+                            alt5=1;
+                        }
+
+
+                        switch (alt5) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:196:1: (lv_deltaEntry_9_0= ruleDeltaEntry )
+                    	    {
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:196:1: (lv_deltaEntry_9_0= ruleDeltaEntry )
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:197:3: lv_deltaEntry_9_0= ruleDeltaEntry
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleDeltaEntry_in_ruleEtsiBnf329);
+                    	    lv_deltaEntry_9_0=ruleDeltaEntry();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"deltaEntry",
+                    	            		lv_deltaEntry_9_0, 
+                    	            		"DeltaEntry");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop5;
+                        }
+                    } while (true);
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:214:6: ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:214:6: ( ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )* )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:214:7: ( (lv_type_10_0= '/merge' ) ) otherlv_11= ';' ( (lv_importSection_12_0= ruleImportSection ) )? ( (lv_mergeEntry_13_0= ruleMergeEntry ) )*
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:214:7: ( (lv_type_10_0= '/merge' ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:215:1: (lv_type_10_0= '/merge' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:215:1: (lv_type_10_0= '/merge' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:216:3: lv_type_10_0= '/merge'
+                    {
+                    lv_type_10_0=(Token)match(input,17,FOLLOW_17_in_ruleEtsiBnf356); 
+
+                            newLeafNode(lv_type_10_0, grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getEtsiBnfRule());
+                    	        }
+                           		setWithLastConsumed(current, "type", lv_type_10_0, "/merge");
+                    	    
+
+                    }
+
+
+                    }
+
+                    otherlv_11=(Token)match(input,15,FOLLOW_15_in_ruleEtsiBnf381); 
+
+                        	newLeafNode(otherlv_11, grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:233:1: ( (lv_importSection_12_0= ruleImportSection ) )?
+                    int alt6=2;
+                    int LA6_0 = input.LA(1);
+
+                    if ( (LA6_0==18) ) {
+                        alt6=1;
+                    }
+                    switch (alt6) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:234:1: (lv_importSection_12_0= ruleImportSection )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:234:1: (lv_importSection_12_0= ruleImportSection )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:235:3: lv_importSection_12_0= ruleImportSection
+                            {
+                             
+                            	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+                            	    
+                            pushFollow(FOLLOW_ruleImportSection_in_ruleEtsiBnf402);
+                            lv_importSection_12_0=ruleImportSection();
+
+                            state._fsp--;
+
+
+                            	        if (current==null) {
+                            	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                            	        }
+                                   		set(
+                                   			current, 
+                                   			"importSection",
+                                    		lv_importSection_12_0, 
+                                    		"ImportSection");
+                            	        afterParserOrEnumRuleCall();
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:251:3: ( (lv_mergeEntry_13_0= ruleMergeEntry ) )*
+                    loop7:
+                    do {
+                        int alt7=2;
+                        int LA7_0 = input.LA(1);
+
+                        if ( (LA7_0==RULE_SECTIONHEADER||LA7_0==36||(LA7_0>=38 && LA7_0<=39)) ) {
+                            alt7=1;
+                        }
+
+
+                        switch (alt7) {
+                    	case 1 :
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:252:1: (lv_mergeEntry_13_0= ruleMergeEntry )
+                    	    {
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:252:1: (lv_mergeEntry_13_0= ruleMergeEntry )
+                    	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:253:3: lv_mergeEntry_13_0= ruleMergeEntry
+                    	    {
+                    	     
+                    	    	        newCompositeNode(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+                    	    	    
+                    	    pushFollow(FOLLOW_ruleMergeEntry_in_ruleEtsiBnf424);
+                    	    lv_mergeEntry_13_0=ruleMergeEntry();
+
+                    	    state._fsp--;
+
+
+                    	    	        if (current==null) {
+                    	    	            current = createModelElementForParent(grammarAccess.getEtsiBnfRule());
+                    	    	        }
+                    	           		add(
+                    	           			current, 
+                    	           			"mergeEntry",
+                    	            		lv_mergeEntry_13_0, 
+                    	            		"MergeEntry");
+                    	    	        afterParserOrEnumRuleCall();
+                    	    	    
+
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop7;
+                        }
+                    } while (true);
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleEtsiBnf"
+
+
+    // $ANTLR start "entryRuleImportSection"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:277:1: entryRuleImportSection returns [EObject current=null] : iv_ruleImportSection= ruleImportSection EOF ;
+    public final EObject entryRuleImportSection() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleImportSection = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:278:2: (iv_ruleImportSection= ruleImportSection EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:279:2: iv_ruleImportSection= ruleImportSection EOF
+            {
+             newCompositeNode(grammarAccess.getImportSectionRule()); 
+            pushFollow(FOLLOW_ruleImportSection_in_entryRuleImportSection462);
+            iv_ruleImportSection=ruleImportSection();
+
+            state._fsp--;
+
+             current =iv_ruleImportSection; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImportSection472); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleImportSection"
+
+
+    // $ANTLR start "ruleImportSection"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:286:1: ruleImportSection returns [EObject current=null] : ( (lv_imports_0_0= ruleImport ) )+ ;
+    public final EObject ruleImportSection() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_imports_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:289:28: ( ( (lv_imports_0_0= ruleImport ) )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:290:1: ( (lv_imports_0_0= ruleImport ) )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:290:1: ( (lv_imports_0_0= ruleImport ) )+
+            int cnt9=0;
+            loop9:
+            do {
+                int alt9=2;
+                int LA9_0 = input.LA(1);
+
+                if ( (LA9_0==18) ) {
+                    alt9=1;
+                }
+
+
+                switch (alt9) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:291:1: (lv_imports_0_0= ruleImport )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:291:1: (lv_imports_0_0= ruleImport )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:292:3: lv_imports_0_0= ruleImport
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleImport_in_ruleImportSection517);
+            	    lv_imports_0_0=ruleImport();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getImportSectionRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"imports",
+            	            		lv_imports_0_0, 
+            	            		"Import");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt9 >= 1 ) break loop9;
+                        EarlyExitException eee =
+                            new EarlyExitException(9, input);
+                        throw eee;
+                }
+                cnt9++;
+            } while (true);
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleImportSection"
+
+
+    // $ANTLR start "entryRuleBnfEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:316:1: entryRuleBnfEntry returns [EObject current=null] : iv_ruleBnfEntry= ruleBnfEntry EOF ;
+    public final EObject entryRuleBnfEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleBnfEntry = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:317:2: (iv_ruleBnfEntry= ruleBnfEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:318:2: iv_ruleBnfEntry= ruleBnfEntry EOF
+            {
+             newCompositeNode(grammarAccess.getBnfEntryRule()); 
+            pushFollow(FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry553);
+            iv_ruleBnfEntry=ruleBnfEntry();
+
+            state._fsp--;
+
+             current =iv_ruleBnfEntry; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBnfEntry563); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleBnfEntry"
+
+
+    // $ANTLR start "ruleBnfEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:325:1: ruleBnfEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) ) ;
+    public final EObject ruleBnfEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_sectionheader_0_0 = null;
+
+        EObject lv_rule_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:328:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:329:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:329:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) )
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==RULE_SECTIONHEADER) ) {
+                alt10=1;
+            }
+            else if ( (LA10_0==RULE_ID||LA10_0==RULE_INT) ) {
+                alt10=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 10, 0, input);
+
+                throw nvae;
+            }
+            switch (alt10) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:329:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:329:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:330:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:330:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:331:3: lv_sectionheader_0_0= ruleSectionHeading
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleBnfEntry609);
+                    lv_sectionheader_0_0=ruleSectionHeading();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getBnfEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"sectionheader",
+                            		lv_sectionheader_0_0, 
+                            		"SectionHeading");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:348:6: ( (lv_rule_1_0= ruleRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:348:6: ( (lv_rule_1_0= ruleRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:349:1: (lv_rule_1_0= ruleRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:349:1: (lv_rule_1_0= ruleRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:350:3: lv_rule_1_0= ruleRule
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleRule_in_ruleBnfEntry636);
+                    lv_rule_1_0=ruleRule();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getBnfEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"rule",
+                            		lv_rule_1_0, 
+                            		"Rule");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleBnfEntry"
+
+
+    // $ANTLR start "entryRuleDeltaEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:374:1: entryRuleDeltaEntry returns [EObject current=null] : iv_ruleDeltaEntry= ruleDeltaEntry EOF ;
+    public final EObject entryRuleDeltaEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleDeltaEntry = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:375:2: (iv_ruleDeltaEntry= ruleDeltaEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:376:2: iv_ruleDeltaEntry= ruleDeltaEntry EOF
+            {
+             newCompositeNode(grammarAccess.getDeltaEntryRule()); 
+            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry672);
+            iv_ruleDeltaEntry=ruleDeltaEntry();
+
+            state._fsp--;
+
+             current =iv_ruleDeltaEntry; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry682); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDeltaEntry"
+
+
+    // $ANTLR start "ruleDeltaEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:383:1: ruleDeltaEntry returns [EObject current=null] : ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) ;
+    public final EObject ruleDeltaEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_rule_0_0 = null;
+
+        EObject lv_sectionheader_1_0 = null;
+
+        EObject lv_extRule_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:386:28: ( ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:387:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:387:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
+            int alt11=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+                {
+                int LA11_1 = input.LA(2);
+
+                if ( (LA11_1==RULE_ID) ) {
+                    int LA11_4 = input.LA(3);
+
+                    if ( (LA11_4==24) ) {
+                        int LA11_5 = input.LA(4);
+
+                        if ( (LA11_5==RULE_ID) ) {
+                            int LA11_2 = input.LA(5);
+
+                            if ( (LA11_2==25) ) {
+                                alt11=1;
+                            }
+                            else if ( (LA11_2==26) ) {
+                                alt11=3;
+                            }
+                            else {
+                                NoViableAltException nvae =
+                                    new NoViableAltException("", 11, 2, input);
+
+                                throw nvae;
+                            }
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("", 11, 5, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 11, 4, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA11_1==24) ) {
+                    int LA11_5 = input.LA(3);
+
+                    if ( (LA11_5==RULE_ID) ) {
+                        int LA11_2 = input.LA(4);
+
+                        if ( (LA11_2==25) ) {
+                            alt11=1;
+                        }
+                        else if ( (LA11_2==26) ) {
+                            alt11=3;
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("", 11, 2, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 11, 5, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 11, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_ID:
+                {
+                int LA11_2 = input.LA(2);
+
+                if ( (LA11_2==25) ) {
+                    alt11=1;
+                }
+                else if ( (LA11_2==26) ) {
+                    alt11=3;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("", 11, 2, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_SECTIONHEADER:
+                {
+                alt11=2;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 11, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt11) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:387:2: ( (lv_rule_0_0= ruleRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:387:2: ( (lv_rule_0_0= ruleRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:388:1: (lv_rule_0_0= ruleRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:388:1: (lv_rule_0_0= ruleRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:389:3: lv_rule_0_0= ruleRule
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleRule_in_ruleDeltaEntry728);
+                    lv_rule_0_0=ruleRule();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"rule",
+                            		lv_rule_0_0, 
+                            		"Rule");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:406:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:406:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:407:1: (lv_sectionheader_1_0= ruleSectionHeading )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:407:1: (lv_sectionheader_1_0= ruleSectionHeading )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:408:3: lv_sectionheader_1_0= ruleSectionHeading
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleDeltaEntry755);
+                    lv_sectionheader_1_0=ruleSectionHeading();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"sectionheader",
+                            		lv_sectionheader_1_0, 
+                            		"SectionHeading");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:425:6: ( (lv_extRule_2_0= ruleExtRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:425:6: ( (lv_extRule_2_0= ruleExtRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:426:1: (lv_extRule_2_0= ruleExtRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:426:1: (lv_extRule_2_0= ruleExtRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:427:3: lv_extRule_2_0= ruleExtRule
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleExtRule_in_ruleDeltaEntry782);
+                    lv_extRule_2_0=ruleExtRule();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getDeltaEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"extRule",
+                            		lv_extRule_2_0, 
+                            		"ExtRule");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDeltaEntry"
+
+
+    // $ANTLR start "entryRuleMergeEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:451:1: entryRuleMergeEntry returns [EObject current=null] : iv_ruleMergeEntry= ruleMergeEntry EOF ;
+    public final EObject entryRuleMergeEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleMergeEntry = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:452:2: (iv_ruleMergeEntry= ruleMergeEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:453:2: iv_ruleMergeEntry= ruleMergeEntry EOF
+            {
+             newCompositeNode(grammarAccess.getMergeEntryRule()); 
+            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry818);
+            iv_ruleMergeEntry=ruleMergeEntry();
+
+            state._fsp--;
+
+             current =iv_ruleMergeEntry; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry828); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleMergeEntry"
+
+
+    // $ANTLR start "ruleMergeEntry"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:460:1: ruleMergeEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) ;
+    public final EObject ruleMergeEntry() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_sectionheader_0_0 = null;
+
+        EObject lv_mergeRule_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:463:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:464:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:464:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==RULE_SECTIONHEADER) ) {
+                alt12=1;
+            }
+            else if ( (LA12_0==36||(LA12_0>=38 && LA12_0<=39)) ) {
+                alt12=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 12, 0, input);
+
+                throw nvae;
+            }
+            switch (alt12) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:464:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:464:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:465:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:465:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:466:3: lv_sectionheader_0_0= ruleSectionHeading
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleMergeEntry874);
+                    lv_sectionheader_0_0=ruleSectionHeading();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getMergeEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"sectionheader",
+                            		lv_sectionheader_0_0, 
+                            		"SectionHeading");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:483:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:483:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:484:1: (lv_mergeRule_1_0= ruleMergeRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:484:1: (lv_mergeRule_1_0= ruleMergeRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:485:3: lv_mergeRule_1_0= ruleMergeRule
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleMergeRule_in_ruleMergeEntry901);
+                    lv_mergeRule_1_0=ruleMergeRule();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getMergeEntryRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"mergeRule",
+                            		lv_mergeRule_1_0, 
+                            		"MergeRule");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleMergeEntry"
+
+
+    // $ANTLR start "entryRuleSectionHeading"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:509:1: entryRuleSectionHeading returns [EObject current=null] : iv_ruleSectionHeading= ruleSectionHeading EOF ;
+    public final EObject entryRuleSectionHeading() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSectionHeading = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:510:2: (iv_ruleSectionHeading= ruleSectionHeading EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:511:2: iv_ruleSectionHeading= ruleSectionHeading EOF
+            {
+             newCompositeNode(grammarAccess.getSectionHeadingRule()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading937);
+            iv_ruleSectionHeading=ruleSectionHeading();
+
+            state._fsp--;
+
+             current =iv_ruleSectionHeading; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading947); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSectionHeading"
+
+
+    // $ANTLR start "ruleSectionHeading"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:518:1: ruleSectionHeading returns [EObject current=null] : ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) ;
+    public final EObject ruleSectionHeading() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_sectionHeader_1_0=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:521:28: ( ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:522:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:522:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:522:2: () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:522:2: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:523:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0(),
+                        current);
+                
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:528:2: ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:530:3: lv_sectionHeader_1_0= RULE_SECTIONHEADER
+            {
+            lv_sectionHeader_1_0=(Token)match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading998); 
+
+            			newLeafNode(lv_sectionHeader_1_0, grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getSectionHeadingRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"sectionHeader",
+                    		lv_sectionHeader_1_0, 
+                    		"SECTIONHEADER");
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSectionHeading"
+
+
+    // $ANTLR start "entryRuleImport"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:554:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
+    public final EObject entryRuleImport() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleImport = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:555:2: (iv_ruleImport= ruleImport EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:556:2: iv_ruleImport= ruleImport EOF
+            {
+             newCompositeNode(grammarAccess.getImportRule()); 
+            pushFollow(FOLLOW_ruleImport_in_entryRuleImport1039);
+            iv_ruleImport=ruleImport();
+
+            state._fsp--;
+
+             current =iv_ruleImport; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImport1049); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleImport"
+
+
+    // $ANTLR start "ruleImport"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:563:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) ;
+    public final EObject ruleImport() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token lv_importURI_1_0=null;
+        Token otherlv_2=null;
+        Token lv_grammarType_3_0=null;
+        Token lv_grammarType_4_0=null;
+        Token lv_grammarType_5_0=null;
+        Token otherlv_6=null;
+        Token lv_label_7_0=null;
+        Token otherlv_8=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:566:28: ( (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:567:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:567:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:567:3: otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';'
+            {
+            otherlv_0=(Token)match(input,18,FOLLOW_18_in_ruleImport1086); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getImportAccess().getImportKeyword_0());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:571:1: ( (lv_importURI_1_0= RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:572:1: (lv_importURI_1_0= RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:572:1: (lv_importURI_1_0= RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:573:3: lv_importURI_1_0= RULE_STRING
+            {
+            lv_importURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleImport1103); 
+
+            			newLeafNode(lv_importURI_1_0, grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getImportRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"importURI",
+                    		lv_importURI_1_0, 
+                    		"STRING");
+            	    
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:589:2: (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )?
+            int alt14=2;
+            int LA14_0 = input.LA(1);
+
+            if ( (LA14_0==19) ) {
+                alt14=1;
+            }
+            switch (alt14) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:589:4: otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
+                    {
+                    otherlv_2=(Token)match(input,19,FOLLOW_19_in_ruleImport1121); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getImportAccess().getSolidusKeyword_2_0());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:593:1: ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
+                    int alt13=3;
+                    switch ( input.LA(1) ) {
+                    case 20:
+                        {
+                        alt13=1;
+                        }
+                        break;
+                    case 21:
+                        {
+                        alt13=2;
+                        }
+                        break;
+                    case 22:
+                        {
+                        alt13=3;
+                        }
+                        break;
+                    default:
+                        NoViableAltException nvae =
+                            new NoViableAltException("", 13, 0, input);
+
+                        throw nvae;
+                    }
+
+                    switch (alt13) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:593:2: ( (lv_grammarType_3_0= 'core' ) )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:593:2: ( (lv_grammarType_3_0= 'core' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:594:1: (lv_grammarType_3_0= 'core' )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:594:1: (lv_grammarType_3_0= 'core' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:595:3: lv_grammarType_3_0= 'core'
+                            {
+                            lv_grammarType_3_0=(Token)match(input,20,FOLLOW_20_in_ruleImport1140); 
+
+                                    newLeafNode(lv_grammarType_3_0, grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0());
+                                
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getImportRule());
+                            	        }
+                                   		setWithLastConsumed(current, "grammarType", lv_grammarType_3_0, "core");
+                            	    
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+                        case 2 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:609:6: ( (lv_grammarType_4_0= 'package' ) )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:609:6: ( (lv_grammarType_4_0= 'package' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:610:1: (lv_grammarType_4_0= 'package' )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:610:1: (lv_grammarType_4_0= 'package' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:611:3: lv_grammarType_4_0= 'package'
+                            {
+                            lv_grammarType_4_0=(Token)match(input,21,FOLLOW_21_in_ruleImport1177); 
+
+                                    newLeafNode(lv_grammarType_4_0, grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0());
+                                
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getImportRule());
+                            	        }
+                                   		setWithLastConsumed(current, "grammarType", lv_grammarType_4_0, "package");
+                            	    
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+                        case 3 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:625:6: ( (lv_grammarType_5_0= 'update' ) )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:625:6: ( (lv_grammarType_5_0= 'update' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:626:1: (lv_grammarType_5_0= 'update' )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:626:1: (lv_grammarType_5_0= 'update' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:627:3: lv_grammarType_5_0= 'update'
+                            {
+                            lv_grammarType_5_0=(Token)match(input,22,FOLLOW_22_in_ruleImport1214); 
+
+                                    newLeafNode(lv_grammarType_5_0, grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0());
+                                
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getImportRule());
+                            	        }
+                                   		setWithLastConsumed(current, "grammarType", lv_grammarType_5_0, "update");
+                            	    
+
+                            }
+
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:640:5: (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )?
+            int alt15=2;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0==23) ) {
+                alt15=1;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:640:7: otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) )
+                    {
+                    otherlv_6=(Token)match(input,23,FOLLOW_23_in_ruleImport1243); 
+
+                        	newLeafNode(otherlv_6, grammarAccess.getImportAccess().getLabelKeyword_3_0());
+                        
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:644:1: ( (lv_label_7_0= RULE_ID ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:645:1: (lv_label_7_0= RULE_ID )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:645:1: (lv_label_7_0= RULE_ID )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:646:3: lv_label_7_0= RULE_ID
+                    {
+                    lv_label_7_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleImport1260); 
+
+                    			newLeafNode(lv_label_7_0, grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getImportRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"label",
+                            		lv_label_7_0, 
+                            		"ID");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            otherlv_8=(Token)match(input,15,FOLLOW_15_in_ruleImport1279); 
+
+                	newLeafNode(otherlv_8, grammarAccess.getImportAccess().getSemicolonKeyword_4());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleImport"
+
+
+    // $ANTLR start "entryRuleRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:674:1: entryRuleRule returns [EObject current=null] : iv_ruleRule= ruleRule EOF ;
+    public final EObject entryRuleRule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRule = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:675:2: (iv_ruleRule= ruleRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:676:2: iv_ruleRule= ruleRule EOF
+            {
+             newCompositeNode(grammarAccess.getRuleRule()); 
+            pushFollow(FOLLOW_ruleRule_in_entryRuleRule1315);
+            iv_ruleRule=ruleRule();
+
+            state._fsp--;
+
+             current =iv_ruleRule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRule1325); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRule"
+
+
+    // $ANTLR start "ruleRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:683:1: ruleRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) ;
+    public final EObject ruleRule() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_rulenumber_0_0=null;
+        Token lv_rulevariant_1_0=null;
+        Token otherlv_2=null;
+        Token lv_name_3_0=null;
+        Token otherlv_4=null;
+        Token otherlv_6=null;
+        EObject lv_definitionList_5_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:686:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
+            int alt17=2;
+            int LA17_0 = input.LA(1);
+
+            if ( (LA17_0==RULE_INT) ) {
+                alt17=1;
+            }
+            switch (alt17) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:3: ( (lv_rulenumber_0_0= RULE_INT ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:688:1: (lv_rulenumber_0_0= RULE_INT )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:688:1: (lv_rulenumber_0_0= RULE_INT )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:689:3: lv_rulenumber_0_0= RULE_INT
+                    {
+                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRule1368); 
+
+                    			newLeafNode(lv_rulenumber_0_0, grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getRuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"rulenumber",
+                            		lv_rulenumber_0_0, 
+                            		"INT");
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:705:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
+                    int alt16=2;
+                    int LA16_0 = input.LA(1);
+
+                    if ( (LA16_0==RULE_ID) ) {
+                        alt16=1;
+                    }
+                    switch (alt16) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:706:1: (lv_rulevariant_1_0= RULE_ID )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:706:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:707:3: lv_rulevariant_1_0= RULE_ID
+                            {
+                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1390); 
+
+                            			newLeafNode(lv_rulevariant_1_0, grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+                            		
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getRuleRule());
+                            	        }
+                                   		setWithLastConsumed(
+                                   			current, 
+                                   			"rulevariant",
+                                    		lv_rulevariant_1_0, 
+                                    		"ID");
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleRule1408); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getRuleAccess().getFullStopKeyword_0_2());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:727:3: ( (lv_name_3_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:728:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:728:1: (lv_name_3_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:729:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1427); 
+
+            			newLeafNode(lv_name_3_0, grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getRuleRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_3_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_4=(Token)match(input,25,FOLLOW_25_in_ruleRule1444); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:749:1: ( (lv_definitionList_5_0= ruleDefinitionList ) )?
+            int alt18=2;
+            int LA18_0 = input.LA(1);
+
+            if ( (LA18_0==RULE_STRING||LA18_0==RULE_COLON||LA18_0==26||(LA18_0>=32 && LA18_0<=33)) ) {
+                alt18=1;
+            }
+            else if ( (LA18_0==RULE_ID) ) {
+                int LA18_2 = input.LA(2);
+
+                if ( (LA18_2==26) ) {
+                    int LA18_4 = input.LA(3);
+
+                    if ( (LA18_4==RULE_ID||LA18_4==RULE_STRING||LA18_4==RULE_COLON||LA18_4==26||(LA18_4>=32 && LA18_4<=33)) ) {
+                        alt18=1;
+                    }
+                }
+                else if ( (LA18_2==EOF||(LA18_2>=RULE_ID && LA18_2<=RULE_INT)||LA18_2==RULE_COLON||LA18_2==15||(LA18_2>=31 && LA18_2<=33)) ) {
+                    alt18=1;
+                }
+            }
+            switch (alt18) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:750:1: (lv_definitionList_5_0= ruleDefinitionList )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:750:1: (lv_definitionList_5_0= ruleDefinitionList )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:751:3: lv_definitionList_5_0= ruleDefinitionList
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleDefinitionList_in_ruleRule1465);
+                    lv_definitionList_5_0=ruleDefinitionList();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getRuleRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"definitionList",
+                            		lv_definitionList_5_0, 
+                            		"DefinitionList");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:767:3: (otherlv_6= ';' )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==15) ) {
+                alt19=1;
+            }
+            switch (alt19) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:767:5: otherlv_6= ';'
+                    {
+                    otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleRule1479); 
+
+                        	newLeafNode(otherlv_6, grammarAccess.getRuleAccess().getSemicolonKeyword_4());
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRule"
+
+
+    // $ANTLR start "entryRuleExtRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:779:1: entryRuleExtRule returns [EObject current=null] : iv_ruleExtRule= ruleExtRule EOF ;
+    public final EObject entryRuleExtRule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleExtRule = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:780:2: (iv_ruleExtRule= ruleExtRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:781:2: iv_ruleExtRule= ruleExtRule EOF
+            {
+             newCompositeNode(grammarAccess.getExtRuleRule()); 
+            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule1517);
+            iv_ruleExtRule=ruleExtRule();
+
+            state._fsp--;
+
+             current =iv_ruleExtRule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule1527); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleExtRule"
+
+
+    // $ANTLR start "ruleExtRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:788:1: ruleExtRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) ;
+    public final EObject ruleExtRule() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_rulenumber_0_0=null;
+        Token lv_rulevariant_1_0=null;
+        Token otherlv_2=null;
+        Token lv_name_3_0=null;
+        Token otherlv_4=null;
+        Token lv_ruleext_5_0=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+        Token otherlv_11=null;
+        Token otherlv_12=null;
+        Token otherlv_13=null;
+        Token otherlv_14=null;
+        Token otherlv_15=null;
+        Token otherlv_16=null;
+        Token otherlv_17=null;
+        Token otherlv_18=null;
+        EObject lv_elements_8_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:791:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==RULE_INT) ) {
+                alt21=1;
+            }
+            switch (alt21) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:792:3: ( (lv_rulenumber_0_0= RULE_INT ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:793:1: (lv_rulenumber_0_0= RULE_INT )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:793:1: (lv_rulenumber_0_0= RULE_INT )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:794:3: lv_rulenumber_0_0= RULE_INT
+                    {
+                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1570); 
+
+                    			newLeafNode(lv_rulenumber_0_0, grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getExtRuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"rulenumber",
+                            		lv_rulenumber_0_0, 
+                            		"INT");
+                    	    
+
+                    }
+
+
+                    }
+
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:810:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
+                    int alt20=2;
+                    int LA20_0 = input.LA(1);
+
+                    if ( (LA20_0==RULE_ID) ) {
+                        alt20=1;
+                    }
+                    switch (alt20) {
+                        case 1 :
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:811:1: (lv_rulevariant_1_0= RULE_ID )
+                            {
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:811:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:812:3: lv_rulevariant_1_0= RULE_ID
+                            {
+                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1592); 
+
+                            			newLeafNode(lv_rulevariant_1_0, grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+                            		
+
+                            	        if (current==null) {
+                            	            current = createModelElement(grammarAccess.getExtRuleRule());
+                            	        }
+                                   		setWithLastConsumed(
+                                   			current, 
+                                   			"rulevariant",
+                                    		lv_rulevariant_1_0, 
+                                    		"ID");
+                            	    
+
+                            }
+
+
+                            }
+                            break;
+
+                    }
+
+                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleExtRule1610); 
+
+                        	newLeafNode(otherlv_2, grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2());
+                        
+
+                    }
+                    break;
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:832:3: ( (lv_name_3_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:833:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:833:1: (lv_name_3_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:834:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1629); 
+
+            			newLeafNode(lv_name_3_0, grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getExtRuleRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_3_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:850:2: (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:850:4: otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')'
+            {
+            otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1647); 
+
+                	newLeafNode(otherlv_4, grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:854:1: ( (lv_ruleext_5_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:855:1: (lv_ruleext_5_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:855:1: (lv_ruleext_5_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:856:3: lv_ruleext_5_0= RULE_INT
+            {
+            lv_ruleext_5_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1664); 
+
+            			newLeafNode(lv_ruleext_5_0, grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getExtRuleRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"ruleext",
+                    		lv_ruleext_5_0, 
+                    		"INT");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1681); 
+
+                	newLeafNode(otherlv_6, grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2());
+                
+
+            }
+
+            otherlv_7=(Token)match(input,28,FOLLOW_28_in_ruleExtRule1694); 
+
+                	newLeafNode(otherlv_7, grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:880:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*
+            loop22:
+            do {
+                int alt22=11;
+                alt22 = dfa22.predict(input);
+                switch (alt22) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:880:2: ( (lv_elements_8_0= ruleAtom ) )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:880:2: ( (lv_elements_8_0= ruleAtom ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:881:1: (lv_elements_8_0= ruleAtom )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:881:1: (lv_elements_8_0= ruleAtom )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:882:3: lv_elements_8_0= ruleAtom
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleAtom_in_ruleExtRule1716);
+            	    lv_elements_8_0=ruleAtom();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getExtRuleRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"elements",
+            	            		lv_elements_8_0, 
+            	            		"Atom");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+            	case 2 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:899:7: otherlv_9= ')'
+            	    {
+            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1734); 
+
+            	        	newLeafNode(otherlv_9, grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1());
+            	        
+
+            	    }
+            	    break;
+            	case 3 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:904:7: otherlv_10= ']'
+            	    {
+            	    otherlv_10=(Token)match(input,29,FOLLOW_29_in_ruleExtRule1752); 
+
+            	        	newLeafNode(otherlv_10, grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2());
+            	        
+
+            	    }
+            	    break;
+            	case 4 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:909:7: otherlv_11= '}'
+            	    {
+            	    otherlv_11=(Token)match(input,30,FOLLOW_30_in_ruleExtRule1770); 
+
+            	        	newLeafNode(otherlv_11, grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3());
+            	        
+
+            	    }
+            	    break;
+            	case 5 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:914:7: otherlv_12= '|'
+            	    {
+            	    otherlv_12=(Token)match(input,31,FOLLOW_31_in_ruleExtRule1788); 
+
+            	        	newLeafNode(otherlv_12, grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4());
+            	        
+
+            	    }
+            	    break;
+            	case 6 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:919:7: otherlv_13= '('
+            	    {
+            	    otherlv_13=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1806); 
+
+            	        	newLeafNode(otherlv_13, grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5());
+            	        
+
+            	    }
+            	    break;
+            	case 7 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:924:7: otherlv_14= '['
+            	    {
+            	    otherlv_14=(Token)match(input,32,FOLLOW_32_in_ruleExtRule1824); 
+
+            	        	newLeafNode(otherlv_14, grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6());
+            	        
+
+            	    }
+            	    break;
+            	case 8 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:929:7: otherlv_15= '{'
+            	    {
+            	    otherlv_15=(Token)match(input,33,FOLLOW_33_in_ruleExtRule1842); 
+
+            	        	newLeafNode(otherlv_15, grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7());
+            	        
+
+            	    }
+            	    break;
+            	case 9 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:934:7: otherlv_16= '*'
+            	    {
+            	    otherlv_16=(Token)match(input,34,FOLLOW_34_in_ruleExtRule1860); 
+
+            	        	newLeafNode(otherlv_16, grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8());
+            	        
+
+            	    }
+            	    break;
+            	case 10 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:939:7: otherlv_17= '+'
+            	    {
+            	    otherlv_17=(Token)match(input,35,FOLLOW_35_in_ruleExtRule1878); 
+
+            	        	newLeafNode(otherlv_17, grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9());
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop22;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:943:3: (otherlv_18= ';' )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==15) ) {
+                alt23=1;
+            }
+            switch (alt23) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:943:5: otherlv_18= ';'
+                    {
+                    otherlv_18=(Token)match(input,15,FOLLOW_15_in_ruleExtRule1893); 
+
+                        	newLeafNode(otherlv_18, grammarAccess.getExtRuleAccess().getSemicolonKeyword_5());
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleExtRule"
+
+
+    // $ANTLR start "entryRuleMergeRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:955:1: entryRuleMergeRule returns [EObject current=null] : iv_ruleMergeRule= ruleMergeRule EOF ;
+    public final EObject entryRuleMergeRule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleMergeRule = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:956:2: (iv_ruleMergeRule= ruleMergeRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:957:2: iv_ruleMergeRule= ruleMergeRule EOF
+            {
+             newCompositeNode(grammarAccess.getMergeRuleRule()); 
+            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule1931);
+            iv_ruleMergeRule=ruleMergeRule();
+
+            state._fsp--;
+
+             current =iv_ruleMergeRule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule1941); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleMergeRule"
+
+
+    // $ANTLR start "ruleMergeRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:964:1: ruleMergeRule returns [EObject current=null] : (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) ;
+    public final EObject ruleMergeRule() throws RecognitionException {
+        EObject current = null;
+
+        EObject this_GlobalCombinator_0 = null;
+
+        EObject this_RuleCombinator_1 = null;
+
+        EObject this_HookCombinator_2 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:967:28: ( (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:968:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:968:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
+            int alt24=3;
+            switch ( input.LA(1) ) {
+            case 36:
+                {
+                alt24=1;
+                }
+                break;
+            case 38:
+                {
+                alt24=2;
+                }
+                break;
+            case 39:
+                {
+                alt24=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 24, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt24) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:969:5: this_GlobalCombinator_0= ruleGlobalCombinator
+                    {
+                     
+                            newCompositeNode(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                        
+                    pushFollow(FOLLOW_ruleGlobalCombinator_in_ruleMergeRule1988);
+                    this_GlobalCombinator_0=ruleGlobalCombinator();
+
+                    state._fsp--;
+
+                     
+                            current = this_GlobalCombinator_0; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:979:5: this_RuleCombinator_1= ruleRuleCombinator
+                    {
+                     
+                            newCompositeNode(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                        
+                    pushFollow(FOLLOW_ruleRuleCombinator_in_ruleMergeRule2015);
+                    this_RuleCombinator_1=ruleRuleCombinator();
+
+                    state._fsp--;
+
+                     
+                            current = this_RuleCombinator_1; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:989:5: this_HookCombinator_2= ruleHookCombinator
+                    {
+                     
+                            newCompositeNode(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                        
+                    pushFollow(FOLLOW_ruleHookCombinator_in_ruleMergeRule2042);
+                    this_HookCombinator_2=ruleHookCombinator();
+
+                    state._fsp--;
+
+                     
+                            current = this_HookCombinator_2; 
+                            afterParserOrEnumRuleCall();
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleMergeRule"
+
+
+    // $ANTLR start "entryRuleGlobalCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1005:1: entryRuleGlobalCombinator returns [EObject current=null] : iv_ruleGlobalCombinator= ruleGlobalCombinator EOF ;
+    public final EObject entryRuleGlobalCombinator() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleGlobalCombinator = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1006:2: (iv_ruleGlobalCombinator= ruleGlobalCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1007:2: iv_ruleGlobalCombinator= ruleGlobalCombinator EOF
+            {
+             newCompositeNode(grammarAccess.getGlobalCombinatorRule()); 
+            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2077);
+            iv_ruleGlobalCombinator=ruleGlobalCombinator();
+
+            state._fsp--;
+
+             current =iv_ruleGlobalCombinator; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator2087); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleGlobalCombinator"
+
+
+    // $ANTLR start "ruleGlobalCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1014:1: ruleGlobalCombinator returns [EObject current=null] : ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) ;
+    public final EObject ruleGlobalCombinator() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token lv_logic_2_0=null;
+        Token otherlv_3=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1017:28: ( ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1018:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1018:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1018:2: (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1018:2: (otherlv_0= 'global' otherlv_1= 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1018:4: otherlv_0= 'global' otherlv_1= 'combinator:'
+            {
+            otherlv_0=(Token)match(input,36,FOLLOW_36_in_ruleGlobalCombinator2125); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0());
+                
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleGlobalCombinator2137); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1());
+                
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1026:2: ( (lv_logic_2_0= RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1027:1: (lv_logic_2_0= RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1027:1: (lv_logic_2_0= RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1028:3: lv_logic_2_0= RULE_LOGIC
+            {
+            lv_logic_2_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2155); 
+
+            			newLeafNode(lv_logic_2_0, grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getGlobalCombinatorRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"logic",
+                    		lv_logic_2_0, 
+                    		"LOGIC");
+            	    
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1044:2: (otherlv_3= ';' )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==15) ) {
+                alt25=1;
+            }
+            switch (alt25) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1044:4: otherlv_3= ';'
+                    {
+                    otherlv_3=(Token)match(input,15,FOLLOW_15_in_ruleGlobalCombinator2173); 
+
+                        	newLeafNode(otherlv_3, grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2());
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleGlobalCombinator"
+
+
+    // $ANTLR start "entryRuleRuleCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1056:1: entryRuleRuleCombinator returns [EObject current=null] : iv_ruleRuleCombinator= ruleRuleCombinator EOF ;
+    public final EObject entryRuleRuleCombinator() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRuleCombinator = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1057:2: (iv_ruleRuleCombinator= ruleRuleCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1058:2: iv_ruleRuleCombinator= ruleRuleCombinator EOF
+            {
+             newCompositeNode(grammarAccess.getRuleCombinatorRule()); 
+            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2211);
+            iv_ruleRuleCombinator=ruleRuleCombinator();
+
+            state._fsp--;
+
+             current =iv_ruleRuleCombinator; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator2221); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRuleCombinator"
+
+
+    // $ANTLR start "ruleRuleCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1065:1: ruleRuleCombinator returns [EObject current=null] : ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) ;
+    public final EObject ruleRuleCombinator() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+        Token lv_logic_3_0=null;
+        Token otherlv_4=null;
+        Token lv_LABEL_5_0=null;
+        Token otherlv_6=null;
+        Token otherlv_7=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1068:28: ( ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1069:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1069:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1069:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1069:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1069:4: otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) )
+            {
+            otherlv_0=(Token)match(input,38,FOLLOW_38_in_ruleRuleCombinator2259); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0());
+                
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleRuleCombinator2271); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1077:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1078:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1078:1: (lv_name_2_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1079:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleCombinator2288); 
+
+            			newLeafNode(lv_name_2_0, grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getRuleCombinatorRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_2_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1095:3: ( (lv_logic_3_0= RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1096:1: (lv_logic_3_0= RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1096:1: (lv_logic_3_0= RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1097:3: lv_logic_3_0= RULE_LOGIC
+            {
+            lv_logic_3_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2311); 
+
+            			newLeafNode(lv_logic_3_0, grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getRuleCombinatorRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"logic",
+                    		lv_logic_3_0, 
+                    		"LOGIC");
+            	    
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1113:2: (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )*
+            loop26:
+            do {
+                int alt26=2;
+                int LA26_0 = input.LA(1);
+
+                if ( (LA26_0==26) ) {
+                    alt26=1;
+                }
+
+
+                switch (alt26) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1113:4: otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')'
+            	    {
+            	    otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleRuleCombinator2329); 
+
+            	        	newLeafNode(otherlv_4, grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0());
+            	        
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1117:1: ( (lv_LABEL_5_0= RULE_STRING ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1118:1: (lv_LABEL_5_0= RULE_STRING )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1118:1: (lv_LABEL_5_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1119:3: lv_LABEL_5_0= RULE_STRING
+            	    {
+            	    lv_LABEL_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleRuleCombinator2346); 
+
+            	    			newLeafNode(lv_LABEL_5_0, grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+            	    		
+
+            	    	        if (current==null) {
+            	    	            current = createModelElement(grammarAccess.getRuleCombinatorRule());
+            	    	        }
+            	           		addWithLastConsumed(
+            	           			current, 
+            	           			"LABEL",
+            	            		lv_LABEL_5_0, 
+            	            		"STRING");
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleRuleCombinator2363); 
+
+            	        	newLeafNode(otherlv_6, grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2());
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop26;
+                }
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1139:3: (otherlv_7= ';' )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==15) ) {
+                alt27=1;
+            }
+            switch (alt27) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1139:5: otherlv_7= ';'
+                    {
+                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleRuleCombinator2378); 
+
+                        	newLeafNode(otherlv_7, grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3());
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRuleCombinator"
+
+
+    // $ANTLR start "entryRuleHookCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1151:1: entryRuleHookCombinator returns [EObject current=null] : iv_ruleHookCombinator= ruleHookCombinator EOF ;
+    public final EObject entryRuleHookCombinator() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleHookCombinator = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1152:2: (iv_ruleHookCombinator= ruleHookCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1153:2: iv_ruleHookCombinator= ruleHookCombinator EOF
+            {
+             newCompositeNode(grammarAccess.getHookCombinatorRule()); 
+            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2416);
+            iv_ruleHookCombinator=ruleHookCombinator();
+
+            state._fsp--;
+
+             current =iv_ruleHookCombinator; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator2426); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleHookCombinator"
+
+
+    // $ANTLR start "ruleHookCombinator"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1160:1: ruleHookCombinator returns [EObject current=null] : (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) ;
+    public final EObject ruleHookCombinator() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_1=null;
+        Token lv_name_2_0=null;
+        Token otherlv_3=null;
+        Token lv_ruleext_4_0=null;
+        Token otherlv_5=null;
+        Token lv_logic_6_0=null;
+        Token otherlv_7=null;
+        Token lv_LABEL_8_0=null;
+        Token otherlv_9=null;
+        Token otherlv_10=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1163:28: ( (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1164:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1164:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1164:3: otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )?
+            {
+            otherlv_0=(Token)match(input,39,FOLLOW_39_in_ruleHookCombinator2463); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getHookCombinatorAccess().getHookKeyword_0());
+                
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleHookCombinator2475); 
+
+                	newLeafNode(otherlv_1, grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1172:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1173:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1173:1: (lv_name_2_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1174:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleHookCombinator2492); 
+
+            			newLeafNode(lv_name_2_0, grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getHookCombinatorRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"name",
+                    		lv_name_2_0, 
+                    		"ID");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_3=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2509); 
+
+                	newLeafNode(otherlv_3, grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1194:1: ( (lv_ruleext_4_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1195:1: (lv_ruleext_4_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1195:1: (lv_ruleext_4_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1196:3: lv_ruleext_4_0= RULE_INT
+            {
+            lv_ruleext_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleHookCombinator2526); 
+
+            			newLeafNode(lv_ruleext_4_0, grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+            		
+
+            	        if (current==null) {
+            	            current = createModelElement(grammarAccess.getHookCombinatorRule());
+            	        }
+                   		setWithLastConsumed(
+                   			current, 
+                   			"ruleext",
+                    		lv_ruleext_4_0, 
+                    		"INT");
+            	    
+
+            }
+
+
+            }
+
+            otherlv_5=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2543); 
+
+                	newLeafNode(otherlv_5, grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1216:1: ( (lv_logic_6_0= RULE_LOGIC ) )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==RULE_LOGIC) ) {
+                alt28=1;
+            }
+            switch (alt28) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1217:1: (lv_logic_6_0= RULE_LOGIC )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1217:1: (lv_logic_6_0= RULE_LOGIC )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1218:3: lv_logic_6_0= RULE_LOGIC
+                    {
+                    lv_logic_6_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleHookCombinator2560); 
+
+                    			newLeafNode(lv_logic_6_0, grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getHookCombinatorRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"logic",
+                            		lv_logic_6_0, 
+                            		"LOGIC");
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1234:3: (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+
+            int cnt29=0;
+            loop29:
+            do {
+                int alt29=2;
+                int LA29_0 = input.LA(1);
+
+                if ( (LA29_0==26) ) {
+                    alt29=1;
+                }
+
+
+                switch (alt29) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1234:5: otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')'
+            	    {
+            	    otherlv_7=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2579); 
+
+            	        	newLeafNode(otherlv_7, grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0());
+            	        
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1238:1: ( (lv_LABEL_8_0= RULE_STRING ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1239:1: (lv_LABEL_8_0= RULE_STRING )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1239:1: (lv_LABEL_8_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1240:3: lv_LABEL_8_0= RULE_STRING
+            	    {
+            	    lv_LABEL_8_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleHookCombinator2596); 
+
+            	    			newLeafNode(lv_LABEL_8_0, grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+            	    		
+
+            	    	        if (current==null) {
+            	    	            current = createModelElement(grammarAccess.getHookCombinatorRule());
+            	    	        }
+            	           		addWithLastConsumed(
+            	           			current, 
+            	           			"LABEL",
+            	            		lv_LABEL_8_0, 
+            	            		"STRING");
+            	    	    
+
+            	    }
+
+
+            	    }
+
+            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2613); 
+
+            	        	newLeafNode(otherlv_9, grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2());
+            	        
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt29 >= 1 ) break loop29;
+                        EarlyExitException eee =
+                            new EarlyExitException(29, input);
+                        throw eee;
+                }
+                cnt29++;
+            } while (true);
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1260:3: (otherlv_10= ';' )?
+            int alt30=2;
+            int LA30_0 = input.LA(1);
+
+            if ( (LA30_0==15) ) {
+                alt30=1;
+            }
+            switch (alt30) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1260:5: otherlv_10= ';'
+                    {
+                    otherlv_10=(Token)match(input,15,FOLLOW_15_in_ruleHookCombinator2628); 
+
+                        	newLeafNode(otherlv_10, grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8());
+                        
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleHookCombinator"
+
+
+    // $ANTLR start "entryRuleDefinitionList"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1272:1: entryRuleDefinitionList returns [EObject current=null] : iv_ruleDefinitionList= ruleDefinitionList EOF ;
+    public final EObject entryRuleDefinitionList() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleDefinitionList = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1273:2: (iv_ruleDefinitionList= ruleDefinitionList EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1274:2: iv_ruleDefinitionList= ruleDefinitionList EOF
+            {
+             newCompositeNode(grammarAccess.getDefinitionListRule()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2666);
+            iv_ruleDefinitionList=ruleDefinitionList();
+
+            state._fsp--;
+
+             current =iv_ruleDefinitionList; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList2676); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleDefinitionList"
+
+
+    // $ANTLR start "ruleDefinitionList"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1281:1: ruleDefinitionList returns [EObject current=null] : ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) ;
+    public final EObject ruleDefinitionList() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+        EObject lv_singleDefinition_0_0 = null;
+
+        EObject lv_singleDefinition_2_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1284:28: ( ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1285:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1285:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1285:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1285:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1286:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1286:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1287:3: lv_singleDefinition_0_0= ruleSingleDefinition
+            {
+             
+            	        newCompositeNode(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+            	    
+            pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2722);
+            lv_singleDefinition_0_0=ruleSingleDefinition();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getDefinitionListRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"singleDefinition",
+                    		lv_singleDefinition_0_0, 
+                    		"SingleDefinition");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1303:2: (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
+            loop31:
+            do {
+                int alt31=2;
+                int LA31_0 = input.LA(1);
+
+                if ( (LA31_0==31) ) {
+                    alt31=1;
+                }
+
+
+                switch (alt31) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1303:4: otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
+            	    {
+            	    otherlv_1=(Token)match(input,31,FOLLOW_31_in_ruleDefinitionList2735); 
+
+            	        	newLeafNode(otherlv_1, grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0());
+            	        
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1307:1: ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1308:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1308:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1309:3: lv_singleDefinition_2_0= ruleSingleDefinition
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2756);
+            	    lv_singleDefinition_2_0=ruleSingleDefinition();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getDefinitionListRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"singleDefinition",
+            	            		lv_singleDefinition_2_0, 
+            	            		"SingleDefinition");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop31;
+                }
+            } while (true);
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleDefinitionList"
+
+
+    // $ANTLR start "entryRuleSingleDefinition"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1333:1: entryRuleSingleDefinition returns [EObject current=null] : iv_ruleSingleDefinition= ruleSingleDefinition EOF ;
+    public final EObject entryRuleSingleDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleSingleDefinition = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1334:2: (iv_ruleSingleDefinition= ruleSingleDefinition EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1335:2: iv_ruleSingleDefinition= ruleSingleDefinition EOF
+            {
+             newCompositeNode(grammarAccess.getSingleDefinitionRule()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2794);
+            iv_ruleSingleDefinition=ruleSingleDefinition();
+
+            state._fsp--;
+
+             current =iv_ruleSingleDefinition; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition2804); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleSingleDefinition"
+
+
+    // $ANTLR start "ruleSingleDefinition"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1342:1: ruleSingleDefinition returns [EObject current=null] : ( (lv_terms_0_0= ruleTerm ) )+ ;
+    public final EObject ruleSingleDefinition() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_terms_0_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1345:28: ( ( (lv_terms_0_0= ruleTerm ) )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1346:1: ( (lv_terms_0_0= ruleTerm ) )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1346:1: ( (lv_terms_0_0= ruleTerm ) )+
+            int cnt32=0;
+            loop32:
+            do {
+                int alt32=2;
+                int LA32_0 = input.LA(1);
+
+                if ( (LA32_0==RULE_ID) ) {
+                    int LA32_2 = input.LA(2);
+
+                    if ( (LA32_2==EOF||(LA32_2>=RULE_ID && LA32_2<=RULE_INT)||LA32_2==RULE_COLON||LA32_2==15||LA32_2==27||(LA32_2>=29 && LA32_2<=33)) ) {
+                        alt32=1;
+                    }
+                    else if ( (LA32_2==26) ) {
+                        int LA32_4 = input.LA(3);
+
+                        if ( (LA32_4==RULE_ID||LA32_4==RULE_STRING||LA32_4==RULE_COLON||LA32_4==26||(LA32_4>=32 && LA32_4<=33)) ) {
+                            alt32=1;
+                        }
+
+
+                    }
+
+
+                }
+                else if ( (LA32_0==RULE_STRING||LA32_0==RULE_COLON||LA32_0==26||(LA32_0>=32 && LA32_0<=33)) ) {
+                    alt32=1;
+                }
+
+
+                switch (alt32) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1347:1: (lv_terms_0_0= ruleTerm )
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1347:1: (lv_terms_0_0= ruleTerm )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1348:3: lv_terms_0_0= ruleTerm
+            	    {
+            	     
+            	    	        newCompositeNode(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+            	    	    
+            	    pushFollow(FOLLOW_ruleTerm_in_ruleSingleDefinition2849);
+            	    lv_terms_0_0=ruleTerm();
+
+            	    state._fsp--;
+
+
+            	    	        if (current==null) {
+            	    	            current = createModelElementForParent(grammarAccess.getSingleDefinitionRule());
+            	    	        }
+            	           		add(
+            	           			current, 
+            	           			"terms",
+            	            		lv_terms_0_0, 
+            	            		"Term");
+            	    	        afterParserOrEnumRuleCall();
+            	    	    
+
+            	    }
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt32 >= 1 ) break loop32;
+                        EarlyExitException eee =
+                            new EarlyExitException(32, input);
+                        throw eee;
+                }
+                cnt32++;
+            } while (true);
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleSingleDefinition"
+
+
+    // $ANTLR start "entryRuleTerm"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1372:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
+    public final EObject entryRuleTerm() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleTerm = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1373:2: (iv_ruleTerm= ruleTerm EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1374:2: iv_ruleTerm= ruleTerm EOF
+            {
+             newCompositeNode(grammarAccess.getTermRule()); 
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm2885);
+            iv_ruleTerm=ruleTerm();
+
+            state._fsp--;
+
+             current =iv_ruleTerm; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm2895); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleTerm"
+
+
+    // $ANTLR start "ruleTerm"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1381:1: ruleTerm returns [EObject current=null] : ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) ;
+    public final EObject ruleTerm() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_termAtom_0_0 = null;
+
+        EObject lv_termGroupedSequence_1_0 = null;
+
+        EObject lv_termOptionalSequence_2_0 = null;
+
+        EObject lv_termRepeatedSequence_3_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1384:28: ( ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1385:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1385:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
+            int alt33=4;
+            switch ( input.LA(1) ) {
+            case RULE_ID:
+            case RULE_STRING:
+            case RULE_COLON:
+                {
+                alt33=1;
+                }
+                break;
+            case 26:
+                {
+                alt33=2;
+                }
+                break;
+            case 32:
+                {
+                alt33=3;
+                }
+                break;
+            case 33:
+                {
+                alt33=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("", 33, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt33) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1385:2: ( (lv_termAtom_0_0= ruleAtom ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1385:2: ( (lv_termAtom_0_0= ruleAtom ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1386:1: (lv_termAtom_0_0= ruleAtom )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1386:1: (lv_termAtom_0_0= ruleAtom )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1387:3: lv_termAtom_0_0= ruleAtom
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleAtom_in_ruleTerm2941);
+                    lv_termAtom_0_0=ruleAtom();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getTermRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"termAtom",
+                            		lv_termAtom_0_0, 
+                            		"Atom");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1405:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1405:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1406:3: lv_termGroupedSequence_1_0= ruleGroupedSequence
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleGroupedSequence_in_ruleTerm2968);
+                    lv_termGroupedSequence_1_0=ruleGroupedSequence();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getTermRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"termGroupedSequence",
+                            		lv_termGroupedSequence_1_0, 
+                            		"GroupedSequence");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1423:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1423:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1424:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1424:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1425:3: lv_termOptionalSequence_2_0= ruleOptionalSequence
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleOptionalSequence_in_ruleTerm2995);
+                    lv_termOptionalSequence_2_0=ruleOptionalSequence();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getTermRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"termOptionalSequence",
+                            		lv_termOptionalSequence_2_0, 
+                            		"OptionalSequence");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 4 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1442:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1442:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1443:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1443:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1444:3: lv_termRepeatedSequence_3_0= ruleRepeatedSequence
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleRepeatedSequence_in_ruleTerm3022);
+                    lv_termRepeatedSequence_3_0=ruleRepeatedSequence();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getTermRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"termRepeatedSequence",
+                            		lv_termRepeatedSequence_3_0, 
+                            		"RepeatedSequence");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleTerm"
+
+
+    // $ANTLR start "entryRuleAtom"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1468:1: entryRuleAtom returns [EObject current=null] : iv_ruleAtom= ruleAtom EOF ;
+    public final EObject entryRuleAtom() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleAtom = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1469:2: (iv_ruleAtom= ruleAtom EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1470:2: iv_ruleAtom= ruleAtom EOF
+            {
+             newCompositeNode(grammarAccess.getAtomRule()); 
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom3058);
+            iv_ruleAtom=ruleAtom();
+
+            state._fsp--;
+
+             current =iv_ruleAtom; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom3068); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleAtom"
+
+
+    // $ANTLR start "ruleAtom"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1477:1: ruleAtom returns [EObject current=null] : ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) ;
+    public final EObject ruleAtom() throws RecognitionException {
+        EObject current = null;
+
+        EObject lv_atomStringRule_0_0 = null;
+
+        EObject lv_atomRuleReference_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1480:28: ( ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1481:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1481:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0==RULE_STRING||LA34_0==RULE_COLON) ) {
+                alt34=1;
+            }
+            else if ( (LA34_0==RULE_ID) ) {
+                alt34=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 34, 0, input);
+
+                throw nvae;
+            }
+            switch (alt34) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1481:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1481:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1482:1: (lv_atomStringRule_0_0= ruleStringRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1482:1: (lv_atomStringRule_0_0= ruleStringRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1483:3: lv_atomStringRule_0_0= ruleStringRule
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleStringRule_in_ruleAtom3114);
+                    lv_atomStringRule_0_0=ruleStringRule();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getAtomRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"atomStringRule",
+                            		lv_atomStringRule_0_0, 
+                            		"StringRule");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1501:1: (lv_atomRuleReference_1_0= ruleRuleReference )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1501:1: (lv_atomRuleReference_1_0= ruleRuleReference )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1502:3: lv_atomRuleReference_1_0= ruleRuleReference
+                    {
+                     
+                    	        newCompositeNode(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+                    	    
+                    pushFollow(FOLLOW_ruleRuleReference_in_ruleAtom3141);
+                    lv_atomRuleReference_1_0=ruleRuleReference();
+
+                    state._fsp--;
+
+
+                    	        if (current==null) {
+                    	            current = createModelElementForParent(grammarAccess.getAtomRule());
+                    	        }
+                           		set(
+                           			current, 
+                           			"atomRuleReference",
+                            		lv_atomRuleReference_1_0, 
+                            		"RuleReference");
+                    	        afterParserOrEnumRuleCall();
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleAtom"
+
+
+    // $ANTLR start "entryRuleRuleReference"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1526:1: entryRuleRuleReference returns [EObject current=null] : iv_ruleRuleReference= ruleRuleReference EOF ;
+    public final EObject entryRuleRuleReference() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRuleReference = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1527:2: (iv_ruleRuleReference= ruleRuleReference EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1528:2: iv_ruleRuleReference= ruleRuleReference EOF
+            {
+             newCompositeNode(grammarAccess.getRuleReferenceRule()); 
+            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference3177);
+            iv_ruleRuleReference=ruleRuleReference();
+
+            state._fsp--;
+
+             current =iv_ruleRuleReference; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference3187); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRuleReference"
+
+
+    // $ANTLR start "ruleRuleReference"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1535:1: ruleRuleReference returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
+    public final EObject ruleRuleReference() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1538:28: ( ( (otherlv_0= RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1539:1: ( (otherlv_0= RULE_ID ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1539:1: ( (otherlv_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1540:1: (otherlv_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1540:1: (otherlv_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1541:3: otherlv_0= RULE_ID
+            {
+
+            			if (current==null) {
+            	            current = createModelElement(grammarAccess.getRuleReferenceRule());
+            	        }
+                    
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleReference3231); 
+
+            		newLeafNode(otherlv_0, grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
+            	
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRuleReference"
+
+
+    // $ANTLR start "entryRuleStringRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1560:1: entryRuleStringRule returns [EObject current=null] : iv_ruleStringRule= ruleStringRule EOF ;
+    public final EObject entryRuleStringRule() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleStringRule = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1561:2: (iv_ruleStringRule= ruleStringRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1562:2: iv_ruleStringRule= ruleStringRule EOF
+            {
+             newCompositeNode(grammarAccess.getStringRuleRule()); 
+            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule3266);
+            iv_ruleStringRule=ruleStringRule();
+
+            state._fsp--;
+
+             current =iv_ruleStringRule; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule3276); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleStringRule"
+
+
+    // $ANTLR start "ruleStringRule"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1569:1: ruleStringRule returns [EObject current=null] : ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) ;
+    public final EObject ruleStringRule() throws RecognitionException {
+        EObject current = null;
+
+        Token lv_literal_0_0=null;
+        Token lv_colon_1_0=null;
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1572:28: ( ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1573:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1573:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
+            int alt35=2;
+            int LA35_0 = input.LA(1);
+
+            if ( (LA35_0==RULE_STRING) ) {
+                alt35=1;
+            }
+            else if ( (LA35_0==RULE_COLON) ) {
+                alt35=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("", 35, 0, input);
+
+                throw nvae;
+            }
+            switch (alt35) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1573:2: ( (lv_literal_0_0= RULE_STRING ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1573:2: ( (lv_literal_0_0= RULE_STRING ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1574:1: (lv_literal_0_0= RULE_STRING )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1574:1: (lv_literal_0_0= RULE_STRING )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1575:3: lv_literal_0_0= RULE_STRING
+                    {
+                    lv_literal_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleStringRule3318); 
+
+                    			newLeafNode(lv_literal_0_0, grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getStringRuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"literal",
+                            		lv_literal_0_0, 
+                            		"STRING");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1592:6: ( (lv_colon_1_0= RULE_COLON ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1592:6: ( (lv_colon_1_0= RULE_COLON ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1593:1: (lv_colon_1_0= RULE_COLON )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1593:1: (lv_colon_1_0= RULE_COLON )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1594:3: lv_colon_1_0= RULE_COLON
+                    {
+                    lv_colon_1_0=(Token)match(input,RULE_COLON,FOLLOW_RULE_COLON_in_ruleStringRule3346); 
+
+                    			newLeafNode(lv_colon_1_0, grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+                    		
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getStringRuleRule());
+                    	        }
+                           		setWithLastConsumed(
+                           			current, 
+                           			"colon",
+                            		lv_colon_1_0, 
+                            		"COLON");
+                    	    
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleStringRule"
+
+
+    // $ANTLR start "entryRuleGroupedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1618:1: entryRuleGroupedSequence returns [EObject current=null] : iv_ruleGroupedSequence= ruleGroupedSequence EOF ;
+    public final EObject entryRuleGroupedSequence() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleGroupedSequence = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1619:2: (iv_ruleGroupedSequence= ruleGroupedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1620:2: iv_ruleGroupedSequence= ruleGroupedSequence EOF
+            {
+             newCompositeNode(grammarAccess.getGroupedSequenceRule()); 
+            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3387);
+            iv_ruleGroupedSequence=ruleGroupedSequence();
+
+            state._fsp--;
+
+             current =iv_ruleGroupedSequence; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence3397); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleGroupedSequence"
+
+
+    // $ANTLR start "ruleGroupedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1627:1: ruleGroupedSequence returns [EObject current=null] : (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) ;
+    public final EObject ruleGroupedSequence() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        EObject lv_definitionList_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1630:28: ( (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1631:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1631:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1631:3: otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')'
+            {
+            otherlv_0=(Token)match(input,26,FOLLOW_26_in_ruleGroupedSequence3434); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1635:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1636:1: (lv_definitionList_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1636:1: (lv_definitionList_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1637:3: lv_definitionList_1_0= ruleDefinitionList
+            {
+             
+            	        newCompositeNode(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3455);
+            lv_definitionList_1_0=ruleDefinitionList();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getGroupedSequenceRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"definitionList",
+                    		lv_definitionList_1_0, 
+                    		"DefinitionList");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,27,FOLLOW_27_in_ruleGroupedSequence3467); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleGroupedSequence"
+
+
+    // $ANTLR start "entryRuleOptionalSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1665:1: entryRuleOptionalSequence returns [EObject current=null] : iv_ruleOptionalSequence= ruleOptionalSequence EOF ;
+    public final EObject entryRuleOptionalSequence() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleOptionalSequence = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1666:2: (iv_ruleOptionalSequence= ruleOptionalSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1667:2: iv_ruleOptionalSequence= ruleOptionalSequence EOF
+            {
+             newCompositeNode(grammarAccess.getOptionalSequenceRule()); 
+            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3503);
+            iv_ruleOptionalSequence=ruleOptionalSequence();
+
+            state._fsp--;
+
+             current =iv_ruleOptionalSequence; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence3513); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleOptionalSequence"
+
+
+    // $ANTLR start "ruleOptionalSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1674:1: ruleOptionalSequence returns [EObject current=null] : (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) ;
+    public final EObject ruleOptionalSequence() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        EObject lv_definitionList_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1677:28: ( (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1678:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1678:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1678:3: otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']'
+            {
+            otherlv_0=(Token)match(input,32,FOLLOW_32_in_ruleOptionalSequence3550); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1682:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1683:1: (lv_definitionList_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1683:1: (lv_definitionList_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1684:3: lv_definitionList_1_0= ruleDefinitionList
+            {
+             
+            	        newCompositeNode(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3571);
+            lv_definitionList_1_0=ruleDefinitionList();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getOptionalSequenceRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"definitionList",
+                    		lv_definitionList_1_0, 
+                    		"DefinitionList");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleOptionalSequence3583); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2());
+                
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleOptionalSequence"
+
+
+    // $ANTLR start "entryRuleRepeatedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1712:1: entryRuleRepeatedSequence returns [EObject current=null] : iv_ruleRepeatedSequence= ruleRepeatedSequence EOF ;
+    public final EObject entryRuleRepeatedSequence() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_ruleRepeatedSequence = null;
+
+
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1713:2: (iv_ruleRepeatedSequence= ruleRepeatedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1714:2: iv_ruleRepeatedSequence= ruleRepeatedSequence EOF
+            {
+             newCompositeNode(grammarAccess.getRepeatedSequenceRule()); 
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3619);
+            iv_ruleRepeatedSequence=ruleRepeatedSequence();
+
+            state._fsp--;
+
+             current =iv_ruleRepeatedSequence; 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence3629); 
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleRepeatedSequence"
+
+
+    // $ANTLR start "ruleRepeatedSequence"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1721:1: ruleRepeatedSequence returns [EObject current=null] : (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( (lv_morethanonce_3_0= '+' ) )? ) ;
+    public final EObject ruleRepeatedSequence() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_0=null;
+        Token otherlv_2=null;
+        Token lv_morethanonce_3_0=null;
+        EObject lv_definitions_1_0 = null;
+
+
+         enterRule(); 
+            
+        try {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1724:28: ( (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( (lv_morethanonce_3_0= '+' ) )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1725:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( (lv_morethanonce_3_0= '+' ) )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1725:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( (lv_morethanonce_3_0= '+' ) )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1725:3: otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( (lv_morethanonce_3_0= '+' ) )?
+            {
+            otherlv_0=(Token)match(input,33,FOLLOW_33_in_ruleRepeatedSequence3666); 
+
+                	newLeafNode(otherlv_0, grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1729:1: ( (lv_definitions_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1730:1: (lv_definitions_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1730:1: (lv_definitions_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1731:3: lv_definitions_1_0= ruleDefinitionList
+            {
+             
+            	        newCompositeNode(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+            	    
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3687);
+            lv_definitions_1_0=ruleDefinitionList();
+
+            state._fsp--;
+
+
+            	        if (current==null) {
+            	            current = createModelElementForParent(grammarAccess.getRepeatedSequenceRule());
+            	        }
+                   		add(
+                   			current, 
+                   			"definitions",
+                    		lv_definitions_1_0, 
+                    		"DefinitionList");
+            	        afterParserOrEnumRuleCall();
+            	    
+
+            }
+
+
+            }
+
+            otherlv_2=(Token)match(input,30,FOLLOW_30_in_ruleRepeatedSequence3699); 
+
+                	newLeafNode(otherlv_2, grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2());
+                
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1751:1: ( (lv_morethanonce_3_0= '+' ) )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
+
+            if ( (LA36_0==35) ) {
+                alt36=1;
+            }
+            switch (alt36) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1752:1: (lv_morethanonce_3_0= '+' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1752:1: (lv_morethanonce_3_0= '+' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1753:3: lv_morethanonce_3_0= '+'
+                    {
+                    lv_morethanonce_3_0=(Token)match(input,35,FOLLOW_35_in_ruleRepeatedSequence3717); 
+
+                            newLeafNode(lv_morethanonce_3_0, grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0());
+                        
+
+                    	        if (current==null) {
+                    	            current = createModelElement(grammarAccess.getRepeatedSequenceRule());
+                    	        }
+                           		setWithLastConsumed(current, "morethanonce", true, "+");
+                    	    
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+
+            }
+
+             leaveRule(); 
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "ruleRepeatedSequence"
+
+    // Delegated rules
+
+
+    protected DFA22 dfa22 = new DFA22(this);
+    static final String DFA22_eotS =
+        "\17\uffff";
+    static final String DFA22_eofS =
+        "\1\1\1\uffff\1\3\12\uffff\1\3\1\uffff";
+    static final String DFA22_minS =
+        "\1\4\1\uffff\1\4\12\uffff\2\4";
+    static final String DFA22_maxS =
+        "\1\43\1\uffff\1\43\12\uffff\1\43\1\33";
+    static final String DFA22_acceptS =
+        "\1\uffff\1\13\1\uffff\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12"+
+        "\2\uffff";
+    static final String DFA22_specialS =
+        "\17\uffff}>";
+    static final String[] DFA22_transitionS = {
+            "\1\2\1\1\1\3\1\1\1\uffff\1\3\5\uffff\1\1\12\uffff\1\10\1\4"+
+            "\1\uffff\1\5\1\6\1\7\1\11\1\12\1\13\1\14",
+            "",
+            "\4\3\1\uffff\1\3\5\uffff\1\3\11\uffff\1\1\1\15\1\3\1\uffff"+
+            "\7\3",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\3\3\1\16\1\uffff\1\3\5\uffff\1\3\12\uffff\2\3\1\uffff\7\3",
+            "\1\3\23\uffff\1\3\2\uffff\1\1"
+    };
+
+    static final short[] DFA22_eot = DFA.unpackEncodedString(DFA22_eotS);
+    static final short[] DFA22_eof = DFA.unpackEncodedString(DFA22_eofS);
+    static final char[] DFA22_min = DFA.unpackEncodedStringToUnsignedChars(DFA22_minS);
+    static final char[] DFA22_max = DFA.unpackEncodedStringToUnsignedChars(DFA22_maxS);
+    static final short[] DFA22_accept = DFA.unpackEncodedString(DFA22_acceptS);
+    static final short[] DFA22_special = DFA.unpackEncodedString(DFA22_specialS);
+    static final short[][] DFA22_transition;
+
+    static {
+        int numStates = DFA22_transitionS.length;
+        DFA22_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA22_transition[i] = DFA.unpackEncodedString(DFA22_transitionS[i]);
+        }
+    }
+
+    class DFA22 extends DFA {
+
+        public DFA22(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 22;
+            this.eot = DFA22_eot;
+            this.eof = DFA22_eof;
+            this.min = DFA22_min;
+            this.max = DFA22_max;
+            this.accept = DFA22_accept;
+            this.special = DFA22_special;
+            this.transition = DFA22_transition;
+        }
+        public String getDescription() {
+            return "()* loopback of 880:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*";
+        }
+    }
+ 
+
+    public static final BitSet FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf75 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEtsiBnf85 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_ruleEtsiBnf123 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleEtsiBnf140 = new BitSet(new long[]{0x000000000000C000L});
+    public static final BitSet FOLLOW_14_in_ruleEtsiBnf164 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleEtsiBnf190 = new BitSet(new long[]{0x00000000000400B0L});
+    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf211 = new BitSet(new long[]{0x00000000000400B0L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_ruleEtsiBnf233 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_16_in_ruleEtsiBnf261 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleEtsiBnf286 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf307 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_ruleEtsiBnf329 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_17_in_ruleEtsiBnf356 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleEtsiBnf381 = new BitSet(new long[]{0x000000D000040022L});
+    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf402 = new BitSet(new long[]{0x000000D000000022L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_ruleEtsiBnf424 = new BitSet(new long[]{0x000000D000000022L});
+    public static final BitSet FOLLOW_ruleImportSection_in_entryRuleImportSection462 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImportSection472 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_ruleImportSection517 = new BitSet(new long[]{0x0000000000040002L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry553 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBnfEntry563 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleBnfEntry609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_ruleBnfEntry636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry672 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry682 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_ruleDeltaEntry728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleDeltaEntry755 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_ruleDeltaEntry782 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry818 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry828 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleMergeEntry874 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_ruleMergeEntry901 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading937 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading947 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading998 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport1039 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImport1049 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_ruleImport1086 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleImport1103 = new BitSet(new long[]{0x0000000000888000L});
+    public static final BitSet FOLLOW_19_in_ruleImport1121 = new BitSet(new long[]{0x0000000000700000L});
+    public static final BitSet FOLLOW_20_in_ruleImport1140 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_21_in_ruleImport1177 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_22_in_ruleImport1214 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_23_in_ruleImport1243 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleImport1260 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleImport1279 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule1315 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRule1325 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleRule1368 = new BitSet(new long[]{0x0000000001000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1390 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_ruleRule1408 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1427 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_ruleRule1444 = new BitSet(new long[]{0x0000000304008252L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRule1465 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_15_in_ruleRule1479 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule1517 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule1527 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1570 = new BitSet(new long[]{0x0000000001000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1592 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_ruleExtRule1610 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1629 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleExtRule1647 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1664 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleExtRule1681 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_28_in_ruleExtRule1694 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_ruleAtom_in_ruleExtRule1716 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_27_in_ruleExtRule1734 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_29_in_ruleExtRule1752 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_30_in_ruleExtRule1770 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_31_in_ruleExtRule1788 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_26_in_ruleExtRule1806 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_32_in_ruleExtRule1824 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_33_in_ruleExtRule1842 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_34_in_ruleExtRule1860 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_35_in_ruleExtRule1878 = new BitSet(new long[]{0x0000000FEC008252L});
+    public static final BitSet FOLLOW_15_in_ruleExtRule1893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule1931 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule1941 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_ruleMergeRule1988 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_ruleMergeRule2015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_ruleMergeRule2042 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2077 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator2087 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_ruleGlobalCombinator2125 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleGlobalCombinator2137 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2155 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_15_in_ruleGlobalCombinator2173 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2211 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator2221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_ruleRuleCombinator2259 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleRuleCombinator2271 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleCombinator2288 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2311 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_26_in_ruleRuleCombinator2329 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleRuleCombinator2346 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleRuleCombinator2363 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_15_in_ruleRuleCombinator2378 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2416 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator2426 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_ruleHookCombinator2463 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleHookCombinator2475 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleHookCombinator2492 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleHookCombinator2509 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleHookCombinator2526 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleHookCombinator2543 = new BitSet(new long[]{0x0000000004000100L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleHookCombinator2560 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleHookCombinator2579 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleHookCombinator2596 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleHookCombinator2613 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_15_in_ruleHookCombinator2628 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2666 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList2676 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2722 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_31_in_ruleDefinitionList2735 = new BitSet(new long[]{0x0000000304000250L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2756 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2794 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition2804 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_ruleSingleDefinition2849 = new BitSet(new long[]{0x0000000304000252L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm2885 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm2895 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_ruleTerm2941 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_ruleTerm2968 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_ruleTerm2995 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_ruleTerm3022 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom3058 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom3068 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_ruleAtom3114 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_ruleAtom3141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference3177 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference3187 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleReference3231 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule3266 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule3276 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleStringRule3318 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_ruleStringRule3346 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3387 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence3397 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_ruleGroupedSequence3434 = new BitSet(new long[]{0x0000000304000250L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3455 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleGroupedSequence3467 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3503 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence3513 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_ruleOptionalSequence3550 = new BitSet(new long[]{0x0000000304000250L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3571 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_29_in_ruleOptionalSequence3583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3619 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence3629 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_ruleRepeatedSequence3666 = new BitSet(new long[]{0x0000000304000250L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3687 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_ruleRepeatedSequence3699 = new BitSet(new long[]{0x0000000800000002L});
+    public static final BitSet FOLLOW_35_in_ruleRepeatedSequence3717 = new BitSet(new long[]{0x0000000000000002L});
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSemanticSequencer.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSemanticSequencer.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSemanticSequencer.java	(revision 61)
@@ -0,0 +1,393 @@
+package de.ugoe.cs.swe.bnftools.serializer;
+
+import com.google.inject.Inject;
+import com.google.inject.Provider;
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.DeltaEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.ImportSection;
+import de.ugoe.cs.swe.bnftools.ebnf.MergeEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.serializer.acceptor.ISemanticSequenceAcceptor;
+import org.eclipse.xtext.serializer.acceptor.SequenceFeeder;
+import org.eclipse.xtext.serializer.diagnostic.ISemanticSequencerDiagnosticProvider;
+import org.eclipse.xtext.serializer.diagnostic.ISerializationDiagnostic.Acceptor;
+import org.eclipse.xtext.serializer.sequencer.AbstractDelegatingSemanticSequencer;
+import org.eclipse.xtext.serializer.sequencer.GenericSequencer;
+import org.eclipse.xtext.serializer.sequencer.ISemanticNodeProvider.INodesForEObjectProvider;
+import org.eclipse.xtext.serializer.sequencer.ISemanticSequencer;
+import org.eclipse.xtext.serializer.sequencer.ITransientValueService;
+import org.eclipse.xtext.serializer.sequencer.ITransientValueService.ValueTransient;
+
+@SuppressWarnings("all")
+public class EbnfSemanticSequencer extends AbstractDelegatingSemanticSequencer {
+
+	@Inject
+	private EbnfGrammarAccess grammarAccess;
+	
+	public void createSequence(EObject context, EObject semanticObject) {
+		if(semanticObject.eClass().getEPackage() == EbnfPackage.eINSTANCE) switch(semanticObject.eClass().getClassifierID()) {
+			case EbnfPackage.ATOM:
+				if(context == grammarAccess.getAtomRule()) {
+					sequence_Atom(context, (Atom) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.BNF_ENTRY:
+				if(context == grammarAccess.getBnfEntryRule()) {
+					sequence_BnfEntry(context, (BnfEntry) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.DEFINITION_LIST:
+				if(context == grammarAccess.getDefinitionListRule()) {
+					sequence_DefinitionList(context, (DefinitionList) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.DELTA_ENTRY:
+				if(context == grammarAccess.getDeltaEntryRule()) {
+					sequence_DeltaEntry(context, (DeltaEntry) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.ETSI_BNF:
+				if(context == grammarAccess.getEtsiBnfRule()) {
+					sequence_EtsiBnf(context, (EtsiBnf) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.EXT_RULE:
+				if(context == grammarAccess.getExtRuleRule()) {
+					sequence_ExtRule(context, (ExtRule) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.GLOBAL_COMBINATOR:
+				if(context == grammarAccess.getGlobalCombinatorRule() ||
+				   context == grammarAccess.getMergeRuleRule()) {
+					sequence_GlobalCombinator(context, (GlobalCombinator) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.GROUPED_SEQUENCE:
+				if(context == grammarAccess.getGroupedSequenceRule()) {
+					sequence_GroupedSequence(context, (GroupedSequence) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.HOOK_COMBINATOR:
+				if(context == grammarAccess.getHookCombinatorRule() ||
+				   context == grammarAccess.getMergeRuleRule()) {
+					sequence_HookCombinator(context, (HookCombinator) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.IMPORT:
+				if(context == grammarAccess.getImportRule()) {
+					sequence_Import(context, (Import) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.IMPORT_SECTION:
+				if(context == grammarAccess.getImportSectionRule()) {
+					sequence_ImportSection(context, (ImportSection) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.MERGE_ENTRY:
+				if(context == grammarAccess.getMergeEntryRule()) {
+					sequence_MergeEntry(context, (MergeEntry) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.OPTIONAL_SEQUENCE:
+				if(context == grammarAccess.getOptionalSequenceRule()) {
+					sequence_OptionalSequence(context, (OptionalSequence) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.REPEATED_SEQUENCE:
+				if(context == grammarAccess.getRepeatedSequenceRule()) {
+					sequence_RepeatedSequence(context, (RepeatedSequence) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.RULE:
+				if(context == grammarAccess.getRuleRule()) {
+					sequence_Rule(context, (Rule) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.RULE_COMBINATOR:
+				if(context == grammarAccess.getMergeRuleRule() ||
+				   context == grammarAccess.getRuleCombinatorRule()) {
+					sequence_RuleCombinator(context, (RuleCombinator) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.RULE_REFERENCE:
+				if(context == grammarAccess.getRuleReferenceRule()) {
+					sequence_RuleReference(context, (RuleReference) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.SECTION_HEADING:
+				if(context == grammarAccess.getSectionHeadingRule()) {
+					sequence_SectionHeading(context, (SectionHeading) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.SINGLE_DEFINITION:
+				if(context == grammarAccess.getSingleDefinitionRule()) {
+					sequence_SingleDefinition(context, (SingleDefinition) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.STRING_RULE:
+				if(context == grammarAccess.getStringRuleRule()) {
+					sequence_StringRule(context, (StringRule) semanticObject); 
+					return; 
+				}
+				else break;
+			case EbnfPackage.TERM:
+				if(context == grammarAccess.getTermRule()) {
+					sequence_Term(context, (Term) semanticObject); 
+					return; 
+				}
+				else break;
+			}
+		if (errorAcceptor != null) errorAcceptor.accept(diagnosticProvider.createInvalidContextOrTypeDiagnostic(semanticObject, context));
+	}
+	
+	/**
+	 * Constraint:
+	 *     (atomStringRule=StringRule | atomRuleReference=RuleReference)
+	 */
+	protected void sequence_Atom(EObject context, Atom semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (sectionheader=SectionHeading | rule=Rule)
+	 */
+	protected void sequence_BnfEntry(EObject context, BnfEntry semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (singleDefinition+=SingleDefinition singleDefinition+=SingleDefinition*)
+	 */
+	protected void sequence_DefinitionList(EObject context, DefinitionList semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (rule=Rule | sectionheader=SectionHeading | extRule=ExtRule)
+	 */
+	protected void sequence_DeltaEntry(EObject context, DeltaEntry semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (
+	 *         (name=ID type='/bnf'? importSection=ImportSection? bnfEntry+=BnfEntry+) | 
+	 *         (type='/delta' importSection=ImportSection? deltaEntry+=DeltaEntry*) | 
+	 *         (type='/merge' importSection=ImportSection? mergeEntry+=MergeEntry*)
+	 *     )
+	 */
+	protected void sequence_EtsiBnf(EObject context, EtsiBnf semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     ((rulenumber=INT rulevariant=ID?)? name=ID ruleext=INT elements+=Atom*)
+	 */
+	protected void sequence_ExtRule(EObject context, ExtRule semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     logic=LOGIC
+	 */
+	protected void sequence_GlobalCombinator(EObject context, GlobalCombinator semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, EbnfPackage.Literals.MERGE_RULE__LOGIC) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, EbnfPackage.Literals.MERGE_RULE__LOGIC));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0(), semanticObject.getLogic());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     definitionList+=DefinitionList
+	 */
+	protected void sequence_GroupedSequence(EObject context, GroupedSequence semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (name=ID ruleext=INT logic=LOGIC? LABEL+=STRING+)
+	 */
+	protected void sequence_HookCombinator(EObject context, HookCombinator semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     imports+=Import+
+	 */
+	protected void sequence_ImportSection(EObject context, ImportSection semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (importURI=STRING (grammarType='core' | grammarType='package' | grammarType='update')? label=ID?)
+	 */
+	protected void sequence_Import(EObject context, Import semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (sectionheader=SectionHeading | mergeRule=MergeRule)
+	 */
+	protected void sequence_MergeEntry(EObject context, MergeEntry semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     definitionList+=DefinitionList
+	 */
+	protected void sequence_OptionalSequence(EObject context, OptionalSequence semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (definitions+=DefinitionList morethanonce?='+'?)
+	 */
+	protected void sequence_RepeatedSequence(EObject context, RepeatedSequence semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (name=ID logic=LOGIC LABEL+=STRING*)
+	 */
+	protected void sequence_RuleCombinator(EObject context, RuleCombinator semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     ruleref=[Rule|ID]
+	 */
+	protected void sequence_RuleReference(EObject context, RuleReference semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, EbnfPackage.Literals.RULE_REFERENCE__RULEREF) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, EbnfPackage.Literals.RULE_REFERENCE__RULEREF));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1(), semanticObject.getRuleref());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     ((rulenumber=INT rulevariant=ID?)? name=ID definitionList=DefinitionList?)
+	 */
+	protected void sequence_Rule(EObject context, Rule semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     sectionHeader=SECTIONHEADER
+	 */
+	protected void sequence_SectionHeading(EObject context, SectionHeading semanticObject) {
+		if(errorAcceptor != null) {
+			if(transientValues.isValueTransient(semanticObject, EbnfPackage.Literals.SECTION_HEADING__SECTION_HEADER) == ValueTransient.YES)
+				errorAcceptor.accept(diagnosticProvider.createFeatureValueMissing(semanticObject, EbnfPackage.Literals.SECTION_HEADING__SECTION_HEADER));
+		}
+		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
+		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
+		feeder.accept(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0(), semanticObject.getSectionHeader());
+		feeder.finish();
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     terms+=Term+
+	 */
+	protected void sequence_SingleDefinition(EObject context, SingleDefinition semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (literal=STRING | colon=COLON)
+	 */
+	protected void sequence_StringRule(EObject context, StringRule semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+	
+	
+	/**
+	 * Constraint:
+	 *     (termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence | termRepeatedSequence=RepeatedSequence)
+	 */
+	protected void sequence_Term(EObject context, Term semanticObject) {
+		genericSequencer.createSequence(context, semanticObject);
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSyntacticSequencer.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSyntacticSequencer.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/serializer/EbnfSyntacticSequencer.java	(revision 61)
@@ -0,0 +1,125 @@
+package de.ugoe.cs.swe.bnftools.serializer;
+
+import com.google.inject.Inject;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.RuleCall;
+import org.eclipse.xtext.nodemodel.INode;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.AbstractElementAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.AlternativeAlias;
+import org.eclipse.xtext.serializer.analysis.GrammarAlias.TokenAlias;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynNavigable;
+import org.eclipse.xtext.serializer.analysis.ISyntacticSequencerPDAProvider.ISynTransition;
+import org.eclipse.xtext.serializer.sequencer.AbstractSyntacticSequencer;
+
+@SuppressWarnings("all")
+public class EbnfSyntacticSequencer extends AbstractSyntacticSequencer {
+
+	protected EbnfGrammarAccess grammarAccess;
+	protected AbstractElementAlias match_ExtRule_SemicolonKeyword_5_q;
+	protected AbstractElementAlias match_ExtRule___AsteriskKeyword_4_8_or_LeftCurlyBracketKeyword_4_7_or_LeftParenthesisKeyword_4_5_or_LeftSquareBracketKeyword_4_6_or_PlusSignKeyword_4_9_or_RightCurlyBracketKeyword_4_3_or_RightParenthesisKeyword_4_1_or_RightSquareBracketKeyword_4_2_or_VerticalLineKeyword_4_4__a;
+	protected AbstractElementAlias match_GlobalCombinator_SemicolonKeyword_2_q;
+	protected AbstractElementAlias match_HookCombinator_SemicolonKeyword_8_q;
+	protected AbstractElementAlias match_RuleCombinator_SemicolonKeyword_3_q;
+	protected AbstractElementAlias match_Rule_SemicolonKeyword_4_q;
+	
+	@Inject
+	protected void init(IGrammarAccess access) {
+		grammarAccess = (EbnfGrammarAccess) access;
+		match_ExtRule_SemicolonKeyword_5_q = new TokenAlias(false, true, grammarAccess.getExtRuleAccess().getSemicolonKeyword_5());
+		match_ExtRule___AsteriskKeyword_4_8_or_LeftCurlyBracketKeyword_4_7_or_LeftParenthesisKeyword_4_5_or_LeftSquareBracketKeyword_4_6_or_PlusSignKeyword_4_9_or_RightCurlyBracketKeyword_4_3_or_RightParenthesisKeyword_4_1_or_RightSquareBracketKeyword_4_2_or_VerticalLineKeyword_4_4__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()), new TokenAlias(false, false, grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()));
+		match_GlobalCombinator_SemicolonKeyword_2_q = new TokenAlias(false, true, grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2());
+		match_HookCombinator_SemicolonKeyword_8_q = new TokenAlias(false, true, grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8());
+		match_RuleCombinator_SemicolonKeyword_3_q = new TokenAlias(false, true, grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3());
+		match_Rule_SemicolonKeyword_4_q = new TokenAlias(false, true, grammarAccess.getRuleAccess().getSemicolonKeyword_4());
+	}
+	
+	@Override
+	protected String getUnassignedRuleCallToken(EObject semanticObject, RuleCall ruleCall, INode node) {
+		return "";
+	}
+	
+	
+	@Override
+	protected void emitUnassignedTokens(EObject semanticObject, ISynTransition transition, INode fromNode, INode toNode) {
+		if (transition.getAmbiguousSyntaxes().isEmpty()) return;
+		List<INode> transitionNodes = collectNodes(fromNode, toNode);
+		for (AbstractElementAlias syntax : transition.getAmbiguousSyntaxes()) {
+			List<INode> syntaxNodes = getNodesFor(transitionNodes, syntax);
+			if(match_ExtRule_SemicolonKeyword_5_q.equals(syntax))
+				emit_ExtRule_SemicolonKeyword_5_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_ExtRule___AsteriskKeyword_4_8_or_LeftCurlyBracketKeyword_4_7_or_LeftParenthesisKeyword_4_5_or_LeftSquareBracketKeyword_4_6_or_PlusSignKeyword_4_9_or_RightCurlyBracketKeyword_4_3_or_RightParenthesisKeyword_4_1_or_RightSquareBracketKeyword_4_2_or_VerticalLineKeyword_4_4__a.equals(syntax))
+				emit_ExtRule___AsteriskKeyword_4_8_or_LeftCurlyBracketKeyword_4_7_or_LeftParenthesisKeyword_4_5_or_LeftSquareBracketKeyword_4_6_or_PlusSignKeyword_4_9_or_RightCurlyBracketKeyword_4_3_or_RightParenthesisKeyword_4_1_or_RightSquareBracketKeyword_4_2_or_VerticalLineKeyword_4_4__a(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_GlobalCombinator_SemicolonKeyword_2_q.equals(syntax))
+				emit_GlobalCombinator_SemicolonKeyword_2_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_HookCombinator_SemicolonKeyword_8_q.equals(syntax))
+				emit_HookCombinator_SemicolonKeyword_8_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_RuleCombinator_SemicolonKeyword_3_q.equals(syntax))
+				emit_RuleCombinator_SemicolonKeyword_3_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if(match_Rule_SemicolonKeyword_4_q.equals(syntax))
+				emit_Rule_SemicolonKeyword_4_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else acceptNodes(getLastNavigableState(), syntaxNodes);
+		}
+	}
+
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_ExtRule_SemicolonKeyword_5_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     (
+	     '{' | 
+	     '}' | 
+	     '|' | 
+	     '+' | 
+	     '*' | 
+	     '[' | 
+	     ']' | 
+	     '(' | 
+	     ')'
+	 )*
+	 */
+	protected void emit_ExtRule___AsteriskKeyword_4_8_or_LeftCurlyBracketKeyword_4_7_or_LeftParenthesisKeyword_4_5_or_LeftSquareBracketKeyword_4_6_or_PlusSignKeyword_4_9_or_RightCurlyBracketKeyword_4_3_or_RightParenthesisKeyword_4_1_or_RightSquareBracketKeyword_4_2_or_VerticalLineKeyword_4_4__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_GlobalCombinator_SemicolonKeyword_2_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_HookCombinator_SemicolonKeyword_8_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_RuleCombinator_SemicolonKeyword_3_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Syntax:
+	 *     ';'?
+	 */
+	protected void emit_Rule_SemicolonKeyword_4_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/services/EbnfGrammarAccess.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/services/EbnfGrammarAccess.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/services/EbnfGrammarAccess.java	(revision 61)
@@ -0,0 +1,1361 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.services;
+
+import com.google.inject.Singleton;
+import com.google.inject.Inject;
+
+import java.util.List;
+
+import org.eclipse.xtext.*;
+import org.eclipse.xtext.service.GrammarProvider;
+import org.eclipse.xtext.service.AbstractElementFinder.*;
+
+
+@Singleton
+public class EbnfGrammarAccess extends AbstractGrammarElementFinder {
+	
+	
+	public class EtsiBnfElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "EtsiBnf");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cAlternatives.eContents().get(0);
+		private final Keyword cGrammarKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Assignment cNameAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_0_1_0 = (RuleCall)cNameAssignment_0_1.eContents().get(0);
+		private final Group cGroup_0_2 = (Group)cGroup_0.eContents().get(2);
+		private final Assignment cTypeAssignment_0_2_0 = (Assignment)cGroup_0_2.eContents().get(0);
+		private final Keyword cTypeBnfKeyword_0_2_0_0 = (Keyword)cTypeAssignment_0_2_0.eContents().get(0);
+		private final Keyword cSemicolonKeyword_0_2_1 = (Keyword)cGroup_0_2.eContents().get(1);
+		private final Assignment cImportSectionAssignment_0_2_2 = (Assignment)cGroup_0_2.eContents().get(2);
+		private final RuleCall cImportSectionImportSectionParserRuleCall_0_2_2_0 = (RuleCall)cImportSectionAssignment_0_2_2.eContents().get(0);
+		private final Assignment cBnfEntryAssignment_0_2_3 = (Assignment)cGroup_0_2.eContents().get(3);
+		private final RuleCall cBnfEntryBnfEntryParserRuleCall_0_2_3_0 = (RuleCall)cBnfEntryAssignment_0_2_3.eContents().get(0);
+		private final Group cGroup_1 = (Group)cAlternatives.eContents().get(1);
+		private final Assignment cTypeAssignment_1_0 = (Assignment)cGroup_1.eContents().get(0);
+		private final Keyword cTypeDeltaKeyword_1_0_0 = (Keyword)cTypeAssignment_1_0.eContents().get(0);
+		private final Keyword cSemicolonKeyword_1_1 = (Keyword)cGroup_1.eContents().get(1);
+		private final Assignment cImportSectionAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
+		private final RuleCall cImportSectionImportSectionParserRuleCall_1_2_0 = (RuleCall)cImportSectionAssignment_1_2.eContents().get(0);
+		private final Assignment cDeltaEntryAssignment_1_3 = (Assignment)cGroup_1.eContents().get(3);
+		private final RuleCall cDeltaEntryDeltaEntryParserRuleCall_1_3_0 = (RuleCall)cDeltaEntryAssignment_1_3.eContents().get(0);
+		private final Group cGroup_2 = (Group)cAlternatives.eContents().get(2);
+		private final Assignment cTypeAssignment_2_0 = (Assignment)cGroup_2.eContents().get(0);
+		private final Keyword cTypeMergeKeyword_2_0_0 = (Keyword)cTypeAssignment_2_0.eContents().get(0);
+		private final Keyword cSemicolonKeyword_2_1 = (Keyword)cGroup_2.eContents().get(1);
+		private final Assignment cImportSectionAssignment_2_2 = (Assignment)cGroup_2.eContents().get(2);
+		private final RuleCall cImportSectionImportSectionParserRuleCall_2_2_0 = (RuleCall)cImportSectionAssignment_2_2.eContents().get(0);
+		private final Assignment cMergeEntryAssignment_2_3 = (Assignment)cGroup_2.eContents().get(3);
+		private final RuleCall cMergeEntryMergeEntryParserRuleCall_2_3_0 = (RuleCall)cMergeEntryAssignment_2_3.eContents().get(0);
+		
+		//// -----------------------------------------------------------------------------------------------
+		//// Parser Rules
+		//// -----------------------------------------------------------------------------------------------
+		//EtsiBnf:
+		//	"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
+		//	importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
+		//	mergeEntry+=MergeEntry*;
+		public ParserRule getRule() { return rule; }
+
+		//"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
+		//importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
+		//mergeEntry+=MergeEntry*
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+)
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"grammar"
+		public Keyword getGrammarKeyword_0_0() { return cGrammarKeyword_0_0; }
+
+		//name=ID
+		public Assignment getNameAssignment_0_1() { return cNameAssignment_0_1; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0_1_0() { return cNameIDTerminalRuleCall_0_1_0; }
+
+		//type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+
+		public Group getGroup_0_2() { return cGroup_0_2; }
+
+		//type="/bnf"?
+		public Assignment getTypeAssignment_0_2_0() { return cTypeAssignment_0_2_0; }
+
+		//"/bnf"
+		public Keyword getTypeBnfKeyword_0_2_0_0() { return cTypeBnfKeyword_0_2_0_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_0_2_1() { return cSemicolonKeyword_0_2_1; }
+
+		//importSection=ImportSection?
+		public Assignment getImportSectionAssignment_0_2_2() { return cImportSectionAssignment_0_2_2; }
+
+		//ImportSection
+		public RuleCall getImportSectionImportSectionParserRuleCall_0_2_2_0() { return cImportSectionImportSectionParserRuleCall_0_2_2_0; }
+
+		//bnfEntry+=BnfEntry+
+		public Assignment getBnfEntryAssignment_0_2_3() { return cBnfEntryAssignment_0_2_3; }
+
+		//BnfEntry
+		public RuleCall getBnfEntryBnfEntryParserRuleCall_0_2_3_0() { return cBnfEntryBnfEntryParserRuleCall_0_2_3_0; }
+
+		//type="/delta" ";" importSection=ImportSection? deltaEntry+=DeltaEntry*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//type="/delta"
+		public Assignment getTypeAssignment_1_0() { return cTypeAssignment_1_0; }
+
+		//"/delta"
+		public Keyword getTypeDeltaKeyword_1_0_0() { return cTypeDeltaKeyword_1_0_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_1_1() { return cSemicolonKeyword_1_1; }
+
+		//importSection=ImportSection?
+		public Assignment getImportSectionAssignment_1_2() { return cImportSectionAssignment_1_2; }
+
+		//ImportSection
+		public RuleCall getImportSectionImportSectionParserRuleCall_1_2_0() { return cImportSectionImportSectionParserRuleCall_1_2_0; }
+
+		//deltaEntry+=DeltaEntry*
+		public Assignment getDeltaEntryAssignment_1_3() { return cDeltaEntryAssignment_1_3; }
+
+		//DeltaEntry
+		public RuleCall getDeltaEntryDeltaEntryParserRuleCall_1_3_0() { return cDeltaEntryDeltaEntryParserRuleCall_1_3_0; }
+
+		//type="/merge" ";" importSection=ImportSection? mergeEntry+=MergeEntry*
+		public Group getGroup_2() { return cGroup_2; }
+
+		//type="/merge"
+		public Assignment getTypeAssignment_2_0() { return cTypeAssignment_2_0; }
+
+		//"/merge"
+		public Keyword getTypeMergeKeyword_2_0_0() { return cTypeMergeKeyword_2_0_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_2_1() { return cSemicolonKeyword_2_1; }
+
+		//importSection=ImportSection?
+		public Assignment getImportSectionAssignment_2_2() { return cImportSectionAssignment_2_2; }
+
+		//ImportSection
+		public RuleCall getImportSectionImportSectionParserRuleCall_2_2_0() { return cImportSectionImportSectionParserRuleCall_2_2_0; }
+
+		//mergeEntry+=MergeEntry*
+		public Assignment getMergeEntryAssignment_2_3() { return cMergeEntryAssignment_2_3; }
+
+		//MergeEntry
+		public RuleCall getMergeEntryMergeEntryParserRuleCall_2_3_0() { return cMergeEntryMergeEntryParserRuleCall_2_3_0; }
+	}
+
+	public class ImportSectionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ImportSection");
+		private final Assignment cImportsAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cImportsImportParserRuleCall_0 = (RuleCall)cImportsAssignment.eContents().get(0);
+		
+		//ImportSection:
+		//	imports+=Import+;
+		public ParserRule getRule() { return rule; }
+
+		//imports+=Import+
+		public Assignment getImportsAssignment() { return cImportsAssignment; }
+
+		//Import
+		public RuleCall getImportsImportParserRuleCall_0() { return cImportsImportParserRuleCall_0; }
+	}
+
+	public class BnfEntryElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "BnfEntry");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cSectionheaderAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_0_0 = (RuleCall)cSectionheaderAssignment_0.eContents().get(0);
+		private final Assignment cRuleAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cRuleRuleParserRuleCall_1_0 = (RuleCall)cRuleAssignment_1.eContents().get(0);
+		
+		//BnfEntry:
+		//	sectionheader=SectionHeading | rule=Rule;
+		public ParserRule getRule() { return rule; }
+
+		//sectionheader=SectionHeading | rule=Rule
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//sectionheader=SectionHeading
+		public Assignment getSectionheaderAssignment_0() { return cSectionheaderAssignment_0; }
+
+		//SectionHeading
+		public RuleCall getSectionheaderSectionHeadingParserRuleCall_0_0() { return cSectionheaderSectionHeadingParserRuleCall_0_0; }
+
+		//rule=Rule
+		public Assignment getRuleAssignment_1() { return cRuleAssignment_1; }
+
+		//Rule
+		public RuleCall getRuleRuleParserRuleCall_1_0() { return cRuleRuleParserRuleCall_1_0; }
+	}
+
+	public class DeltaEntryElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DeltaEntry");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cRuleAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cRuleRuleParserRuleCall_0_0 = (RuleCall)cRuleAssignment_0.eContents().get(0);
+		private final Assignment cSectionheaderAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_1_0 = (RuleCall)cSectionheaderAssignment_1.eContents().get(0);
+		private final Assignment cExtRuleAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
+		private final RuleCall cExtRuleExtRuleParserRuleCall_2_0 = (RuleCall)cExtRuleAssignment_2.eContents().get(0);
+		
+		//DeltaEntry:
+		//	rule=Rule | sectionheader=SectionHeading | extRule=ExtRule;
+		public ParserRule getRule() { return rule; }
+
+		//rule=Rule | sectionheader=SectionHeading | extRule=ExtRule
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//rule=Rule
+		public Assignment getRuleAssignment_0() { return cRuleAssignment_0; }
+
+		//Rule
+		public RuleCall getRuleRuleParserRuleCall_0_0() { return cRuleRuleParserRuleCall_0_0; }
+
+		//sectionheader=SectionHeading
+		public Assignment getSectionheaderAssignment_1() { return cSectionheaderAssignment_1; }
+
+		//SectionHeading
+		public RuleCall getSectionheaderSectionHeadingParserRuleCall_1_0() { return cSectionheaderSectionHeadingParserRuleCall_1_0; }
+
+		//extRule=ExtRule
+		public Assignment getExtRuleAssignment_2() { return cExtRuleAssignment_2; }
+
+		//ExtRule
+		public RuleCall getExtRuleExtRuleParserRuleCall_2_0() { return cExtRuleExtRuleParserRuleCall_2_0; }
+	}
+
+	public class MergeEntryElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MergeEntry");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cSectionheaderAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cSectionheaderSectionHeadingParserRuleCall_0_0 = (RuleCall)cSectionheaderAssignment_0.eContents().get(0);
+		private final Assignment cMergeRuleAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cMergeRuleMergeRuleParserRuleCall_1_0 = (RuleCall)cMergeRuleAssignment_1.eContents().get(0);
+		
+		//MergeEntry:
+		//	sectionheader=SectionHeading | mergeRule=MergeRule;
+		public ParserRule getRule() { return rule; }
+
+		//sectionheader=SectionHeading | mergeRule=MergeRule
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//sectionheader=SectionHeading
+		public Assignment getSectionheaderAssignment_0() { return cSectionheaderAssignment_0; }
+
+		//SectionHeading
+		public RuleCall getSectionheaderSectionHeadingParserRuleCall_0_0() { return cSectionheaderSectionHeadingParserRuleCall_0_0; }
+
+		//mergeRule=MergeRule
+		public Assignment getMergeRuleAssignment_1() { return cMergeRuleAssignment_1; }
+
+		//MergeRule
+		public RuleCall getMergeRuleMergeRuleParserRuleCall_1_0() { return cMergeRuleMergeRuleParserRuleCall_1_0; }
+	}
+
+	public class SectionHeadingElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SectionHeading");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cSectionHeadingAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cSectionHeaderAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cSectionHeaderSECTIONHEADERTerminalRuleCall_1_0 = (RuleCall)cSectionHeaderAssignment_1.eContents().get(0);
+		
+		//SectionHeading:
+		//	{SectionHeading} sectionHeader=SECTIONHEADER;
+		public ParserRule getRule() { return rule; }
+
+		//{SectionHeading} sectionHeader=SECTIONHEADER
+		public Group getGroup() { return cGroup; }
+
+		//{SectionHeading}
+		public Action getSectionHeadingAction_0() { return cSectionHeadingAction_0; }
+
+		//sectionHeader=SECTIONHEADER
+		public Assignment getSectionHeaderAssignment_1() { return cSectionHeaderAssignment_1; }
+
+		//SECTIONHEADER
+		public RuleCall getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0() { return cSectionHeaderSECTIONHEADERTerminalRuleCall_1_0; }
+	}
+
+	public class ImportElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Import");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cImportKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cImportURIAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cImportURISTRINGTerminalRuleCall_1_0 = (RuleCall)cImportURIAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cSolidusKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Alternatives cAlternatives_2_1 = (Alternatives)cGroup_2.eContents().get(1);
+		private final Assignment cGrammarTypeAssignment_2_1_0 = (Assignment)cAlternatives_2_1.eContents().get(0);
+		private final Keyword cGrammarTypeCoreKeyword_2_1_0_0 = (Keyword)cGrammarTypeAssignment_2_1_0.eContents().get(0);
+		private final Assignment cGrammarTypeAssignment_2_1_1 = (Assignment)cAlternatives_2_1.eContents().get(1);
+		private final Keyword cGrammarTypePackageKeyword_2_1_1_0 = (Keyword)cGrammarTypeAssignment_2_1_1.eContents().get(0);
+		private final Assignment cGrammarTypeAssignment_2_1_2 = (Assignment)cAlternatives_2_1.eContents().get(2);
+		private final Keyword cGrammarTypeUpdateKeyword_2_1_2_0 = (Keyword)cGrammarTypeAssignment_2_1_2.eContents().get(0);
+		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
+		private final Keyword cLabelKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
+		private final Assignment cLabelAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
+		private final RuleCall cLabelIDTerminalRuleCall_3_1_0 = (RuleCall)cLabelAssignment_3_1.eContents().get(0);
+		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//Import:
+		//	"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
+		//	label=ID)? ";";
+		public ParserRule getRule() { return rule; }
+
+		//"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
+		//label=ID)? ";"
+		public Group getGroup() { return cGroup; }
+
+		//"import"
+		public Keyword getImportKeyword_0() { return cImportKeyword_0; }
+
+		//importURI=STRING
+		public Assignment getImportURIAssignment_1() { return cImportURIAssignment_1; }
+
+		//STRING
+		public RuleCall getImportURISTRINGTerminalRuleCall_1_0() { return cImportURISTRINGTerminalRuleCall_1_0; }
+
+		//("/" (grammarType="core" | grammarType="package" | grammarType="update"))?
+		public Group getGroup_2() { return cGroup_2; }
+
+		//"/"
+		public Keyword getSolidusKeyword_2_0() { return cSolidusKeyword_2_0; }
+
+		//grammarType="core" | grammarType="package" | grammarType="update"
+		public Alternatives getAlternatives_2_1() { return cAlternatives_2_1; }
+
+		//grammarType="core"
+		public Assignment getGrammarTypeAssignment_2_1_0() { return cGrammarTypeAssignment_2_1_0; }
+
+		//"core"
+		public Keyword getGrammarTypeCoreKeyword_2_1_0_0() { return cGrammarTypeCoreKeyword_2_1_0_0; }
+
+		//grammarType="package"
+		public Assignment getGrammarTypeAssignment_2_1_1() { return cGrammarTypeAssignment_2_1_1; }
+
+		//"package"
+		public Keyword getGrammarTypePackageKeyword_2_1_1_0() { return cGrammarTypePackageKeyword_2_1_1_0; }
+
+		//grammarType="update"
+		public Assignment getGrammarTypeAssignment_2_1_2() { return cGrammarTypeAssignment_2_1_2; }
+
+		//"update"
+		public Keyword getGrammarTypeUpdateKeyword_2_1_2_0() { return cGrammarTypeUpdateKeyword_2_1_2_0; }
+
+		//("label:" label=ID)?
+		public Group getGroup_3() { return cGroup_3; }
+
+		//"label:"
+		public Keyword getLabelKeyword_3_0() { return cLabelKeyword_3_0; }
+
+		//label=ID
+		public Assignment getLabelAssignment_3_1() { return cLabelAssignment_3_1; }
+
+		//ID
+		public RuleCall getLabelIDTerminalRuleCall_3_1_0() { return cLabelIDTerminalRuleCall_3_1_0; }
+
+		//";"
+		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
+	}
+
+	public class RuleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Rule");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final Assignment cRulenumberAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
+		private final RuleCall cRulenumberINTTerminalRuleCall_0_0_0 = (RuleCall)cRulenumberAssignment_0_0.eContents().get(0);
+		private final Assignment cRulevariantAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cRulevariantIDTerminalRuleCall_0_1_0 = (RuleCall)cRulevariantAssignment_0_1.eContents().get(0);
+		private final Keyword cFullStopKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Keyword cColonColonEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cDefinitionListAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cDefinitionListDefinitionListParserRuleCall_3_0 = (RuleCall)cDefinitionListAssignment_3.eContents().get(0);
+		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
+		
+		//Rule:
+		//	(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?;
+		public ParserRule getRule() { return rule; }
+
+		//(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?
+		public Group getGroup() { return cGroup; }
+
+		//(rulenumber=INT rulevariant=ID? ".")?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//rulenumber=INT
+		public Assignment getRulenumberAssignment_0_0() { return cRulenumberAssignment_0_0; }
+
+		//INT
+		public RuleCall getRulenumberINTTerminalRuleCall_0_0_0() { return cRulenumberINTTerminalRuleCall_0_0_0; }
+
+		//rulevariant=ID?
+		public Assignment getRulevariantAssignment_0_1() { return cRulevariantAssignment_0_1; }
+
+		//ID
+		public RuleCall getRulevariantIDTerminalRuleCall_0_1_0() { return cRulevariantIDTerminalRuleCall_0_1_0; }
+
+		//"."
+		public Keyword getFullStopKeyword_0_2() { return cFullStopKeyword_0_2; }
+
+		//name=ID
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
+
+		//"::="
+		public Keyword getColonColonEqualsSignKeyword_2() { return cColonColonEqualsSignKeyword_2; }
+
+		//definitionList=DefinitionList?
+		public Assignment getDefinitionListAssignment_3() { return cDefinitionListAssignment_3; }
+
+		//DefinitionList
+		public RuleCall getDefinitionListDefinitionListParserRuleCall_3_0() { return cDefinitionListDefinitionListParserRuleCall_3_0; }
+
+		//";"?
+		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
+	}
+
+	public class ExtRuleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "ExtRule");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final Assignment cRulenumberAssignment_0_0 = (Assignment)cGroup_0.eContents().get(0);
+		private final RuleCall cRulenumberINTTerminalRuleCall_0_0_0 = (RuleCall)cRulenumberAssignment_0_0.eContents().get(0);
+		private final Assignment cRulevariantAssignment_0_1 = (Assignment)cGroup_0.eContents().get(1);
+		private final RuleCall cRulevariantIDTerminalRuleCall_0_1_0 = (RuleCall)cRulevariantAssignment_0_1.eContents().get(0);
+		private final Keyword cFullStopKeyword_0_2 = (Keyword)cGroup_0.eContents().get(2);
+		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cNameIDTerminalRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Assignment cRuleextAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cRuleextINTTerminalRuleCall_2_1_0 = (RuleCall)cRuleextAssignment_2_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final Keyword cLessThanSignHyphenMinusKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Alternatives cAlternatives_4 = (Alternatives)cGroup.eContents().get(4);
+		private final Assignment cElementsAssignment_4_0 = (Assignment)cAlternatives_4.eContents().get(0);
+		private final RuleCall cElementsAtomParserRuleCall_4_0_0 = (RuleCall)cElementsAssignment_4_0.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_4_1 = (Keyword)cAlternatives_4.eContents().get(1);
+		private final Keyword cRightSquareBracketKeyword_4_2 = (Keyword)cAlternatives_4.eContents().get(2);
+		private final Keyword cRightCurlyBracketKeyword_4_3 = (Keyword)cAlternatives_4.eContents().get(3);
+		private final Keyword cVerticalLineKeyword_4_4 = (Keyword)cAlternatives_4.eContents().get(4);
+		private final Keyword cLeftParenthesisKeyword_4_5 = (Keyword)cAlternatives_4.eContents().get(5);
+		private final Keyword cLeftSquareBracketKeyword_4_6 = (Keyword)cAlternatives_4.eContents().get(6);
+		private final Keyword cLeftCurlyBracketKeyword_4_7 = (Keyword)cAlternatives_4.eContents().get(7);
+		private final Keyword cAsteriskKeyword_4_8 = (Keyword)cAlternatives_4.eContents().get(8);
+		private final Keyword cPlusSignKeyword_4_9 = (Keyword)cAlternatives_4.eContents().get(9);
+		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		
+		//ExtRule:
+		//	(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" |
+		//	"(" | "[" | "{" | "*" | "+")* ";"?;
+		public ParserRule getRule() { return rule; }
+
+		//(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" | "(" |
+		//"[" | "{" | "*" | "+")* ";"?
+		public Group getGroup() { return cGroup; }
+
+		//(rulenumber=INT rulevariant=ID? ".")?
+		public Group getGroup_0() { return cGroup_0; }
+
+		//rulenumber=INT
+		public Assignment getRulenumberAssignment_0_0() { return cRulenumberAssignment_0_0; }
+
+		//INT
+		public RuleCall getRulenumberINTTerminalRuleCall_0_0_0() { return cRulenumberINTTerminalRuleCall_0_0_0; }
+
+		//rulevariant=ID?
+		public Assignment getRulevariantAssignment_0_1() { return cRulevariantAssignment_0_1; }
+
+		//ID
+		public RuleCall getRulevariantIDTerminalRuleCall_0_1_0() { return cRulevariantIDTerminalRuleCall_0_1_0; }
+
+		//"."
+		public Keyword getFullStopKeyword_0_2() { return cFullStopKeyword_0_2; }
+
+		//name=ID
+		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_1_0() { return cNameIDTerminalRuleCall_1_0; }
+
+		//"(" ruleext=INT ")"
+		public Group getGroup_2() { return cGroup_2; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
+
+		//ruleext=INT
+		public Assignment getRuleextAssignment_2_1() { return cRuleextAssignment_2_1; }
+
+		//INT
+		public RuleCall getRuleextINTTerminalRuleCall_2_1_0() { return cRuleextINTTerminalRuleCall_2_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
+
+		//"<-"
+		public Keyword getLessThanSignHyphenMinusKeyword_3() { return cLessThanSignHyphenMinusKeyword_3; }
+
+		//(elements+=Atom | ")" | "]" | "}" | "|" | "(" | "[" | "{" | "*" | "+")*
+		public Alternatives getAlternatives_4() { return cAlternatives_4; }
+
+		//elements+=Atom
+		public Assignment getElementsAssignment_4_0() { return cElementsAssignment_4_0; }
+
+		//Atom
+		public RuleCall getElementsAtomParserRuleCall_4_0_0() { return cElementsAtomParserRuleCall_4_0_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_4_1() { return cRightParenthesisKeyword_4_1; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_4_2() { return cRightSquareBracketKeyword_4_2; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_4_3() { return cRightCurlyBracketKeyword_4_3; }
+
+		//"|"
+		public Keyword getVerticalLineKeyword_4_4() { return cVerticalLineKeyword_4_4; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_4_5() { return cLeftParenthesisKeyword_4_5; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_4_6() { return cLeftSquareBracketKeyword_4_6; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_4_7() { return cLeftCurlyBracketKeyword_4_7; }
+
+		//"*"
+		public Keyword getAsteriskKeyword_4_8() { return cAsteriskKeyword_4_8; }
+
+		//"+"
+		public Keyword getPlusSignKeyword_4_9() { return cPlusSignKeyword_4_9; }
+
+		//";"?
+		public Keyword getSemicolonKeyword_5() { return cSemicolonKeyword_5; }
+	}
+
+	public class MergeRuleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "MergeRule");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final RuleCall cGlobalCombinatorParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
+		private final RuleCall cRuleCombinatorParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
+		private final RuleCall cHookCombinatorParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
+		
+		//MergeRule:
+		//	GlobalCombinator | RuleCombinator | HookCombinator;
+		public ParserRule getRule() { return rule; }
+
+		//GlobalCombinator | RuleCombinator | HookCombinator
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//GlobalCombinator
+		public RuleCall getGlobalCombinatorParserRuleCall_0() { return cGlobalCombinatorParserRuleCall_0; }
+
+		//RuleCombinator
+		public RuleCall getRuleCombinatorParserRuleCall_1() { return cRuleCombinatorParserRuleCall_1; }
+
+		//HookCombinator
+		public RuleCall getHookCombinatorParserRuleCall_2() { return cHookCombinatorParserRuleCall_2; }
+	}
+
+	public class GlobalCombinatorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GlobalCombinator");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final Keyword cGlobalKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Keyword cCombinatorKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
+		private final Assignment cLogicAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cLogicLOGICTerminalRuleCall_1_0 = (RuleCall)cLogicAssignment_1.eContents().get(0);
+		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//GlobalCombinator:
+		//	("global" "combinator:") logic=LOGIC ";"?;
+		public ParserRule getRule() { return rule; }
+
+		//("global" "combinator:") logic=LOGIC ";"?
+		public Group getGroup() { return cGroup; }
+
+		//"global" "combinator:"
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"global"
+		public Keyword getGlobalKeyword_0_0() { return cGlobalKeyword_0_0; }
+
+		//"combinator:"
+		public Keyword getCombinatorKeyword_0_1() { return cCombinatorKeyword_0_1; }
+
+		//logic=LOGIC
+		public Assignment getLogicAssignment_1() { return cLogicAssignment_1; }
+
+		//LOGIC
+		public RuleCall getLogicLOGICTerminalRuleCall_1_0() { return cLogicLOGICTerminalRuleCall_1_0; }
+
+		//";"?
+		public Keyword getSemicolonKeyword_2() { return cSemicolonKeyword_2; }
+	}
+
+	public class RuleCombinatorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RuleCombinator");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Group cGroup_0 = (Group)cGroup.eContents().get(0);
+		private final Keyword cRuleKeyword_0_0 = (Keyword)cGroup_0.eContents().get(0);
+		private final Keyword cCombinatorKeyword_0_1 = (Keyword)cGroup_0.eContents().get(1);
+		private final Assignment cNameAssignment_0_2 = (Assignment)cGroup_0.eContents().get(2);
+		private final RuleCall cNameIDTerminalRuleCall_0_2_0 = (RuleCall)cNameAssignment_0_2.eContents().get(0);
+		private final Assignment cLogicAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cLogicLOGICTerminalRuleCall_1_0 = (RuleCall)cLogicAssignment_1.eContents().get(0);
+		private final Group cGroup_2 = (Group)cGroup.eContents().get(2);
+		private final Keyword cLeftParenthesisKeyword_2_0 = (Keyword)cGroup_2.eContents().get(0);
+		private final Assignment cLABELAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
+		private final RuleCall cLABELSTRINGTerminalRuleCall_2_1_0 = (RuleCall)cLABELAssignment_2_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
+		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		
+		//RuleCombinator:
+		//	("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?;
+		public ParserRule getRule() { return rule; }
+
+		//("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?
+		public Group getGroup() { return cGroup; }
+
+		//"rule" "combinator:" name=ID
+		public Group getGroup_0() { return cGroup_0; }
+
+		//"rule"
+		public Keyword getRuleKeyword_0_0() { return cRuleKeyword_0_0; }
+
+		//"combinator:"
+		public Keyword getCombinatorKeyword_0_1() { return cCombinatorKeyword_0_1; }
+
+		//name=ID
+		public Assignment getNameAssignment_0_2() { return cNameAssignment_0_2; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_0_2_0() { return cNameIDTerminalRuleCall_0_2_0; }
+
+		//logic=LOGIC
+		public Assignment getLogicAssignment_1() { return cLogicAssignment_1; }
+
+		//LOGIC
+		public RuleCall getLogicLOGICTerminalRuleCall_1_0() { return cLogicLOGICTerminalRuleCall_1_0; }
+
+		//("(" LABEL+=STRING ")")*
+		public Group getGroup_2() { return cGroup_2; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
+
+		//LABEL+=STRING
+		public Assignment getLABELAssignment_2_1() { return cLABELAssignment_2_1; }
+
+		//STRING
+		public RuleCall getLABELSTRINGTerminalRuleCall_2_1_0() { return cLABELSTRINGTerminalRuleCall_2_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
+
+		//";"?
+		public Keyword getSemicolonKeyword_3() { return cSemicolonKeyword_3; }
+	}
+
+	public class HookCombinatorElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "HookCombinator");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cHookKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Keyword cCombinatorKeyword_1 = (Keyword)cGroup.eContents().get(1);
+		private final Assignment cNameAssignment_2 = (Assignment)cGroup.eContents().get(2);
+		private final RuleCall cNameIDTerminalRuleCall_2_0 = (RuleCall)cNameAssignment_2.eContents().get(0);
+		private final Keyword cLeftParenthesisKeyword_3 = (Keyword)cGroup.eContents().get(3);
+		private final Assignment cRuleextAssignment_4 = (Assignment)cGroup.eContents().get(4);
+		private final RuleCall cRuleextINTTerminalRuleCall_4_0 = (RuleCall)cRuleextAssignment_4.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
+		private final Assignment cLogicAssignment_6 = (Assignment)cGroup.eContents().get(6);
+		private final RuleCall cLogicLOGICTerminalRuleCall_6_0 = (RuleCall)cLogicAssignment_6.eContents().get(0);
+		private final Group cGroup_7 = (Group)cGroup.eContents().get(7);
+		private final Keyword cLeftParenthesisKeyword_7_0 = (Keyword)cGroup_7.eContents().get(0);
+		private final Assignment cLABELAssignment_7_1 = (Assignment)cGroup_7.eContents().get(1);
+		private final RuleCall cLABELSTRINGTerminalRuleCall_7_1_0 = (RuleCall)cLABELAssignment_7_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_7_2 = (Keyword)cGroup_7.eContents().get(2);
+		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
+		
+		//HookCombinator:
+		//	"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?;
+		public ParserRule getRule() { return rule; }
+
+		//"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?
+		public Group getGroup() { return cGroup; }
+
+		//"hook"
+		public Keyword getHookKeyword_0() { return cHookKeyword_0; }
+
+		//"combinator:"
+		public Keyword getCombinatorKeyword_1() { return cCombinatorKeyword_1; }
+
+		//name=ID
+		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
+
+		//ID
+		public RuleCall getNameIDTerminalRuleCall_2_0() { return cNameIDTerminalRuleCall_2_0; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_3() { return cLeftParenthesisKeyword_3; }
+
+		//ruleext=INT
+		public Assignment getRuleextAssignment_4() { return cRuleextAssignment_4; }
+
+		//INT
+		public RuleCall getRuleextINTTerminalRuleCall_4_0() { return cRuleextINTTerminalRuleCall_4_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_5() { return cRightParenthesisKeyword_5; }
+
+		//logic=LOGIC?
+		public Assignment getLogicAssignment_6() { return cLogicAssignment_6; }
+
+		//LOGIC
+		public RuleCall getLogicLOGICTerminalRuleCall_6_0() { return cLogicLOGICTerminalRuleCall_6_0; }
+
+		//("(" LABEL+=STRING ")")+
+		public Group getGroup_7() { return cGroup_7; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_7_0() { return cLeftParenthesisKeyword_7_0; }
+
+		//LABEL+=STRING
+		public Assignment getLABELAssignment_7_1() { return cLABELAssignment_7_1; }
+
+		//STRING
+		public RuleCall getLABELSTRINGTerminalRuleCall_7_1_0() { return cLABELSTRINGTerminalRuleCall_7_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_7_2() { return cRightParenthesisKeyword_7_2; }
+
+		//";"?
+		public Keyword getSemicolonKeyword_8() { return cSemicolonKeyword_8; }
+	}
+
+	public class DefinitionListElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "DefinitionList");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Assignment cSingleDefinitionAssignment_0 = (Assignment)cGroup.eContents().get(0);
+		private final RuleCall cSingleDefinitionSingleDefinitionParserRuleCall_0_0 = (RuleCall)cSingleDefinitionAssignment_0.eContents().get(0);
+		private final Group cGroup_1 = (Group)cGroup.eContents().get(1);
+		private final Keyword cVerticalLineKeyword_1_0 = (Keyword)cGroup_1.eContents().get(0);
+		private final Assignment cSingleDefinitionAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
+		private final RuleCall cSingleDefinitionSingleDefinitionParserRuleCall_1_1_0 = (RuleCall)cSingleDefinitionAssignment_1_1.eContents().get(0);
+		
+		//DefinitionList:
+		//	singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*;
+		public ParserRule getRule() { return rule; }
+
+		//singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*
+		public Group getGroup() { return cGroup; }
+
+		//singleDefinition+=SingleDefinition
+		public Assignment getSingleDefinitionAssignment_0() { return cSingleDefinitionAssignment_0; }
+
+		//SingleDefinition
+		public RuleCall getSingleDefinitionSingleDefinitionParserRuleCall_0_0() { return cSingleDefinitionSingleDefinitionParserRuleCall_0_0; }
+
+		//("|" singleDefinition+=SingleDefinition)*
+		public Group getGroup_1() { return cGroup_1; }
+
+		//"|"
+		public Keyword getVerticalLineKeyword_1_0() { return cVerticalLineKeyword_1_0; }
+
+		//singleDefinition+=SingleDefinition
+		public Assignment getSingleDefinitionAssignment_1_1() { return cSingleDefinitionAssignment_1_1; }
+
+		//SingleDefinition
+		public RuleCall getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0() { return cSingleDefinitionSingleDefinitionParserRuleCall_1_1_0; }
+	}
+
+	public class SingleDefinitionElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "SingleDefinition");
+		private final Assignment cTermsAssignment = (Assignment)rule.eContents().get(1);
+		private final RuleCall cTermsTermParserRuleCall_0 = (RuleCall)cTermsAssignment.eContents().get(0);
+		
+		//SingleDefinition:
+		//	terms+=Term+;
+		public ParserRule getRule() { return rule; }
+
+		//terms+=Term+
+		public Assignment getTermsAssignment() { return cTermsAssignment; }
+
+		//Term
+		public RuleCall getTermsTermParserRuleCall_0() { return cTermsTermParserRuleCall_0; }
+	}
+
+	public class TermElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Term");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cTermAtomAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cTermAtomAtomParserRuleCall_0_0 = (RuleCall)cTermAtomAssignment_0.eContents().get(0);
+		private final Assignment cTermGroupedSequenceAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cTermGroupedSequenceGroupedSequenceParserRuleCall_1_0 = (RuleCall)cTermGroupedSequenceAssignment_1.eContents().get(0);
+		private final Assignment cTermOptionalSequenceAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
+		private final RuleCall cTermOptionalSequenceOptionalSequenceParserRuleCall_2_0 = (RuleCall)cTermOptionalSequenceAssignment_2.eContents().get(0);
+		private final Assignment cTermRepeatedSequenceAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
+		private final RuleCall cTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0 = (RuleCall)cTermRepeatedSequenceAssignment_3.eContents().get(0);
+		
+		//Term:
+		//	termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
+		//	termRepeatedSequence=RepeatedSequence;
+		public ParserRule getRule() { return rule; }
+
+		//termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
+		//termRepeatedSequence=RepeatedSequence
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//termAtom=Atom
+		public Assignment getTermAtomAssignment_0() { return cTermAtomAssignment_0; }
+
+		//Atom
+		public RuleCall getTermAtomAtomParserRuleCall_0_0() { return cTermAtomAtomParserRuleCall_0_0; }
+
+		//termGroupedSequence=GroupedSequence
+		public Assignment getTermGroupedSequenceAssignment_1() { return cTermGroupedSequenceAssignment_1; }
+
+		//GroupedSequence
+		public RuleCall getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0() { return cTermGroupedSequenceGroupedSequenceParserRuleCall_1_0; }
+
+		//termOptionalSequence=OptionalSequence
+		public Assignment getTermOptionalSequenceAssignment_2() { return cTermOptionalSequenceAssignment_2; }
+
+		//OptionalSequence
+		public RuleCall getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0() { return cTermOptionalSequenceOptionalSequenceParserRuleCall_2_0; }
+
+		//termRepeatedSequence=RepeatedSequence
+		public Assignment getTermRepeatedSequenceAssignment_3() { return cTermRepeatedSequenceAssignment_3; }
+
+		//RepeatedSequence
+		public RuleCall getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0() { return cTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0; }
+	}
+
+	public class AtomElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "Atom");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cAtomStringRuleAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cAtomStringRuleStringRuleParserRuleCall_0_0 = (RuleCall)cAtomStringRuleAssignment_0.eContents().get(0);
+		private final Assignment cAtomRuleReferenceAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cAtomRuleReferenceRuleReferenceParserRuleCall_1_0 = (RuleCall)cAtomRuleReferenceAssignment_1.eContents().get(0);
+		
+		//Atom:
+		//	atomStringRule=StringRule | atomRuleReference=RuleReference;
+		public ParserRule getRule() { return rule; }
+
+		//atomStringRule=StringRule | atomRuleReference=RuleReference
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//atomStringRule=StringRule
+		public Assignment getAtomStringRuleAssignment_0() { return cAtomStringRuleAssignment_0; }
+
+		//StringRule
+		public RuleCall getAtomStringRuleStringRuleParserRuleCall_0_0() { return cAtomStringRuleStringRuleParserRuleCall_0_0; }
+
+		//atomRuleReference=RuleReference
+		public Assignment getAtomRuleReferenceAssignment_1() { return cAtomRuleReferenceAssignment_1; }
+
+		//RuleReference
+		public RuleCall getAtomRuleReferenceRuleReferenceParserRuleCall_1_0() { return cAtomRuleReferenceRuleReferenceParserRuleCall_1_0; }
+	}
+
+	public class RuleReferenceElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RuleReference");
+		private final Assignment cRulerefAssignment = (Assignment)rule.eContents().get(1);
+		private final CrossReference cRulerefRuleCrossReference_0 = (CrossReference)cRulerefAssignment.eContents().get(0);
+		private final RuleCall cRulerefRuleIDTerminalRuleCall_0_1 = (RuleCall)cRulerefRuleCrossReference_0.eContents().get(1);
+		
+		//RuleReference:
+		//	ruleref=[Rule];
+		public ParserRule getRule() { return rule; }
+
+		//ruleref=[Rule]
+		public Assignment getRulerefAssignment() { return cRulerefAssignment; }
+
+		//[Rule]
+		public CrossReference getRulerefRuleCrossReference_0() { return cRulerefRuleCrossReference_0; }
+
+		//ID
+		public RuleCall getRulerefRuleIDTerminalRuleCall_0_1() { return cRulerefRuleIDTerminalRuleCall_0_1; }
+	}
+
+	public class StringRuleElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "StringRule");
+		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
+		private final Assignment cLiteralAssignment_0 = (Assignment)cAlternatives.eContents().get(0);
+		private final RuleCall cLiteralSTRINGTerminalRuleCall_0_0 = (RuleCall)cLiteralAssignment_0.eContents().get(0);
+		private final Assignment cColonAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
+		private final RuleCall cColonCOLONTerminalRuleCall_1_0 = (RuleCall)cColonAssignment_1.eContents().get(0);
+		
+		//StringRule:
+		//	literal=STRING | colon=COLON;
+		public ParserRule getRule() { return rule; }
+
+		//literal=STRING | colon=COLON
+		public Alternatives getAlternatives() { return cAlternatives; }
+
+		//literal=STRING
+		public Assignment getLiteralAssignment_0() { return cLiteralAssignment_0; }
+
+		//STRING
+		public RuleCall getLiteralSTRINGTerminalRuleCall_0_0() { return cLiteralSTRINGTerminalRuleCall_0_0; }
+
+		//colon=COLON
+		public Assignment getColonAssignment_1() { return cColonAssignment_1; }
+
+		//COLON
+		public RuleCall getColonCOLONTerminalRuleCall_1_0() { return cColonCOLONTerminalRuleCall_1_0; }
+	}
+
+	public class GroupedSequenceElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "GroupedSequence");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftParenthesisKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cDefinitionListAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cDefinitionListDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionListAssignment_1.eContents().get(0);
+		private final Keyword cRightParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//GroupedSequence:
+		//	"(" definitionList+=DefinitionList ")";
+		public ParserRule getRule() { return rule; }
+
+		//"(" definitionList+=DefinitionList ")"
+		public Group getGroup() { return cGroup; }
+
+		//"("
+		public Keyword getLeftParenthesisKeyword_0() { return cLeftParenthesisKeyword_0; }
+
+		//definitionList+=DefinitionList
+		public Assignment getDefinitionListAssignment_1() { return cDefinitionListAssignment_1; }
+
+		//DefinitionList
+		public RuleCall getDefinitionListDefinitionListParserRuleCall_1_0() { return cDefinitionListDefinitionListParserRuleCall_1_0; }
+
+		//")"
+		public Keyword getRightParenthesisKeyword_2() { return cRightParenthesisKeyword_2; }
+	}
+
+	public class OptionalSequenceElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "OptionalSequence");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftSquareBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cDefinitionListAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cDefinitionListDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionListAssignment_1.eContents().get(0);
+		private final Keyword cRightSquareBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		
+		//OptionalSequence:
+		//	"[" definitionList+=DefinitionList "]";
+		public ParserRule getRule() { return rule; }
+
+		//"[" definitionList+=DefinitionList "]"
+		public Group getGroup() { return cGroup; }
+
+		//"["
+		public Keyword getLeftSquareBracketKeyword_0() { return cLeftSquareBracketKeyword_0; }
+
+		//definitionList+=DefinitionList
+		public Assignment getDefinitionListAssignment_1() { return cDefinitionListAssignment_1; }
+
+		//DefinitionList
+		public RuleCall getDefinitionListDefinitionListParserRuleCall_1_0() { return cDefinitionListDefinitionListParserRuleCall_1_0; }
+
+		//"]"
+		public Keyword getRightSquareBracketKeyword_2() { return cRightSquareBracketKeyword_2; }
+	}
+
+	public class RepeatedSequenceElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "RepeatedSequence");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_0 = (Keyword)cGroup.eContents().get(0);
+		private final Assignment cDefinitionsAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final RuleCall cDefinitionsDefinitionListParserRuleCall_1_0 = (RuleCall)cDefinitionsAssignment_1.eContents().get(0);
+		private final Keyword cRightCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cMorethanonceAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final Keyword cMorethanoncePlusSignKeyword_3_0 = (Keyword)cMorethanonceAssignment_3.eContents().get(0);
+		
+		//RepeatedSequence:
+		//	"{" definitions+=DefinitionList "}" morethanonce?="+"?;
+		public ParserRule getRule() { return rule; }
+
+		//"{" definitions+=DefinitionList "}" morethanonce?="+"?
+		public Group getGroup() { return cGroup; }
+
+		//"{"
+		public Keyword getLeftCurlyBracketKeyword_0() { return cLeftCurlyBracketKeyword_0; }
+
+		//definitions+=DefinitionList
+		public Assignment getDefinitionsAssignment_1() { return cDefinitionsAssignment_1; }
+
+		//DefinitionList
+		public RuleCall getDefinitionsDefinitionListParserRuleCall_1_0() { return cDefinitionsDefinitionListParserRuleCall_1_0; }
+
+		//"}"
+		public Keyword getRightCurlyBracketKeyword_2() { return cRightCurlyBracketKeyword_2; }
+
+		//morethanonce?="+"?
+		public Assignment getMorethanonceAssignment_3() { return cMorethanonceAssignment_3; }
+
+		//"+"
+		public Keyword getMorethanoncePlusSignKeyword_3_0() { return cMorethanoncePlusSignKeyword_3_0; }
+	}
+	
+	
+	private EtsiBnfElements pEtsiBnf;
+	private ImportSectionElements pImportSection;
+	private BnfEntryElements pBnfEntry;
+	private DeltaEntryElements pDeltaEntry;
+	private MergeEntryElements pMergeEntry;
+	private SectionHeadingElements pSectionHeading;
+	private ImportElements pImport;
+	private RuleElements pRule;
+	private ExtRuleElements pExtRule;
+	private MergeRuleElements pMergeRule;
+	private GlobalCombinatorElements pGlobalCombinator;
+	private RuleCombinatorElements pRuleCombinator;
+	private HookCombinatorElements pHookCombinator;
+	private DefinitionListElements pDefinitionList;
+	private SingleDefinitionElements pSingleDefinition;
+	private TermElements pTerm;
+	private AtomElements pAtom;
+	private RuleReferenceElements pRuleReference;
+	private StringRuleElements pStringRule;
+	private GroupedSequenceElements pGroupedSequence;
+	private OptionalSequenceElements pOptionalSequence;
+	private RepeatedSequenceElements pRepeatedSequence;
+	private TerminalRule tID;
+	private TerminalRule tINT;
+	private TerminalRule tWS;
+	private TerminalRule tCOLON;
+	private TerminalRule tSTRING;
+	private TerminalRule tSECTIONHEADER;
+	private TerminalRule tSL_COMMENT;
+	private TerminalRule tML_COMMENT;
+	private TerminalRule tLOGIC;
+	
+	private final Grammar grammar;
+
+	@Inject
+	public EbnfGrammarAccess(GrammarProvider grammarProvider) {
+		this.grammar = internalFindGrammar(grammarProvider);
+	}
+	
+	protected Grammar internalFindGrammar(GrammarProvider grammarProvider) {
+		Grammar grammar = grammarProvider.getGrammar(this);
+		while (grammar != null) {
+			if ("de.ugoe.cs.swe.bnftools.Ebnf".equals(grammar.getName())) {
+				return grammar;
+			}
+			List<Grammar> grammars = grammar.getUsedGrammars();
+			if (!grammars.isEmpty()) {
+				grammar = grammars.iterator().next();
+			} else {
+				return null;
+			}
+		}
+		return grammar;
+	}
+	
+	
+	public Grammar getGrammar() {
+		return grammar;
+	}
+	
+
+	
+	//// -----------------------------------------------------------------------------------------------
+	//// Parser Rules
+	//// -----------------------------------------------------------------------------------------------
+	//EtsiBnf:
+	//	"grammar" name=ID (type="/bnf"? ";" importSection=ImportSection? bnfEntry+=BnfEntry+) | type="/delta" ";"
+	//	importSection=ImportSection? deltaEntry+=DeltaEntry* | type="/merge" ";" importSection=ImportSection?
+	//	mergeEntry+=MergeEntry*;
+	public EtsiBnfElements getEtsiBnfAccess() {
+		return (pEtsiBnf != null) ? pEtsiBnf : (pEtsiBnf = new EtsiBnfElements());
+	}
+	
+	public ParserRule getEtsiBnfRule() {
+		return getEtsiBnfAccess().getRule();
+	}
+
+	//ImportSection:
+	//	imports+=Import+;
+	public ImportSectionElements getImportSectionAccess() {
+		return (pImportSection != null) ? pImportSection : (pImportSection = new ImportSectionElements());
+	}
+	
+	public ParserRule getImportSectionRule() {
+		return getImportSectionAccess().getRule();
+	}
+
+	//BnfEntry:
+	//	sectionheader=SectionHeading | rule=Rule;
+	public BnfEntryElements getBnfEntryAccess() {
+		return (pBnfEntry != null) ? pBnfEntry : (pBnfEntry = new BnfEntryElements());
+	}
+	
+	public ParserRule getBnfEntryRule() {
+		return getBnfEntryAccess().getRule();
+	}
+
+	//DeltaEntry:
+	//	rule=Rule | sectionheader=SectionHeading | extRule=ExtRule;
+	public DeltaEntryElements getDeltaEntryAccess() {
+		return (pDeltaEntry != null) ? pDeltaEntry : (pDeltaEntry = new DeltaEntryElements());
+	}
+	
+	public ParserRule getDeltaEntryRule() {
+		return getDeltaEntryAccess().getRule();
+	}
+
+	//MergeEntry:
+	//	sectionheader=SectionHeading | mergeRule=MergeRule;
+	public MergeEntryElements getMergeEntryAccess() {
+		return (pMergeEntry != null) ? pMergeEntry : (pMergeEntry = new MergeEntryElements());
+	}
+	
+	public ParserRule getMergeEntryRule() {
+		return getMergeEntryAccess().getRule();
+	}
+
+	//SectionHeading:
+	//	{SectionHeading} sectionHeader=SECTIONHEADER;
+	public SectionHeadingElements getSectionHeadingAccess() {
+		return (pSectionHeading != null) ? pSectionHeading : (pSectionHeading = new SectionHeadingElements());
+	}
+	
+	public ParserRule getSectionHeadingRule() {
+		return getSectionHeadingAccess().getRule();
+	}
+
+	//Import:
+	//	"import" importURI=STRING ("/" (grammarType="core" | grammarType="package" | grammarType="update"))? ("label:"
+	//	label=ID)? ";";
+	public ImportElements getImportAccess() {
+		return (pImport != null) ? pImport : (pImport = new ImportElements());
+	}
+	
+	public ParserRule getImportRule() {
+		return getImportAccess().getRule();
+	}
+
+	//Rule:
+	//	(rulenumber=INT rulevariant=ID? ".")? name=ID "::=" definitionList=DefinitionList? ";"?;
+	public RuleElements getRuleAccess() {
+		return (pRule != null) ? pRule : (pRule = new RuleElements());
+	}
+	
+	public ParserRule getRuleRule() {
+		return getRuleAccess().getRule();
+	}
+
+	//ExtRule:
+	//	(rulenumber=INT rulevariant=ID? ".")? name=ID ("(" ruleext=INT ")") "<-" (elements+=Atom | ")" | "]" | "}" | "|" |
+	//	"(" | "[" | "{" | "*" | "+")* ";"?;
+	public ExtRuleElements getExtRuleAccess() {
+		return (pExtRule != null) ? pExtRule : (pExtRule = new ExtRuleElements());
+	}
+	
+	public ParserRule getExtRuleRule() {
+		return getExtRuleAccess().getRule();
+	}
+
+	//MergeRule:
+	//	GlobalCombinator | RuleCombinator | HookCombinator;
+	public MergeRuleElements getMergeRuleAccess() {
+		return (pMergeRule != null) ? pMergeRule : (pMergeRule = new MergeRuleElements());
+	}
+	
+	public ParserRule getMergeRuleRule() {
+		return getMergeRuleAccess().getRule();
+	}
+
+	//GlobalCombinator:
+	//	("global" "combinator:") logic=LOGIC ";"?;
+	public GlobalCombinatorElements getGlobalCombinatorAccess() {
+		return (pGlobalCombinator != null) ? pGlobalCombinator : (pGlobalCombinator = new GlobalCombinatorElements());
+	}
+	
+	public ParserRule getGlobalCombinatorRule() {
+		return getGlobalCombinatorAccess().getRule();
+	}
+
+	//RuleCombinator:
+	//	("rule" "combinator:" name=ID) logic=LOGIC ("(" LABEL+=STRING ")")* ";"?;
+	public RuleCombinatorElements getRuleCombinatorAccess() {
+		return (pRuleCombinator != null) ? pRuleCombinator : (pRuleCombinator = new RuleCombinatorElements());
+	}
+	
+	public ParserRule getRuleCombinatorRule() {
+		return getRuleCombinatorAccess().getRule();
+	}
+
+	//HookCombinator:
+	//	"hook" "combinator:" name=ID "(" ruleext=INT ")" logic=LOGIC? ("(" LABEL+=STRING ")")+ ";"?;
+	public HookCombinatorElements getHookCombinatorAccess() {
+		return (pHookCombinator != null) ? pHookCombinator : (pHookCombinator = new HookCombinatorElements());
+	}
+	
+	public ParserRule getHookCombinatorRule() {
+		return getHookCombinatorAccess().getRule();
+	}
+
+	//DefinitionList:
+	//	singleDefinition+=SingleDefinition ("|" singleDefinition+=SingleDefinition)*;
+	public DefinitionListElements getDefinitionListAccess() {
+		return (pDefinitionList != null) ? pDefinitionList : (pDefinitionList = new DefinitionListElements());
+	}
+	
+	public ParserRule getDefinitionListRule() {
+		return getDefinitionListAccess().getRule();
+	}
+
+	//SingleDefinition:
+	//	terms+=Term+;
+	public SingleDefinitionElements getSingleDefinitionAccess() {
+		return (pSingleDefinition != null) ? pSingleDefinition : (pSingleDefinition = new SingleDefinitionElements());
+	}
+	
+	public ParserRule getSingleDefinitionRule() {
+		return getSingleDefinitionAccess().getRule();
+	}
+
+	//Term:
+	//	termAtom=Atom | termGroupedSequence=GroupedSequence | termOptionalSequence=OptionalSequence |
+	//	termRepeatedSequence=RepeatedSequence;
+	public TermElements getTermAccess() {
+		return (pTerm != null) ? pTerm : (pTerm = new TermElements());
+	}
+	
+	public ParserRule getTermRule() {
+		return getTermAccess().getRule();
+	}
+
+	//Atom:
+	//	atomStringRule=StringRule | atomRuleReference=RuleReference;
+	public AtomElements getAtomAccess() {
+		return (pAtom != null) ? pAtom : (pAtom = new AtomElements());
+	}
+	
+	public ParserRule getAtomRule() {
+		return getAtomAccess().getRule();
+	}
+
+	//RuleReference:
+	//	ruleref=[Rule];
+	public RuleReferenceElements getRuleReferenceAccess() {
+		return (pRuleReference != null) ? pRuleReference : (pRuleReference = new RuleReferenceElements());
+	}
+	
+	public ParserRule getRuleReferenceRule() {
+		return getRuleReferenceAccess().getRule();
+	}
+
+	//StringRule:
+	//	literal=STRING | colon=COLON;
+	public StringRuleElements getStringRuleAccess() {
+		return (pStringRule != null) ? pStringRule : (pStringRule = new StringRuleElements());
+	}
+	
+	public ParserRule getStringRuleRule() {
+		return getStringRuleAccess().getRule();
+	}
+
+	//GroupedSequence:
+	//	"(" definitionList+=DefinitionList ")";
+	public GroupedSequenceElements getGroupedSequenceAccess() {
+		return (pGroupedSequence != null) ? pGroupedSequence : (pGroupedSequence = new GroupedSequenceElements());
+	}
+	
+	public ParserRule getGroupedSequenceRule() {
+		return getGroupedSequenceAccess().getRule();
+	}
+
+	//OptionalSequence:
+	//	"[" definitionList+=DefinitionList "]";
+	public OptionalSequenceElements getOptionalSequenceAccess() {
+		return (pOptionalSequence != null) ? pOptionalSequence : (pOptionalSequence = new OptionalSequenceElements());
+	}
+	
+	public ParserRule getOptionalSequenceRule() {
+		return getOptionalSequenceAccess().getRule();
+	}
+
+	//RepeatedSequence:
+	//	"{" definitions+=DefinitionList "}" morethanonce?="+"?;
+	public RepeatedSequenceElements getRepeatedSequenceAccess() {
+		return (pRepeatedSequence != null) ? pRepeatedSequence : (pRepeatedSequence = new RepeatedSequenceElements());
+	}
+	
+	public ParserRule getRepeatedSequenceRule() {
+		return getRepeatedSequenceAccess().getRule();
+	}
+
+	//// -----------------------------------------------------------------------------------------------
+	//// Lexer Rules
+	//// -----------------------------------------------------------------------------------------------
+	//terminal ID:
+	//	("a".."z" | "A".."Z" | "_") ("a".."z" | "A".."Z" | "0".."9" | "_")*;
+	public TerminalRule getIDRule() {
+		return (tID != null) ? tID : (tID = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ID"));
+	} 
+
+	//terminal INT returns ecore::EInt:
+	//	"0".."9"+;
+	public TerminalRule getINTRule() {
+		return (tINT != null) ? tINT : (tINT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "INT"));
+	} 
+
+	//terminal WS:
+	//	(" " | "\t" | "\r"? "\n")+;
+	public TerminalRule getWSRule() {
+		return (tWS != null) ? tWS : (tWS = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "WS"));
+	} 
+
+	//terminal COLON:
+	//	"\"" "\"" "\"";
+	public TerminalRule getCOLONRule() {
+		return (tCOLON != null) ? tCOLON : (tCOLON = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "COLON"));
+	} 
+
+	//terminal STRING:
+	//	"\"" !"\""* "\"" | "\'" !"\'"* "\'";
+	public TerminalRule getSTRINGRule() {
+		return (tSTRING != null) ? tSTRING : (tSTRING = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "STRING"));
+	} 
+
+	//terminal SECTIONHEADER:
+	//	("a".."z" | "A".."Z") ("." | "0".."9")+ (" " | "\t") !("\n" | "\r")* "\r"? "\n";
+	public TerminalRule getSECTIONHEADERRule() {
+		return (tSECTIONHEADER != null) ? tSECTIONHEADER : (tSECTIONHEADER = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SECTIONHEADER"));
+	} 
+
+	//terminal SL_COMMENT:
+	//	"//" !("\n" | "\r")* ("\r"? "\n")?;
+	public TerminalRule getSL_COMMENTRule() {
+		return (tSL_COMMENT != null) ? tSL_COMMENT : (tSL_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "SL_COMMENT"));
+	} 
+
+	//terminal ML_COMMENT:
+	//	"/ *"->"* /";
+	public TerminalRule getML_COMMENTRule() {
+		return (tML_COMMENT != null) ? tML_COMMENT : (tML_COMMENT = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "ML_COMMENT"));
+	} 
+
+	////TODO: a more intuitive notation
+	//terminal LOGIC:
+	//	"/and" | "/or" | "/andr" | "/orr" | "/any" | "/together";
+	public TerminalRule getLOGICRule() {
+		return (tLOGIC != null) ? tLOGIC : (tLOGIC = (TerminalRule) GrammarUtil.findRuleForName(getGrammar(), "LOGIC"));
+	} 
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/validation/AbstractEbnfValidator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/validation/AbstractEbnfValidator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/validation/AbstractEbnfValidator.java	(revision 61)
@@ -0,0 +1,18 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+import org.eclipse.emf.ecore.EPackage;
+
+public class AbstractEbnfValidator extends org.eclipse.xtext.validation.AbstractDeclarativeValidator {
+
+	@Override
+	protected List<EPackage> getEPackages() {
+	    List<EPackage> result = new ArrayList<EPackage>();
+	    result.add(de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage.eINSTANCE);
+		return result;
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EBNF.xtext
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EBNF.xtext	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EBNF.xtext	(revision 61)
@@ -0,0 +1,137 @@
+grammar de.ugoe.cs.swe.bnftools.Ebnf hidden(WS, ML_COMMENT, SL_COMMENT)
+
+import "http://www.eclipse.org/emf/2002/Ecore" as ecore
+
+generate ebnf "http://www.ugoe.de/cs/swe/bnftools/Ebnf"
+
+// -----------------------------------------------------------------------------------------------
+// Parser Rules
+// -----------------------------------------------------------------------------------------------
+EtsiBnf:
+	'grammar' name=ID
+	(	type='/bnf'? ';' 
+		(importSection=ImportSection)?
+		(bnfEntry+=BnfEntry)+ 
+	)
+	| 
+	(	type='/delta' ';'
+		(importSection=ImportSection)?
+		(deltaEntry+=DeltaEntry)*
+	)
+	| 
+	(	type='/merge' ';' 
+		(importSection=ImportSection)?
+		(mergeEntry+=MergeEntry)* 
+	)
+;
+
+ImportSection:
+	(imports+=Import)+
+;
+
+BnfEntry:
+	sectionheader=SectionHeading | rule=Rule
+;
+
+DeltaEntry:
+	rule=Rule | sectionheader=SectionHeading | extRule=ExtRule
+;
+
+MergeEntry:
+	sectionheader=SectionHeading | mergeRule=MergeRule
+;
+
+SectionHeading:
+	{SectionHeading}
+	sectionHeader=SECTIONHEADER
+;
+
+
+Import :
+ 	'import' importURI=STRING 
+ 	('/' (grammarType='core' | grammarType='package' | grammarType='update'))?
+ 	('label:' label=ID)? ';'
+;
+
+Rule:
+	(rulenumber=INT (rulevariant=ID)? '.')?  name=ID  '::=' (definitionList=DefinitionList)? ';'? 
+;
+
+ExtRule:
+	(rulenumber=INT (rulevariant=ID)? '.')?  name=ID ('(' ruleext=INT ')') '<-' 
+	(elements+=Atom | ')' | ']' | '}' | '|' | '(' | '[' | '{' | '*' | '+')* ';'? 
+;
+
+MergeRule:
+	GlobalCombinator
+	| RuleCombinator
+	| HookCombinator
+;
+	
+GlobalCombinator:
+('global' 'combinator:') logic=LOGIC ';'?
+;	
+
+RuleCombinator:
+('rule' 'combinator:' name=ID ) logic=LOGIC ('(' LABEL+=STRING ')')* ';'?
+;
+
+HookCombinator:
+'hook' 'combinator:' name=ID '(' ruleext=INT ')' (logic=LOGIC)? ('(' LABEL+=STRING ')')+ ';'?
+;
+
+DefinitionList:
+	singleDefinition+=SingleDefinition ('|' singleDefinition+=SingleDefinition)*
+;
+
+SingleDefinition:
+	(terms+=Term)+
+;
+
+Term:
+	termAtom=Atom
+	| termGroupedSequence=GroupedSequence
+	| termOptionalSequence=OptionalSequence
+	| termRepeatedSequence=RepeatedSequence
+;
+
+Atom:
+	atomStringRule=StringRule
+	| atomRuleReference=RuleReference
+;
+
+RuleReference:
+	ruleref=[Rule]
+;
+
+StringRule:
+	literal=STRING
+	| colon=COLON
+;
+
+GroupedSequence:
+	'(' definitionList+=DefinitionList ')'
+;
+
+OptionalSequence:
+	'[' definitionList+=DefinitionList ']'
+;
+
+RepeatedSequence:
+	'{' definitions+=DefinitionList '}' morethanonce?='+'?
+;
+
+// -----------------------------------------------------------------------------------------------
+// Lexer Rules
+// -----------------------------------------------------------------------------------------------
+
+terminal ID  		: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')* ;
+terminal INT 		returns ecore::EInt: ('0'..'9')+;
+terminal WS			: (' '|'\t'|'\r'? '\n')+;
+terminal COLON		: '"' '"' '"';
+terminal STRING		: '"' !('"')* '"' | "'" !("'")*"'";
+terminal SECTIONHEADER: ('a'..'z'|'A'..'Z') ('.'|('0'..'9'))+ (' '|'\t') !('\n'|'\r')* '\r'? '\n';
+terminal SL_COMMENT	: '//' !('\n'|'\r')* ('\r'? '\n')?;
+terminal ML_COMMENT	: '/*' -> '*/';
+//TODO: a more intuitive notation
+terminal LOGIC		: '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' ;
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfRuntimeModule.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfRuntimeModule.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfRuntimeModule.java	(revision 61)
@@ -0,0 +1,11 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools;
+
+/**
+ * Use this class to register components to be used at runtime / without the Equinox extension registry.
+ */
+public class EbnfRuntimeModule extends de.ugoe.cs.swe.bnftools.AbstractEbnfRuntimeModule {
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetup.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetup.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/EbnfStandaloneSetup.java	(revision 61)
@@ -0,0 +1,16 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools;
+
+/**
+ * Initialization support for running Xtext languages 
+ * without equinox extension registry
+ */
+public class EbnfStandaloneSetup extends EbnfStandaloneSetupGenerated{
+
+	public static void doSetup() {
+		new EbnfStandaloneSetup().createInjectorAndDoEMFRegistration();
+	}
+}
+
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/GenerateEBNF.mwe2
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/GenerateEBNF.mwe2	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/GenerateEBNF.mwe2	(revision 61)
@@ -0,0 +1,130 @@
+module de.ugoe.cs.swe.bnftools.GenerateEBNF
+
+import org.eclipse.emf.mwe.utils.*
+import org.eclipse.xtext.generator.*
+import org.eclipse.xtext.ui.generator.*
+
+var grammarURI = "classpath:/de/ugoe/cs/swe/bnftools/EBNF.xtext"
+var fileExtensions = "bnf"
+var projectName = "de.ugoe.cs.swe.bnftools.ebnf"
+var runtimeProject = "../${projectName}"
+var generateXtendStub = true
+var encoding = "UTF-8"
+
+Workflow {
+    bean = StandaloneSetup {
+    	scanClassPath = true
+    	platformUri = "${runtimeProject}/.."
+    	// The following two lines can be removed, if Xbase is not used.
+    	registerGeneratedEPackage = "org.eclipse.xtext.xbase.XbasePackage"
+    	registerGenModelFile = "platform:/resource/org.eclipse.xtext.xbase/model/Xbase.genmodel"
+    }
+    
+    component = DirectoryCleaner {
+    	directory = "${runtimeProject}/src-gen"
+    }
+    
+    component = DirectoryCleaner {
+    	directory = "${runtimeProject}/model"
+    }
+    
+    component = DirectoryCleaner {
+    	directory = "${runtimeProject}.ui/src-gen"
+    }
+    
+    component = DirectoryCleaner {
+    	directory = "${runtimeProject}.tests/src-gen"
+    }
+    
+    component = Generator {
+    	pathRtProject = runtimeProject
+    	pathUiProject = "${runtimeProject}.ui"
+    	pathTestProject = "${runtimeProject}.tests"
+    	projectNameRt = projectName
+    	projectNameUi = "${projectName}.ui"
+    	encoding = encoding
+    	language = auto-inject {
+    		uri = grammarURI
+    
+    		// Java API to access grammar elements (required by several other fragments)
+    		fragment = grammarAccess.GrammarAccessFragment auto-inject {}
+    
+    		// generates Java API for the generated EPackages
+    		fragment = ecore.EMFGeneratorFragment auto-inject {}
+    
+    		// the old serialization component
+    		// fragment = parseTreeConstructor.ParseTreeConstructorFragment auto-inject {}    
+    
+    		// serializer 2.0
+    		fragment = serializer.SerializerFragment auto-inject {
+    			generateStub = false
+    		}
+    
+    		// a custom ResourceFactory for use with EMF
+    		fragment = resourceFactory.ResourceFactoryFragment auto-inject {}
+    
+    		// The antlr parser generator fragment.
+    		fragment = parser.antlr.XtextAntlrGeneratorFragment auto-inject {
+    		//  options = {
+    		//      backtrack = true
+    		//  }
+    		}
+    
+    		// Xtend-based API for validation
+    		fragment = validation.ValidatorFragment auto-inject {
+    		//    composedCheck = "org.eclipse.xtext.validation.ImportUriValidator"
+    		//    composedCheck = "org.eclipse.xtext.validation.NamesAreUniqueValidator"
+    		}
+    
+    		// old scoping and exporting API
+    		// fragment = scoping.ImportURIScopingFragment auto-inject {}
+    		// fragment = exporting.SimpleNamesFragment auto-inject {}
+    
+    		// scoping and exporting API
+    		fragment = scoping.ImportNamespacesScopingFragment auto-inject {}
+    		fragment = exporting.QualifiedNamesFragment auto-inject {}
+    		fragment = builder.BuilderIntegrationFragment auto-inject {}
+    
+    		// generator API
+    		fragment = generator.GeneratorFragment auto-inject {}
+    
+    		// formatter API
+    		fragment = formatting.FormatterFragment auto-inject {}
+    
+    		// labeling API
+    		fragment = labeling.LabelProviderFragment auto-inject {}
+    
+    		// outline API
+    		fragment = outline.OutlineTreeProviderFragment auto-inject {}
+    		fragment = outline.QuickOutlineFragment auto-inject {}
+    
+    		// quickfix API
+    		fragment = quickfix.QuickfixProviderFragment auto-inject {}
+    
+    		// content assist API
+    		fragment = contentAssist.ContentAssistFragment auto-inject {}
+    
+    		// generates a more lightweight Antlr parser and lexer tailored for content assist
+    		fragment = parser.antlr.XtextAntlrUiGeneratorFragment auto-inject {}
+    
+    		// generates junit test support classes into Generator#pathTestProject
+    		fragment = junit.Junit4Fragment auto-inject {}
+    
+    		// rename refactoring
+    		fragment = refactoring.RefactorElementNameFragment auto-inject {}
+    
+    		// provides the necessary bindings for java types integration
+    		fragment = types.TypesGeneratorFragment auto-inject {}
+    
+    		// generates the required bindings only if the grammar inherits from Xbase
+    		fragment = xbase.XbaseGeneratorFragment auto-inject {}
+    
+    		// provides a preference page for template proposals
+    		fragment = templates.CodetemplatesGeneratorFragment auto-inject {}
+    
+    		// provides a compare view
+    		fragment = compare.CompareFragment auto-inject {}
+    	}
+    }
+}
+
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.xtend	(revision 61)
@@ -0,0 +1,41 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.formatting
+
+import com.google.inject.Inject
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess
+import org.eclipse.xtext.Keyword
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter
+import org.eclipse.xtext.formatting.impl.FormattingConfig
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation.html#formatting
+ * on how and when to use it 
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+class EbnfFormatter extends AbstractDeclarativeFormatter {
+
+	@Inject extension EbnfGrammarAccess
+
+	override protected void configureFormatting(FormattingConfig c) {
+
+		// They will add and preserve newlines around comments
+		c.setLinewrap(0, 1, 2).before(SL_COMMENTRule)
+		c.setLinewrap(0, 1, 2).before(ML_COMMENTRule)
+		c.setLinewrap(0, 1, 1).after(ML_COMMENTRule)
+
+		
+		var EbnfGrammarAccess f = getGrammarAccess as EbnfGrammarAccess;
+		c.setLinewrap.before(f.ruleRule);
+		c.setLinewrap.before(f.importRule);
+//		//c.setLinewrap.after(f.);
+//		for (Keyword bar : f.findKeywords("|")) {
+//			c.setSpace("\n\t\t").before(bar);
+//		}
+
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.xtend	(revision 61)
@@ -0,0 +1,87 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.generator
+
+import org.eclipse.emf.ecore.resource.Resource
+import org.eclipse.xtext.generator.IGenerator
+import org.eclipse.xtext.generator.IFileSystemAccess
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry
+import de.ugoe.cs.swe.bnftools.ebnf.Rule
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition
+import de.ugoe.cs.swe.bnftools.ebnf.Term
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence
+import de.ugoe.cs.swe.bnftools.ebnf.Atom
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule
+
+/**
+ * Generates code from your model files on save.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#TutorialCodeGeneration
+ */
+class EbnfGenerator implements IGenerator {
+	//generation of the file
+	override void doGenerate(Resource resource, IFileSystemAccess fsa) {
+		for (e : resource.allContents.toIterable.filter(EtsiBnf)) {
+			if (e.bnfEntry.size!=0) {
+				fsa.generateFile(e.name + ".fo", e.compile)
+			}
+		}
+	}
+
+	// compile the different entities of the Bnf-----------------------------------------------------------------------------
+	def compile(EtsiBnf bnf) 
+	'''
+	<?xml version="1.0"?>
+	<!-- fop hello.xml -rtf hello.rtf -->
+	<fo:root xmlns:fo="http://www.w3.org/1999/XSL/Format">
+
+		<fo:layout-master-set>
+	  		<fo:simple-page-master master-name="A4" page-width="210mm" page-height="297mm">
+	    		<fo:region-body region-name="xsl-region-body"  margin="2cm"/>
+	     	</fo:simple-page-master>
+		</fo:layout-master-set>
+	
+		<fo:page-sequence  master-reference="A4">
+			<fo:flow flow-name="xsl-region-body" font-family="verdana">
+				«FOR bnfentry:bnf.bnfEntry»
+					«bnfentry.compile»
+				«ENDFOR»
+			</fo:flow>
+		</fo:page-sequence>
+	</fo:root>'''
+	
+	def compile(BnfEntry bnfEntry)'''
+		«IF bnfEntry.rule!= null»
+				«bnfEntry.rule.compile»
+		«ENDIF»
+	'''
+	
+	def compile(Rule rule)'''<fo:block><fo:inline id="«rule.name»"	color="purple">«rule.name»</fo:inline>	::=	«rule.definitionList.compile»</block>'''
+	
+	def compile(DefinitionList dList)'''«FOR sDef:dList.singleDefinition»«sDef.compile»«IF !sDef.equals(dList.singleDefinition.last)» | «ENDIF»«ENDFOR»'''
+	
+	def compile(SingleDefinition sDefinition)'''«FOR term:sDefinition.terms»«term.compile»«ENDFOR»'''
+	
+	def compile(Term term)'''«IF term.termAtom!=null»«term.termAtom.compile»«ENDIF»«IF term.termOptionalSequence!=null»«term.termOptionalSequence.compile»«ENDIF»«IF term.termRepeatedSequence!=null»«term.termRepeatedSequence.compile»«ENDIF»«IF term.termGroupedSequence!=null»«term.termGroupedSequence.compile»«ENDIF»'''
+	
+	def compile(GroupedSequence gSequ)'''«FOR d :gSequ.definitionList»«d.compile»«ENDFOR»'''
+
+	def compile(RepeatedSequence rSequ)'''{«FOR d:rSequ.definitions»«d.compile»«ENDFOR»}«IF rSequ.morethanonce»+«ENDIF»'''
+	
+	def compile(OptionalSequence oSequ)'''(«FOR d:oSequ.definitionList»«d.compile»«ENDFOR»)'''
+	
+	def compile(Atom atom)'''
+	«IF atom.atomRuleReference!= null»«atom.atomRuleReference.compile»«ENDIF»«IF atom.atomStringRule!= null»«atom.atomStringRule.compile»«ENDIF»'''
+	
+	def compile(RuleReference rRef)'''<fo:basic-link internal-destination="«rRef.ruleref.name»" text-decoration="underline" color="blue">«rRef.ruleref.name»</fo:basic-link>'''
+	
+	def compile(StringRule sRule)'''«IF sRule.colon!=null»«sRule.colon»«ENDIF»«IF sRule.literal!=null»«sRule.literal»«ENDIF»'''
+	
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.xtend	(revision 61)
@@ -0,0 +1,15 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.scoping
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation.html#scoping
+ * on how and when to use it 
+ *
+ */
+class EbnfScopeProvider extends org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider {
+
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/DuplicateEntry.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/DuplicateEntry.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/DuplicateEntry.java	(revision 61)
@@ -0,0 +1,37 @@
+package de.ugoe.cs.swe.bnftools.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+public class DuplicateEntry {
+	String snippet;
+	List<Rule> rules = new ArrayList<Rule>();
+
+	public String getSnippet() {
+		return snippet;
+	}
+
+	public void setSnippet(String snippet) {
+		this.snippet = snippet;
+	}
+
+	public List<Rule> getRules() {
+		return rules;
+	}
+
+	public void setRules(List<Rule> rule) {
+		this.rules = rule;
+	}
+
+	public void addRule(Rule r) {
+		if (!rules.contains(r))
+			rules.add(r);
+	}
+	
+	public int getMatchCount() {
+		return rules.size();
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfAnalysisUtils.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfAnalysisUtils.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfAnalysisUtils.java	(revision 61)
@@ -0,0 +1,85 @@
+package de.ugoe.cs.swe.bnftools.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.xtext.EcoreUtil2;
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+
+public class EbnfAnalysisUtils {
+
+	//----------------------------------------------------------------------------------------------------
+
+	static public boolean isPassthroughRule(Rule rule) {
+		DefinitionList definitionList = rule.getDefinitionList();
+		if (definitionList == null)
+			return false;
+		
+		if (rule.getDefinitionList().getSingleDefinition().size() == 1) {
+			SingleDefinition element = rule.getDefinitionList().getSingleDefinition().get(0);
+			if (element.getTerms().size() == 1) {
+				Term first = element.getTerms().get(0);
+				if (first.getTermAtom() != null) {
+					Atom atom = (Atom) first.getTermAtom();
+					if (atom.getAtomRuleReference() != null)
+						return true;
+				}
+			}
+		}
+
+		return false;
+	}
+
+
+	
+	//----------------------------------------------------------------------------------------------------
+
+	static public boolean isTokenRule(Rule rule) {
+		DefinitionList definitionList = rule.getDefinitionList();
+		if (definitionList == null)
+			return false;
+		
+		if (rule.getDefinitionList().getSingleDefinition().size() == 1) {
+			SingleDefinition element = rule.getDefinitionList().getSingleDefinition().get(0);
+			if (element.getTerms().size() == 1) {
+				Term first = element.getTerms().get(0);
+				Atom atom = first.getTermAtom();
+				if (atom != null && atom.getAtomStringRule() != null)  {
+					return true;
+				}
+			}
+		}
+
+		return false;
+	}
+
+
+
+	//----------------------------------------------------------------------------------------------------
+
+	static public List<RuleReference> findReferences(Rule rule) {
+		List<RuleReference> ruleReferences = new ArrayList<RuleReference>();
+		EtsiBnf bnf = (EtsiBnf) rule.eContainer().eContainer();
+
+		List<RuleReference> rules = EcoreUtil2.getAllContentsOfType(bnf, RuleReference.class);
+		for (RuleReference r : rules) {
+			if(r.getRuleref().getName().equals(rule.getName())){
+				ruleReferences.add(r);
+			}
+		}
+		
+		return ruleReferences;
+	}
+
+	//----------------------------------------------------------------------------------------------------
+	public static List<Rule> getAllRules(EtsiBnf bnf){
+		List<Rule> rules = EcoreUtil2.getAllContentsOfType(bnf, Rule.class);
+		return rules;
+	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.xtend	(revision 61)
@@ -0,0 +1,196 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.validation
+
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage
+import java.util.List
+import org.eclipse.xtext.validation.Check
+import de.ugoe.cs.swe.bnftools.ebnf.Rule
+import org.eclipse.xtext.nodemodel.util.NodeModelUtils
+import org.eclipse.xtext.nodemodel.ICompositeNode
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition
+//import java.util.HashMap
+//import java.util.Set
+//import java.util.HashSet
+
+//import org.eclipse.xtext.validation.Check
+/**
+ * Custom validation rules. 
+ *
+ * see http://www.eclipse.org/Xtext/documentation.html#validation
+ */
+class EbnfValidator extends AbstractEbnfValidator {
+
+	static final String ruleReferencedOneDescription = "The rule is only referenced by one other rule";
+	static final String passthroughRuleDescription = "The rule is a passthrough rule";
+	static final String unreferencedPassthroughRuleDescription = "The rule is an unreferenced passthrough rule";
+	static final String unusedRuleDescription = "The rule is not referenced anywhere";
+	static final String equalAlternativeDescription = "The rule contains equal alternatives";
+	static final String duplicateRulesDescription = "The rule is a duplicate";
+	//	 static final String duplicateSubRulesDescription = "A part the of rule is a duplicate";
+	static final String nonUniqueNameDescription = "The rule has the same Name as the Rule in Line ";
+
+	// ----------------------------------------------------------------------------------------------------
+	/* Checks if a rule is only referenced by one other Rule, e.g.:
+		 * a ::= b
+		 * b ::= "foo"
+		 */
+	@Check
+	def void checkReferencedOnlyOnce(Rule rule) {
+
+		if (EbnfAnalysisUtils.isTokenRule(rule))
+			return;
+
+		var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+
+		if (references.size() == 1 && rule.rulenumber != 1) {
+			warning(ruleReferencedOneDescription, EbnfPackage$Literals::RULE__NAME);
+		}
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	/*Checks if a a rule has the same definition as another rule e.g.:
+	 * a ::= "test"
+	 * b ::= "test"
+	 * (Problem: does not check if there is a permutation)
+	 */
+	@Check
+	def void checkDuplicateRules(Rule rule) {
+
+		//load bnf
+		var EtsiBnf etsiBnf = rule.eContainer().eContainer() as EtsiBnf;
+
+		// find the rule in the parsetree
+		var ICompositeNode definitionList = NodeModelUtils.findActualNodeFor(rule.getDefinitionList());
+
+		//get the definitionList as  formatted string
+		var String rightHandSideText = definitionList.text.trim().replaceAll("[ \t\n\r]", "");
+
+		//get All Rules
+		var List<Rule> allRules = EbnfAnalysisUtils.getAllRules(etsiBnf);
+
+		// run through all Rules
+		for (currentRule : allRules) {
+			if (currentRule != rule) {
+				var ICompositeNode currentRuleDefinitionList = NodeModelUtils.findActualNodeFor(
+					currentRule.getDefinitionList());
+				var String currentRuleRightHandSideText = currentRuleDefinitionList.text.trim().replaceAll("[ \t\n\r]",
+					"");
+
+				if (currentRuleRightHandSideText.equals(rightHandSideText)) {
+					var String description = duplicateRulesDescription + " with rule \"" + currentRule.getName() +
+						"\" (Line " + NodeModelUtils.findActualNodeFor(currentRule).getStartLine() + ")";
+					warning(description, EbnfPackage$Literals::RULE__NAME);
+				}
+			}
+		}
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	/*Checks if a Rule got the same Name as another Rule, e.g.:
+	 * a ::= "foo"
+	 * a ::= "bar"
+	 */
+	@Check
+	def void checkNameIsUnique(Rule rule) {
+		val EtsiBnf bnf = rule.eContainer.eContainer as EtsiBnf;
+		for (r : EbnfAnalysisUtils.getAllRules(bnf)) {
+			if (rule.name.equals(r.name)) {
+				if (!r.equals(rule)) {
+					error(nonUniqueNameDescription + NodeModelUtils.findActualNodeFor(r).startLine,
+						EbnfPackage$Literals::RULE__NAME)
+
+				}
+			}
+		}
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	/*Checks if a Rule, except for the #1 is not referenced, e.g.:
+	 * a::= b
+	 * b::="foo"
+	 * c ::= "bar"
+	 */
+	@Check
+	def void checkUnusedRule(Rule rule) {
+
+		var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+
+		if ((references.size() == 0) && (rule.getRulenumber() != 1))
+			warning(unusedRuleDescription, EbnfPackage$Literals::RULE__NAME);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	/*Checks if a rule got two equal alternatives, e.g.:
+	 * a ::= b | "foo" | b
+	 *(Problem:ignores whitespaces in literals)
+	 */
+	@Check
+	def void checkEqualAlternative(Rule rule) {
+
+		var DefinitionList definitionList = rule.definitionList;
+
+		var List<SingleDefinition> singleDefinitions = definitionList.singleDefinition;
+
+		for (sDef1 : singleDefinitions) {
+			for (sDef2 : singleDefinitions) {
+				if (!sDef1.equals(sDef2)) {
+					var String d1 = NodeModelUtils.findActualNodeFor(sDef1).text.trim.replaceAll("[ \t\n\r]", "");
+					var String d2 = NodeModelUtils.findActualNodeFor(sDef2).text.trim.replaceAll("[ \t\n\r]", "");
+
+					if (d1.equals(d2))
+						warning(equalAlternativeDescription, EbnfPackage$Literals::RULE__NAME,equalAlternativeDescription);
+				}
+			}
+		}
+
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	/* Checks if a rule gets just passed through, e.g.:
+	 * a ::= b | "literal"
+	 * b ::= c 
+	 * c ::= "foo.bar"
+	 */
+	@Check
+	def void checkPassthroughRule(Rule rule) {
+
+		var List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+
+		if (EbnfAnalysisUtils.isPassthroughRule(rule)) {
+			if (references.size() == 0) {
+				warning(unreferencedPassthroughRuleDescription, EbnfPackage$Literals::RULE__NAME);
+			} else {
+				warning(passthroughRuleDescription, EbnfPackage$Literals::RULE__NAME,passthroughRuleDescription);
+			}
+		}
+	}
+
+
+	// ----------------------------------------------------------------------------------------------------
+	/* Checks if a subrule is used more then once, e.g.:
+	 * a ::= (a b) e
+	 * b ::= (a b) d
+	 *       _____
+	 * (Not working, under construction)
+	 */
+//	@Check
+//	def void checkSubruleDuplicates(EtsiBnf bnf){
+//		var HashMap<String, DuplicateEntry> dupesMap = new HashMap<String, DuplicateEntry>();
+//		var Set<String> taggedEntries = new HashSet<String>();
+//		
+//		var List<Rule> allRules = EbnfAnalysisUtils.getAllRules(bnf);
+//		
+//		for(rule: allRules){
+//			var List<SingleDefinition> subrules = rule.definitionList.singleDefinition
+//			for(subrule:subrules){
+//				var String subruleText = NodeModelUtils.findActualNodeFor(subrule).text.trim.replaceAll("[ \t\n\r]", "");
+//				
+//			}
+//		}
+//	}
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/RuleDuplication.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/RuleDuplication.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src/de/ugoe/cs/swe/bnftools/validation/RuleDuplication.java	(revision 61)
@@ -0,0 +1,52 @@
+package de.ugoe.cs.swe.bnftools.validation;
+
+import java.util.ArrayList;
+import java.util.List;
+
+public class RuleDuplication {
+	List<DuplicateEntry> dupes = new ArrayList<DuplicateEntry>();
+
+	public List<DuplicateEntry> getDupes() {
+		return dupes;
+	}
+
+	public void setDupes(List<DuplicateEntry> dupes) {
+		this.dupes = dupes;
+	}
+	
+	public void addDupe(DuplicateEntry dupe) {
+		dupes.add(dupe);
+	}
+	
+	public List<DuplicateEntry> getFilteredDupes() {
+		ArrayList<DuplicateEntry> dupesFiltered = new ArrayList<DuplicateEntry>();
+		
+		dupesFiltered.addAll(dupes);
+		
+		boolean change = true;
+		while (change) {
+			change = false;			
+			for (int i=0; i < dupesFiltered.size(); i++) {
+				for (int j=0; j < dupesFiltered.size(); j++) {
+					DuplicateEntry dupeA = dupesFiltered.get(i);
+					DuplicateEntry dupeB = dupesFiltered.get(j);
+					
+					if (dupeA.getSnippet().contains(dupeB.getSnippet()) && !dupeA.getSnippet().equals(dupeB.getSnippet())) {
+						dupesFiltered.remove(j);
+						change = true;
+					} else if (dupeB.getSnippet().contains(dupeA.getSnippet()) && !dupeB.getSnippet().equals(dupeA.getSnippet())) {
+						dupesFiltered.remove(i);
+						change = true;
+					}
+					if (change)
+						break;
+				}
+				if (change)
+					break;
+			}
+		}
+		
+		return dupesFiltered;
+	}
+	
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/formatting/EbnfFormatter.java	(revision 61)
@@ -0,0 +1,48 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.formatting;
+
+import com.google.inject.Inject;
+import de.ugoe.cs.swe.bnftools.services.EbnfGrammarAccess;
+import org.eclipse.xtext.IGrammarAccess;
+import org.eclipse.xtext.ParserRule;
+import org.eclipse.xtext.TerminalRule;
+import org.eclipse.xtext.formatting.impl.AbstractDeclarativeFormatter;
+import org.eclipse.xtext.formatting.impl.FormattingConfig;
+import org.eclipse.xtext.xbase.lib.Extension;
+
+/**
+ * This class contains custom formatting description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation.html#formatting
+ * on how and when to use it
+ * 
+ * Also see {@link org.eclipse.xtext.xtext.XtextFormattingTokenSerializer} as an example
+ */
+@SuppressWarnings("all")
+public class EbnfFormatter extends AbstractDeclarativeFormatter {
+  @Inject
+  @Extension
+  private EbnfGrammarAccess _ebnfGrammarAccess;
+  
+  protected void configureFormatting(final FormattingConfig c) {
+    FormattingConfig.LinewrapLocator _setLinewrap = c.setLinewrap(0, 1, 2);
+    TerminalRule _sL_COMMENTRule = this._ebnfGrammarAccess.getSL_COMMENTRule();
+    _setLinewrap.before(_sL_COMMENTRule);
+    FormattingConfig.LinewrapLocator _setLinewrap_1 = c.setLinewrap(0, 1, 2);
+    TerminalRule _mL_COMMENTRule = this._ebnfGrammarAccess.getML_COMMENTRule();
+    _setLinewrap_1.before(_mL_COMMENTRule);
+    FormattingConfig.LinewrapLocator _setLinewrap_2 = c.setLinewrap(0, 1, 1);
+    TerminalRule _mL_COMMENTRule_1 = this._ebnfGrammarAccess.getML_COMMENTRule();
+    _setLinewrap_2.after(_mL_COMMENTRule_1);
+    IGrammarAccess _grammarAccess = this.getGrammarAccess();
+    EbnfGrammarAccess f = ((EbnfGrammarAccess) _grammarAccess);
+    FormattingConfig.LinewrapLocator _setLinewrap_3 = c.setLinewrap();
+    ParserRule _ruleRule = f.getRuleRule();
+    _setLinewrap_3.before(_ruleRule);
+    FormattingConfig.LinewrapLocator _setLinewrap_4 = c.setLinewrap();
+    ParserRule _importRule = f.getImportRule();
+    _setLinewrap_4.before(_importRule);
+  }
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/generator/EbnfGenerator.java	(revision 61)
@@ -0,0 +1,312 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.generator;
+
+import com.google.common.base.Objects;
+import com.google.common.collect.Iterables;
+import de.ugoe.cs.swe.bnftools.ebnf.Atom;
+import de.ugoe.cs.swe.bnftools.ebnf.BnfEntry;
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.GroupedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.OptionalSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.RepeatedSequence;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Term;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.TreeIterator;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtend2.lib.StringConcatenation;
+import org.eclipse.xtext.generator.IFileSystemAccess;
+import org.eclipse.xtext.generator.IGenerator;
+import org.eclipse.xtext.xbase.lib.IterableExtensions;
+import org.eclipse.xtext.xbase.lib.IteratorExtensions;
+
+/**
+ * Generates code from your model files on save.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#TutorialCodeGeneration
+ */
+@SuppressWarnings("all")
+public class EbnfGenerator implements IGenerator {
+  public void doGenerate(final Resource resource, final IFileSystemAccess fsa) {
+    TreeIterator<EObject> _allContents = resource.getAllContents();
+    Iterable<EObject> _iterable = IteratorExtensions.<EObject>toIterable(_allContents);
+    Iterable<EtsiBnf> _filter = Iterables.<EtsiBnf>filter(_iterable, EtsiBnf.class);
+    for (final EtsiBnf e : _filter) {
+      EList<BnfEntry> _bnfEntry = e.getBnfEntry();
+      int _size = _bnfEntry.size();
+      boolean _notEquals = (_size != 0);
+      if (_notEquals) {
+        String _name = e.getName();
+        String _plus = (_name + ".fo");
+        CharSequence _compile = this.compile(e);
+        fsa.generateFile(_plus, _compile);
+      }
+    }
+  }
+  
+  public CharSequence compile(final EtsiBnf bnf) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("<?xml version=\"1.0\"?>");
+    _builder.newLine();
+    _builder.append("<!-- fop hello.xml -rtf hello.rtf -->");
+    _builder.newLine();
+    _builder.append("<fo:root xmlns:fo=\"http://www.w3.org/1999/XSL/Format\">");
+    _builder.newLine();
+    _builder.newLine();
+    _builder.append("\t");
+    _builder.append("<fo:layout-master-set>");
+    _builder.newLine();
+    _builder.append("  \t\t");
+    _builder.append("<fo:simple-page-master master-name=\"A4\" page-width=\"210mm\" page-height=\"297mm\">");
+    _builder.newLine();
+    _builder.append("    \t\t");
+    _builder.append("<fo:region-body region-name=\"xsl-region-body\"  margin=\"2cm\"/>");
+    _builder.newLine();
+    _builder.append("     \t");
+    _builder.append("</fo:simple-page-master>");
+    _builder.newLine();
+    _builder.append("\t");
+    _builder.append("</fo:layout-master-set>");
+    _builder.newLine();
+    _builder.newLine();
+    _builder.append("\t");
+    _builder.append("<fo:page-sequence  master-reference=\"A4\">");
+    _builder.newLine();
+    _builder.append("\t\t");
+    _builder.append("<fo:flow flow-name=\"xsl-region-body\" font-family=\"verdana\">");
+    _builder.newLine();
+    {
+      EList<BnfEntry> _bnfEntry = bnf.getBnfEntry();
+      for(final BnfEntry bnfentry : _bnfEntry) {
+        _builder.append("\t\t\t");
+        CharSequence _compile = this.compile(bnfentry);
+        _builder.append(_compile, "\t\t\t");
+        _builder.newLineIfNotEmpty();
+      }
+    }
+    _builder.append("\t\t");
+    _builder.append("</fo:flow>");
+    _builder.newLine();
+    _builder.append("\t");
+    _builder.append("</fo:page-sequence>");
+    _builder.newLine();
+    _builder.append("</fo:root>");
+    return _builder;
+  }
+  
+  public CharSequence compile(final BnfEntry bnfEntry) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      Rule _rule = bnfEntry.getRule();
+      boolean _notEquals = (!Objects.equal(_rule, null));
+      if (_notEquals) {
+        Rule _rule_1 = bnfEntry.getRule();
+        CharSequence _compile = this.compile(_rule_1);
+        _builder.append(_compile, "");
+        _builder.newLineIfNotEmpty();
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final Rule rule) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("<fo:block><fo:inline id=\"");
+    String _name = rule.getName();
+    _builder.append(_name, "");
+    _builder.append("\"\tcolor=\"purple\">");
+    String _name_1 = rule.getName();
+    _builder.append(_name_1, "");
+    _builder.append("</fo:inline>\t::=\t");
+    DefinitionList _definitionList = rule.getDefinitionList();
+    CharSequence _compile = this.compile(_definitionList);
+    _builder.append(_compile, "");
+    _builder.append("</block>");
+    return _builder;
+  }
+  
+  public CharSequence compile(final DefinitionList dList) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      EList<SingleDefinition> _singleDefinition = dList.getSingleDefinition();
+      for(final SingleDefinition sDef : _singleDefinition) {
+        CharSequence _compile = this.compile(sDef);
+        _builder.append(_compile, "");
+        {
+          EList<SingleDefinition> _singleDefinition_1 = dList.getSingleDefinition();
+          SingleDefinition _last = IterableExtensions.<SingleDefinition>last(_singleDefinition_1);
+          boolean _equals = sDef.equals(_last);
+          boolean _not = (!_equals);
+          if (_not) {
+            _builder.append(" | ");
+          }
+        }
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final SingleDefinition sDefinition) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      EList<Term> _terms = sDefinition.getTerms();
+      for(final Term term : _terms) {
+        CharSequence _compile = this.compile(term);
+        _builder.append(_compile, "");
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final Term term) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      Atom _termAtom = term.getTermAtom();
+      boolean _notEquals = (!Objects.equal(_termAtom, null));
+      if (_notEquals) {
+        Atom _termAtom_1 = term.getTermAtom();
+        CharSequence _compile = this.compile(_termAtom_1);
+        _builder.append(_compile, "");
+      }
+    }
+    {
+      OptionalSequence _termOptionalSequence = term.getTermOptionalSequence();
+      boolean _notEquals_1 = (!Objects.equal(_termOptionalSequence, null));
+      if (_notEquals_1) {
+        OptionalSequence _termOptionalSequence_1 = term.getTermOptionalSequence();
+        CharSequence _compile_1 = this.compile(_termOptionalSequence_1);
+        _builder.append(_compile_1, "");
+      }
+    }
+    {
+      RepeatedSequence _termRepeatedSequence = term.getTermRepeatedSequence();
+      boolean _notEquals_2 = (!Objects.equal(_termRepeatedSequence, null));
+      if (_notEquals_2) {
+        RepeatedSequence _termRepeatedSequence_1 = term.getTermRepeatedSequence();
+        CharSequence _compile_2 = this.compile(_termRepeatedSequence_1);
+        _builder.append(_compile_2, "");
+      }
+    }
+    {
+      GroupedSequence _termGroupedSequence = term.getTermGroupedSequence();
+      boolean _notEquals_3 = (!Objects.equal(_termGroupedSequence, null));
+      if (_notEquals_3) {
+        GroupedSequence _termGroupedSequence_1 = term.getTermGroupedSequence();
+        CharSequence _compile_3 = this.compile(_termGroupedSequence_1);
+        _builder.append(_compile_3, "");
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final GroupedSequence gSequ) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      EList<DefinitionList> _definitionList = gSequ.getDefinitionList();
+      for(final DefinitionList d : _definitionList) {
+        Object _compile = this.compile(d);
+        _builder.append(_compile, "");
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final RepeatedSequence rSequ) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("{");
+    {
+      EList<DefinitionList> _definitions = rSequ.getDefinitions();
+      for(final DefinitionList d : _definitions) {
+        Object _compile = this.compile(d);
+        _builder.append(_compile, "");
+      }
+    }
+    _builder.append("}");
+    {
+      boolean _isMorethanonce = rSequ.isMorethanonce();
+      if (_isMorethanonce) {
+        _builder.append("+");
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final OptionalSequence oSequ) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("(");
+    {
+      EList<DefinitionList> _definitionList = oSequ.getDefinitionList();
+      for(final DefinitionList d : _definitionList) {
+        Object _compile = this.compile(d);
+        _builder.append(_compile, "");
+      }
+    }
+    _builder.append(")");
+    return _builder;
+  }
+  
+  public CharSequence compile(final Atom atom) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      RuleReference _atomRuleReference = atom.getAtomRuleReference();
+      boolean _notEquals = (!Objects.equal(_atomRuleReference, null));
+      if (_notEquals) {
+        RuleReference _atomRuleReference_1 = atom.getAtomRuleReference();
+        CharSequence _compile = this.compile(_atomRuleReference_1);
+        _builder.append(_compile, "");
+      }
+    }
+    {
+      StringRule _atomStringRule = atom.getAtomStringRule();
+      boolean _notEquals_1 = (!Objects.equal(_atomStringRule, null));
+      if (_notEquals_1) {
+        StringRule _atomStringRule_1 = atom.getAtomStringRule();
+        CharSequence _compile_1 = this.compile(_atomStringRule_1);
+        _builder.append(_compile_1, "");
+      }
+    }
+    return _builder;
+  }
+  
+  public CharSequence compile(final RuleReference rRef) {
+    StringConcatenation _builder = new StringConcatenation();
+    _builder.append("<fo:basic-link internal-destination=\"");
+    Rule _ruleref = rRef.getRuleref();
+    String _name = _ruleref.getName();
+    _builder.append(_name, "");
+    _builder.append("\" text-decoration=\"underline\" color=\"blue\">");
+    Rule _ruleref_1 = rRef.getRuleref();
+    String _name_1 = _ruleref_1.getName();
+    _builder.append(_name_1, "");
+    _builder.append("</fo:basic-link>");
+    return _builder;
+  }
+  
+  public CharSequence compile(final StringRule sRule) {
+    StringConcatenation _builder = new StringConcatenation();
+    {
+      String _colon = sRule.getColon();
+      boolean _notEquals = (!Objects.equal(_colon, null));
+      if (_notEquals) {
+        String _colon_1 = sRule.getColon();
+        _builder.append(_colon_1, "");
+      }
+    }
+    {
+      String _literal = sRule.getLiteral();
+      boolean _notEquals_1 = (!Objects.equal(_literal, null));
+      if (_notEquals_1) {
+        String _literal_1 = sRule.getLiteral();
+        _builder.append(_literal_1, "");
+      }
+    }
+    return _builder;
+  }
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/scoping/EbnfScopeProvider.java	(revision 61)
@@ -0,0 +1,16 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.scoping;
+
+import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+
+/**
+ * This class contains custom scoping description.
+ * 
+ * see : http://www.eclipse.org/Xtext/documentation.html#scoping
+ * on how and when to use it
+ */
+@SuppressWarnings("all")
+public class EbnfScopeProvider extends AbstractDeclarativeScopeProvider {
+}
Index: /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.java
===================================================================
--- /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.java	(revision 61)
+++ /v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/xtend-gen/de/ugoe/cs/swe/bnftools/validation/EbnfValidator.java	(revision 61)
@@ -0,0 +1,215 @@
+/**
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.validation;
+
+import com.google.common.base.Objects;
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+import de.ugoe.cs.swe.bnftools.ebnf.EbnfPackage;
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.SingleDefinition;
+import de.ugoe.cs.swe.bnftools.validation.AbstractEbnfValidator;
+import de.ugoe.cs.swe.bnftools.validation.EbnfAnalysisUtils;
+import java.util.List;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.nodemodel.ICompositeNode;
+import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
+import org.eclipse.xtext.validation.Check;
+
+/**
+ * Custom validation rules.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation.html#validation
+ */
+@SuppressWarnings("all")
+public class EbnfValidator extends AbstractEbnfValidator {
+  private final static String ruleReferencedOneDescription = "The rule is only referenced by one other rule";
+  
+  private final static String passthroughRuleDescription = "The rule is a passthrough rule";
+  
+  private final static String unreferencedPassthroughRuleDescription = "The rule is an unreferenced passthrough rule";
+  
+  private final static String unusedRuleDescription = "The rule is not referenced anywhere";
+  
+  private final static String equalAlternativeDescription = "The rule contains equal alternatives";
+  
+  private final static String duplicateRulesDescription = "The rule is a duplicate";
+  
+  private final static String nonUniqueNameDescription = "The rule has the same Name as the Rule in Line ";
+  
+  /**
+   * Checks if a rule is only referenced by one other Rule, e.g.:
+   * a ::= b
+   * b ::= "foo"
+   */
+  @Check
+  public void checkReferencedOnlyOnce(final Rule rule) {
+    boolean _isTokenRule = EbnfAnalysisUtils.isTokenRule(rule);
+    if (_isTokenRule) {
+      return;
+    }
+    List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+    boolean _and = false;
+    int _size = references.size();
+    boolean _equals = (_size == 1);
+    if (!_equals) {
+      _and = false;
+    } else {
+      int _rulenumber = rule.getRulenumber();
+      boolean _notEquals = (_rulenumber != 1);
+      _and = _notEquals;
+    }
+    if (_and) {
+      this.warning(EbnfValidator.ruleReferencedOneDescription, EbnfPackage.Literals.RULE__NAME);
+    }
+  }
+  
+  /**
+   * Checks if a a rule has the same definition as another rule e.g.:
+   * a ::= "test"
+   * b ::= "test"
+   * (Problem: does not check if there is a permutation)
+   */
+  @Check
+  public void checkDuplicateRules(final Rule rule) {
+    EObject _eContainer = rule.eContainer();
+    EObject _eContainer_1 = _eContainer.eContainer();
+    EtsiBnf etsiBnf = ((EtsiBnf) _eContainer_1);
+    DefinitionList _definitionList = rule.getDefinitionList();
+    ICompositeNode definitionList = NodeModelUtils.findActualNodeFor(_definitionList);
+    String _text = definitionList.getText();
+    String _trim = _text.trim();
+    String rightHandSideText = _trim.replaceAll("[ \t\n\r]", "");
+    List<Rule> allRules = EbnfAnalysisUtils.getAllRules(etsiBnf);
+    for (final Rule currentRule : allRules) {
+      boolean _notEquals = (!Objects.equal(currentRule, rule));
+      if (_notEquals) {
+        DefinitionList _definitionList_1 = currentRule.getDefinitionList();
+        ICompositeNode currentRuleDefinitionList = NodeModelUtils.findActualNodeFor(_definitionList_1);
+        String _text_1 = currentRuleDefinitionList.getText();
+        String _trim_1 = _text_1.trim();
+        String currentRuleRightHandSideText = _trim_1.replaceAll("[ \t\n\r]", 
+          "");
+        boolean _equals = currentRuleRightHandSideText.equals(rightHandSideText);
+        if (_equals) {
+          String _name = currentRule.getName();
+          String _plus = ((EbnfValidator.duplicateRulesDescription + " with rule \"") + _name);
+          String _plus_1 = (_plus + 
+            "\" (Line ");
+          ICompositeNode _findActualNodeFor = NodeModelUtils.findActualNodeFor(currentRule);
+          int _startLine = _findActualNodeFor.getStartLine();
+          String _plus_2 = (_plus_1 + Integer.valueOf(_startLine));
+          String description = (_plus_2 + ")");
+          this.warning(description, EbnfPackage.Literals.RULE__NAME);
+        }
+      }
+    }
+  }
+  
+  /**
+   * Checks if a Rule got the same Name as another Rule, e.g.:
+   * a ::= "foo"
+   * a ::= "bar"
+   */
+  @Check
+  public void checkNameIsUnique(final Rule rule) {
+    EObject _eContainer = rule.eContainer();
+    EObject _eContainer_1 = _eContainer.eContainer();
+    final EtsiBnf bnf = ((EtsiBnf) _eContainer_1);
+    List<Rule> _allRules = EbnfAnalysisUtils.getAllRules(bnf);
+    for (final Rule r : _allRules) {
+      String _name = rule.getName();
+      String _name_1 = r.getName();
+      boolean _equals = _name.equals(_name_1);
+      if (_equals) {
+        boolean _equals_1 = r.equals(rule);
+        boolean _not = (!_equals_1);
+        if (_not) {
+          ICompositeNode _findActualNodeFor = NodeModelUtils.findActualNodeFor(r);
+          int _startLine = _findActualNodeFor.getStartLine();
+          String _plus = (EbnfValidator.nonUniqueNameDescription + Integer.valueOf(_startLine));
+          this.error(_plus, 
+            EbnfPackage.Literals.RULE__NAME);
+        }
+      }
+    }
+  }
+  
+  /**
+   * Checks if a Rule, except for the #1 is not referenced, e.g.:
+   * a::= b
+   * b::="foo"
+   * c ::= "bar"
+   */
+  @Check
+  public void checkUnusedRule(final Rule rule) {
+    List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+    boolean _and = false;
+    int _size = references.size();
+    boolean _equals = (_size == 0);
+    if (!_equals) {
+      _and = false;
+    } else {
+      int _rulenumber = rule.getRulenumber();
+      boolean _notEquals = (_rulenumber != 1);
+      _and = _notEquals;
+    }
+    if (_and) {
+      this.warning(EbnfValidator.unusedRuleDescription, EbnfPackage.Literals.RULE__NAME);
+    }
+  }
+  
+  /**
+   * Checks if a rule got two equal alternatives, e.g.:
+   * a ::= b | "foo" | b
+   * (Problem:ignores whitespaces in literals)
+   */
+  @Check
+  public void checkEqualAlternative(final Rule rule) {
+    DefinitionList definitionList = rule.getDefinitionList();
+    List<SingleDefinition> singleDefinitions = definitionList.getSingleDefinition();
+    for (final SingleDefinition sDef1 : singleDefinitions) {
+      for (final SingleDefinition sDef2 : singleDefinitions) {
+        boolean _equals = sDef1.equals(sDef2);
+        boolean _not = (!_equals);
+        if (_not) {
+          ICompositeNode _findActualNodeFor = NodeModelUtils.findActualNodeFor(sDef1);
+          String _text = _findActualNodeFor.getText();
+          String _trim = _text.trim();
+          String d1 = _trim.replaceAll("[ \t\n\r]", "");
+          ICompositeNode _findActualNodeFor_1 = NodeModelUtils.findActualNodeFor(sDef2);
+          String _text_1 = _findActualNodeFor_1.getText();
+          String _trim_1 = _text_1.trim();
+          String d2 = _trim_1.replaceAll("[ \t\n\r]", "");
+          boolean _equals_1 = d1.equals(d2);
+          if (_equals_1) {
+            this.warning(EbnfValidator.equalAlternativeDescription, EbnfPackage.Literals.RULE__NAME, EbnfValidator.equalAlternativeDescription);
+          }
+        }
+      }
+    }
+  }
+  
+  /**
+   * Checks if a rule gets just passed through, e.g.:
+   * a ::= b | "literal"
+   * b ::= c
+   * c ::= "foo.bar"
+   */
+  @Check
+  public void checkPassthroughRule(final Rule rule) {
+    List<RuleReference> references = EbnfAnalysisUtils.findReferences(rule);
+    boolean _isPassthroughRule = EbnfAnalysisUtils.isPassthroughRule(rule);
+    if (_isPassthroughRule) {
+      int _size = references.size();
+      boolean _equals = (_size == 0);
+      if (_equals) {
+        this.warning(EbnfValidator.unreferencedPassthroughRuleDescription, EbnfPackage.Literals.RULE__NAME);
+      } else {
+        this.warning(EbnfValidator.passthroughRuleDescription, EbnfPackage.Literals.RULE__NAME, EbnfValidator.passthroughRuleDescription);
+      }
+    }
+  }
+}
