Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.classpath	(revision 5)
@@ -0,0 +1,8 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="src" path="src-gen"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/.project	(revision 5)
@@ -0,0 +1,28 @@
+<?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>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+		<nature>org.eclipse.pde.PluginNature</nature>
+	</natures>
+</projectDescription>
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/META-INF/MANIFEST.MF	(revision 5)
@@ -0,0 +1,22 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: bnftools ui
+Bundle-Vendor: Software Engineering for Distributed Systems Group, University of Göttingen
+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,
+ org.eclipse.ui.ide,
+ org.eclipse.xtext.ui.shared,
+ org.eclipse.ui,
+ org.antlr.runtime,
+ org.eclipse.xtext.builder,
+ org.eclipse.draw2d,
+ org.eclipse.ltk.core.refactoring,
+ org.eclipse.ltk.ui.refactoring
+Import-Package: org.apache.log4j
+Bundle-RequiredExecutionEnvironment: J2SE-1.5
+Export-Package: de.ugoe.cs.swe.bnftools.ui.contentassist.antlr
+Bundle-Activator: de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/build.properties	(revision 5)
@@ -0,0 +1,4 @@
+source.. = src/,src-gen/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml	(revision 5)
@@ -0,0 +1,437 @@
+<?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>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.rename.RenameRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.rename">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.modelingtools.SaveXMIHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savexmi">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.modelingtools.SaveNodeModelXMIHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savenodemodelxmi">
+            <activeWhen>
+                <reference
+                    definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                </reference>
+            </activeWhen>
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.autorenumber.AutoRenumberRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.autorenumber">
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.replacepassthroughrules.ReplaceAllPassthroughRulesRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.replacepassthroughrules">
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.removeunusedrules.RemoveUnusedRulesRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.removeunusedrules">
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.uppercasetokenrules.UppercaseTokenRulesRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.uppercasetokenrules">
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.inlinetokenrules.InlineTokenRulesRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinetokenrules">
+        </handler>
+        <handler
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.refactoring.inlinesinglereferencedrules.InlineSingleReferencedRulesRefactoringHandler"
+              commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinesinglereferencedrules">
+        </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>
+    </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>
+        <page
+              category="de.ugoe.cs.swe.bnftools.Ebnf"
+              class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.preferences.ValidationPreferencePage"
+              id="de.ugoe.cs.swe.bnftools.Ebnf.validation"
+              name="Validation Settings">
+        </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>
+      <command
+            description="Rename Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.rename"
+            name="Rename">
+      </command>
+      <command
+            description="Save XMI"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savexmi"
+            name="Save Ecore XMI">
+      </command>
+      <command
+            description="Save Xtext Node Model XMI"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savenodemodelxmi"
+            name="Save Xtext Node Model XMI">
+      </command>
+      <command
+            description="Auto Renumber Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.autorenumber"
+            name="Auto Renumber">
+      </command>
+      <command
+            description="Replace All Passthrough Rules Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.replacepassthroughrules"
+            name="Replace All Passthrough Rules">
+      </command>
+      <command
+            description="Remove Unused Rules Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.removeunusedrules"
+            name="Remove Unused Rules">
+      </command>
+      <command
+            description="Uppercase Token Rules Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.uppercasetokenrules"
+            name="Uppercase Token Rules">
+      </command>
+      <command
+            description="Inline Token Rules Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinetokenrules"
+            name="Inline Token Rules">
+      </command>
+      <command
+            description="Inline All Single References Rules Refactoring"
+            id="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinesinglereferencedrules"
+            name="Inline All Single References Rules">
+      </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>
+             <menu
+                   id="org.etsi.bnftools.refactoring.menu"
+                   label="Refactoring">
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.rename"
+                      style="push"
+                      tooltip="Trigger Rename Refactoring">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <reference
+                            definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                      </reference>
+                   </visibleWhen>
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.autorenumber"
+                      style="push"
+                      tooltip="Triger Auto Renumber Refactoring">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <reference
+                            definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                      </reference>
+                   </visibleWhen>
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.replacepassthroughrules"
+                      style="push"
+                      tooltip="Trigger Replace All Passthrough Rules Refactoring">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <reference
+                            definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                      </reference>
+                   </visibleWhen>
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.removeunusedrules"
+                      style="push"
+                      tooltip="Trigger Remove Unused Rules Refactoring">
+                   <visibleWhen
+                         checkEnabled="false">
+                      <reference
+                            definitionId="de.ugoe.cs.swe.bnftools.Ebnf.Editor.opened">
+                      </reference>
+                   </visibleWhen>
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.uppercasetokenrules"
+                      style="push"
+                      tooltip="Trigger Uppercase All Token Rules Refactoring">
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinetokenrules"
+                      style="push"
+                      tooltip="Trigger Inline All Token Rules Refactoring">
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.refactoring.inlinesinglereferencedrules"
+                      style="push"
+                      tooltip="Trigger Inline All Single References Rules Refactoring">
+                </command>
+             </menu>
+             <menu
+                   id="org.etsi.bnftools.modelingtools.menu"
+                   label="Modeling Tools">
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savexmi"
+                      style="push"
+                      tooltip="Trigger Save XMI">
+                </command>
+                <command
+                      commandId="de.ugoe.cs.swe.bnftools.Ebnf.modelingtools.savenodemodelxmi"
+                      style="push"
+                      tooltip="Trigger Save Nodel Model XMI">
+                </command>
+             </menu>
+         </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>
+
+
+
+
+	<!-- 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 -->
+   <extension
+         point="org.eclipse.ui.ide.markerResolution">
+      <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator">
+      </markerResolutionGenerator>
+   </extension>
+ <extension
+       point="org.eclipse.ui.views">
+    <view
+          allowMultiple="false"
+          category="de.ugoe.cs.swe.bnftools.ebnf.ui.category"
+          class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram.SyntaxDiagramView"
+          id="org.etsi.bnftools.views.syntaxdiagram.SyntaxDiagramView"
+          name="Syntax Diagram">
+    </view>
+    <category
+          id="de.ugoe.cs.swe.bnftools.ebnf.ui.category"
+          name="Ebnf">
+    </category>
+ </extension>
+ 
+<!--
+   <extension
+       point="org.eclipse.ui.popupMenus">
+    <objectContribution
+          adaptable="false"
+          id="de.ugoe.cs.swe.bnftools.Ebnf.PackageConsistencyCheckerContribution"
+          objectClass="org.eclipse.core.resources.IFile">
+       <action
+             class="de.ugoe.cs.swe.bnftools.ui.actions.PackageConsistencyCheckerAction"
+             id="de.ugoe.cs.swe.bnftools.ebnf.ui.PackageConsistencyCheckerAction"
+             label="[bnftools] Validate delta against updated core grammar">
+       </action>
+    </objectContribution>
+ </extension>
+--> 
+  <extension
+       point="org.eclipse.ui.popupMenus">
+    <objectContribution
+          adaptable="false"
+          id="de.ugoe.cs.swe.bnftools.Ebnf.GenerateCompositeBNFGrammarContribution"
+          objectClass="org.eclipse.core.resources.IFile">
+       <action
+             class="de.ugoe.cs.swe.bnftools.ui.actions.GenerateCompositeBNFAction"
+             id="de.ugoe.cs.swe.bnftools.ebnf.ui.GenerateCompositeBNFAction"
+             label="[bnftools] Generate composite grammar (from merge grammar)">
+       </action>
+    </objectContribution>
+ </extension>
+ 
+  
+  <extension
+       point="org.eclipse.ui.popupMenus">
+    <objectContribution
+          adaptable="false"
+          id="de.ugoe.cs.swe.bnftools.Ebnf.GenerateDefaultMergeDSLMenuContribution"
+          objectClass="org.eclipse.core.resources.IFile">
+       <action
+             class="de.ugoe.cs.swe.bnftools.ui.actions.GenerateDefaultMergeDSLAction"
+             id="de.ugoe.cs.swe.bnftools.ebnf.ui.GenerateDefaultMergeDSLAction"
+             label="[bnftools] Generate merge grammar (from core grammar)">
+       </action>
+    </objectContribution>
+ </extension>
+
+ 
+ <extension
+       point="org.eclipse.ui.popupMenus">
+    <objectContribution
+          adaptable="false"
+          id="de.ugoe.cs.swe.bnftools.Ebnf.GenerateDeltaBnfMenuContribution"
+          objectClass="org.eclipse.core.resources.IFile">
+       <action
+             class="de.ugoe.cs.swe.bnftools.ui.actions.GenerateDeltaBnfAction"
+             id="de.ugoe.cs.swe.bnftools.ebnf.ui.GenerateDeltaBnfAction"
+             label="[bnftools] Generate delta grammar (from extension/package grammar)">
+       </action>
+    </objectContribution>
+ </extension>
+
+ 
+</plugin>
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/plugin.xml_gen	(revision 5)
@@ -0,0 +1,184 @@
+<?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>
+    </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>
+    </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.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>
+    </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>
+    </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>
+
+
+
+
+	<!-- 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 -->
+   <extension
+         point="org.eclipse.ui.ide.markerResolution">
+      <markerResolutionGenerator
+            class="de.ugoe.cs.swe.bnftools.ui.EbnfExecutableExtensionFactory:org.eclipse.xtext.ui.editor.quickfix.MarkerResolutionGenerator">
+      </markerResolutionGenerator>
+   </extension>
+
+</plugin>
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/AbstractEbnfUiModule.java	(revision 5)
@@ -0,0 +1,122 @@
+
+/*
+ * 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.jface.text.rules.ITokenScanner> bindITokenScanner() {
+		return org.eclipse.xtext.ui.editor.syntaxcoloring.antlr.AntlrTokenScanner.class;
+	}
+
+	// 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 Class<? extends org.eclipse.xtext.ui.editor.IDamagerRepairer> bindIDamagerRepairer() {
+		return org.eclipse.xtext.ui.editor.FastDamagerRepairer.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.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.TransformerFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.transformer.ISemanticModelTransformer> bindISemanticModelTransformer() {
+		return de.ugoe.cs.swe.bnftools.ui.outline.EbnfTransformer.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.outline.OutlineNodeAdapterFactoryFragment
+	public Class<? extends org.eclipse.xtext.ui.editor.outline.actions.IContentOutlineNodeAdapterFactory> bindIContentOutlineNodeAdapterFactory() {
+		return de.ugoe.cs.swe.bnftools.ui.outline.EbnfOutlineNodeAdapterFactory.class;
+	}
+
+	// contributed by org.eclipse.xtext.ui.generator.contentAssist.JavaBasedContentAssistFragment
+	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.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.scoping.impl.AbstractGlobalScopeProvider.NAMED_BUILDER_SCOPE)).to(org.eclipse.xtext.builder.builderState.ShadowingResourceDescriptions.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.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;
+	}
+
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/EbnfExecutableExtensionFactory.java	(revision 5)
@@ -0,0 +1,28 @@
+
+/*
+ * 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;
+
+/**
+ *@generated
+ */
+public class EbnfExecutableExtensionFactory extends AbstractGuiceAwareExecutableExtensionFactory {
+
+	@Override
+	protected Bundle getBundle() {
+		return de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator.getInstance().getBundle();
+	}
+	
+	@Override
+	protected Injector getInjector() {
+		return de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator.getInstance().getInjector("de.ugoe.cs.swe.bnftools.Ebnf");
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/AbstractEbnfProposalProvider.java	(revision 5)
@@ -0,0 +1,231 @@
+/*
+* 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.AbstractJavaBasedContentProposalProvider;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+
+/**
+ * Represents a generated, default implementation of interface {@link IProposalProvider}.
+ * 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 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_Imports(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_Rule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_Sectionheader(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_ExtRule(EObject model, Assignment assignment, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		completeRuleCall(((RuleCall)assignment.getTerminal()), context, acceptor);
+	}
+	public void completeEtsiBnf_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_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: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/EbnfParser.java	(revision 5)
@@ -0,0 +1,157 @@
+/*
+* 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.getEtsiBnfAccess().getAlternatives_0_2_3(), "rule__EtsiBnf__Alternatives_0_2_3");
+					put(grammarAccess.getEtsiBnfAccess().getAlternatives_1_3(), "rule__EtsiBnf__Alternatives_1_3");
+					put(grammarAccess.getEtsiBnfAccess().getAlternatives_2_3(), "rule__EtsiBnf__Alternatives_2_3");
+					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().getImportsAssignment_0_2_2(), "rule__EtsiBnf__ImportsAssignment_0_2_2");
+					put(grammarAccess.getEtsiBnfAccess().getRuleAssignment_0_2_3_0(), "rule__EtsiBnf__RuleAssignment_0_2_3_0");
+					put(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_0_2_3_1(), "rule__EtsiBnf__SectionheaderAssignment_0_2_3_1");
+					put(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0(), "rule__EtsiBnf__TypeAssignment_1_0");
+					put(grammarAccess.getEtsiBnfAccess().getImportsAssignment_1_2(), "rule__EtsiBnf__ImportsAssignment_1_2");
+					put(grammarAccess.getEtsiBnfAccess().getRuleAssignment_1_3_0(), "rule__EtsiBnf__RuleAssignment_1_3_0");
+					put(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_1_3_1(), "rule__EtsiBnf__SectionheaderAssignment_1_3_1");
+					put(grammarAccess.getEtsiBnfAccess().getExtRuleAssignment_1_3_2(), "rule__EtsiBnf__ExtRuleAssignment_1_3_2");
+					put(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0(), "rule__EtsiBnf__TypeAssignment_2_0");
+					put(grammarAccess.getEtsiBnfAccess().getImportsAssignment_2_2(), "rule__EtsiBnf__ImportsAssignment_2_2");
+					put(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_2_3_0(), "rule__EtsiBnf__SectionheaderAssignment_2_3_0");
+					put(grammarAccess.getEtsiBnfAccess().getMergeRuleAssignment_2_3_1(), "rule__EtsiBnf__MergeRuleAssignment_2_3_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: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g	(revision 5)
@@ -0,0 +1,4535 @@
+/*
+* 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.xtext.parsetree.*;
+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 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__EtsiBnf__Alternatives_0_2_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getRuleAssignment_0_2_3_0()); }
+(rule__EtsiBnf__RuleAssignment_0_2_3_0)
+{ after(grammarAccess.getEtsiBnfAccess().getRuleAssignment_0_2_3_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_0_2_3_1()); }
+(rule__EtsiBnf__SectionheaderAssignment_0_2_3_1)
+{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_0_2_3_1()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Alternatives_1_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getRuleAssignment_1_3_0()); }
+(rule__EtsiBnf__RuleAssignment_1_3_0)
+{ after(grammarAccess.getEtsiBnfAccess().getRuleAssignment_1_3_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_1_3_1()); }
+(rule__EtsiBnf__SectionheaderAssignment_1_3_1)
+{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_1_3_1()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getExtRuleAssignment_1_3_2()); }
+(rule__EtsiBnf__ExtRuleAssignment_1_3_2)
+{ after(grammarAccess.getEtsiBnfAccess().getExtRuleAssignment_1_3_2()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__Alternatives_2_3
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_2_3_0()); }
+(rule__EtsiBnf__SectionheaderAssignment_2_3_0)
+{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_2_3_0()); }
+)
+
+    |(
+{ before(grammarAccess.getEtsiBnfAccess().getMergeRuleAssignment_2_3_1()); }
+(rule__EtsiBnf__MergeRuleAssignment_2_3_1)
+{ after(grammarAccess.getEtsiBnfAccess().getMergeRuleAssignment_2_3_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().getImportsAssignment_0_2_2()); }
+(rule__EtsiBnf__ImportsAssignment_0_2_2)*
+{ after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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().getAlternatives_0_2_3()); }
+(rule__EtsiBnf__Alternatives_0_2_3)
+{ after(grammarAccess.getEtsiBnfAccess().getAlternatives_0_2_3()); }
+)
+(
+{ before(grammarAccess.getEtsiBnfAccess().getAlternatives_0_2_3()); }
+(rule__EtsiBnf__Alternatives_0_2_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getAlternatives_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().getImportsAssignment_1_2()); }
+(rule__EtsiBnf__ImportsAssignment_1_2)*
+{ after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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().getAlternatives_1_3()); }
+(rule__EtsiBnf__Alternatives_1_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getAlternatives_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().getImportsAssignment_2_2()); }
+(rule__EtsiBnf__ImportsAssignment_2_2)*
+{ after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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().getAlternatives_2_3()); }
+(rule__EtsiBnf__Alternatives_2_3)*
+{ after(grammarAccess.getEtsiBnfAccess().getAlternatives_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__ImportsAssignment_0_2_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_0_2_2_0()); }
+	ruleImport{ after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_0_2_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__RuleAssignment_0_2_3_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_0_2_3_0_0()); }
+	ruleRule{ after(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_0_2_3_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__SectionheaderAssignment_0_2_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_0_2_3_1_0()); }
+	ruleSectionHeading{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_0_2_3_1_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__ImportsAssignment_1_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_1_2_0()); }
+	ruleImport{ after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_1_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__RuleAssignment_1_3_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_1_3_0_0()); }
+	ruleRule{ after(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_1_3_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__SectionheaderAssignment_1_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_1_3_1_0()); }
+	ruleSectionHeading{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_1_3_1_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__ExtRuleAssignment_1_3_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getExtRuleExtRuleParserRuleCall_1_3_2_0()); }
+	ruleExtRule{ after(grammarAccess.getEtsiBnfAccess().getExtRuleExtRuleParserRuleCall_1_3_2_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__ImportsAssignment_2_2
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_2_2_0()); }
+	ruleImport{ after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_2_2_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__SectionheaderAssignment_2_3_0
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_2_3_0_0()); }
+	ruleSectionHeading{ after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_2_3_0_0()); }
+)
+
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__EtsiBnf__MergeRuleAssignment_2_3_1
+    @init {
+		int stackSize = keepStackSize();
+    }
+:
+(
+{ before(grammarAccess.getEtsiBnfAccess().getMergeRuleMergeRuleParserRuleCall_2_3_1_0()); }
+	ruleMergeRule{ after(grammarAccess.getEtsiBnfAccess().getMergeRuleMergeRuleParserRuleCall_2_3_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: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.tokens	(revision 5)
@@ -0,0 +1,36 @@
+RULE_COLON=9
+RULE_ID=4
+RULE_SECTIONHEADER=5
+RULE_STRING=6
+RULE_LOGIC=8
+RULE_INT=7
+RULE_WS=10
+RULE_SL_COMMENT=11
+RULE_ML_COMMENT=12
+'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: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfLexer.java	(revision 5)
@@ -0,0 +1,1763 @@
+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 T29=29;
+    public static final int T28=28;
+    public static final int T27=27;
+    public static final int T26=26;
+    public static final int T25=25;
+    public static final int Tokens=40;
+    public static final int T24=24;
+    public static final int EOF=-1;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int T23=23;
+    public static final int T22=22;
+    public static final int T21=21;
+    public static final int T20=20;
+    public static final int RULE_ML_COMMENT=12;
+    public static final int RULE_COLON=9;
+    public static final int RULE_STRING=6;
+    public static final int RULE_LOGIC=8;
+    public static final int RULE_INT=7;
+    public static final int T38=38;
+    public static final int T37=37;
+    public static final int T13=13;
+    public static final int T39=39;
+    public static final int T14=14;
+    public static final int T34=34;
+    public static final int RULE_WS=10;
+    public static final int T15=15;
+    public static final int T33=33;
+    public static final int T16=16;
+    public static final int T36=36;
+    public static final int T17=17;
+    public static final int T35=35;
+    public static final int T18=18;
+    public static final int T30=30;
+    public static final int T19=19;
+    public static final int T32=32;
+    public static final int T31=31;
+    public InternalEbnfLexer() {;} 
+    public InternalEbnfLexer(CharStream input) {
+        super(input);
+    }
+    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 T13
+    public final void mT13() throws RecognitionException {
+        try {
+            int _type = T13;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:10:5: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:10:7: ')'
+            {
+            match(')'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T13
+
+    // $ANTLR start T14
+    public final void mT14() throws RecognitionException {
+        try {
+            int _type = T14;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:11:5: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:11:7: ']'
+            {
+            match(']'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T14
+
+    // $ANTLR start T15
+    public final void mT15() throws RecognitionException {
+        try {
+            int _type = T15;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:12:5: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:12:7: '}'
+            {
+            match('}'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T15
+
+    // $ANTLR start T16
+    public final void mT16() throws RecognitionException {
+        try {
+            int _type = T16;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:13:5: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:13:7: '|'
+            {
+            match('|'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T16
+
+    // $ANTLR start T17
+    public final void mT17() throws RecognitionException {
+        try {
+            int _type = T17;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:14:5: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:14:7: '('
+            {
+            match('('); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T17
+
+    // $ANTLR start T18
+    public final void mT18() throws RecognitionException {
+        try {
+            int _type = T18;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:15:5: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:15:7: '['
+            {
+            match('['); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T18
+
+    // $ANTLR start T19
+    public final void mT19() throws RecognitionException {
+        try {
+            int _type = T19;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:16:5: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:16:7: '{'
+            {
+            match('{'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T19
+
+    // $ANTLR start T20
+    public final void mT20() throws RecognitionException {
+        try {
+            int _type = T20;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:17:5: ( '*' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:17:7: '*'
+            {
+            match('*'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T20
+
+    // $ANTLR start T21
+    public final void mT21() throws RecognitionException {
+        try {
+            int _type = T21;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:18:5: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:18:7: '+'
+            {
+            match('+'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T21
+
+    // $ANTLR start T22
+    public final void mT22() throws RecognitionException {
+        try {
+            int _type = T22;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:19:5: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:19:7: 'grammar'
+            {
+            match("grammar"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T22
+
+    // $ANTLR start T23
+    public final void mT23() throws RecognitionException {
+        try {
+            int _type = T23;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:20:5: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:20:7: ';'
+            {
+            match(';'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T23
+
+    // $ANTLR start T24
+    public final void mT24() throws RecognitionException {
+        try {
+            int _type = T24;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:21:5: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:21:7: 'import'
+            {
+            match("import"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T24
+
+    // $ANTLR start T25
+    public final void mT25() throws RecognitionException {
+        try {
+            int _type = T25;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:22:5: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:22:7: '/'
+            {
+            match('/'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T25
+
+    // $ANTLR start T26
+    public final void mT26() throws RecognitionException {
+        try {
+            int _type = T26;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:23:5: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:23:7: 'label:'
+            {
+            match("label:"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T26
+
+    // $ANTLR start T27
+    public final void mT27() throws RecognitionException {
+        try {
+            int _type = T27;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:24:5: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:24:7: '::='
+            {
+            match("::="); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T27
+
+    // $ANTLR start T28
+    public final void mT28() throws RecognitionException {
+        try {
+            int _type = T28;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:25:5: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:25:7: '.'
+            {
+            match('.'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T28
+
+    // $ANTLR start T29
+    public final void mT29() throws RecognitionException {
+        try {
+            int _type = T29;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:26:5: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:26:7: '<-'
+            {
+            match("<-"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T29
+
+    // $ANTLR start T30
+    public final void mT30() throws RecognitionException {
+        try {
+            int _type = T30;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:27:5: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:27:7: 'global'
+            {
+            match("global"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T30
+
+    // $ANTLR start T31
+    public final void mT31() throws RecognitionException {
+        try {
+            int _type = T31;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:28:5: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:28:7: 'combinator:'
+            {
+            match("combinator:"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T31
+
+    // $ANTLR start T32
+    public final void mT32() throws RecognitionException {
+        try {
+            int _type = T32;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:29:5: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:29:7: 'rule'
+            {
+            match("rule"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T32
+
+    // $ANTLR start T33
+    public final void mT33() throws RecognitionException {
+        try {
+            int _type = T33;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:30:5: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:30:7: 'hook'
+            {
+            match("hook"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T33
+
+    // $ANTLR start T34
+    public final void mT34() throws RecognitionException {
+        try {
+            int _type = T34;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:31:5: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:31:7: '/bnf'
+            {
+            match("/bnf"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T34
+
+    // $ANTLR start T35
+    public final void mT35() throws RecognitionException {
+        try {
+            int _type = T35;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:32:5: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:32:7: '/delta'
+            {
+            match("/delta"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T35
+
+    // $ANTLR start T36
+    public final void mT36() throws RecognitionException {
+        try {
+            int _type = T36;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:33:5: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:33:7: '/merge'
+            {
+            match("/merge"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T36
+
+    // $ANTLR start T37
+    public final void mT37() throws RecognitionException {
+        try {
+            int _type = T37;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:34:5: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:34:7: 'core'
+            {
+            match("core"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T37
+
+    // $ANTLR start T38
+    public final void mT38() throws RecognitionException {
+        try {
+            int _type = T38;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:35:5: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:35:7: 'package'
+            {
+            match("package"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T38
+
+    // $ANTLR start T39
+    public final void mT39() throws RecognitionException {
+        try {
+            int _type = T39;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:36:5: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:36:7: 'update'
+            {
+            match("update"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end T39
+
+    // $ANTLR start RULE_ID
+    public final void mRULE_ID() throws RecognitionException {
+        try {
+            int _type = RULE_ID;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4517: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:4517: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:4517: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);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ID
+
+    // $ANTLR start RULE_INT
+    public final void mRULE_INT() throws RecognitionException {
+        try {
+            int _type = RULE_INT;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4519:10: ( ( '0' .. '9' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4519:12: ( '0' .. '9' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4519: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:4519:13: '0' .. '9'
+            	    {
+            	    matchRange('0','9'); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    if ( cnt2 >= 1 ) break loop2;
+                        EarlyExitException eee =
+                            new EarlyExitException(2, input);
+                        throw eee;
+                }
+                cnt2++;
+            } while (true);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_INT
+
+    // $ANTLR start RULE_WS
+    public final void mRULE_WS() throws RecognitionException {
+        try {
+            int _type = RULE_WS;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521:9: ( ( ' ' | '\\t' | ( '\\r' )? '\\n' )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521:11: ( ' ' | '\\t' | ( '\\r' )? '\\n' )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521: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:4521: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:4521: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:4521:21: ( '\\r' )? '\\n'
+            	    {
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521: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:4521: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);
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_WS
+
+    // $ANTLR start RULE_COLON
+    public final void mRULE_COLON() throws RecognitionException {
+        try {
+            int _type = RULE_COLON;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4523:12: ( '\"' '\"' '\"' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4523:14: '\"' '\"' '\"'
+            {
+            match('\"'); 
+            match('\"'); 
+            match('\"'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_COLON
+
+    // $ANTLR start RULE_STRING
+    public final void mRULE_STRING() throws RecognitionException {
+        try {
+            int _type = RULE_STRING;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4525:13: ( ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4525:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4525: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("4525:15: ( '\"' (~ ( '\"' ) )* '\"' | '\\'' (~ ( '\\'' ) )* '\\'' )", 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:4525:16: '\"' (~ ( '\"' ) )* '\"'
+                    {
+                    match('\"'); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4525:20: (~ ( '\"' ) )*
+                    loop5:
+                    do {
+                        int alt5=2;
+                        int LA5_0 = input.LA(1);
+
+                        if ( ((LA5_0>='\u0000' && LA5_0<='!')||(LA5_0>='#' && LA5_0<='\uFFFE')) ) {
+                            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:4525:20: ~ ( '\"' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='\uFFFE') ) {
+                    	        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:4525:32: '\\'' (~ ( '\\'' ) )* '\\''
+                    {
+                    match('\''); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4525:37: (~ ( '\\'' ) )*
+                    loop6:
+                    do {
+                        int alt6=2;
+                        int LA6_0 = input.LA(1);
+
+                        if ( ((LA6_0>='\u0000' && LA6_0<='&')||(LA6_0>='(' && LA6_0<='\uFFFE')) ) {
+                            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:4525:37: ~ ( '\\'' )
+                    	    {
+                    	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='\uFFFE') ) {
+                    	        input.consume();
+
+                    	    }
+                    	    else {
+                    	        MismatchedSetException mse =
+                    	            new MismatchedSetException(null,input);
+                    	        recover(mse);    throw mse;
+                    	    }
+
+
+                    	    }
+                    	    break;
+
+                    	default :
+                    	    break loop6;
+                        }
+                    } while (true);
+
+                    match('\''); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_STRING
+
+    // $ANTLR start RULE_SECTIONHEADER
+    public final void mRULE_SECTIONHEADER() throws RecognitionException {
+        try {
+            int _type = RULE_SECTIONHEADER;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4527: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:4527: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:4527: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:4527: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<='\uFFFE')) ) {
+                    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:4527: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)<='\uFFFE') ) {
+            	        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:4527: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:4527:85: '\\r'
+                    {
+                    match('\r'); 
+
+                    }
+                    break;
+
+            }
+
+            match('\n'); 
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_SECTIONHEADER
+
+    // $ANTLR start RULE_SL_COMMENT
+    public final void mRULE_SL_COMMENT() throws RecognitionException {
+        try {
+            int _type = RULE_SL_COMMENT;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4529: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:4529: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:4529: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<='\uFFFE')) ) {
+                    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:4529: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)<='\uFFFE') ) {
+            	        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:4529: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:4529:41: ( '\\r' )? '\\n'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4529: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:4529:41: '\\r'
+                            {
+                            match('\r'); 
+
+                            }
+                            break;
+
+                    }
+
+                    match('\n'); 
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        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;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4531:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4531: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:4531: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<='\uFFFE')) ) {
+                        alt14=1;
+                    }
+
+
+                }
+                else if ( ((LA14_0>='\u0000' && LA14_0<=')')||(LA14_0>='+' && LA14_0<='\uFFFE')) ) {
+                    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:4531:52: .
+            	    {
+            	    matchAny(); 
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+            match("*/"); 
+
+
+            }
+
+            this.type = _type;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end RULE_ML_COMMENT
+
+    // $ANTLR start RULE_LOGIC
+    public final void mRULE_LOGIC() throws RecognitionException {
+        try {
+            int _type = RULE_LOGIC;
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4533: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:4533: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:4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )
+            int alt15=6;
+            int LA15_0 = input.LA(1);
+
+            if ( (LA15_0=='/') ) {
+                switch ( input.LA(2) ) {
+                case 'o':
+                    {
+                    int LA15_2 = input.LA(3);
+
+                    if ( (LA15_2=='r') ) {
+                        int LA15_5 = input.LA(4);
+
+                        if ( (LA15_5=='r') ) {
+                            alt15=4;
+                        }
+                        else {
+                            alt15=2;}
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )", 15, 2, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case 'a':
+                    {
+                    int LA15_3 = input.LA(3);
+
+                    if ( (LA15_3=='n') ) {
+                        int LA15_6 = input.LA(4);
+
+                        if ( (LA15_6=='d') ) {
+                            int LA15_9 = input.LA(5);
+
+                            if ( (LA15_9=='r') ) {
+                                alt15=3;
+                            }
+                            else {
+                                alt15=1;}
+                        }
+                        else if ( (LA15_6=='y') ) {
+                            alt15=5;
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )", 15, 6, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )", 15, 3, input);
+
+                        throw nvae;
+                    }
+                    }
+                    break;
+                case 't':
+                    {
+                    alt15=6;
+                    }
+                    break;
+                default:
+                    NoViableAltException nvae =
+                        new NoViableAltException("4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )", 15, 1, input);
+
+                    throw nvae;
+                }
+
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("4533:14: ( '/and' | '/or' | '/andr' | '/orr' | '/any' | '/together' )", 15, 0, input);
+
+                throw nvae;
+            }
+            switch (alt15) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4533: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:4533: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:4533: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:4533: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:4533: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:4533:50: '/together'
+                    {
+                    match("/together"); 
+
+
+                    }
+                    break;
+
+            }
+
+
+            }
+
+            this.type = _type;
+        }
+        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: ( T13 | T14 | T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | 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: T13
+                {
+                mT13(); 
+
+                }
+                break;
+            case 2 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:14: T14
+                {
+                mT14(); 
+
+                }
+                break;
+            case 3 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:18: T15
+                {
+                mT15(); 
+
+                }
+                break;
+            case 4 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:22: T16
+                {
+                mT16(); 
+
+                }
+                break;
+            case 5 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:26: T17
+                {
+                mT17(); 
+
+                }
+                break;
+            case 6 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:30: T18
+                {
+                mT18(); 
+
+                }
+                break;
+            case 7 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:34: T19
+                {
+                mT19(); 
+
+                }
+                break;
+            case 8 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:38: T20
+                {
+                mT20(); 
+
+                }
+                break;
+            case 9 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:42: T21
+                {
+                mT21(); 
+
+                }
+                break;
+            case 10 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:46: T22
+                {
+                mT22(); 
+
+                }
+                break;
+            case 11 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:50: T23
+                {
+                mT23(); 
+
+                }
+                break;
+            case 12 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:54: T24
+                {
+                mT24(); 
+
+                }
+                break;
+            case 13 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:58: T25
+                {
+                mT25(); 
+
+                }
+                break;
+            case 14 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:62: T26
+                {
+                mT26(); 
+
+                }
+                break;
+            case 15 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:66: T27
+                {
+                mT27(); 
+
+                }
+                break;
+            case 16 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:70: T28
+                {
+                mT28(); 
+
+                }
+                break;
+            case 17 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:74: T29
+                {
+                mT29(); 
+
+                }
+                break;
+            case 18 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:78: T30
+                {
+                mT30(); 
+
+                }
+                break;
+            case 19 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:82: T31
+                {
+                mT31(); 
+
+                }
+                break;
+            case 20 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:86: T32
+                {
+                mT32(); 
+
+                }
+                break;
+            case 21 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:90: T33
+                {
+                mT33(); 
+
+                }
+                break;
+            case 22 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:94: T34
+                {
+                mT34(); 
+
+                }
+                break;
+            case 23 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:98: T35
+                {
+                mT35(); 
+
+                }
+                break;
+            case 24 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:102: T36
+                {
+                mT36(); 
+
+                }
+                break;
+            case 25 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:106: T37
+                {
+                mT37(); 
+
+                }
+                break;
+            case 26 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:110: T38
+                {
+                mT38(); 
+
+                }
+                break;
+            case 27 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:114: T39
+                {
+                mT39(); 
+
+                }
+                break;
+            case 28 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1:118: 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:126: 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:135: 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:143: 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:154: 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:166: 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:185: 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:201: 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:217: RULE_LOGIC
+                {
+                mRULE_LOGIC(); 
+
+                }
+                break;
+
+        }
+
+    }
+
+
+    protected DFA16 dfa16 = new DFA16(this);
+    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\4\34\1\111\1\34\1"+
+        "\113\1\114\6\34\1\uffff\1\34\2\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\2\145\1\142\1\145"+
+        "\2\153\1\141\1\uffff\1\155\1\141\1\162\1\154\1\60\1\151\2\60\1\141"+
+        "\1\164\1\141\1\154\1\164\1\72\1\uffff\1\156\2\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\ufffe\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\2\145\1\142\1\145\2\153\1\141\1\uffff\1"+
+        "\155\1\141\1\162\1\154\1\172\1\151\2\172\1\141\1\164\1\141\1\154"+
+        "\1\164\1\72\1\uffff\1\156\2\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\42\1\44\1\26\1\43\1\27\1\30\1\15\21\uffff\1\37\16\uffff"+
+        "\1\31\1\uffff\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 =
+        "\142\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\45\4\uffff\1\42\61\uffff\1\43\1\44\1\uffff\1\46\10\uffff"+
+            "\1\47\1\uffff\1\43\4\uffff\1\43",
+            "\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\uffdc\33",
+            "",
+            "",
+            "\1\60",
+            "\1\61",
+            "\1\40\26\uffff\1\40\15\uffff\1\40\1\uffff\12\37",
+            "",
+            "\1\62",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "",
+            "\1\63",
+            "\1\65\4\uffff\1\64",
+            "\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",
+            "\12\34\7\uffff\32\34\4\uffff\1\34\1\uffff\32\34",
+            "\1\112",
+            "\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 : ( T13 | T14 | T15 | T16 | T17 | T18 | T19 | T20 | T21 | T22 | T23 | T24 | T25 | T26 | T27 | T28 | T29 | T30 | T31 | T32 | T33 | T34 | T35 | T36 | T37 | T38 | T39 | RULE_ID | RULE_INT | RULE_WS | RULE_COLON | RULE_STRING | RULE_SECTIONHEADER | RULE_SL_COMMENT | RULE_ML_COMMENT | RULE_LOGIC );";
+        }
+    }
+ 
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 5)
@@ -0,0 +1,12411 @@
+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.xtext.parsetree.*;
+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_COLON=9;
+    public static final int RULE_ID=4;
+    public static final int RULE_SECTIONHEADER=5;
+    public static final int RULE_STRING=6;
+    public static final int RULE_LOGIC=8;
+    public static final int RULE_INT=7;
+    public static final int RULE_WS=10;
+    public static final int RULE_SL_COMMENT=11;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=12;
+
+        public InternalEbnfParser(TokenStream input) {
+            super(input);
+        }
+        
+
+    public String[] getTokenNames() { return 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:61: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:62:1: ( ruleEtsiBnf EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:63:1: ruleEtsiBnf EOF
+            {
+             before(grammarAccess.getEtsiBnfRule()); 
+            pushFollow(FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf61);
+            ruleEtsiBnf();
+            _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:70: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:74:2: ( ( ( 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 ) )
+            {
+            // ../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 ) )
+            // ../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 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:77:1: ( rule__EtsiBnf__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:77:2: rule__EtsiBnf__Alternatives
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf94);
+            rule__EtsiBnf__Alternatives();
+            _fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end ruleEtsiBnf
+
+
+    // $ANTLR start entryRuleSectionHeading
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:89: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:90:1: ( ruleSectionHeading EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:91:1: ruleSectionHeading EOF
+            {
+             before(grammarAccess.getSectionHeadingRule()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading121);
+            ruleSectionHeading();
+            _fsp--;
+
+             after(grammarAccess.getSectionHeadingRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading128); 
+
+            }
+
+        }
+        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:98: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:102: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:103: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:103: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:104: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:105: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:105:2: rule__SectionHeading__Group__0
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading154);
+            rule__SectionHeading__Group__0();
+            _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:117: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:118:1: ( ruleImport EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:119:1: ruleImport EOF
+            {
+             before(grammarAccess.getImportRule()); 
+            pushFollow(FOLLOW_ruleImport_in_entryRuleImport181);
+            ruleImport();
+            _fsp--;
+
+             after(grammarAccess.getImportRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImport188); 
+
+            }
+
+        }
+        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:126: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:130: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:131: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:131: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:132: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:133: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:133:2: rule__Import__Group__0
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0_in_ruleImport214);
+            rule__Import__Group__0();
+            _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:145: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:146:1: ( ruleRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:147:1: ruleRule EOF
+            {
+             before(grammarAccess.getRuleRule()); 
+            pushFollow(FOLLOW_ruleRule_in_entryRuleRule241);
+            ruleRule();
+            _fsp--;
+
+             after(grammarAccess.getRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRule248); 
+
+            }
+
+        }
+        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:154: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:158: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:159: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:159: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:160: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:161: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:161:2: rule__Rule__Group__0
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0_in_ruleRule274);
+            rule__Rule__Group__0();
+            _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:173: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:174:1: ( ruleExtRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:175:1: ruleExtRule EOF
+            {
+             before(grammarAccess.getExtRuleRule()); 
+            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule301);
+            ruleExtRule();
+            _fsp--;
+
+             after(grammarAccess.getExtRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule308); 
+
+            }
+
+        }
+        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:182: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:186: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:187: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:187: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:188: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:189: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:189:2: rule__ExtRule__Group__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule334);
+            rule__ExtRule__Group__0();
+            _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:201: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:202:1: ( ruleMergeRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:203:1: ruleMergeRule EOF
+            {
+             before(grammarAccess.getMergeRuleRule()); 
+            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule361);
+            ruleMergeRule();
+            _fsp--;
+
+             after(grammarAccess.getMergeRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule368); 
+
+            }
+
+        }
+        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:210: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:214:2: ( ( ( rule__MergeRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:215:1: ( ( rule__MergeRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:215:1: ( ( rule__MergeRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:216: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:217:1: ( rule__MergeRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:217:2: rule__MergeRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule394);
+            rule__MergeRule__Alternatives();
+            _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:229: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:230:1: ( ruleGlobalCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:231:1: ruleGlobalCombinator EOF
+            {
+             before(grammarAccess.getGlobalCombinatorRule()); 
+            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator421);
+            ruleGlobalCombinator();
+            _fsp--;
+
+             after(grammarAccess.getGlobalCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator428); 
+
+            }
+
+        }
+        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:238: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:242: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:243: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:243: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:244: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:245: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:245:2: rule__GlobalCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator454);
+            rule__GlobalCombinator__Group__0();
+            _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:257: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:258:1: ( ruleRuleCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:259:1: ruleRuleCombinator EOF
+            {
+             before(grammarAccess.getRuleCombinatorRule()); 
+            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator481);
+            ruleRuleCombinator();
+            _fsp--;
+
+             after(grammarAccess.getRuleCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator488); 
+
+            }
+
+        }
+        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:266: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:270: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:271: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:271: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:272: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:273: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:273:2: rule__RuleCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator514);
+            rule__RuleCombinator__Group__0();
+            _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:285: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:286:1: ( ruleHookCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:287:1: ruleHookCombinator EOF
+            {
+             before(grammarAccess.getHookCombinatorRule()); 
+            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator541);
+            ruleHookCombinator();
+            _fsp--;
+
+             after(grammarAccess.getHookCombinatorRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator548); 
+
+            }
+
+        }
+        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:294: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:298: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:299: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:299: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:300: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:301: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:301:2: rule__HookCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator574);
+            rule__HookCombinator__Group__0();
+            _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:313: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:314:1: ( ruleDefinitionList EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:315:1: ruleDefinitionList EOF
+            {
+             before(grammarAccess.getDefinitionListRule()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList601);
+            ruleDefinitionList();
+            _fsp--;
+
+             after(grammarAccess.getDefinitionListRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList608); 
+
+            }
+
+        }
+        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:322: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:326: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:327: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:327: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:328: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:329: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:329:2: rule__DefinitionList__Group__0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList634);
+            rule__DefinitionList__Group__0();
+            _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:341: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:342:1: ( ruleSingleDefinition EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:343:1: ruleSingleDefinition EOF
+            {
+             before(grammarAccess.getSingleDefinitionRule()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition661);
+            ruleSingleDefinition();
+            _fsp--;
+
+             after(grammarAccess.getSingleDefinitionRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition668); 
+
+            }
+
+        }
+        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:350: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:354: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:355: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:355: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:356: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:356:1: ( ( rule__SingleDefinition__TermsAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:357: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:358:1: ( rule__SingleDefinition__TermsAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:358:2: rule__SingleDefinition__TermsAssignment
+            {
+            pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition696);
+            rule__SingleDefinition__TermsAssignment();
+            _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:361:1: ( ( rule__SingleDefinition__TermsAssignment )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:362: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:363:1: ( rule__SingleDefinition__TermsAssignment )*
+            loop1:
+            do {
+                int alt1=2;
+                int LA1_0 = input.LA(1);
+
+                if ( (LA1_0==RULE_ID) ) {
+                    int LA1_2 = input.LA(2);
+
+                    if ( (LA1_2==EOF||(LA1_2>=RULE_ID && LA1_2<=RULE_INT)||LA1_2==RULE_COLON||(LA1_2>=13 && LA1_2<=16)||(LA1_2>=18 && LA1_2<=19)||LA1_2==23) ) {
+                        alt1=1;
+                    }
+                    else if ( (LA1_2==17) ) {
+                        int LA1_4 = input.LA(3);
+
+                        if ( (LA1_4==RULE_ID||LA1_4==RULE_STRING||LA1_4==RULE_COLON||(LA1_4>=17 && LA1_4<=19)) ) {
+                            alt1=1;
+                        }
+
+
+                    }
+
+
+                }
+                else if ( (LA1_0==RULE_STRING||LA1_0==RULE_COLON||(LA1_0>=17 && LA1_0<=19)) ) {
+                    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:363:2: rule__SingleDefinition__TermsAssignment
+            	    {
+            	    pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition708);
+            	    rule__SingleDefinition__TermsAssignment();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop1;
+                }
+            } 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:376: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:377:1: ( ruleTerm EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:378:1: ruleTerm EOF
+            {
+             before(grammarAccess.getTermRule()); 
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm738);
+            ruleTerm();
+            _fsp--;
+
+             after(grammarAccess.getTermRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm745); 
+
+            }
+
+        }
+        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:385: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:389:2: ( ( ( rule__Term__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:390:1: ( ( rule__Term__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:390:1: ( ( rule__Term__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391: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:392:1: ( rule__Term__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:392:2: rule__Term__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Term__Alternatives_in_ruleTerm771);
+            rule__Term__Alternatives();
+            _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:404: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:405:1: ( ruleAtom EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:406:1: ruleAtom EOF
+            {
+             before(grammarAccess.getAtomRule()); 
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom798);
+            ruleAtom();
+            _fsp--;
+
+             after(grammarAccess.getAtomRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom805); 
+
+            }
+
+        }
+        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:413: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:417:2: ( ( ( rule__Atom__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:418:1: ( ( rule__Atom__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:418:1: ( ( rule__Atom__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419: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:420:1: ( rule__Atom__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:420:2: rule__Atom__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Atom__Alternatives_in_ruleAtom831);
+            rule__Atom__Alternatives();
+            _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:432: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:433:1: ( ruleRuleReference EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:434:1: ruleRuleReference EOF
+            {
+             before(grammarAccess.getRuleReferenceRule()); 
+            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference858);
+            ruleRuleReference();
+            _fsp--;
+
+             after(grammarAccess.getRuleReferenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference865); 
+
+            }
+
+        }
+        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:441: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:445:2: ( ( ( rule__RuleReference__RulerefAssignment ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:446:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:446:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447: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:448:1: ( rule__RuleReference__RulerefAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:448:2: rule__RuleReference__RulerefAssignment
+            {
+            pushFollow(FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference891);
+            rule__RuleReference__RulerefAssignment();
+            _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:460: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:461:1: ( ruleStringRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:462:1: ruleStringRule EOF
+            {
+             before(grammarAccess.getStringRuleRule()); 
+            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule918);
+            ruleStringRule();
+            _fsp--;
+
+             after(grammarAccess.getStringRuleRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule925); 
+
+            }
+
+        }
+        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:469: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:473:2: ( ( ( rule__StringRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__StringRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__StringRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:475: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:476:1: ( rule__StringRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:476:2: rule__StringRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule951);
+            rule__StringRule__Alternatives();
+            _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:488: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:489:1: ( ruleGroupedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:490:1: ruleGroupedSequence EOF
+            {
+             before(grammarAccess.getGroupedSequenceRule()); 
+            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence978);
+            ruleGroupedSequence();
+            _fsp--;
+
+             after(grammarAccess.getGroupedSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence985); 
+
+            }
+
+        }
+        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:497: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:501: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:502: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:502: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:503: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:504: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:504:2: rule__GroupedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1011);
+            rule__GroupedSequence__Group__0();
+            _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:516: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:517:1: ( ruleOptionalSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:518:1: ruleOptionalSequence EOF
+            {
+             before(grammarAccess.getOptionalSequenceRule()); 
+            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1038);
+            ruleOptionalSequence();
+            _fsp--;
+
+             after(grammarAccess.getOptionalSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence1045); 
+
+            }
+
+        }
+        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:525: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:529: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:530: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:530: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:531: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:532: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:532:2: rule__OptionalSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1071);
+            rule__OptionalSequence__Group__0();
+            _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:544: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:545:1: ( ruleRepeatedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:546:1: ruleRepeatedSequence EOF
+            {
+             before(grammarAccess.getRepeatedSequenceRule()); 
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1098);
+            ruleRepeatedSequence();
+            _fsp--;
+
+             after(grammarAccess.getRepeatedSequenceRule()); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence1105); 
+
+            }
+
+        }
+        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:553: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:557: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:558: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:558: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:559: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:560: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:560:2: rule__RepeatedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1131);
+            rule__RepeatedSequence__Group__0();
+            _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:572: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:576:1: ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) )
+            int alt2=3;
+            switch ( input.LA(1) ) {
+            case 22:
+                {
+                alt2=1;
+                }
+                break;
+            case 35:
+                {
+                alt2=2;
+                }
+                break;
+            case 36:
+                {
+                alt2=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("572:1: rule__EtsiBnf__Alternatives : ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) );", 2, 0, input);
+
+                throw nvae;
+            }
+
+            switch (alt2) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:577: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:577: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:578: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:579: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:579:2: rule__EtsiBnf__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1167);
+                    rule__EtsiBnf__Group_0__0();
+                    _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:583: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:583: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:584: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:585: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:585:2: rule__EtsiBnf__Group_1__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1185);
+                    rule__EtsiBnf__Group_1__0();
+                    _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:589: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:589: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:590: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:591: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:591:2: rule__EtsiBnf__Group_2__0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1203);
+                    rule__EtsiBnf__Group_2__0();
+                    _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__EtsiBnf__Alternatives_0_2_3
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:600:1: rule__EtsiBnf__Alternatives_0_2_3 : ( ( ( rule__EtsiBnf__RuleAssignment_0_2_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 ) ) );
+    public final void rule__EtsiBnf__Alternatives_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:604:1: ( ( ( rule__EtsiBnf__RuleAssignment_0_2_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 ) ) )
+            int alt3=2;
+            int LA3_0 = input.LA(1);
+
+            if ( (LA3_0==RULE_ID||LA3_0==RULE_INT) ) {
+                alt3=1;
+            }
+            else if ( (LA3_0==RULE_SECTIONHEADER) ) {
+                alt3=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("600:1: rule__EtsiBnf__Alternatives_0_2_3 : ( ( ( rule__EtsiBnf__RuleAssignment_0_2_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 ) ) );", 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:605:1: ( ( rule__EtsiBnf__RuleAssignment_0_2_3_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:605:1: ( ( rule__EtsiBnf__RuleAssignment_0_2_3_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:606:1: ( rule__EtsiBnf__RuleAssignment_0_2_3_0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getRuleAssignment_0_2_3_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:607:1: ( rule__EtsiBnf__RuleAssignment_0_2_3_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:607:2: rule__EtsiBnf__RuleAssignment_0_2_3_0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__RuleAssignment_0_2_3_0_in_rule__EtsiBnf__Alternatives_0_2_31236);
+                    rule__EtsiBnf__RuleAssignment_0_2_3_0();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getRuleAssignment_0_2_3_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:611:6: ( ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:611:6: ( ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:612:1: ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_0_2_3_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:613:1: ( rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:613:2: rule__EtsiBnf__SectionheaderAssignment_0_2_3_1
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__SectionheaderAssignment_0_2_3_1_in_rule__EtsiBnf__Alternatives_0_2_31254);
+                    rule__EtsiBnf__SectionheaderAssignment_0_2_3_1();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_0_2_3_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__Alternatives_0_2_3
+
+
+    // $ANTLR start rule__EtsiBnf__Alternatives_1_3
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );
+    public final void rule__EtsiBnf__Alternatives_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:626:1: ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) )
+            int alt4=3;
+            switch ( input.LA(1) ) {
+            case RULE_INT:
+                {
+                int LA4_1 = input.LA(2);
+
+                if ( (LA4_1==RULE_ID) ) {
+                    int LA4_4 = input.LA(3);
+
+                    if ( (LA4_4==28) ) {
+                        int LA4_5 = input.LA(4);
+
+                        if ( (LA4_5==RULE_ID) ) {
+                            int LA4_2 = input.LA(5);
+
+                            if ( (LA4_2==27) ) {
+                                alt4=1;
+                            }
+                            else if ( (LA4_2==17) ) {
+                                alt4=3;
+                            }
+                            else {
+                                NoViableAltException nvae =
+                                    new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 2, input);
+
+                                throw nvae;
+                            }
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 5, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 4, input);
+
+                        throw nvae;
+                    }
+                }
+                else if ( (LA4_1==28) ) {
+                    int LA4_5 = input.LA(3);
+
+                    if ( (LA4_5==RULE_ID) ) {
+                        int LA4_2 = input.LA(4);
+
+                        if ( (LA4_2==27) ) {
+                            alt4=1;
+                        }
+                        else if ( (LA4_2==17) ) {
+                            alt4=3;
+                        }
+                        else {
+                            NoViableAltException nvae =
+                                new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 2, input);
+
+                            throw nvae;
+                        }
+                    }
+                    else {
+                        NoViableAltException nvae =
+                            new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 5, input);
+
+                        throw nvae;
+                    }
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 1, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_ID:
+                {
+                int LA4_2 = input.LA(2);
+
+                if ( (LA4_2==27) ) {
+                    alt4=1;
+                }
+                else if ( (LA4_2==17) ) {
+                    alt4=3;
+                }
+                else {
+                    NoViableAltException nvae =
+                        new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 4, 2, input);
+
+                    throw nvae;
+                }
+                }
+                break;
+            case RULE_SECTIONHEADER:
+                {
+                alt4=2;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("622:1: rule__EtsiBnf__Alternatives_1_3 : ( ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) ) | ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) ) | ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) ) );", 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:627:1: ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:627:1: ( ( rule__EtsiBnf__RuleAssignment_1_3_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:628:1: ( rule__EtsiBnf__RuleAssignment_1_3_0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getRuleAssignment_1_3_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:629:1: ( rule__EtsiBnf__RuleAssignment_1_3_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:629:2: rule__EtsiBnf__RuleAssignment_1_3_0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__RuleAssignment_1_3_0_in_rule__EtsiBnf__Alternatives_1_31287);
+                    rule__EtsiBnf__RuleAssignment_1_3_0();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getRuleAssignment_1_3_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:633:6: ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:633:6: ( ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:634:1: ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_1_3_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:635:1: ( rule__EtsiBnf__SectionheaderAssignment_1_3_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:635:2: rule__EtsiBnf__SectionheaderAssignment_1_3_1
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__SectionheaderAssignment_1_3_1_in_rule__EtsiBnf__Alternatives_1_31305);
+                    rule__EtsiBnf__SectionheaderAssignment_1_3_1();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_1_3_1()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:639:6: ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:639:6: ( ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:640:1: ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getExtRuleAssignment_1_3_2()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:641:1: ( rule__EtsiBnf__ExtRuleAssignment_1_3_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:641:2: rule__EtsiBnf__ExtRuleAssignment_1_3_2
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__ExtRuleAssignment_1_3_2_in_rule__EtsiBnf__Alternatives_1_31323);
+                    rule__EtsiBnf__ExtRuleAssignment_1_3_2();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getExtRuleAssignment_1_3_2()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__Alternatives_1_3
+
+
+    // $ANTLR start rule__EtsiBnf__Alternatives_2_3
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650:1: rule__EtsiBnf__Alternatives_2_3 : ( ( ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 ) ) | ( ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 ) ) );
+    public final void rule__EtsiBnf__Alternatives_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:654:1: ( ( ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 ) ) | ( ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 ) ) )
+            int alt5=2;
+            int LA5_0 = input.LA(1);
+
+            if ( (LA5_0==RULE_SECTIONHEADER) ) {
+                alt5=1;
+            }
+            else if ( (LA5_0==30||(LA5_0>=32 && LA5_0<=33)) ) {
+                alt5=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("650:1: rule__EtsiBnf__Alternatives_2_3 : ( ( ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 ) ) | ( ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 ) ) );", 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:655:1: ( ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:655:1: ( ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:656:1: ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_2_3_0()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:657:1: ( rule__EtsiBnf__SectionheaderAssignment_2_3_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:657:2: rule__EtsiBnf__SectionheaderAssignment_2_3_0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__SectionheaderAssignment_2_3_0_in_rule__EtsiBnf__Alternatives_2_31356);
+                    rule__EtsiBnf__SectionheaderAssignment_2_3_0();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getSectionheaderAssignment_2_3_0()); 
+
+                    }
+
+
+                    }
+                    break;
+                case 2 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:661:6: ( ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:661:6: ( ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:662:1: ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 )
+                    {
+                     before(grammarAccess.getEtsiBnfAccess().getMergeRuleAssignment_2_3_1()); 
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:663:1: ( rule__EtsiBnf__MergeRuleAssignment_2_3_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:663:2: rule__EtsiBnf__MergeRuleAssignment_2_3_1
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__MergeRuleAssignment_2_3_1_in_rule__EtsiBnf__Alternatives_2_31374);
+                    rule__EtsiBnf__MergeRuleAssignment_2_3_1();
+                    _fsp--;
+
+
+                    }
+
+                     after(grammarAccess.getEtsiBnfAccess().getMergeRuleAssignment_2_3_1()); 
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__Alternatives_2_3
+
+
+    // $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:672: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:676:1: ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) )
+            int alt6=3;
+            switch ( input.LA(1) ) {
+            case 37:
+                {
+                alt6=1;
+                }
+                break;
+            case 38:
+                {
+                alt6=2;
+                }
+                break;
+            case 39:
+                {
+                alt6=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("672:1: rule__Import__Alternatives_2_1 : ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) );", 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:677: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:677: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:678: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:679: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:679:2: rule__Import__GrammarTypeAssignment_2_1_0
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11407);
+                    rule__Import__GrammarTypeAssignment_2_1_0();
+                    _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:683: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:683: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:684: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:685: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:685:2: rule__Import__GrammarTypeAssignment_2_1_1
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11425);
+                    rule__Import__GrammarTypeAssignment_2_1_1();
+                    _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:689: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:689: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:690: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:691: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:691:2: rule__Import__GrammarTypeAssignment_2_1_2
+                    {
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11443);
+                    rule__Import__GrammarTypeAssignment_2_1_2();
+                    _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:700: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:704:1: ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) )
+            int alt7=10;
+            switch ( input.LA(1) ) {
+            case RULE_ID:
+            case RULE_STRING:
+            case RULE_COLON:
+                {
+                alt7=1;
+                }
+                break;
+            case 13:
+                {
+                alt7=2;
+                }
+                break;
+            case 14:
+                {
+                alt7=3;
+                }
+                break;
+            case 15:
+                {
+                alt7=4;
+                }
+                break;
+            case 16:
+                {
+                alt7=5;
+                }
+                break;
+            case 17:
+                {
+                alt7=6;
+                }
+                break;
+            case 18:
+                {
+                alt7=7;
+                }
+                break;
+            case 19:
+                {
+                alt7=8;
+                }
+                break;
+            case 20:
+                {
+                alt7=9;
+                }
+                break;
+            case 21:
+                {
+                alt7=10;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("700:1: rule__ExtRule__Alternatives_4 : ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) );", 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:705: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:705: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:706: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:707: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:707:2: rule__ExtRule__ElementsAssignment_4_0
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41476);
+                    rule__ExtRule__ElementsAssignment_4_0();
+                    _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:711:6: ( ')' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:711:6: ( ')' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:712:1: ')'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+                    match(input,13,FOLLOW_13_in_rule__ExtRule__Alternatives_41495); 
+                     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:719:6: ( ']' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:719:6: ( ']' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:720:1: ']'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+                    match(input,14,FOLLOW_14_in_rule__ExtRule__Alternatives_41515); 
+                     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:727:6: ( '}' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:727:6: ( '}' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:728:1: '}'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+                    match(input,15,FOLLOW_15_in_rule__ExtRule__Alternatives_41535); 
+                     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:735:6: ( '|' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:735:6: ( '|' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:736:1: '|'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+                    match(input,16,FOLLOW_16_in_rule__ExtRule__Alternatives_41555); 
+                     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:743:6: ( '(' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:743:6: ( '(' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:744:1: '('
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+                    match(input,17,FOLLOW_17_in_rule__ExtRule__Alternatives_41575); 
+                     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:751:6: ( '[' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:751:6: ( '[' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:752:1: '['
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+                    match(input,18,FOLLOW_18_in_rule__ExtRule__Alternatives_41595); 
+                     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:759:6: ( '{' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:6: ( '{' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:760:1: '{'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+                    match(input,19,FOLLOW_19_in_rule__ExtRule__Alternatives_41615); 
+                     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:767:6: ( '*' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:767:6: ( '*' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:768:1: '*'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+                    match(input,20,FOLLOW_20_in_rule__ExtRule__Alternatives_41635); 
+                     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:775:6: ( '+' )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:6: ( '+' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:776:1: '+'
+                    {
+                     before(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+                    match(input,21,FOLLOW_21_in_rule__ExtRule__Alternatives_41655); 
+                     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:788: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:792:1: ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) )
+            int alt8=3;
+            switch ( input.LA(1) ) {
+            case 30:
+                {
+                alt8=1;
+                }
+                break;
+            case 32:
+                {
+                alt8=2;
+                }
+                break;
+            case 33:
+                {
+                alt8=3;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("788:1: rule__MergeRule__Alternatives : ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) );", 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:793:1: ( ruleGlobalCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:793:1: ( ruleGlobalCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:794:1: ruleGlobalCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                    pushFollow(FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1689);
+                    ruleGlobalCombinator();
+                    _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:799:6: ( ruleRuleCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:799:6: ( ruleRuleCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:800:1: ruleRuleCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                    pushFollow(FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1706);
+                    ruleRuleCombinator();
+                    _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:805:6: ( ruleHookCombinator )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:805:6: ( ruleHookCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:806:1: ruleHookCombinator
+                    {
+                     before(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                    pushFollow(FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1723);
+                    ruleHookCombinator();
+                    _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:816: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:820:1: ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) )
+            int alt9=4;
+            switch ( input.LA(1) ) {
+            case RULE_ID:
+            case RULE_STRING:
+            case RULE_COLON:
+                {
+                alt9=1;
+                }
+                break;
+            case 17:
+                {
+                alt9=2;
+                }
+                break;
+            case 18:
+                {
+                alt9=3;
+                }
+                break;
+            case 19:
+                {
+                alt9=4;
+                }
+                break;
+            default:
+                NoViableAltException nvae =
+                    new NoViableAltException("816:1: rule__Term__Alternatives : ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) );", 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:821: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:821: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:822: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:823: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:823:2: rule__Term__TermAtomAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives1755);
+                    rule__Term__TermAtomAssignment_0();
+                    _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:827: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:827: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:828: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:829: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:829:2: rule__Term__TermGroupedSequenceAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives1773);
+                    rule__Term__TermGroupedSequenceAssignment_1();
+                    _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:833: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:833: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:834: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:835: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:835:2: rule__Term__TermOptionalSequenceAssignment_2
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives1791);
+                    rule__Term__TermOptionalSequenceAssignment_2();
+                    _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:839: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:839: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:840: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:841: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:841:2: rule__Term__TermRepeatedSequenceAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives1809);
+                    rule__Term__TermRepeatedSequenceAssignment_3();
+                    _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:850: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:854:1: ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) )
+            int alt10=2;
+            int LA10_0 = input.LA(1);
+
+            if ( (LA10_0==RULE_STRING||LA10_0==RULE_COLON) ) {
+                alt10=1;
+            }
+            else if ( (LA10_0==RULE_ID) ) {
+                alt10=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("850:1: rule__Atom__Alternatives : ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) );", 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:855: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:855: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:856: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:857: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:857:2: rule__Atom__AtomStringRuleAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives1842);
+                    rule__Atom__AtomStringRuleAssignment_0();
+                    _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:861: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:861: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:862: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:863: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:863:2: rule__Atom__AtomRuleReferenceAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives1860);
+                    rule__Atom__AtomRuleReferenceAssignment_1();
+                    _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:872: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:876:1: ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) )
+            int alt11=2;
+            int LA11_0 = input.LA(1);
+
+            if ( (LA11_0==RULE_STRING) ) {
+                alt11=1;
+            }
+            else if ( (LA11_0==RULE_COLON) ) {
+                alt11=2;
+            }
+            else {
+                NoViableAltException nvae =
+                    new NoViableAltException("872:1: rule__StringRule__Alternatives : ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) );", 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:877: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:877: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:878: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:879: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:879:2: rule__StringRule__LiteralAssignment_0
+                    {
+                    pushFollow(FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives1893);
+                    rule__StringRule__LiteralAssignment_0();
+                    _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:883: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:883: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:884: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:885: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:885:2: rule__StringRule__ColonAssignment_1
+                    {
+                    pushFollow(FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives1911);
+                    rule__StringRule__ColonAssignment_1();
+                    _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:896: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:900: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:901: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__01942);
+            rule__EtsiBnf__Group_0__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__01945);
+            rule__EtsiBnf__Group_0__1();
+            _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:908: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:912:1: ( ( 'grammar' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:913:1: ( 'grammar' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:913:1: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:914:1: 'grammar'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
+            match(input,22,FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl1973); 
+             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:927: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:931: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:932: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__12004);
+            rule__EtsiBnf__Group_0__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12007);
+            rule__EtsiBnf__Group_0__2();
+            _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:939: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:943: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:944: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:944: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:945: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:946: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:946:2: rule__EtsiBnf__NameAssignment_0_1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2034);
+            rule__EtsiBnf__NameAssignment_0_1();
+            _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:956: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:960: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:961:2: rule__EtsiBnf__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22064);
+            rule__EtsiBnf__Group_0__2__Impl();
+            _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:967: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:971: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:972: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:972: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:973: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:974: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:974:2: rule__EtsiBnf__Group_0_2__0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2091);
+            rule__EtsiBnf__Group_0_2__0();
+            _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:990: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:994: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:995: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__02127);
+            rule__EtsiBnf__Group_0_2__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02130);
+            rule__EtsiBnf__Group_0_2__1();
+            _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:1002: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:1006: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:1007: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:1007: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:1008: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:1009:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
+            int alt12=2;
+            int LA12_0 = input.LA(1);
+
+            if ( (LA12_0==34) ) {
+                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:1009:2: rule__EtsiBnf__TypeAssignment_0_2_0
+                    {
+                    pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2157);
+                    rule__EtsiBnf__TypeAssignment_0_2_0();
+                    _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:1019: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:1023: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:1024: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__12188);
+            rule__EtsiBnf__Group_0_2__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12191);
+            rule__EtsiBnf__Group_0_2__2();
+            _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:1031: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:1035:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1036:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1036:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1037:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2219); 
+             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:1050: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:1054: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:1055: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__22250);
+            rule__EtsiBnf__Group_0_2__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22253);
+            rule__EtsiBnf__Group_0_2__3();
+            _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:1062:1: rule__EtsiBnf__Group_0_2__2__Impl : ( ( rule__EtsiBnf__ImportsAssignment_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:1066:1: ( ( ( rule__EtsiBnf__ImportsAssignment_0_2_2 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1067:1: ( ( rule__EtsiBnf__ImportsAssignment_0_2_2 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1067:1: ( ( rule__EtsiBnf__ImportsAssignment_0_2_2 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1068:1: ( rule__EtsiBnf__ImportsAssignment_0_2_2 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsAssignment_0_2_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1069:1: ( rule__EtsiBnf__ImportsAssignment_0_2_2 )*
+            loop13:
+            do {
+                int alt13=2;
+                int LA13_0 = input.LA(1);
+
+                if ( (LA13_0==24) ) {
+                    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:1069:2: rule__EtsiBnf__ImportsAssignment_0_2_2
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__ImportsAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2280);
+            	    rule__EtsiBnf__ImportsAssignment_0_2_2();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop13;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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:1079: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:1083: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:1084:2: rule__EtsiBnf__Group_0_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32311);
+            rule__EtsiBnf__Group_0_2__3__Impl();
+            _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:1090:1: rule__EtsiBnf__Group_0_2__3__Impl : ( ( ( rule__EtsiBnf__Alternatives_0_2_3 ) ) ( ( rule__EtsiBnf__Alternatives_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:1094:1: ( ( ( ( rule__EtsiBnf__Alternatives_0_2_3 ) ) ( ( rule__EtsiBnf__Alternatives_0_2_3 )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1095:1: ( ( ( rule__EtsiBnf__Alternatives_0_2_3 ) ) ( ( rule__EtsiBnf__Alternatives_0_2_3 )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1095:1: ( ( ( rule__EtsiBnf__Alternatives_0_2_3 ) ) ( ( rule__EtsiBnf__Alternatives_0_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1096:1: ( ( rule__EtsiBnf__Alternatives_0_2_3 ) ) ( ( rule__EtsiBnf__Alternatives_0_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1096:1: ( ( rule__EtsiBnf__Alternatives_0_2_3 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1097:1: ( rule__EtsiBnf__Alternatives_0_2_3 )
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives_0_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1098:1: ( rule__EtsiBnf__Alternatives_0_2_3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1098:2: rule__EtsiBnf__Alternatives_0_2_3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2340);
+            rule__EtsiBnf__Alternatives_0_2_3();
+            _fsp--;
+
+
+            }
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives_0_2_3()); 
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1101:1: ( ( rule__EtsiBnf__Alternatives_0_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1102:1: ( rule__EtsiBnf__Alternatives_0_2_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives_0_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1103:1: ( rule__EtsiBnf__Alternatives_0_2_3 )*
+            loop14:
+            do {
+                int alt14=2;
+                int LA14_0 = input.LA(1);
+
+                if ( ((LA14_0>=RULE_ID && LA14_0<=RULE_SECTIONHEADER)||LA14_0==RULE_INT) ) {
+                    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:1103:2: rule__EtsiBnf__Alternatives_0_2_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2352);
+            	    rule__EtsiBnf__Alternatives_0_2_3();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop14;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives_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:1122: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:1126: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:1127: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__02393);
+            rule__EtsiBnf__Group_1__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02396);
+            rule__EtsiBnf__Group_1__1();
+            _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:1134: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:1138: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:1139: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:1139: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:1140: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:1141: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:1141:2: rule__EtsiBnf__TypeAssignment_1_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2423);
+            rule__EtsiBnf__TypeAssignment_1_0();
+            _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:1151: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:1155: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:1156: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__12453);
+            rule__EtsiBnf__Group_1__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12456);
+            rule__EtsiBnf__Group_1__2();
+            _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:1163: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:1167:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1168:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1168:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1169:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2484); 
+             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:1182: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:1186: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:1187: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__22515);
+            rule__EtsiBnf__Group_1__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22518);
+            rule__EtsiBnf__Group_1__3();
+            _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:1194:1: rule__EtsiBnf__Group_1__2__Impl : ( ( rule__EtsiBnf__ImportsAssignment_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:1198:1: ( ( ( rule__EtsiBnf__ImportsAssignment_1_2 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1199:1: ( ( rule__EtsiBnf__ImportsAssignment_1_2 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1199:1: ( ( rule__EtsiBnf__ImportsAssignment_1_2 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1200:1: ( rule__EtsiBnf__ImportsAssignment_1_2 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsAssignment_1_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1201:1: ( rule__EtsiBnf__ImportsAssignment_1_2 )*
+            loop15:
+            do {
+                int alt15=2;
+                int LA15_0 = input.LA(1);
+
+                if ( (LA15_0==24) ) {
+                    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:1201:2: rule__EtsiBnf__ImportsAssignment_1_2
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__ImportsAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2545);
+            	    rule__EtsiBnf__ImportsAssignment_1_2();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop15;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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:1211: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:1215: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:1216:2: rule__EtsiBnf__Group_1__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32576);
+            rule__EtsiBnf__Group_1__3__Impl();
+            _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:1222:1: rule__EtsiBnf__Group_1__3__Impl : ( ( rule__EtsiBnf__Alternatives_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:1226:1: ( ( ( rule__EtsiBnf__Alternatives_1_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1227:1: ( ( rule__EtsiBnf__Alternatives_1_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1227:1: ( ( rule__EtsiBnf__Alternatives_1_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1228:1: ( rule__EtsiBnf__Alternatives_1_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives_1_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1229:1: ( rule__EtsiBnf__Alternatives_1_3 )*
+            loop16:
+            do {
+                int alt16=2;
+                int LA16_0 = input.LA(1);
+
+                if ( ((LA16_0>=RULE_ID && LA16_0<=RULE_SECTIONHEADER)||LA16_0==RULE_INT) ) {
+                    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:1229:2: rule__EtsiBnf__Alternatives_1_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_1_3_in_rule__EtsiBnf__Group_1__3__Impl2603);
+            	    rule__EtsiBnf__Alternatives_1_3();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop16;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives_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:1247: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:1251: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:1252: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__02642);
+            rule__EtsiBnf__Group_2__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02645);
+            rule__EtsiBnf__Group_2__1();
+            _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:1259: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:1263: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:1264: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:1264: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:1265: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:1266: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:1266:2: rule__EtsiBnf__TypeAssignment_2_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2672);
+            rule__EtsiBnf__TypeAssignment_2_0();
+            _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:1276: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:1280: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:1281: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__12702);
+            rule__EtsiBnf__Group_2__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12705);
+            rule__EtsiBnf__Group_2__2();
+            _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:1288: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:1292:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1293:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1293:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1294:1: ';'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2733); 
+             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:1307: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:1311: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:1312: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__22764);
+            rule__EtsiBnf__Group_2__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__22767);
+            rule__EtsiBnf__Group_2__3();
+            _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:1319:1: rule__EtsiBnf__Group_2__2__Impl : ( ( rule__EtsiBnf__ImportsAssignment_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:1323:1: ( ( ( rule__EtsiBnf__ImportsAssignment_2_2 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1324:1: ( ( rule__EtsiBnf__ImportsAssignment_2_2 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1324:1: ( ( rule__EtsiBnf__ImportsAssignment_2_2 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1325:1: ( rule__EtsiBnf__ImportsAssignment_2_2 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsAssignment_2_2()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1326:1: ( rule__EtsiBnf__ImportsAssignment_2_2 )*
+            loop17:
+            do {
+                int alt17=2;
+                int LA17_0 = input.LA(1);
+
+                if ( (LA17_0==24) ) {
+                    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:1326:2: rule__EtsiBnf__ImportsAssignment_2_2
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__ImportsAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl2794);
+            	    rule__EtsiBnf__ImportsAssignment_2_2();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop17;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsAssignment_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:1336: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:1340: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:1341:2: rule__EtsiBnf__Group_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__32825);
+            rule__EtsiBnf__Group_2__3__Impl();
+            _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:1347:1: rule__EtsiBnf__Group_2__3__Impl : ( ( rule__EtsiBnf__Alternatives_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:1351:1: ( ( ( rule__EtsiBnf__Alternatives_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1352:1: ( ( rule__EtsiBnf__Alternatives_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1352:1: ( ( rule__EtsiBnf__Alternatives_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1353:1: ( rule__EtsiBnf__Alternatives_2_3 )*
+            {
+             before(grammarAccess.getEtsiBnfAccess().getAlternatives_2_3()); 
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1354:1: ( rule__EtsiBnf__Alternatives_2_3 )*
+            loop18:
+            do {
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( (LA18_0==RULE_SECTIONHEADER||LA18_0==30||(LA18_0>=32 && LA18_0<=33)) ) {
+                    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:1354:2: rule__EtsiBnf__Alternatives_2_3
+            	    {
+            	    pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_2_3_in_rule__EtsiBnf__Group_2__3__Impl2852);
+            	    rule__EtsiBnf__Alternatives_2_3();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop18;
+                }
+            } while (true);
+
+             after(grammarAccess.getEtsiBnfAccess().getAlternatives_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:1372: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:1376: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:1377:2: rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__02891);
+            rule__SectionHeading__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__02894);
+            rule__SectionHeading__Group__1();
+            _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:1384: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:1388:1: ( ( () ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1389:1: ( () )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1389:1: ( () )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1390: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:1391:1: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1393: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:1403: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:1407: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:1408:2: rule__SectionHeading__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__12952);
+            rule__SectionHeading__Group__1__Impl();
+            _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:1414: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:1418: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:1419: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:1419: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:1420: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:1421: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:1421:2: rule__SectionHeading__SectionHeaderAssignment_1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl2979);
+            rule__SectionHeading__SectionHeaderAssignment_1();
+            _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:1435: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:1439: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:1440:2: rule__Import__Group__0__Impl rule__Import__Group__1
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03013);
+            rule__Import__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03016);
+            rule__Import__Group__1();
+            _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:1447: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:1451:1: ( ( 'import' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1452:1: ( 'import' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1452:1: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1453:1: 'import'
+            {
+             before(grammarAccess.getImportAccess().getImportKeyword_0()); 
+            match(input,24,FOLLOW_24_in_rule__Import__Group__0__Impl3044); 
+             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:1466: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:1470: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:1471:2: rule__Import__Group__1__Impl rule__Import__Group__2
+            {
+            pushFollow(FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13075);
+            rule__Import__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13078);
+            rule__Import__Group__2();
+            _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:1478: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:1482: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:1483: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:1483: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:1484: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:1485: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:1485:2: rule__Import__ImportURIAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3105);
+            rule__Import__ImportURIAssignment_1();
+            _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:1495: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:1499: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:1500:2: rule__Import__Group__2__Impl rule__Import__Group__3
+            {
+            pushFollow(FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23135);
+            rule__Import__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23138);
+            rule__Import__Group__3();
+            _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:1507: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:1511: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:1512: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:1512: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:1513: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:1514:1: ( rule__Import__Group_2__0 )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==25) ) {
+                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:1514:2: rule__Import__Group_2__0
+                    {
+                    pushFollow(FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3165);
+                    rule__Import__Group_2__0();
+                    _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:1524: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:1528: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:1529:2: rule__Import__Group__3__Impl rule__Import__Group__4
+            {
+            pushFollow(FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33196);
+            rule__Import__Group__3__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33199);
+            rule__Import__Group__4();
+            _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:1536: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:1540: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:1541: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:1541: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:1542: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:1543:1: ( rule__Import__Group_3__0 )?
+            int alt20=2;
+            int LA20_0 = input.LA(1);
+
+            if ( (LA20_0==26) ) {
+                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:1543:2: rule__Import__Group_3__0
+                    {
+                    pushFollow(FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3226);
+                    rule__Import__Group_3__0();
+                    _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:1553: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:1557: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:1558:2: rule__Import__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43257);
+            rule__Import__Group__4__Impl();
+            _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:1564: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:1568:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1569:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1569:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1570:1: ';'
+            {
+             before(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
+            match(input,23,FOLLOW_23_in_rule__Import__Group__4__Impl3285); 
+             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:1593: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:1597: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:1598: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__03326);
+            rule__Import__Group_2__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03329);
+            rule__Import__Group_2__1();
+            _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:1605: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:1609:1: ( ( '/' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1610:1: ( '/' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1610:1: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1611:1: '/'
+            {
+             before(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
+            match(input,25,FOLLOW_25_in_rule__Import__Group_2__0__Impl3357); 
+             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:1624: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:1628: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:1629:2: rule__Import__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13388);
+            rule__Import__Group_2__1__Impl();
+            _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:1635: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:1639: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:1640: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:1640: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:1641: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:1642: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:1642:2: rule__Import__Alternatives_2_1
+            {
+            pushFollow(FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3415);
+            rule__Import__Alternatives_2_1();
+            _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:1656: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:1660: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:1661: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__03449);
+            rule__Import__Group_3__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03452);
+            rule__Import__Group_3__1();
+            _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:1668: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:1672:1: ( ( 'label:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1673:1: ( 'label:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1673:1: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1674:1: 'label:'
+            {
+             before(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
+            match(input,26,FOLLOW_26_in_rule__Import__Group_3__0__Impl3480); 
+             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:1687: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:1691: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:1692:2: rule__Import__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13511);
+            rule__Import__Group_3__1__Impl();
+            _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:1698: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:1702: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:1703: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:1703: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:1704: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:1705: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:1705:2: rule__Import__LabelAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3538);
+            rule__Import__LabelAssignment_3_1();
+            _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:1719: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:1723: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:1724:2: rule__Rule__Group__0__Impl rule__Rule__Group__1
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03572);
+            rule__Rule__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03575);
+            rule__Rule__Group__1();
+            _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:1731: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:1735: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:1736: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:1736: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:1737: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:1738:1: ( rule__Rule__Group_0__0 )?
+            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.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1738:2: rule__Rule__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3602);
+                    rule__Rule__Group_0__0();
+                    _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:1748: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:1752: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:1753:2: rule__Rule__Group__1__Impl rule__Rule__Group__2
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13633);
+            rule__Rule__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13636);
+            rule__Rule__Group__2();
+            _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:1760: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:1764: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:1765: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:1765: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:1766: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:1767: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:1767:2: rule__Rule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3663);
+            rule__Rule__NameAssignment_1();
+            _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:1777: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:1781: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:1782:2: rule__Rule__Group__2__Impl rule__Rule__Group__3
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23693);
+            rule__Rule__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23696);
+            rule__Rule__Group__3();
+            _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:1789: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:1793:1: ( ( '::=' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1794:1: ( '::=' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1794:1: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1795:1: '::='
+            {
+             before(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
+            match(input,27,FOLLOW_27_in_rule__Rule__Group__2__Impl3724); 
+             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:1808: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:1812: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:1813:2: rule__Rule__Group__3__Impl rule__Rule__Group__4
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__33755);
+            rule__Rule__Group__3__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__33758);
+            rule__Rule__Group__4();
+            _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:1820: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:1824: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:1825: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:1825: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:1826: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:1827:1: ( rule__Rule__DefinitionListAssignment_3 )?
+            int alt22=2;
+            int LA22_0 = input.LA(1);
+
+            if ( (LA22_0==RULE_STRING||LA22_0==RULE_COLON||(LA22_0>=17 && LA22_0<=19)) ) {
+                alt22=1;
+            }
+            else if ( (LA22_0==RULE_ID) ) {
+                int LA22_2 = input.LA(2);
+
+                if ( (LA22_2==EOF||(LA22_2>=RULE_ID && LA22_2<=RULE_INT)||LA22_2==RULE_COLON||LA22_2==16||(LA22_2>=18 && LA22_2<=19)||LA22_2==23) ) {
+                    alt22=1;
+                }
+                else if ( (LA22_2==17) ) {
+                    int LA22_4 = input.LA(3);
+
+                    if ( (LA22_4==RULE_ID||LA22_4==RULE_STRING||LA22_4==RULE_COLON||(LA22_4>=17 && LA22_4<=19)) ) {
+                        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:1827:2: rule__Rule__DefinitionListAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl3785);
+                    rule__Rule__DefinitionListAssignment_3();
+                    _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:1837: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:1841: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:1842:2: rule__Rule__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__43816);
+            rule__Rule__Group__4__Impl();
+            _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:1848: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:1852:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1853:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1853:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1854: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:1855:1: ( ';' )?
+            int alt23=2;
+            int LA23_0 = input.LA(1);
+
+            if ( (LA23_0==23) ) {
+                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:1856:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__Rule__Group__4__Impl3845); 
+
+                    }
+                    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:1877: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:1881: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:1882: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__03888);
+            rule__Rule__Group_0__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__03891);
+            rule__Rule__Group_0__1();
+            _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:1889: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:1893: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:1894: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:1894: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:1895: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:1896: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:1896:2: rule__Rule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl3918);
+            rule__Rule__RulenumberAssignment_0_0();
+            _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:1906: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:1910: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:1911: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__13948);
+            rule__Rule__Group_0__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__13951);
+            rule__Rule__Group_0__2();
+            _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:1918: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:1922: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:1923: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:1923: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:1924: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:1925:1: ( rule__Rule__RulevariantAssignment_0_1 )?
+            int alt24=2;
+            int LA24_0 = input.LA(1);
+
+            if ( (LA24_0==RULE_ID) ) {
+                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:1925:2: rule__Rule__RulevariantAssignment_0_1
+                    {
+                    pushFollow(FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl3978);
+                    rule__Rule__RulevariantAssignment_0_1();
+                    _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:1935: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:1939: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:1940:2: rule__Rule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24009);
+            rule__Rule__Group_0__2__Impl();
+            _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:1946: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:1950:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1951:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1951:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1952:1: '.'
+            {
+             before(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
+            match(input,28,FOLLOW_28_in_rule__Rule__Group_0__2__Impl4037); 
+             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:1971: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:1975: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:1976:2: rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04074);
+            rule__ExtRule__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04077);
+            rule__ExtRule__Group__1();
+            _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:1983: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:1987: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:1988: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:1988: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:1989: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:1990:1: ( rule__ExtRule__Group_0__0 )?
+            int alt25=2;
+            int LA25_0 = input.LA(1);
+
+            if ( (LA25_0==RULE_INT) ) {
+                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:1990:2: rule__ExtRule__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4104);
+                    rule__ExtRule__Group_0__0();
+                    _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:2000: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:2004: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:2005:2: rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14135);
+            rule__ExtRule__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14138);
+            rule__ExtRule__Group__2();
+            _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:2012: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:2016: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:2017: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:2017: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:2018: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:2019: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:2019:2: rule__ExtRule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4165);
+            rule__ExtRule__NameAssignment_1();
+            _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:2029: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:2033: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:2034:2: rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24195);
+            rule__ExtRule__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24198);
+            rule__ExtRule__Group__3();
+            _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:2041: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:2045: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:2046: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:2046: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:2047: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:2048: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:2048:2: rule__ExtRule__Group_2__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4225);
+            rule__ExtRule__Group_2__0();
+            _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:2058: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:2062: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:2063:2: rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34255);
+            rule__ExtRule__Group__3__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34258);
+            rule__ExtRule__Group__4();
+            _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:2070: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:2074:1: ( ( '<-' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2075:1: ( '<-' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2075:1: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2076:1: '<-'
+            {
+             before(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
+            match(input,29,FOLLOW_29_in_rule__ExtRule__Group__3__Impl4286); 
+             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:2089: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:2093: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:2094:2: rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44317);
+            rule__ExtRule__Group__4__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44320);
+            rule__ExtRule__Group__5();
+            _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:2101: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:2105: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:2106: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:2106: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:2107: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:2108:1: ( rule__ExtRule__Alternatives_4 )*
+            loop26:
+            do {
+                int alt26=2;
+                int LA26_0 = input.LA(1);
+
+                if ( (LA26_0==RULE_ID) ) {
+                    int LA26_2 = input.LA(2);
+
+                    if ( (LA26_2==EOF||(LA26_2>=RULE_ID && LA26_2<=RULE_INT)||LA26_2==RULE_COLON||(LA26_2>=13 && LA26_2<=16)||(LA26_2>=18 && LA26_2<=21)||LA26_2==23) ) {
+                        alt26=1;
+                    }
+                    else if ( (LA26_2==17) ) {
+                        int LA26_4 = input.LA(3);
+
+                        if ( (LA26_4==RULE_INT) ) {
+                            int LA26_5 = input.LA(4);
+
+                            if ( (LA26_5==RULE_ID||LA26_5==28) ) {
+                                alt26=1;
+                            }
+
+
+                        }
+                        else if ( (LA26_4==EOF||(LA26_4>=RULE_ID && LA26_4<=RULE_STRING)||LA26_4==RULE_COLON||(LA26_4>=13 && LA26_4<=21)||LA26_4==23) ) {
+                            alt26=1;
+                        }
+
+
+                    }
+
+
+                }
+                else if ( (LA26_0==RULE_STRING||LA26_0==RULE_COLON||(LA26_0>=13 && LA26_0<=21)) ) {
+                    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__Alternatives_4
+            	    {
+            	    pushFollow(FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4347);
+            	    rule__ExtRule__Alternatives_4();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop26;
+                }
+            } 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:2118: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:2122: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:2123:2: rule__ExtRule__Group__5__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54378);
+            rule__ExtRule__Group__5__Impl();
+            _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:2129: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:2133:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2134:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2134:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2135: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:2136:1: ( ';' )?
+            int alt27=2;
+            int LA27_0 = input.LA(1);
+
+            if ( (LA27_0==23) ) {
+                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:2137:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__ExtRule__Group__5__Impl4407); 
+
+                    }
+                    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:2160: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:2164: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:2165: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__04452);
+            rule__ExtRule__Group_0__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04455);
+            rule__ExtRule__Group_0__1();
+            _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:2172: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:2176: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:2177: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:2177: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:2178: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:2179: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:2179:2: rule__ExtRule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4482);
+            rule__ExtRule__RulenumberAssignment_0_0();
+            _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:2189: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:2193: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:2194: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__14512);
+            rule__ExtRule__Group_0__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14515);
+            rule__ExtRule__Group_0__2();
+            _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:2201: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:2205: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:2206: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:2206: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:2207: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:2208:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
+            int alt28=2;
+            int LA28_0 = input.LA(1);
+
+            if ( (LA28_0==RULE_ID) ) {
+                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:2208:2: rule__ExtRule__RulevariantAssignment_0_1
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4542);
+                    rule__ExtRule__RulevariantAssignment_0_1();
+                    _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:2218: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:2222: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:2223:2: rule__ExtRule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24573);
+            rule__ExtRule__Group_0__2__Impl();
+            _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:2229: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:2233:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2234:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2234:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2235:1: '.'
+            {
+             before(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
+            match(input,28,FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4601); 
+             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:2254: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:2258: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:2259: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__04638);
+            rule__ExtRule__Group_2__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04641);
+            rule__ExtRule__Group_2__1();
+            _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:2266: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:2270:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2271:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2271:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2272:1: '('
+            {
+             before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
+            match(input,17,FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4669); 
+             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:2285: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:2289: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:2290: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__14700);
+            rule__ExtRule__Group_2__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14703);
+            rule__ExtRule__Group_2__2();
+            _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:2297: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:2301: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:2302: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:2302: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:2303: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:2304: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:2304:2: rule__ExtRule__RuleextAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4730);
+            rule__ExtRule__RuleextAssignment_2_1();
+            _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:2314: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:2318: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:2319:2: rule__ExtRule__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__24760);
+            rule__ExtRule__Group_2__2__Impl();
+            _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:2325: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:2329:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2330:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2330:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2331:1: ')'
+            {
+             before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
+            match(input,13,FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl4788); 
+             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:2350: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:2354: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:2355:2: rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__04825);
+            rule__GlobalCombinator__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__04828);
+            rule__GlobalCombinator__Group__1();
+            _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:2362: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:2366: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:2367: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:2367: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:2368: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:2369: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:2369:2: rule__GlobalCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl4855);
+            rule__GlobalCombinator__Group_0__0();
+            _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:2379: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:2383: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:2384:2: rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__14885);
+            rule__GlobalCombinator__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__14888);
+            rule__GlobalCombinator__Group__2();
+            _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:2391: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:2395: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:2396: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:2396: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:2397: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:2398: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:2398:2: rule__GlobalCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl4915);
+            rule__GlobalCombinator__LogicAssignment_1();
+            _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:2408: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:2412: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:2413:2: rule__GlobalCombinator__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__24945);
+            rule__GlobalCombinator__Group__2__Impl();
+            _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:2419: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:2423:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2424:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2424:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2425: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:2426:1: ( ';' )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
+
+            if ( (LA29_0==23) ) {
+                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:2427:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl4974); 
+
+                    }
+                    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:2444: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:2448: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:2449: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__05013);
+            rule__GlobalCombinator__Group_0__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05016);
+            rule__GlobalCombinator__Group_0__1();
+            _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:2456: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:2460:1: ( ( 'global' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2461:1: ( 'global' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2461:1: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2462:1: 'global'
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
+            match(input,30,FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5044); 
+             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:2475: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:2479: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:2480:2: rule__GlobalCombinator__Group_0__1__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15075);
+            rule__GlobalCombinator__Group_0__1__Impl();
+            _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:2486: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:2490:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2491:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2491:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2492:1: 'combinator:'
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
+            match(input,31,FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5103); 
+             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:2509: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:2513: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:2514:2: rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05138);
+            rule__RuleCombinator__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05141);
+            rule__RuleCombinator__Group__1();
+            _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:2521: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:2525: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:2526: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:2526: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:2527: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:2528: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:2528:2: rule__RuleCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5168);
+            rule__RuleCombinator__Group_0__0();
+            _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:2538: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:2542: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:2543:2: rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15198);
+            rule__RuleCombinator__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15201);
+            rule__RuleCombinator__Group__2();
+            _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:2550: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:2554: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:2555: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:2555: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:2556: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:2557: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:2557:2: rule__RuleCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5228);
+            rule__RuleCombinator__LogicAssignment_1();
+            _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:2567: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:2571: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:2572:2: rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25258);
+            rule__RuleCombinator__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25261);
+            rule__RuleCombinator__Group__3();
+            _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:2579: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:2583: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:2584: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:2584: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:2585: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:2586:1: ( rule__RuleCombinator__Group_2__0 )*
+            loop30:
+            do {
+                int alt30=2;
+                int LA30_0 = input.LA(1);
+
+                if ( (LA30_0==17) ) {
+                    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:2586:2: rule__RuleCombinator__Group_2__0
+            	    {
+            	    pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5288);
+            	    rule__RuleCombinator__Group_2__0();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop30;
+                }
+            } 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:2596: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:2600: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:2601:2: rule__RuleCombinator__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35319);
+            rule__RuleCombinator__Group__3__Impl();
+            _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:2607: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:2611:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2612:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2612:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2613: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:2614:1: ( ';' )?
+            int alt31=2;
+            int LA31_0 = input.LA(1);
+
+            if ( (LA31_0==23) ) {
+                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:2615:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5348); 
+
+                    }
+                    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:2634: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:2638: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:2639: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__05389);
+            rule__RuleCombinator__Group_0__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05392);
+            rule__RuleCombinator__Group_0__1();
+            _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:2646: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:2650:1: ( ( 'rule' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2651:1: ( 'rule' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2651:1: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2652:1: 'rule'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
+            match(input,32,FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5420); 
+             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:2665: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:2669: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:2670: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__15451);
+            rule__RuleCombinator__Group_0__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15454);
+            rule__RuleCombinator__Group_0__2();
+            _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:2677: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:2681:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2682:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2682:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2683:1: 'combinator:'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
+            match(input,31,FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5482); 
+             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:2696: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:2700: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:2701:2: rule__RuleCombinator__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25513);
+            rule__RuleCombinator__Group_0__2__Impl();
+            _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:2707: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:2711: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:2712: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:2712: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:2713: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:2714: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:2714:2: rule__RuleCombinator__NameAssignment_0_2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5540);
+            rule__RuleCombinator__NameAssignment_0_2();
+            _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:2730: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:2734: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:2735: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__05576);
+            rule__RuleCombinator__Group_2__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05579);
+            rule__RuleCombinator__Group_2__1();
+            _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:2742: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:2746:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2747:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2747:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2748:1: '('
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
+            match(input,17,FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5607); 
+             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:2761: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:2765: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:2766: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__15638);
+            rule__RuleCombinator__Group_2__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15641);
+            rule__RuleCombinator__Group_2__2();
+            _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:2773: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:2777: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:2778: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:2778: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:2779: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:2780: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:2780:2: rule__RuleCombinator__LABELAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5668);
+            rule__RuleCombinator__LABELAssignment_2_1();
+            _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:2790: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:2794: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:2795:2: rule__RuleCombinator__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25698);
+            rule__RuleCombinator__Group_2__2__Impl();
+            _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:2801: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:2805:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2806:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2806:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2807:1: ')'
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
+            match(input,13,FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5726); 
+             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:2826: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:2830: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:2831:2: rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__05763);
+            rule__HookCombinator__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__05766);
+            rule__HookCombinator__Group__1();
+            _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:2838: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:2842:1: ( ( 'hook' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2843:1: ( 'hook' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2843:1: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2844:1: 'hook'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
+            match(input,33,FOLLOW_33_in_rule__HookCombinator__Group__0__Impl5794); 
+             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:2857: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:2861: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:2862:2: rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__15825);
+            rule__HookCombinator__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__15828);
+            rule__HookCombinator__Group__2();
+            _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:2869: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:2873:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2874:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2874:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2875:1: 'combinator:'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
+            match(input,31,FOLLOW_31_in_rule__HookCombinator__Group__1__Impl5856); 
+             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:2888: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:2892: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:2893:2: rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__25887);
+            rule__HookCombinator__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__25890);
+            rule__HookCombinator__Group__3();
+            _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:2900: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:2904: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:2905: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:2905: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:2906: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:2907: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:2907:2: rule__HookCombinator__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl5917);
+            rule__HookCombinator__NameAssignment_2();
+            _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:2917: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:2921: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:2922:2: rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__35947);
+            rule__HookCombinator__Group__3__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__35950);
+            rule__HookCombinator__Group__4();
+            _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:2929: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:2933:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2934:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2934:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2935:1: '('
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group__3__Impl5978); 
+             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:2948: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:2952: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:2953:2: rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46009);
+            rule__HookCombinator__Group__4__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46012);
+            rule__HookCombinator__Group__5();
+            _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:2960: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:2964: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:2965: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:2965: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:2966: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:2967: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:2967:2: rule__HookCombinator__RuleextAssignment_4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6039);
+            rule__HookCombinator__RuleextAssignment_4();
+            _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:2977: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:2981: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:2982:2: rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56069);
+            rule__HookCombinator__Group__5__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56072);
+            rule__HookCombinator__Group__6();
+            _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:2989: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:2993:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2994:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2994:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2995:1: ')'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6100); 
+             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:3008: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:3012: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:3013:2: rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66131);
+            rule__HookCombinator__Group__6__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66134);
+            rule__HookCombinator__Group__7();
+            _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:3020: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:3024: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:3025: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:3025: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:3026: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:3027:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            int alt32=2;
+            int LA32_0 = input.LA(1);
+
+            if ( (LA32_0==RULE_LOGIC) ) {
+                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:3027:2: rule__HookCombinator__LogicAssignment_6
+                    {
+                    pushFollow(FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6161);
+                    rule__HookCombinator__LogicAssignment_6();
+                    _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:3037: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:3041: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:3042:2: rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76192);
+            rule__HookCombinator__Group__7__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76195);
+            rule__HookCombinator__Group__8();
+            _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:3049: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:3053: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:3054: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:3054: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:3055: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:3055: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:3056: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:3057: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:3057:2: rule__HookCombinator__Group_7__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6224);
+            rule__HookCombinator__Group_7__0();
+            _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:3060: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:3061: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:3062:1: ( rule__HookCombinator__Group_7__0 )*
+            loop33:
+            do {
+                int alt33=2;
+                int LA33_0 = input.LA(1);
+
+                if ( (LA33_0==17) ) {
+                    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:3062:2: rule__HookCombinator__Group_7__0
+            	    {
+            	    pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6236);
+            	    rule__HookCombinator__Group_7__0();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop33;
+                }
+            } 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:3073: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:3077: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:3078:2: rule__HookCombinator__Group__8__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86269);
+            rule__HookCombinator__Group__8__Impl();
+            _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:3084: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:3088:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3089:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3089:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3090: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:3091:1: ( ';' )?
+            int alt34=2;
+            int LA34_0 = input.LA(1);
+
+            if ( (LA34_0==23) ) {
+                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:3092:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6298); 
+
+                    }
+                    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:3121: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:3125: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:3126: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__06349);
+            rule__HookCombinator__Group_7__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06352);
+            rule__HookCombinator__Group_7__1();
+            _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:3133: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:3137:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3138:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3138:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3139:1: '('
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6380); 
+             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:3152: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:3156: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:3157: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__16411);
+            rule__HookCombinator__Group_7__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16414);
+            rule__HookCombinator__Group_7__2();
+            _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:3164: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:3168: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:3169: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:3169: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:3170: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:3171: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:3171:2: rule__HookCombinator__LABELAssignment_7_1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6441);
+            rule__HookCombinator__LABELAssignment_7_1();
+            _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:3181: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:3185: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:3186:2: rule__HookCombinator__Group_7__2__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26471);
+            rule__HookCombinator__Group_7__2__Impl();
+            _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:3192: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:3196:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3197:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3197:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3198:1: ')'
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6499); 
+             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:3217: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:3221: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:3222:2: rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06536);
+            rule__DefinitionList__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06539);
+            rule__DefinitionList__Group__1();
+            _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:3229: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:3233: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:3234: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:3234: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:3235: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:3236: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:3236:2: rule__DefinitionList__SingleDefinitionAssignment_0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6566);
+            rule__DefinitionList__SingleDefinitionAssignment_0();
+            _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:3246: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:3250: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:3251:2: rule__DefinitionList__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16596);
+            rule__DefinitionList__Group__1__Impl();
+            _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:3257: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:3261: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:3262: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:3262: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:3263: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:3264:1: ( rule__DefinitionList__Group_1__0 )*
+            loop35:
+            do {
+                int alt35=2;
+                int LA35_0 = input.LA(1);
+
+                if ( (LA35_0==16) ) {
+                    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:3264:2: rule__DefinitionList__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6623);
+            	    rule__DefinitionList__Group_1__0();
+            	    _fsp--;
+
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop35;
+                }
+            } 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:3278: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:3282: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:3283: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__06658);
+            rule__DefinitionList__Group_1__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06661);
+            rule__DefinitionList__Group_1__1();
+            _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:3290: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:3294:1: ( ( '|' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3295:1: ( '|' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3295:1: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3296:1: '|'
+            {
+             before(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
+            match(input,16,FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6689); 
+             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:3309: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:3313: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:3314:2: rule__DefinitionList__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16720);
+            rule__DefinitionList__Group_1__1__Impl();
+            _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:3320: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:3324: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:3325: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:3325: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:3326: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:3327: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:3327:2: rule__DefinitionList__SingleDefinitionAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl6747);
+            rule__DefinitionList__SingleDefinitionAssignment_1_1();
+            _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:3341: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:3345: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:3346:2: rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__06781);
+            rule__GroupedSequence__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__06784);
+            rule__GroupedSequence__Group__1();
+            _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:3353: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:3357:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3358:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3358:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3359:1: '('
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
+            match(input,17,FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl6812); 
+             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:3372: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:3376: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:3377:2: rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__16843);
+            rule__GroupedSequence__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__16846);
+            rule__GroupedSequence__Group__2();
+            _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:3384: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:3388: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:3389: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:3389: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:3390: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:3391: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:3391:2: rule__GroupedSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl6873);
+            rule__GroupedSequence__DefinitionListAssignment_1();
+            _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:3401: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:3405: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:3406:2: rule__GroupedSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__26903);
+            rule__GroupedSequence__Group__2__Impl();
+            _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:3412: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:3416:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3417:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3417:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3418:1: ')'
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
+            match(input,13,FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl6931); 
+             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:3437: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:3441: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:3442:2: rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__06968);
+            rule__OptionalSequence__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__06971);
+            rule__OptionalSequence__Group__1();
+            _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:3449: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:3453:1: ( ( '[' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3454:1: ( '[' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3454:1: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3455:1: '['
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
+            match(input,18,FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl6999); 
+             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:3468: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:3472: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:3473:2: rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17030);
+            rule__OptionalSequence__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17033);
+            rule__OptionalSequence__Group__2();
+            _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:3480: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:3484: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:3485: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:3485: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:3486: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:3487: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:3487:2: rule__OptionalSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7060);
+            rule__OptionalSequence__DefinitionListAssignment_1();
+            _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:3497: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:3501: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:3502:2: rule__OptionalSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27090);
+            rule__OptionalSequence__Group__2__Impl();
+            _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:3508: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:3512:1: ( ( ']' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3513:1: ( ']' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3513:1: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3514:1: ']'
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
+            match(input,14,FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7118); 
+             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:3533: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:3537: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:3538:2: rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07155);
+            rule__RepeatedSequence__Group__0__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07158);
+            rule__RepeatedSequence__Group__1();
+            _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:3545: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:3549:1: ( ( '{' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3550:1: ( '{' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3550:1: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3551:1: '{'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
+            match(input,19,FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7186); 
+             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:3564: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:3568: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:3569:2: rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17217);
+            rule__RepeatedSequence__Group__1__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17220);
+            rule__RepeatedSequence__Group__2();
+            _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:3576: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:3580: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:3581: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:3581: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:3582: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:3583: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:3583:2: rule__RepeatedSequence__DefinitionsAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7247);
+            rule__RepeatedSequence__DefinitionsAssignment_1();
+            _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:3593: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:3597: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:3598:2: rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27277);
+            rule__RepeatedSequence__Group__2__Impl();
+            _fsp--;
+
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27280);
+            rule__RepeatedSequence__Group__3();
+            _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:3605: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:3609:1: ( ( '}' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3610:1: ( '}' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3610:1: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3611:1: '}'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
+            match(input,15,FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7308); 
+             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:3624: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:3628: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:3629:2: rule__RepeatedSequence__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37339);
+            rule__RepeatedSequence__Group__3__Impl();
+            _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:3635: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:3639: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:3640: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:3640: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:3641: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:3642:1: ( rule__RepeatedSequence__MorethanonceAssignment_3 )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
+
+            if ( (LA36_0==21) ) {
+                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:3642:2: rule__RepeatedSequence__MorethanonceAssignment_3
+                    {
+                    pushFollow(FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7366);
+                    rule__RepeatedSequence__MorethanonceAssignment_3();
+                    _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:3661: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:3665:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3666:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3666:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3667:1: RULE_ID
+            {
+             before(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17410); 
+             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:3676: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:3680:1: ( ( ( '/bnf' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3681:1: ( ( '/bnf' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3681:1: ( ( '/bnf' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3682: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:3683:1: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3684:1: '/bnf'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            match(input,34,FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07446); 
+             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__ImportsAssignment_0_2_2
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3699:1: rule__EtsiBnf__ImportsAssignment_0_2_2 : ( ruleImport ) ;
+    public final void rule__EtsiBnf__ImportsAssignment_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:3703:1: ( ( ruleImport ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3704:1: ( ruleImport )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3704:1: ( ruleImport )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3705:1: ruleImport
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_0_2_2_0()); 
+            pushFollow(FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_0_2_27485);
+            ruleImport();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_0_2_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__ImportsAssignment_0_2_2
+
+
+    // $ANTLR start rule__EtsiBnf__RuleAssignment_0_2_3_0
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3714:1: rule__EtsiBnf__RuleAssignment_0_2_3_0 : ( ruleRule ) ;
+    public final void rule__EtsiBnf__RuleAssignment_0_2_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:3718:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3719:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3719:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3720:1: ruleRule
+            {
+             before(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_0_2_3_0_0()); 
+            pushFollow(FOLLOW_ruleRule_in_rule__EtsiBnf__RuleAssignment_0_2_3_07516);
+            ruleRule();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_0_2_3_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__RuleAssignment_0_2_3_0
+
+
+    // $ANTLR start rule__EtsiBnf__SectionheaderAssignment_0_2_3_1
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3729:1: rule__EtsiBnf__SectionheaderAssignment_0_2_3_1 : ( ruleSectionHeading ) ;
+    public final void rule__EtsiBnf__SectionheaderAssignment_0_2_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:3733:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3734:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3734:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3735:1: ruleSectionHeading
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_0_2_3_1_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_0_2_3_17547);
+            ruleSectionHeading();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_0_2_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__SectionheaderAssignment_0_2_3_1
+
+
+    // $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:3744: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:3748:1: ( ( ( '/delta' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3749:1: ( ( '/delta' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3749:1: ( ( '/delta' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3750: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:3751:1: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3752:1: '/delta'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            match(input,35,FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07583); 
+             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__ImportsAssignment_1_2
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3767:1: rule__EtsiBnf__ImportsAssignment_1_2 : ( ruleImport ) ;
+    public final void rule__EtsiBnf__ImportsAssignment_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:3771:1: ( ( ruleImport ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3772:1: ( ruleImport )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3772:1: ( ruleImport )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3773:1: ruleImport
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_1_2_0()); 
+            pushFollow(FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_1_27622);
+            ruleImport();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_1_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__ImportsAssignment_1_2
+
+
+    // $ANTLR start rule__EtsiBnf__RuleAssignment_1_3_0
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3782:1: rule__EtsiBnf__RuleAssignment_1_3_0 : ( ruleRule ) ;
+    public final void rule__EtsiBnf__RuleAssignment_1_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:3786:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3787:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3787:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3788:1: ruleRule
+            {
+             before(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_1_3_0_0()); 
+            pushFollow(FOLLOW_ruleRule_in_rule__EtsiBnf__RuleAssignment_1_3_07653);
+            ruleRule();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getRuleRuleParserRuleCall_1_3_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__RuleAssignment_1_3_0
+
+
+    // $ANTLR start rule__EtsiBnf__SectionheaderAssignment_1_3_1
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3797:1: rule__EtsiBnf__SectionheaderAssignment_1_3_1 : ( ruleSectionHeading ) ;
+    public final void rule__EtsiBnf__SectionheaderAssignment_1_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:3801:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3802:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3802:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3803:1: ruleSectionHeading
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_1_3_1_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_1_3_17684);
+            ruleSectionHeading();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_1_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__SectionheaderAssignment_1_3_1
+
+
+    // $ANTLR start rule__EtsiBnf__ExtRuleAssignment_1_3_2
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3812:1: rule__EtsiBnf__ExtRuleAssignment_1_3_2 : ( ruleExtRule ) ;
+    public final void rule__EtsiBnf__ExtRuleAssignment_1_3_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:3816:1: ( ( ruleExtRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3817:1: ( ruleExtRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3817:1: ( ruleExtRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3818:1: ruleExtRule
+            {
+             before(grammarAccess.getEtsiBnfAccess().getExtRuleExtRuleParserRuleCall_1_3_2_0()); 
+            pushFollow(FOLLOW_ruleExtRule_in_rule__EtsiBnf__ExtRuleAssignment_1_3_27715);
+            ruleExtRule();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getExtRuleExtRuleParserRuleCall_1_3_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__ExtRuleAssignment_1_3_2
+
+
+    // $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:3827: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:3831:1: ( ( ( '/merge' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3832:1: ( ( '/merge' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3832:1: ( ( '/merge' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3833: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:3834:1: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3835:1: '/merge'
+            {
+             before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            match(input,36,FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07751); 
+             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__ImportsAssignment_2_2
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3850:1: rule__EtsiBnf__ImportsAssignment_2_2 : ( ruleImport ) ;
+    public final void rule__EtsiBnf__ImportsAssignment_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:3854:1: ( ( ruleImport ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3855:1: ( ruleImport )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3855:1: ( ruleImport )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3856:1: ruleImport
+            {
+             before(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_2_2_0()); 
+            pushFollow(FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_2_27790);
+            ruleImport();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getImportsImportParserRuleCall_2_2_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__ImportsAssignment_2_2
+
+
+    // $ANTLR start rule__EtsiBnf__SectionheaderAssignment_2_3_0
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3865:1: rule__EtsiBnf__SectionheaderAssignment_2_3_0 : ( ruleSectionHeading ) ;
+    public final void rule__EtsiBnf__SectionheaderAssignment_2_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:3869:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3870:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3870:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3871:1: ruleSectionHeading
+            {
+             before(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_2_3_0_0()); 
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_2_3_07821);
+            ruleSectionHeading();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getSectionheaderSectionHeadingParserRuleCall_2_3_0_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__SectionheaderAssignment_2_3_0
+
+
+    // $ANTLR start rule__EtsiBnf__MergeRuleAssignment_2_3_1
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3880:1: rule__EtsiBnf__MergeRuleAssignment_2_3_1 : ( ruleMergeRule ) ;
+    public final void rule__EtsiBnf__MergeRuleAssignment_2_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:3884:1: ( ( ruleMergeRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3885:1: ( ruleMergeRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3885:1: ( ruleMergeRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3886:1: ruleMergeRule
+            {
+             before(grammarAccess.getEtsiBnfAccess().getMergeRuleMergeRuleParserRuleCall_2_3_1_0()); 
+            pushFollow(FOLLOW_ruleMergeRule_in_rule__EtsiBnf__MergeRuleAssignment_2_3_17852);
+            ruleMergeRule();
+            _fsp--;
+
+             after(grammarAccess.getEtsiBnfAccess().getMergeRuleMergeRuleParserRuleCall_2_3_1_0()); 
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end rule__EtsiBnf__MergeRuleAssignment_2_3_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:3895: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:3899:1: ( ( RULE_SECTIONHEADER ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3900:1: ( RULE_SECTIONHEADER )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3900:1: ( RULE_SECTIONHEADER )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3901:1: RULE_SECTIONHEADER
+            {
+             before(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+            match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_17883); 
+             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:3910: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:3914:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3915:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3915:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3916:1: RULE_STRING
+            {
+             before(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_17914); 
+             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:3925: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:3929:1: ( ( ( 'core' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3930:1: ( ( 'core' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3930:1: ( ( 'core' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3931: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:3932:1: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3933:1: 'core'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            match(input,37,FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_07950); 
+             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:3948: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:3952:1: ( ( ( 'package' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3953:1: ( ( 'package' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3953:1: ( ( 'package' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3954: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:3955:1: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3956:1: 'package'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            match(input,38,FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_17994); 
+             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:3971: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:3975:1: ( ( ( 'update' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3976:1: ( ( 'update' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3976:1: ( ( 'update' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3977: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:3978:1: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3979:1: 'update'
+            {
+             before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            match(input,39,FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28038); 
+             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:3994: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:3998:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3999:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3999:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4000:1: RULE_ID
+            {
+             before(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18077); 
+             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:4009: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:4013:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4014:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4014:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4015:1: RULE_INT
+            {
+             before(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08108); 
+             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:4024: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:4028:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4029:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4029:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4030:1: RULE_ID
+            {
+             before(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18139); 
+             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:4039: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:4043:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4044:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4044:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4045:1: RULE_ID
+            {
+             before(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18170); 
+             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:4054: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:4058:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4059:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4059:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4060:1: ruleDefinitionList
+            {
+             before(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38201);
+            ruleDefinitionList();
+            _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:4069: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:4073:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4074:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4074:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4075:1: RULE_INT
+            {
+             before(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08232); 
+             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:4084: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:4088:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4089:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4089:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4090:1: RULE_ID
+            {
+             before(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18263); 
+             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:4099: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:4103:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4104:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4104:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4105:1: RULE_ID
+            {
+             before(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18294); 
+             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:4114: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:4118:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4119:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4119:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4120:1: RULE_INT
+            {
+             before(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18325); 
+             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:4129: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:4133:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4134:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4134:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4135:1: ruleAtom
+            {
+             before(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08356);
+            ruleAtom();
+            _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:4144: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:4148:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4149:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4149:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4150:1: RULE_LOGIC
+            {
+             before(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18387); 
+             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:4159: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:4163:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4164:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4164:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4165:1: RULE_ID
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28418); 
+             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:4174: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:4178:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4179:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4179:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4180:1: RULE_LOGIC
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18449); 
+             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:4189: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:4193:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4194:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4194:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4195:1: RULE_STRING
+            {
+             before(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18480); 
+             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:4204: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:4208:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4209:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4209:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4210:1: RULE_ID
+            {
+             before(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28511); 
+             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:4219: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:4223:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4224:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4224:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4225:1: RULE_INT
+            {
+             before(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48542); 
+             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:4234: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:4238:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4239:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4239:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4240:1: RULE_LOGIC
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68573); 
+             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:4249: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:4253:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4254:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4254:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4255:1: RULE_STRING
+            {
+             before(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18604); 
+             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:4264: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:4268:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4269:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4269:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4270:1: ruleSingleDefinition
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_08635);
+            ruleSingleDefinition();
+            _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:4279: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:4283:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4284:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4284:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4285:1: ruleSingleDefinition
+            {
+             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_18666);
+            ruleSingleDefinition();
+            _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:4294: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:4298:1: ( ( ruleTerm ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4299:1: ( ruleTerm )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4299:1: ( ruleTerm )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4300:1: ruleTerm
+            {
+             before(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+            pushFollow(FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment8697);
+            ruleTerm();
+            _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:4309: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:4313:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4314:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4314:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4315:1: ruleAtom
+            {
+             before(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_08728);
+            ruleAtom();
+            _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:4324: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:4328:1: ( ( ruleGroupedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4329:1: ( ruleGroupedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4329:1: ( ruleGroupedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4330:1: ruleGroupedSequence
+            {
+             before(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_18759);
+            ruleGroupedSequence();
+            _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:4339: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:4343:1: ( ( ruleOptionalSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4344:1: ( ruleOptionalSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4344:1: ( ruleOptionalSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4345:1: ruleOptionalSequence
+            {
+             before(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+            pushFollow(FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_28790);
+            ruleOptionalSequence();
+            _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:4354: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:4358:1: ( ( ruleRepeatedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4359:1: ( ruleRepeatedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4359:1: ( ruleRepeatedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4360:1: ruleRepeatedSequence
+            {
+             before(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_38821);
+            ruleRepeatedSequence();
+            _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:4369: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:4373:1: ( ( ruleStringRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4374:1: ( ruleStringRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4374:1: ( ruleStringRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4375:1: ruleStringRule
+            {
+             before(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+            pushFollow(FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_08852);
+            ruleStringRule();
+            _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:4384: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:4388:1: ( ( ruleRuleReference ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4389:1: ( ruleRuleReference )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4389:1: ( ruleRuleReference )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4390:1: ruleRuleReference
+            {
+             before(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_18883);
+            ruleRuleReference();
+            _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:4399: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:4403:1: ( ( ( RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4404:1: ( ( RULE_ID ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4404:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4405: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:4406:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4407:1: RULE_ID
+            {
+             before(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment8918); 
+             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:4418: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:4422:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4423:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4423:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4424:1: RULE_STRING
+            {
+             before(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_08953); 
+             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:4433: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:4437:1: ( ( RULE_COLON ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4438:1: ( RULE_COLON )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4438:1: ( RULE_COLON )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4439:1: RULE_COLON
+            {
+             before(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+            match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_18984); 
+             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:4448: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:4452:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4453:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4453:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4454:1: ruleDefinitionList
+            {
+             before(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19015);
+            ruleDefinitionList();
+            _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:4463: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:4467:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4468:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4468:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4469:1: ruleDefinitionList
+            {
+             before(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19046);
+            ruleDefinitionList();
+            _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:4478: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:4482:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4483:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4483:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4484:1: ruleDefinitionList
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19077);
+            ruleDefinitionList();
+            _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:4493: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:4497:1: ( ( ( '+' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4498:1: ( ( '+' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4498:1: ( ( '+' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4499: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:4500:1: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4501:1: '+'
+            {
+             before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
+            match(input,21,FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39113); 
+             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
+
+
+ 
+
+    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_ruleSectionHeading_in_entryRuleSectionHeading121 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading128 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading154 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport181 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImport188 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0_in_ruleImport214 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule241 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRule248 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0_in_ruleRule274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule301 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule361 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule368 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule394 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator421 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator428 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator481 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator514 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator541 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator548 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator574 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList601 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList634 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition661 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition668 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition696 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition708 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm738 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm745 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Alternatives_in_ruleTerm771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom798 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom805 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Alternatives_in_ruleAtom831 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference858 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule918 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule951 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence978 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1011 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1038 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence1045 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1071 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1098 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence1105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1131 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1185 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1203 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__RuleAssignment_0_2_3_0_in_rule__EtsiBnf__Alternatives_0_2_31236 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__SectionheaderAssignment_0_2_3_1_in_rule__EtsiBnf__Alternatives_0_2_31254 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__RuleAssignment_1_3_0_in_rule__EtsiBnf__Alternatives_1_31287 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__SectionheaderAssignment_1_3_1_in_rule__EtsiBnf__Alternatives_1_31305 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ExtRuleAssignment_1_3_2_in_rule__EtsiBnf__Alternatives_1_31323 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__SectionheaderAssignment_2_3_0_in_rule__EtsiBnf__Alternatives_2_31356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__MergeRuleAssignment_2_3_1_in_rule__EtsiBnf__Alternatives_2_31374 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11407 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41476 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Alternatives_41495 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__ExtRule__Alternatives_41515 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__ExtRule__Alternatives_41535 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__ExtRule__Alternatives_41555 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Alternatives_41575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__ExtRule__Alternatives_41595 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__ExtRule__Alternatives_41615 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__ExtRule__Alternatives_41635 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__ExtRule__Alternatives_41655 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1706 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1723 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives1755 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives1773 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives1791 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives1809 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives1842 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives1860 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives1893 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives1911 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__01942 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__01945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl1973 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12004 = new BitSet(new long[]{0x0000000400800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12007 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2034 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22064 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2091 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02127 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2157 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12188 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12191 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2219 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22250 = new BitSet(new long[]{0x00000000000000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22253 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportsAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2280 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2340 = new BitSet(new long[]{0x00000000000000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2352 = new BitSet(new long[]{0x00000000000000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02393 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02396 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2423 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12453 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22515 = new BitSet(new long[]{0x00000000000000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportsAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2545 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32576 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_1_3_in_rule__EtsiBnf__Group_1__3__Impl2603 = new BitSet(new long[]{0x00000000000000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__02642 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02645 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2672 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__12702 = new BitSet(new long[]{0x0000000341000022L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12705 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2733 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__22764 = new BitSet(new long[]{0x0000000340000022L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__22767 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportsAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl2794 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__32825 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_2_3_in_rule__EtsiBnf__Group_2__3__Impl2852 = new BitSet(new long[]{0x0000000340000022L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__02891 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__02894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__12952 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl2979 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03013 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_rule__Import__Group__0__Impl3044 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13075 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13078 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3105 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23135 = new BitSet(new long[]{0x0000000004800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3165 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33196 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33199 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3226 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43257 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Import__Group__4__Impl3285 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03326 = new BitSet(new long[]{0x000000E000000000L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03329 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_rule__Import__Group_2__0__Impl3357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13388 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3415 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03449 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03452 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_rule__Import__Group_3__0__Impl3480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13511 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3538 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03572 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03575 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3602 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13633 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3663 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23693 = new BitSet(new long[]{0x00000000008E0252L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23696 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_rule__Rule__Group__2__Impl3724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__33755 = new BitSet(new long[]{0x0000000000800002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__33758 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl3785 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__43816 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Rule__Group__4__Impl3845 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__03888 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__03891 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl3918 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__13948 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__13951 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl3978 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24009 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__Rule__Group_0__2__Impl4037 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04074 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04077 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4104 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14135 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14138 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4165 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24195 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24198 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34255 = new BitSet(new long[]{0x0000000000BFE252L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34258 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_rule__ExtRule__Group__3__Impl4286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44317 = new BitSet(new long[]{0x0000000000800002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44320 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4347 = new BitSet(new long[]{0x00000000003FE252L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54378 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__ExtRule__Group__5__Impl4407 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04452 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14512 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14515 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24573 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4601 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__04638 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04641 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4669 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__14700 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14703 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4730 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__24760 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl4788 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__04825 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__04828 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl4855 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__14885 = new BitSet(new long[]{0x0000000000800002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__14888 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl4915 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__24945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl4974 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05013 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05016 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5044 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15075 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05138 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15198 = new BitSet(new long[]{0x0000000000820002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15201 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25258 = new BitSet(new long[]{0x0000000000800002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25261 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5288 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35319 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5348 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05389 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05392 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5420 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15451 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15454 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5482 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25513 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05576 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05579 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5607 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__15638 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15641 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5668 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5726 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__05763 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__05766 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_rule__HookCombinator__Group__0__Impl5794 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__15825 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__15828 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__HookCombinator__Group__1__Impl5856 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__25887 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__25890 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl5917 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__35947 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__35950 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group__3__Impl5978 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46009 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46012 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6039 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56069 = new BitSet(new long[]{0x0000000000020100L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56072 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6100 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66131 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66134 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76192 = new BitSet(new long[]{0x0000000000800002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6224 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6236 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86269 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6298 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06349 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06352 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6380 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16411 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16414 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6441 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26471 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6499 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06536 = new BitSet(new long[]{0x0000000000010002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06539 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6566 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16596 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6623 = new BitSet(new long[]{0x0000000000010002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__06658 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06661 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6689 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16720 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl6747 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__06781 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__06784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl6812 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__16843 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__16846 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl6873 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__26903 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl6931 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__06968 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__06971 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl6999 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17030 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17033 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7060 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27090 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7118 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07155 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07158 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7186 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17217 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17220 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7247 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27277 = new BitSet(new long[]{0x0000000000200002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27280 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7308 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37339 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7366 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17410 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07446 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_0_2_27485 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__EtsiBnf__RuleAssignment_0_2_3_07516 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_0_2_3_17547 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_1_27622 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__EtsiBnf__RuleAssignment_1_3_07653 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_1_3_17684 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_rule__EtsiBnf__ExtRuleAssignment_1_3_27715 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07751 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_rule__EtsiBnf__ImportsAssignment_2_27790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__EtsiBnf__SectionheaderAssignment_2_3_07821 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_rule__EtsiBnf__MergeRuleAssignment_2_3_17852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_17883 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_17914 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_07950 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_17994 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28038 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18077 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08108 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18139 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18170 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38201 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08232 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18263 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18294 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18325 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18387 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28418 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18449 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18480 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28511 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68573 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18604 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_08635 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_18666 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment8697 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_08728 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_18759 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_28790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_38821 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_08852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_18883 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment8918 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_08953 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_18984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19046 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19077 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39113 = new BitSet(new long[]{0x0000000000000002L});
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf__.g
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf__.g	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf__.g	(revision 5)
@@ -0,0 +1,65 @@
+lexer grammar InternalEbnf;
+@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;
+}
+
+T13 : ')' ;
+T14 : ']' ;
+T15 : '}' ;
+T16 : '|' ;
+T17 : '(' ;
+T18 : '[' ;
+T19 : '{' ;
+T20 : '*' ;
+T21 : '+' ;
+T22 : 'grammar' ;
+T23 : ';' ;
+T24 : 'import' ;
+T25 : '/' ;
+T26 : 'label:' ;
+T27 : '::=' ;
+T28 : '.' ;
+T29 : '<-' ;
+T30 : 'global' ;
+T31 : 'combinator:' ;
+T32 : 'rule' ;
+T33 : 'hook' ;
+T34 : '/bnf' ;
+T35 : '/delta' ;
+T36 : '/merge' ;
+T37 : 'core' ;
+T38 : 'package' ;
+T39 : 'update' ;
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4517
+RULE_ID : ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_')*;
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4519
+RULE_INT : ('0'..'9')+;
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4521
+RULE_WS : (' '|'\t'|'\r'? '\n')+;
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4523
+RULE_COLON : '"' '"' '"';
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4525
+RULE_STRING : ('"' ~('"')* '"'|'\'' ~('\'')* '\'');
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4527
+RULE_SECTIONHEADER : ('a'..'z'|'A'..'Z') ('.'|'0'..'9')+ (' '|'\t') ~(('\n'|'\r'))* '\r'? '\n';
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4529
+RULE_SL_COMMENT : '//' ~(('\n'|'\r'))* ('\r'? '\n')?;
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4531
+RULE_ML_COMMENT : '/*' ( options {greedy=false;} : . )*'*/';
+
+// $ANTLR src "../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g" 4533
+RULE_LOGIC : ('/and'|'/or'|'/andr'|'/orr'|'/any'|'/together');
+
+
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/internal/EbnfActivator.java	(revision 5)
@@ -0,0 +1,73 @@
+
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui.internal;
+
+import org.apache.log4j.Logger;
+
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+import com.google.inject.Guice;
+import com.google.inject.Injector;
+import com.google.inject.Module;
+import com.google.inject.util.Modules;
+
+import java.util.Map;
+import java.util.HashMap;
+
+/**
+ * Generated
+ */
+public class EbnfActivator extends AbstractUIPlugin {
+
+	private Map<String,Injector> injectors = new HashMap<String,Injector>();
+	private static EbnfActivator INSTANCE;
+
+	public Injector getInjector(String languageName) {
+		return injectors.get(languageName);
+	}
+	
+	@Override
+	public void start(BundleContext context) throws Exception {
+		super.start(context);
+		INSTANCE = this;
+		try {
+			
+			injectors.put("de.ugoe.cs.swe.bnftools.Ebnf", Guice.createInjector(
+				Modules.override(Modules.override(getRuntimeModule("de.ugoe.cs.swe.bnftools.Ebnf")).with(getUiModule("de.ugoe.cs.swe.bnftools.Ebnf"))).with(getSharedStateModule())
+			));
+			
+		} catch (Exception e) {
+			Logger.getLogger(getClass()).error(e.getMessage(), e);
+			throw e;
+		}
+	}
+	
+	public static EbnfActivator getInstance() {
+		return INSTANCE;
+	}
+	
+	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 org.eclipse.xtext.ui.shared.SharedStateModule();
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/EbnfUiModule.java	(revision 5)
@@ -0,0 +1,75 @@
+/*
+ * generated by Xtext
+ */
+package de.ugoe.cs.swe.bnftools.ui;
+
+import org.eclipse.jface.preference.IPreferenceStore;
+import org.eclipse.jface.text.IAutoEditStrategy;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.eclipse.xtext.conversion.IValueConverterService;
+import org.eclipse.xtext.ui.editor.outline.transformer.ISemanticModelTransformer;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfiguration;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.antlr.DefaultAntlrTokenToAttributeIdMapper;
+import com.google.inject.Binder;
+
+import de.ugoe.cs.swe.bnftools.ui.autoedit.EbnfAutoEditStrategy;
+import de.ugoe.cs.swe.bnftools.ui.outline.EbnfTransformer;
+import de.ugoe.cs.swe.bnftools.ui.syntaxcoloring.EtsiBnfAntlrTokenToAttributeMapper;
+import de.ugoe.cs.swe.bnftools.ui.syntaxcoloring.EtsiBnfHighlightingConfiguration;
+import de.ugoe.cs.swe.bnftools.ui.syntaxcoloring.EtsiBnfSemanticHighlightingCalculator;
+import de.ugoe.cs.swe.bnftools.validation.EbnfJavaValidator;
+import de.ugoe.cs.swe.bnftools.valueconverter.EbnfTerminalConverters;
+
+/**
+ * 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);
+		EbnfUiModule.updateValidatorSettings();
+	}
+	
+    public static void updateValidatorSettings() {
+    	IPreferenceStore preferenceStore = de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator.getInstance().getPreferenceStore();
+    	EbnfJavaValidator.checkReferencedOnlyOnce = preferenceStore.getBoolean("RULE_REFERENCED_ONLY_ONCE");
+    	EbnfJavaValidator.checkPassthroughRule = preferenceStore.getBoolean("PASSTHROUGH_RULE");
+    	EbnfJavaValidator.checkUnusedRule = preferenceStore.getBoolean("UNUSED_RULE");
+    	EbnfJavaValidator.checkEqualAlternative = preferenceStore.getBoolean("EQUAL_ALTERNATIVES_RULE");
+    	EbnfJavaValidator.checkDuplicateRules = preferenceStore.getBoolean("CHECK_DUPLICATE_RULES");
+    	EbnfJavaValidator.checkSubruleDuplicates = preferenceStore.getBoolean("CHECK_SUBRULE_DUPLICATES");
+    	EbnfJavaValidator.checkUpdatedGrammarConsistency = preferenceStore.getBoolean("CHECK_UPDATED_GRAMMAR_CONSISTENCY");
+    }
+	
+	@Override
+	public void configure(Binder binder) {
+		super.configure(binder);
+//		configureIResourceDescriptionsBuilderScope(binder);
+//		configureIResourceDescriptions(binder);
+	}
+	
+	public Class<? extends IHighlightingConfiguration> bindIHighlightingConfiguration() {
+		return EtsiBnfHighlightingConfiguration.class;
+	}
+
+	public Class<? extends DefaultAntlrTokenToAttributeIdMapper> bindTokenToAttributeIdMapper() {
+		return EtsiBnfAntlrTokenToAttributeMapper.class;
+	}
+
+	public Class<? extends ISemanticHighlightingCalculator> bindISemanticHighlightingCalculator() {
+		return EtsiBnfSemanticHighlightingCalculator.class;
+	}
+
+	public Class<? extends ISemanticModelTransformer> bindISemanticModelTransformer() {
+		return EbnfTransformer.class;
+	}
+	
+	public Class<? extends IAutoEditStrategy> bindIAutoEditStrategy() {
+		return EbnfAutoEditStrategy.class;
+	}
+	
+	public Class<? extends IValueConverterService> bindIValueConverterService() {
+	  return EbnfTerminalConverters.class;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateCompositeBNFAction.java	(revision 5)
@@ -0,0 +1,473 @@
+package de.ugoe.cs.swe.bnftools.ui.actions;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.GlobalCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.HookCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleCombinator;
+import de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl;
+
+public class GenerateCompositeBNFAction extends ActionDelegate{
+
+	private IStructuredSelection selection = StructuredSelection.EMPTY;
+	private IFile file=null;
+	private XtextResource coreGrammar=null;
+	private LinkedList<XtextResource> packageGrammars;
+	private XtextResource xtextResource;
+	private LinkedList<URI> deltas;
+	private String global=null;
+	
+	
+	@Override
+	public void run(IAction action) {
+		TreeSelection treeSelection = (TreeSelection) selection;
+		TreePath[] paths = treeSelection.getPaths();
+
+		for (int i = 0; i < paths.length; i++) {
+			TreePath path = paths[i];
+			IFile f = (IFile) path.getLastSegment();
+			XtextResourceSet set = new XtextResourceSet();
+			String fp = f.getFullPath().toString();
+			URI uri = URI.createPlatformResourceURI(fp,true); 
+
+			Resource resource = set.getResource(uri, true);
+			if (resource instanceof XtextResource) {
+					
+				xtextResource = (XtextResource) resource;
+				
+				if(!((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getType().equals("/merge"))
+					continue;
+		
+				InputDialog di = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Name Selection", 
+						"Please type a name for the composite grammar.", uri.trimFileExtension().segment(uri.segmentCount()-1) + "_composite.bnf", null);
+				di.open();
+				String fname = di.getValue();
+								
+				String loc = uri.trimFileExtension().trimSegments(1).toPlatformString(true);
+
+				String floc = loc.concat("/" + fname);
+				IPath filePath = new Path(floc);
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath);
+				   
+				   try {
+				   if (!file.exists()) {
+				      byte[] bytes = ("//Automatically generated merge grammar from: " + uri.trimFileExtension().segment(uri.segmentCount()-1) + '\n').getBytes();
+				      InputStream source = new ByteArrayInputStream(bytes);
+				      file.create(source, IResource.NONE, null);				      
+				   }
+				   else return;
+				   	} catch (CoreException e) {
+						e.printStackTrace();
+					}
+
+				   	String coreName = null;
+				   	// get the core grammar
+				   	EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				   	for(int j=0; j< imports.size(); j++) {
+				   		if(imports.get(j).getGrammarType().equals("core"))
+				   			coreName=imports.get(j).getImportURI();
+				   	}
+				   	IPath corePath = new Path(loc.concat("/" + coreName));
+				    IFile core = ResourcesPlugin.getWorkspace().getRoot().getFile(corePath);
+				   	createNewLine("grammar "+ "remame;" + '\n');
+				   	
+					String fp2 = core.getFullPath().toString();
+					URI coreUri = URI.createPlatformResourceURI(fp2,true); 
+
+					Resource coreResource = set.getResource(coreUri, true);
+					
+					if(coreResource instanceof XtextResource )
+						coreGrammar = (XtextResource) coreResource;
+					
+					//get the package grammars
+					packageGrammars = new LinkedList<XtextResource>();
+					deltas = new LinkedList<URI>();
+				    EList<Import> packages = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				   	for(int j=0; j<packages.size(); j++) {
+				   		if(packages.get(j).getGrammarType().equals("package")) {
+				   			String deltaName = packages.get(j).getImportURI();
+				   			IPath deltaPath = new Path(loc.concat("/" + deltaName));
+						    IFile delta = ResourcesPlugin.getWorkspace().getRoot().getFile(deltaPath);
+
+							String fp3 = delta.getFullPath().toString();
+							URI deltaUri = URI.createPlatformResourceURI(fp3,true); 
+
+						    Resource deltaResource = set.getResource(deltaUri, true);
+					
+				   			if(deltaResource instanceof XtextResource ) {
+				   				packageGrammars.add((XtextResource) deltaResource);
+				   				deltas.add(deltaUri);
+				   		}
+				   		}
+				   	}
+				   	
+				   	/*
+				   	 * for every rule in the core grammar, check for extensions in the merge grammar:
+				   	 * if none are found, just copy the rule
+				   	 * if any are found, handle them
+				   	 */
+				   	
+				   	for(AbstractNode node: NodeUtil.getAllContents( coreGrammar.getParseResult().getRootNode())) {
+						if(node.getElement() instanceof Rule) {
+							findExtensions(node);
+						}
+					}
+				   	
+				   	/*
+				   	 * for every rule in each of the delta grammars, if its a regular rule, add it to the grammar
+				   	 */
+				   	
+				   	for(int j=0; j<packageGrammars.size(); j++) {
+				   		createNewLine("\n");
+				   		for(AbstractNode node: NodeUtil.getAllContents(packageGrammars.get(j).getParseResult().getRootNode())){
+				   			if(node.getElement() instanceof Rule) 
+				   				createNewLine(node.serialize().trim() + '\n');
+				   		}
+				   	}
+			}
+		}
+		
+	}
+	
+	/*
+	 * 1. go through all the rules of the merge grammar.
+	 * 2. add all the rules with the same name as the given rule to a list
+	 * 		2.1 if none are found, copy the rule
+	 * 		2.2 else, copy the rule to the first extension point, then handle it and so on.
+	 */
+	private void findExtensions(AbstractNode node) {
+		
+		LinkedList<AbstractNode> extensions = new LinkedList<AbstractNode>();
+		String ruleC = null;
+		
+		for(AbstractNode extension: NodeUtil.getAllContents( xtextResource.getParseResult().getRootNode())) {
+			
+			if(extension.getElement() instanceof GlobalCombinator) 
+				global=((GlobalCombinator) extension.getElement()).getLogic();
+			
+			
+			if(extension.getElement() instanceof RuleCombinator) 
+				if(((Rule) node.getElement()).getName()
+						.equals(((RuleCombinator) extension.getElement()).getName()))
+				ruleC=((RuleCombinator) extension.getElement()).getLogic();
+			
+			
+			if(extension.getElement() instanceof HookCombinator){
+				if(((Rule) node.getElement()).getName()
+						.equals(((HookCombinator) extension.getElement()).getName()))
+					extensions.add(extension);
+			}
+		}
+		
+		if(extensions.size()==0)
+			createNewLine(removeNewLines(node) + '\n');
+		else {
+			createNewLine(handleExtensions(node, extensions, ruleC).trim() + '\n');
+		}
+	}
+	
+	
+	private String handleExtensions(AbstractNode node, LinkedList<AbstractNode> extensions, String ruleC) {
+		
+		int oldOffset=0;
+		int newOffset=0;
+		String fullRule = ((Rule) node.getElement()).getName().trim() + " ::= ";
+		
+		while(extensions.size()>0) {
+			
+			AbstractNode current = selectFirstExtension(extensions);
+			newOffset=((HookCombinator) current.getElement()).getRuleext();
+			fullRule=fullRule.concat(splitRule(node, oldOffset, newOffset));
+			fullRule=fullRule.concat(resolveReferences(((HookCombinator) current.getElement()), ruleC));
+			oldOffset=newOffset;
+		}
+		fullRule=fullRule.concat(splitRule(node, newOffset, Integer.MAX_VALUE));
+		return fullRule;
+	}
+	
+	//returns the portion of the rule between startOffset and endOffset
+	private String splitRule(AbstractNode node, int startOffset, int endOffset) {
+		
+		EList<LeafNode> leaves = node.getLeafNodes();
+		boolean rightSide=true;
+		String temp = "";
+		int waiting=0;
+		
+		for(int i=0; i<leaves.size(); i++) {
+			
+			if(rightSide) {
+				if((leaves.get(i).serialize().equals("::=")) || (leaves.get(i).serialize().equals("<-")))
+					rightSide=false;
+				continue;
+			}
+			
+			if(startOffset==endOffset)
+				break;
+			
+			if((leaves.get(i).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl)) {
+				continue;
+			}
+			
+			if(startOffset>waiting) {
+				waiting++;
+				continue;
+			}
+			
+			waiting = Integer.MAX_VALUE;
+			temp=temp.concat(leaves.get(i).serialize().trim() + " ");
+			startOffset++;
+		}
+		
+		return temp;
+	}
+	
+
+	/*
+	 * given a hook combinator, return the string of the full concatenated extensions at the point
+	 */
+	private String resolveReferences(HookCombinator hookCombinator, String ruleC) {
+		
+		EList<String> labels = hookCombinator.getLABEL();
+		
+		if(labels.size()==1) {
+			/*
+			 * take the only label and find the corresponding delta grammar
+			 * in that delta grammar, take the rule with the same name and the same extension point
+			 * and return its left side
+			 */
+			return resolveSingleReference(labels.get(0), hookCombinator);
+		}
+		
+	
+		String combinator=null;
+		
+		if(hookCombinator.getLogic()!=null)
+			combinator=hookCombinator.getLogic();
+		
+		else if(ruleC!=null)
+			combinator=ruleC;
+		
+		else if(global!=null) 
+			combinator=global;
+		
+		else
+			combinator="/and";
+			
+		
+		if(combinator.equals("/and")) {
+			String temp = "";
+			for(int i=0; i<labels.size(); i++) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			return temp;
+		}
+		
+		if(combinator.equals("/andr")) {
+			String temp = "";
+			for(int i=labels.size()-1; i>-1; i--) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			return temp;
+		}
+		
+		if(combinator.equals("/or")) {
+			String temp = "( ";
+			String temp2 = null;
+			boolean illegal=false;
+			for(int i=0; i<labels.size()-1; i++) {
+				temp2 = resolveSingleReference(labels.get(i), hookCombinator).trim();
+				
+				if ((temp2.startsWith("|"))|(temp2.startsWith(")"))|(temp2.endsWith("|"))|temp2.endsWith("(")){
+					illegal=true;
+					break;
+				}
+				temp=temp.concat(resolveSingleReference(labels.get(i), hookCombinator) + " | ");
+			}
+			
+			temp2 = resolveSingleReference(labels.get(labels.size()-1), hookCombinator).trim();
+			
+			if ((temp2.startsWith("|"))|(temp2.startsWith(")"))|(temp2.endsWith("|"))|temp2.endsWith("(")){
+				illegal=true;
+			}
+			
+			temp=temp.concat(resolveSingleReference(labels.get(labels.size()-1), hookCombinator) + ") ");
+			
+			if(illegal) {
+				temp="";
+				for(int i=0; i<labels.size(); i++) {
+					temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+				}
+			}
+			return temp;
+		}
+		
+//		if(combinator.equals("/orr")) {
+//			String temp = "( ";
+//			for(int i=labels.size()-1; i>0; i--) {
+//				temp=temp.concat(resolveSingleReference(labels.get(i), hookCombinator) + " | ");
+//			}
+//			
+//			temp=temp.concat(resolveSingleReference(labels.get(0), hookCombinator) + ") ");
+//			return temp;
+//			
+//		}
+		
+		if(combinator.equals("/any")) {
+			String temp2 = null;
+			boolean illegal=false;
+			String temp = "( ";
+			
+			for(int i=0; i<labels.size(); i++) {
+				temp2 = resolveSingleReference(labels.get(i), hookCombinator).trim();
+				
+				if ((temp2.startsWith("|"))|(temp2.startsWith(")"))|(temp2.endsWith("|"))|temp2.endsWith("(")){
+					illegal=true;
+					break;
+				}
+				temp=temp.concat(resolveSingleReference(labels.get(i), hookCombinator) + " | ");
+			}
+			
+			if(illegal){
+				temp="";
+				for(int i=0; i<labels.size(); i++) {
+					temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+				}
+				return temp;
+			}
+			
+			temp=temp.concat("( ");
+			for(int i=0; i<labels.size(); i++) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			temp=temp.concat(") | ");
+			
+			temp=temp.concat("( ");
+			for(int i=labels.size()-1; i>-1; i--) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			temp=temp.concat(")) ");
+			
+			return temp;
+		}
+		
+		if(combinator.equals("/together")) {
+			
+			String temp = "(( ";
+			
+			for(int i=0; i<labels.size(); i++) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			temp=temp.concat(") | ");
+			
+			temp=temp.concat("( ");
+			for(int i=labels.size()-1; i>-1; i--) {
+				temp=temp.concat(resolveSingleReference(labels.get(i),hookCombinator));
+			}
+			temp=temp.concat(")) ");
+			
+			return temp;
+		}
+		
+		return " \" operator other than and, andr, or, or interleave \" ";
+	}
+	
+	
+	private String resolveSingleReference(String label, HookCombinator hookCombinator) {
+		
+		URI grammarURI = deltas.get(Character.getNumericValue(label.charAt(label.length()-1))-1);
+		XtextResourceSet set = new XtextResourceSet();	
+		Resource resource = set.getResource(grammarURI, true);
+		if (resource instanceof XtextResource) {
+			XtextResource deltaG = (XtextResource) resource;
+			AbstractNode rule = selectRule( hookCombinator.getName(), hookCombinator.getRuleext(), deltaG.getParseResult().getRootNode());
+			return splitRule(rule, 0, Integer.MAX_VALUE);
+		}
+		
+		return "error - file isn't a Xtext Resource";
+	}
+	private AbstractNode selectRule(String ruleName, int extension, CompositeNode grammar) {
+		AbstractNode rule = null;
+		for(AbstractNode currentRule: NodeUtil.getAllContents(grammar)) {
+			if( (currentRule.getElement() instanceof ExtRule) 
+					&& (((ExtRule) currentRule.getElement()).getName().equals(ruleName))
+					&& (((ExtRule) currentRule.getElement()).getRuleext()==extension)) 
+				return currentRule;
+		}
+		return rule;
+		
+	}
+	private AbstractNode selectFirstExtension(LinkedList<AbstractNode> rules) {
+		
+		AbstractNode first = rules.get(0);
+		int index = 0;
+		for(int i=0; i<rules.size(); i++) {
+			if(((HookCombinator) first.getElement()).getRuleext() > ((HookCombinator) rules.get(i).getElement()).getRuleext()) {
+				first=rules.get(i);
+				index=i;
+			}
+		}
+		rules.remove(index);
+		return first;
+		
+	}
+	
+	private String removeNewLines(AbstractNode node) {
+		EList<LeafNode> leaves = node.getLeafNodes();
+		String temp = "";
+		for(int i=0; i<leaves.size(); i++) {
+			if(!(leaves.get(i).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl))
+				temp=temp.concat(leaves.get(i).serialize() + " ");
+		}
+		return temp;
+	}
+	
+	private void createNewLine(String rule) {
+		try {
+			   if (file.exists()) {
+			      byte[] bytes = (rule).getBytes();
+			      InputStream source = new ByteArrayInputStream(bytes);
+			      file.appendContents(source, IResource.NONE, null);
+			   }
+			   	} catch (CoreException e) {
+					e.printStackTrace();
+			}
+	}
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			this.selection = (IStructuredSelection) selection;
+		} else {
+			this.selection = StructuredSelection.EMPTY;
+		}
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDefaultMergeDSLAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDefaultMergeDSLAction.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDefaultMergeDSLAction.java	(revision 5)
@@ -0,0 +1,286 @@
+package de.ugoe.cs.swe.bnftools.ui.actions;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.LinkedList;
+
+import org.eclipse.core.internal.resources.File;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.ui.dialogs.ResourceSelectionDialog;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl;
+
+@SuppressWarnings("restriction")
+public class GenerateDefaultMergeDSLAction extends ActionDelegate{
+	
+	private IStructuredSelection selection = StructuredSelection.EMPTY;
+	private IFile file=null;
+	private LinkedList<CompositeNode> deltas;
+	private LinkedList<String> deltaLabels;
+	
+	@Override
+	public void run(IAction action) {
+		
+		TreeSelection treeSelection = (TreeSelection) selection;
+		TreePath[] paths = treeSelection.getPaths();
+
+		for (int i = 0; i < paths.length; i++) {
+			TreePath path = paths[i];
+			IFile f = (IFile) path.getLastSegment();
+			XtextResourceSet set = new XtextResourceSet();
+
+			String fp = f.getFullPath().toString();
+			URI uri = URI.createPlatformResourceURI(fp,true); 
+
+			Resource resource = set.getResource(uri, true);
+			if (resource instanceof XtextResource) {
+					
+				XtextResource xtextResource = (XtextResource) resource;
+				
+				//if the selected grammar isn't a BNF grammar, return
+				if(!(((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getType()==null||
+						((((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getType().equals("/bnf")))))
+					continue;
+			
+				//create a file to write the new grammar in
+				//TODO: add a validator
+				
+				InputDialog di = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Name Selection", 
+						"Please type a name for the merge grammar.", uri.trimFileExtension().segment(uri.segmentCount()-1) + "_merge.bnf", null);
+				di.open();
+				
+				if (di.getReturnCode() == InputDialog.CANCEL)
+					return;
+
+				String fname = di.getValue();
+				
+				String loc = uri.trimFileExtension().trimSegments(1).toPlatformString(true);
+				loc = loc.concat("/" + fname);
+				IPath filePath = new Path(loc);
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath);
+				   
+				   try {
+				   if (!file.exists()) {
+				      byte[] bytes = ("//Automatically generated merge grammar from: " + uri.trimFileExtension().segment(uri.segmentCount()-1) + '\n').getBytes();
+				      InputStream source = new ByteArrayInputStream(bytes);
+				      file.create(source, IResource.NONE, null);				      
+				   }
+				   else return;
+				   	} catch (CoreException e) {
+						e.printStackTrace();
+					}
+				
+				createNewLine("/merge;" + '\n' + '\n');
+		//		createNewLine("corebnf: " + '\"' + uri.segment(uri.segmentCount()-1) + '\"'+ ";" + '\n');
+				createNewLine("import " +  '\"' + uri.segment(uri.segmentCount()-1) + '\"' + " /core label: Core" + ";" + '\n');
+				
+				
+				//create a dialog, asking to select the extensions to that grammar (in delta form)
+				//TODO: possibility: auto convert non-delta packages to delta grammars
+				ResourceSelectionDialog di2 = new ResourceSelectionDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), f.getWorkspace().getRoot(), "Please select the extensions to the grammar!");
+				di2.open();
+				Object[] a = di2.getResult();
+								
+				/*
+				 * add each selected delta grammar to a list of grammar
+				 * (now checks if it imports the selected grammar)
+				 */
+				deltas = new LinkedList<CompositeNode>();
+				deltaLabels = new LinkedList<String>();
+				int counter=1;
+				
+				for(int p=0; p<a.length; p++) {
+						
+						File b = (File) a[p];
+						if(!b.getFileExtension().equals("bnf"))
+								continue;
+					
+						URI ur = URI.createFileURI(b.getRawLocation().toPortableString());
+						
+						Resource res = set.getResource(ur, true);
+						if(res instanceof XtextResource) {
+							
+							XtextResource xres = (XtextResource) res;
+							
+							if(((EtsiBnfImpl) xres.getParseResult().getRootNode().getElement())
+									.getType()==null)
+								continue;
+							
+							if(((EtsiBnfImpl) xres.getParseResult().getRootNode().getElement()).getType().equals("/delta")) {
+								if(checkImport(xres.getParseResult().getRootNode(), uri.segment(uri.segmentCount()-1))) {
+									deltas.add(xres.getParseResult().getRootNode());
+									deltaLabels.add("Package" + counter);
+		//							createNewLine("package:" + '\"' + res.getURI().segment(res.getURI().segmentCount()-1) + '\"' + ";" + '\n');
+									createNewLine("import " +  '\"' + res.getURI().segment(res.getURI().segmentCount()-1) + '\"' + " /package label: Package" + counter + ";" + '\n');
+									counter++;
+								}
+							}
+						}
+						
+					}
+				
+				createNewLine('\n' + " global combinator: /and" + '\n' );	
+				
+				//handle the extensions to each rule of the core grammar, if any
+				for(AbstractNode node: NodeUtil.getAllContents( xtextResource.getParseResult().getRootNode())) {
+					if(node.getElement() instanceof Rule) {
+						handleExtensions(node);
+					}
+				}
+			
+			}
+		}
+	}
+	
+	/*
+	 * 1. check each rule in every package if it extends the given rule
+	 * 		if it does, add it to a list of rules
+	 * If any found:
+	 * 2. create a general rule combinator with the rule as a comment
+	 * 3. repeat: 	3.1 take the rule from the list with the lowest extension point.
+	 * 				3.2 if its the first extension at that point, create a new hook combinator
+	 * 				3.3 create a comment with the extension
+	 * 				3.4 remove it from the list of rules
+	 * 	until no rules remain in the list
+	 * 
+	 */
+	private void handleExtensions(AbstractNode node) {
+		
+		LinkedList<AbstractNode> rules = new LinkedList<AbstractNode>();
+		
+		String name = ((Rule) node.getElement()).getName().trim();
+		
+		for(int i=0; i<deltas.size(); i++) {
+			for(AbstractNode node2: NodeUtil.getAllContents(deltas.get(i))){
+				if(node2.getElement() instanceof ExtRule)
+					if(((ExtRule) node2.getElement()).getName().equals(name)) 
+						rules.add(node2);
+			}
+				
+		}
+		
+		AbstractNode old=null;
+		AbstractNode current=null;
+		
+		if(rules.size()!=0) {
+			createNewLine("\n \n" + "// rule combinator: " + name + " /and" + '\n');
+			createNewLine("// " + removeNewLines(node) + '\n');
+			
+			boolean start = true;
+			while(rules.size()>0) {
+				current = selectFirstExtension(rules);
+				int index = deltas.indexOf(current.getParent());
+				if(start) {
+					old = current;
+				} 
+			///	URI uri = current.getElement().eResource().getURI();
+				if((((ExtRule) current.getElement()).getRuleext()!=((ExtRule) old.getElement()).getRuleext())||start) {
+					
+					createNewLine('\n' + "hook combinator: " + name + " (" +  
+							((ExtRule) current.getElement()).getRuleext() + ") "  + '\n' + " ( \"" + deltaLabels.get(index) + "\" )" );
+					
+					start=false;
+				}
+				
+				else {
+					createNewLine(" \n ( \"" + deltaLabels.get(index) + "\" )");
+					
+				}
+				createNewLine('\n' + "// " + current.serialize().trim() );
+				old=current;	
+				
+			}
+			
+			
+		}
+		
+	}
+	
+	//checks if the grammar, described by compNode imports the given uri
+	private boolean checkImport(CompositeNode compNode, String uri) {
+		Iterable<AbstractNode> allNodes = NodeUtil.getAllContents(compNode);
+		for(AbstractNode node : allNodes) {
+			if(node.getElement() instanceof Import)
+				if(((Import) node.getElement()).getImportURI().equals(uri))
+					return true;
+		}
+		
+		return false;
+	}
+	
+	//removes all the lines from the string describing a node
+	private String removeNewLines(AbstractNode node) {
+		EList<LeafNode> leaves = node.getLeafNodes();
+		String temp = "";
+		for(int i=0; i<leaves.size(); i++) {
+			if(!(leaves.get(i).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl))
+				temp=temp.concat(leaves.get(i).serialize() + " ");
+		}
+		return temp;
+	}
+	
+	//selects the rule with the lowest extension point from the list and removes it
+	private AbstractNode selectFirstExtension(LinkedList<AbstractNode> rules) {
+		
+		AbstractNode first = rules.get(0);
+		int index = 0;
+		for(int i=0; i<rules.size(); i++) {
+			if(((ExtRule) first.getElement()).getRuleext() > ((ExtRule) rules.get(i).getElement()).getRuleext()) {
+				first=rules.get(i);
+				index=i;
+			}
+		}
+		rules.remove(index);
+		return first;
+		
+	}
+	
+	//creates a new line in the file
+	private void createNewLine(String rule) {
+		try {
+			   if (file.exists()) {
+			      byte[] bytes = (rule).getBytes();
+			      InputStream source = new ByteArrayInputStream(bytes);
+			      file.appendContents(source, IResource.NONE, null);
+			   }
+			   	} catch (CoreException e) {
+					e.printStackTrace();
+			}
+	}
+	
+	
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			this.selection = (IStructuredSelection) selection;
+		} else {
+			this.selection = StructuredSelection.EMPTY;
+		}
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDeltaBnfAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDeltaBnfAction.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/GenerateDeltaBnfAction.java	(revision 5)
@@ -0,0 +1,359 @@
+
+package de.ugoe.cs.swe.bnftools.ui.actions;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import java.util.LinkedList;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.SectionHeading;
+
+public class GenerateDeltaBnfAction extends ActionDelegate {
+	private IStructuredSelection selection = StructuredSelection.EMPTY;
+	private IFile file=null;
+	
+	@Override
+	public void run(IAction action) {
+		TreeSelection treeSelection = (TreeSelection) selection;
+		TreePath[] paths = treeSelection.getPaths();
+
+		for (int i = 0; i < paths.length; i++) {
+			TreePath path = paths[i];
+			IFile f = (IFile) path.getLastSegment();
+			XtextResourceSet set = new XtextResourceSet();
+			String fp = f.getFullPath().toString();
+			URI uri = URI.createPlatformResourceURI(fp,true); 
+			
+			Resource resource = set.getResource(uri, true);
+			if (resource instanceof XtextResource) {
+				
+				XtextResource xtextResource = (XtextResource) resource;
+						
+				/*
+				 * Creating a delta grammar outline:
+				 * 1. Get the core grammar
+				 * 		1.1 - get all imports
+				 * 		1.2 - if number of imports != 1, break
+				 * 		1.3 - get the grammar corresponding to the only import
+				 * 2. Run through all rules in the package
+				 * 		2.1 for each rule, run through all rules in the core
+				 * 		2.2 if any rule has the same name, convert to delta form
+				 * 		2.3 copy all package only rules in the delta grammar
+				 */
+				CompositeNode compNode = xtextResource.getParseResult().getRootNode();
+				Iterable<AbstractNode> allNodes = NodeUtil.getAllContents(compNode);
+			
+				int count = 0;
+				Resource coreRes = null;
+				LinkedList<XtextResource> imports = new LinkedList<XtextResource>();
+				for (AbstractNode node : allNodes) {
+					
+					if(count >=2)
+						return;
+					
+					if(node.getElement() instanceof Import) {
+						String packageUri = uri.trimSegments(1).toPlatformString(true);
+						String fullUri = packageUri + "/" +((Import) node.getElement()).getImportURI();
+						URI uri2 = URI.createPlatformResourceURI(fullUri, true);
+						Resource tempRes = set.getResource(uri2, true);
+						if(tempRes instanceof XtextResource) {
+							if(((Import) node.getElement()).getGrammarType()!=null && ((Import) node.getElement()).getGrammarType().equals("core")) {
+							count++;
+							coreRes=tempRes;
+							}
+							
+							else 
+								imports.add((XtextResource) tempRes);
+								
+						}
+					}
+
+				}
+					
+//				if(count!=1)
+//					return;		
+//			
+				if ((coreRes == null)&&(imports.size()==1))
+						coreRes = imports.get(0);
+				//create a new file in the root folder of the current project that stores the delta grammar
+				InputDialog di = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Name Selection", 
+						"Please type a name for the delta grammar.", uri.trimFileExtension().segment(uri.segmentCount()-1) + "_delta.bnf", null);
+				di.open();
+				
+				if (di.getReturnCode() == InputDialog.CANCEL)
+					return;
+				
+				String fname = di.getValue();
+				
+				String loc = uri.trimFileExtension().trimSegments(1).toPlatformString(true);
+				loc = loc.concat("/" + fname);
+				IPath filePath = new Path(loc);
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath);
+				   
+				   try {
+				   if (!file.exists()) {
+				      byte[] bytes = ("//Automatically generated merge grammar from: " + uri.trimFileExtension().segment(uri.segmentCount()-1) + '\n').getBytes();
+				      InputStream source = new ByteArrayInputStream(bytes);
+				      file.create(source, IResource.NONE, null);				      
+				   }
+				   else return;
+				   	} catch (CoreException e) {
+						e.printStackTrace();
+					}
+				createNewLine("/delta;" + '\n');
+				   	
+				boolean newRule = true;
+				   	
+				for(AbstractNode node : allNodes) {
+					newRule=true;
+					
+					if(node.getElement() instanceof Rule){
+						
+						newRule = checkForExtensions(node, (XtextResource) coreRes);
+
+						
+						if(newRule) {
+							for(int j=0; j<imports.size(); j++) {
+								if(!newRule)
+									break;
+								newRule=checkForExtensions(node, imports.get(i));
+							}
+						}
+						
+					}
+					if(node.getElement() instanceof Import)
+						createNewLine(node.serialize().trim()  + '\n');
+					
+					if((newRule)&&((node.getElement() instanceof Rule)
+							||(node.getElement() instanceof SectionHeading)))
+						createNewLine(node.serialize());
+				}
+			
+			}
+	
+		}
+	}
+
+
+	private boolean checkForExtensions(AbstractNode node, XtextResource xtextResource) {
+		
+		if(node.getElement() instanceof Rule) {
+			Rule rule1 = (Rule) node.getElement();
+		
+			for(AbstractNode node2 : NodeUtil.getAllContents(((XtextResource) xtextResource).getParseResult().getRootNode())) {
+			
+				if(node2.getElement() instanceof Rule) {
+					Rule rule2 = (Rule) node2.getElement();
+				
+				if(rule1.getName().equals(rule2.getName())) {
+					splitRule(node2, node );
+					return false;
+					
+					}
+				
+				}
+			
+			}
+		}
+		return true;
+	}
+	/*
+	 * Given 2 rules with the same name, the 2nd of which extends the 1st,
+	 * create a new extension rule for every part of the package rule not in
+	 * the core rule:
+	 * 
+	 * 	1. get all the leaf nodes of each rule (the basic grammar elements)
+	 * 	2. check all the leaves in both rules in the order they occur so that:
+	 * 		2.1 if one leaf is whitespace, continue
+	 * 		2.2 else, check for equality:
+	 * 			2.2.1 if both are equal, continue,
+	 * 			2.2.2 else, if the node from the package is a bracket, remember the bracket and
+	 * wait for the next closing bracket of the same kind. Add all between those brackets to the current extension
+	 * 			2.2.3 else, add the current node from the package to the current extension
+	 * 			2.2.4 when equality occurs, create a new rule in the delta grammar with the current extension string
+	 */
+	private void splitRule(AbstractNode cNode, AbstractNode pNode) {
+		
+		EList<LeafNode> cLeaves = cNode.getLeafNodes();
+		EList<LeafNode> pLeaves = pNode.getLeafNodes();
+		
+		int c=0; //counter for cLeaves.size()
+		int p=0;
+		
+		int offset=0; //counter for the offset in the core grammar in the extension,
+		//given in number of leaf nodes, excluding whitespaces
+		boolean bracket1 = false; // ()
+		boolean bracket2 = false; //[]
+		boolean bracket3 = false; //{}
+		
+		boolean last = false;
+		String temp = "";
+		String temp1 = "";
+		
+		boolean rightSide=true;
+		boolean rightSide2=true;
+		
+		while((p<pLeaves.size())){
+			
+			if(rightSide) {
+				if(cLeaves.get(c).serialize().equals("::="))
+					rightSide=false;
+				else if(!(cLeaves.get(c).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl))
+					temp1=temp1.concat(cLeaves.get(c).serialize());
+				c++;
+				continue;
+			}
+			
+			if(rightSide2) {
+				if(pLeaves.get(p).serialize().equals("::="))
+					rightSide2=false;
+				p++;
+				continue;
+			}
+			
+			if(c==cLeaves.size()) {
+				if(!(pLeaves.get(p).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl))
+				temp=temp.concat(pLeaves.get(p).serialize());
+				p++;
+				if(pLeaves.size()==p) {
+					createNewLine( '\n' + temp1 + "(" + offset + ") <- " + temp );
+					return;
+				}
+				continue;
+			}
+			
+			if((cLeaves.get(c).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl)) {
+				c++;
+				continue;
+			}
+			
+			if((pLeaves.get(p).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl)) {
+				p++;
+				continue;
+			}
+
+			
+			if(bracket1) {
+				if(pLeaves.get(p).serialize().equals(")")) {
+					bracket1=false;
+					p++;
+					last=true;
+					temp=temp.concat(") ");
+					continue;
+				}
+				//wait for bracket1
+			}
+			
+			if(bracket2) {
+				if(pLeaves.get(p).serialize().equals("]")) {
+					bracket2=false;
+					p++;
+					last=true;
+					temp=temp.concat("] ");
+					continue;
+				}
+				//wait for bracket2
+			}
+			
+			if(bracket3) {
+				if(pLeaves.get(p).serialize().equals("}")) {
+					bracket3=false;
+					p++;
+					last=true;
+					temp=temp.concat("} ");
+					continue;
+				}
+				//wait for bracket3
+			}
+			
+			else {
+				if(last) {
+					//check if its the end of the extension
+					if(pLeaves.get(p).serialize().equals(cLeaves.get(c).serialize())){
+						last=false;
+						createNewLine( '\n' + temp1 + "(" + offset + ") <- " + temp );
+						temp="";
+						c++;
+						p++;
+						offset++;
+						continue;
+					}
+				}
+				
+				if(pLeaves.get(p).serialize().equals(cLeaves.get(c).serialize())){
+					c++;
+					p++;
+					offset++;
+					continue;
+				}
+				
+				last=true;
+				
+				
+				String temp2=pLeaves.get(p).serialize();
+				if(temp2.equals("("))
+					bracket1=true;
+				if(temp2.equals("["))
+					bracket2=true;
+				if(temp2.equals("{"))
+					bracket3=true;
+					
+				temp=temp.concat(temp2);
+				p++;
+			}
+			
+		}
+	}
+	
+	/*
+	 * Algorithm for creating a new Ext Rule, given name, point and text
+	 * 1. allocate a new line for the rule
+	 * 2. write the given input in there
+	 */
+	private void createNewLine(String rule) {
+		try {
+			   if (file.exists()) {
+			      byte[] bytes = (rule).getBytes();
+			      InputStream source = new ByteArrayInputStream(bytes);
+			      file.appendContents(source, IResource.NONE, null);
+			   }
+			   	} catch (CoreException e) {
+					e.printStackTrace();
+			}
+	}
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			this.selection = (IStructuredSelection) selection;
+		} else {
+			this.selection = StructuredSelection.EMPTY;
+		}
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/actions/PackageConsistencyCheckerAction.java	(revision 5)
@@ -0,0 +1,243 @@
+package de.ugoe.cs.swe.bnftools.ui.actions;
+
+import java.io.ByteArrayInputStream;
+import java.io.InputStream;
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.jface.action.IAction;
+import org.eclipse.jface.dialogs.InputDialog;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.actions.ActionDelegate;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.resource.XtextResourceSet;
+
+import de.ugoe.cs.swe.bnftools.ebnf.ExtRule;
+import de.ugoe.cs.swe.bnftools.ebnf.Import;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.ebnf.impl.EtsiBnfImpl;
+
+public class PackageConsistencyCheckerAction extends ActionDelegate {
+	private IStructuredSelection selection = StructuredSelection.EMPTY;
+	private IFile file=null;
+	private XtextResource coreResource = null;
+	private XtextResource updatedResource = null;
+	
+	@Override
+	public void run(IAction action) {
+		TreeSelection treeSelection = (TreeSelection) selection;
+		TreePath[] paths = treeSelection.getPaths();
+
+		for (int i = 0; i < paths.length; i++) {
+			TreePath path = paths[i];
+			IFile f = (IFile) path.getLastSegment();
+			XtextResourceSet set = new XtextResourceSet();
+			String fp = f.getFullPath().toString();
+			URI uri = URI.createPlatformResourceURI(fp,true); 
+
+			Resource resource = set.getResource(uri, true);
+			if (resource instanceof XtextResource) {
+				
+				XtextResource xtextResource = (XtextResource) resource;
+				CompositeNode compNode = xtextResource.getParseResult().getRootNode();
+				Iterable<AbstractNode> allNodes = NodeUtil.getAllContents(compNode);
+				
+				if(!((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getType().equals("/delta"))
+					continue;
+				
+				Resource coreRes = null;
+				Resource updatedRes = null;
+				EList<Import> imports = ((EtsiBnfImpl) xtextResource.getParseResult().getRootNode().getElement()).getImports();
+				
+				for(int j=0; j<imports.size(); j++) {
+					if(imports.get(j).getGrammarType().equals("core")) {
+						String packageUri = uri.trimSegments(1).toPlatformString(true);
+						String fullUri = packageUri + "/" +imports.get(j).getImportURI();
+						coreRes= set.getResource( URI.createPlatformResourceURI(fullUri, true), true);
+					}
+					if(imports.get(j).getGrammarType().equals("update")) {
+						String packageUri = uri.trimSegments(1).toPlatformString(true);
+						String fullUri = packageUri + "/" +imports.get(j).getImportURI();
+						updatedRes= set.getResource( URI.createPlatformResourceURI(fullUri, true), true);
+					}
+					
+					
+				}
+				if( (coreRes==null) || (updatedRes==null))
+					return;
+				
+				if(coreRes instanceof XtextResource)
+					coreResource = (XtextResource) coreRes;
+				if(updatedRes instanceof XtextResource)
+					updatedResource = (XtextResource) updatedRes;
+				
+				InputDialog di = new InputDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Name Selection", 
+						"Please type a name for the consistency check file.", uri.trimFileExtension().segment(uri.segmentCount()-1) + "_cons.txt", null);
+				di.open();
+				String fname = di.getValue();
+				
+				String loc = uri.trimSegments(1).toPlatformString(true); //uri.trimFileExtension().trimSegments(1).toPlatformString(true);
+				loc = loc.concat("/" + fname);
+				IPath filePath = new Path(loc);
+				file = ResourcesPlugin.getWorkspace().getRoot().getFile(filePath);
+				   
+				   try {
+				   if (!file.exists()) {
+				      byte[] bytes = ("Consistency check for: " + uri.trimFileExtension().segment(uri.segmentCount()-1) + '\n').getBytes();
+				      InputStream source = new ByteArrayInputStream(bytes);
+				      file.create(source, IResource.NONE, null);				      
+				   }
+				   else return;
+				   	} catch (CoreException e) {
+						e.printStackTrace();
+					}
+				createNewLine("The only rules shown are the ones that were found inconsistent between the two versions." + '\n');
+				
+				/*
+				 * the idea: get the core grammar and the updated grammar
+				 * for each extension rule in the delta grammar,
+				 * 		find the corresponding rule in the updated grammar and the core grammar
+				 * 		if it doesn't exist in the updated grammar write the inconsistency
+				 * 		if it exists, compare to the rule in the core grammar
+				 */
+				for(AbstractNode node: allNodes) {
+					if(node.getElement() instanceof ExtRule) {
+							if(!checkForConsistency(node))
+								createNewLine("Extension Rule: " + node.serialize().trim()+'\n' + '\n');
+						
+					}
+						
+				}
+				
+
+					
+				
+			}
+		}
+	}
+	
+	private boolean checkForConsistency(AbstractNode node) {
+		//updated grammar:
+		AbstractNode updatedRule = null;
+		AbstractNode coreRule = null;
+		for(AbstractNode uNode : NodeUtil.getAllContents(updatedResource.getParseResult().getRootNode())) {
+			if(uNode.getElement() instanceof Rule)
+				if(((Rule) uNode.getElement()).getName().equals(((ExtRule) node.getElement()).getName())) {
+					updatedRule = uNode;
+					break;
+				}
+		}
+		
+		if(updatedRule == null){
+			createNewLine("The following core grammar rule used in the package does not exist in the updated grammar: \n");
+			return false;
+		}
+		
+		//core grammar:
+		else {
+			for(AbstractNode cNode : NodeUtil.getAllContents(coreResource.getParseResult().getRootNode())) {
+				if(cNode.getElement() instanceof Rule)
+					if(((Rule) cNode.getElement()).getName().equals(((ExtRule) node.getElement()).getName())) {
+						coreRule = cNode;
+						break;
+					}
+			}
+			
+			if(coreRule == null){
+				createNewLine("Error at the following rule: (no corresponding rule found in the core grammar!):" + '\n');
+				return false;
+			}
+			
+			if(compareRules(coreRule, updatedRule))
+				return true;
+			else {
+				createNewLine("Inconsistency found at the following rule:" + '\n');
+				createNewLine("Core Rule: ");
+				createNewLine(coreRule.serialize().trim()+ '\n');
+				createNewLine("Updated Rule: ");
+				createNewLine(updatedRule.serialize().trim() + '\n');
+
+				return false;
+			}
+			
+		}
+	}
+	
+	
+	//returns true, if the rules are equal
+	private boolean compareRules(AbstractNode cNode, AbstractNode uNode) {
+		EList<LeafNode> cLeaves = removeWS(cNode.getLeafNodes());
+		EList<LeafNode> uLeaves = removeWS(uNode.getLeafNodes());
+		if(cLeaves.size()!=uLeaves.size())
+			return false;
+		
+		for(int i=0; i< cLeaves.size(); i++) {
+			if(!(cLeaves.get(i).serialize().equals(uLeaves.get(i).serialize())))
+				return false;
+		}
+		return true;
+	}
+	
+
+	private EList<LeafNode> removeWS(EList<LeafNode> leaves) {
+		for(int i=0; i<leaves.size(); i++) {
+			if(!(leaves.get(i).getGrammarElement() instanceof org.eclipse.xtext.impl.TerminalRuleImpl))
+				leaves.remove(i);
+		}
+		return leaves;
+	}
+	
+	private boolean checkReferences(AbstractNode rule){
+		EList<EObject> refs = rule.getElement().eContents();
+		for(int i=0; i<refs.size(); i++){
+			if(refs.get(i) instanceof RuleReference)
+				System.out.println(refs.get(i));
+		}
+//		EList<LeafNode> references = ruleref(removeWS(rule.getLeafNodes()));
+//		for(int i=0; i<references.size(); i++)
+//			if(references.get(i).getElement() instanceof RuleReference)
+//			System.out.println(references.get(i));
+
+		return false;
+	}
+	
+	
+	
+	private void createNewLine(String rule) {
+		try {
+			   if (file.exists()) {
+			      byte[] bytes = (rule).getBytes();
+			      InputStream source = new ByteArrayInputStream(bytes);
+			      file.appendContents(source, IResource.NONE, null);
+			   }
+			   	} catch (CoreException e) {
+					e.printStackTrace();
+			}
+	}
+	@Override
+	public void selectionChanged(IAction action, ISelection selection) {
+		if (selection instanceof IStructuredSelection) {
+			this.selection = (IStructuredSelection) selection;
+		} else {
+			this.selection = StructuredSelection.EMPTY;
+		}
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/autoedit/EbnfAutoEditStrategy.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/autoedit/EbnfAutoEditStrategy.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/autoedit/EbnfAutoEditStrategy.java	(revision 5)
@@ -0,0 +1,14 @@
+package de.ugoe.cs.swe.bnftools.ui.autoedit;
+
+import org.eclipse.xtext.ui.editor.autoedit.DefaultAutoEditStrategy;
+
+public class EbnfAutoEditStrategy extends DefaultAutoEditStrategy {
+
+	protected void configure(IEditStrategyAcceptor acceptor) {
+		configureParenthesis(acceptor);
+		configureSquareBrackets(acceptor);
+		configureCurlyBracesBlock(acceptor);
+		configureMultilineComments(acceptor);
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/contentassist/EbnfProposalProvider.java	(revision 5)
@@ -0,0 +1,19 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.contentassist;
+
+import org.eclipse.xtext.Keyword;
+import org.eclipse.xtext.ui.editor.contentassist.ContentAssistContext;
+import org.eclipse.xtext.ui.editor.contentassist.ICompletionProposalAcceptor;
+
+import de.ugoe.cs.swe.bnftools.ui.contentassist.AbstractEbnfProposalProvider;
+/**
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#contentAssist on how to customize content assistant
+ */
+public class EbnfProposalProvider extends AbstractEbnfProposalProvider {
+	// prevent non-rules to be autocompleted
+	@Override
+	public void completeKeyword(Keyword keyword, ContentAssistContext contentAssistContext, ICompletionProposalAcceptor acceptor) {
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfDescriptionLabelProvider.java	(revision 5)
@@ -0,0 +1,27 @@
+/*
+* 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/latest/xtext.html#labelProvider
+ */
+public class EbnfDescriptionLabelProvider extends DefaultDescriptionLabelProvider {
+
+/*
+	//Labels and icons can be computed like this:
+	
+	String text(IEObjectDescription ele) {
+	  return "my "+ele.getName();
+	}
+	 
+    String image(IEObjectDescription ele) {
+      return ele.getEClass().getName() + ".gif";
+    }	 
+*/
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/labeling/EbnfLabelProvider.java	(revision 5)
@@ -0,0 +1,34 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.labeling;
+
+import org.eclipse.emf.edit.ui.provider.AdapterFactoryLabelProvider;
+import org.eclipse.xtext.ui.label.DefaultEObjectLabelProvider;
+
+import com.google.inject.Inject;
+
+/**
+ * Provides labels for a EObjects.
+ * 
+ * see http://www.eclipse.org/Xtext/documentation/latest/xtext.html#labelProvider
+ */
+public class EbnfLabelProvider extends DefaultEObjectLabelProvider {
+
+	@Inject
+	public EbnfLabelProvider(AdapterFactoryLabelProvider delegate) {
+		super(delegate);
+	}
+
+/*
+	//Labels and icons can be computed like this:
+	
+	String text(MyModel ele) {
+	  return "my "+ele.getName();
+	}
+	 
+    String image(MyModel ele) {
+      return "MyModel.gif";
+    }
+*/
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveNodeModelXMIHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveNodeModelXMIHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveNodeModelXMIHandler.java	(revision 5)
@@ -0,0 +1,56 @@
+package de.ugoe.cs.swe.bnftools.ui.modelingtools;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+
+public class SaveNodeModelXMIHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		try {
+			XtextEditor editor = (XtextEditor) HandlerUtil
+					.getActiveEditor(event);
+			
+			EObject root = editor.getDocument().readOnly(new RootEObjectFinder());
+			IProject project  = editor.getResource().getProject();
+			IPath projectPath = project.getLocation();
+			String name = editor.getResource().getName();
+			NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+			saveModel(projectPath + "//" + name + ".xmi", rootNode.getParserNode());
+			
+			project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	public void saveModel(String filename, EObject project) {
+		try {
+			URI fileURI = URI.createFileURI(filename);
+			Resource poResource = new XMLResourceFactoryImpl()
+					.createResource(fileURI);
+			poResource.getContents().add(project);
+			poResource.save(null);
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveXMIHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveXMIHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/modelingtools/SaveXMIHandler.java	(revision 5)
@@ -0,0 +1,53 @@
+package de.ugoe.cs.swe.bnftools.ui.modelingtools;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.resources.IProject;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.emf.ecore.xmi.impl.XMLResourceFactoryImpl;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+
+public class SaveXMIHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		try {
+			XtextEditor editor = (XtextEditor) HandlerUtil
+					.getActiveEditor(event);
+			
+			EObject root = editor.getDocument().readOnly(new RootEObjectFinder());
+			IProject project  = editor.getResource().getProject();
+			IPath projectPath = project.getLocation();
+			String name = editor.getResource().getName();
+			
+			saveModel(projectPath + "//" + name + ".xmi", root);
+			project.refreshLocal(IResource.DEPTH_INFINITE, new NullProgressMonitor());
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	public void saveModel(String filename, EObject project) {
+		try {
+			URI fileURI = URI.createFileURI(filename);
+			Resource poResource = new XMLResourceFactoryImpl()
+					.createResource(fileURI);
+			poResource.getContents().add(project);
+			poResource.save(null);
+		} catch (Exception ex) {
+			ex.printStackTrace();
+		}
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineNodeAdapterFactory.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineNodeAdapterFactory.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfOutlineNodeAdapterFactory.java	(revision 5)
@@ -0,0 +1,22 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.outline;
+
+import org.eclipse.xtext.ui.editor.outline.actions.DefaultContentOutlineNodeAdapterFactory;
+
+public class EbnfOutlineNodeAdapterFactory extends DefaultContentOutlineNodeAdapterFactory {
+
+	private static final Class<?>[] types = { 
+		// provide list of classes to adapt to, e.g.:
+		// Entity.class
+		// Service.class
+	};
+
+	@Override
+	public Class<?>[] getAdapterList() {
+		return types;
+	}
+
+}
+
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfTransformer.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfTransformer.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/outline/EbnfTransformer.java	(revision 5)
@@ -0,0 +1,22 @@
+/*
+* generated by Xtext
+*/
+package de.ugoe.cs.swe.bnftools.ui.outline;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.ui.editor.outline.transformer.AbstractDeclarativeSemanticModelTransformer;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+/**
+ * customization of the default outline structure
+ * 
+ */
+public class EbnfTransformer extends AbstractDeclarativeSemanticModelTransformer {
+	public List<EObject> getChildren(Rule node) {
+		return new ArrayList<EObject>();
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/preferences/ValidationPreferencePage.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/preferences/ValidationPreferencePage.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/preferences/ValidationPreferencePage.java	(revision 5)
@@ -0,0 +1,41 @@
+package de.ugoe.cs.swe.bnftools.ui.preferences;
+
+import org.eclipse.jface.preference.BooleanFieldEditor;
+import org.eclipse.jface.preference.FieldEditorPreferencePage;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.IWorkbenchPreferencePage;
+import de.ugoe.cs.swe.bnftools.ui.EbnfUiModule;
+
+public class ValidationPreferencePage extends FieldEditorPreferencePage
+		implements IWorkbenchPreferencePage {
+
+	@Override
+	protected void createFieldEditors() {
+		addField(new BooleanFieldEditor("RULE_REFERENCED_ONLY_ONCE",
+				"&Rule referenced only once", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("PASSTHROUGH_RULE",
+				"&Passthrough rule", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("UNUSED_RULE",
+				"&Unused rule", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("EQUAL_ALTERNATIVES_RULE",
+				"&Rule with equal alternatives", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("CHECK_DUPLICATE_RULES",
+				"&Duplicate Rules", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("CHECK_SUBRULE_DUPLICATES",
+				"&Subrule Duplicates", getFieldEditorParent()));
+		addField(new BooleanFieldEditor("CHECK_UPDATED_GRAMMAR_CONSISTENCY",
+				"&Updated Grammar Consistency (in delta grammar)", getFieldEditorParent()));
+	}
+
+	public void init(IWorkbench workbench) {
+		setPreferenceStore(de.ugoe.cs.swe.bnftools.ui.internal.EbnfActivator.getInstance().getPreferenceStore());
+		setDescription("Enable or disable validation rules");
+	}
+	
+    public boolean performOk() {
+    	boolean result = super.performOk();
+		EbnfUiModule.updateValidatorSettings(); // must be updated for each new validation rule!
+    	return result;
+    }
+    
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/EbnfQuickfixProvider.java	(revision 5)
@@ -0,0 +1,61 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix;
+
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.quickfix.DefaultQuickfixProvider;
+import org.eclipse.xtext.ui.editor.quickfix.Fix;
+import org.eclipse.xtext.ui.editor.quickfix.IssueResolutionAcceptor;
+import org.eclipse.xtext.validation.Issue;
+import com.google.inject.Inject;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.modifications.InlineRuleModification;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.modifications.RemovePassthroughRuleModification;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.modifications.RemoveUnusedRuleModification;
+import de.ugoe.cs.swe.bnftools.validation.EbnfJavaValidator;
+
+public class EbnfQuickfixProvider extends DefaultQuickfixProvider {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Fix(value = EbnfJavaValidator.ruleReferencedOneDescription)
+	public 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);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Fix(value = EbnfJavaValidator.passthroughRuleDescription)
+	public void fixRemovePassthroughRule(final Issue issue, IssueResolutionAcceptor acceptor) {
+		RemovePassthroughRuleModification removePassthroughRuleModification = new RemovePassthroughRuleModification(
+				resourceDescriptions);
+
+		acceptor.accept(
+				issue,
+				"Remove passthrough rule",
+				"Delete the passthrough rule and replace its references with its right side",
+				"upcase.png", removePassthroughRuleModification);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Fix(value = EbnfJavaValidator.unusedRuleDescription)
+	public void fixUnusedRule(final Issue issue, IssueResolutionAcceptor acceptor) {
+		RemoveUnusedRuleModification removeUnusedRuleModification = new RemoveUnusedRuleModification(
+				resourceDescriptions);
+
+		acceptor.accept(
+				issue,
+				"Remove unused rule",
+				"Delete the unused rule",
+				"upcase.png", removeUnusedRuleModification);
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/InlineRuleModification.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/InlineRuleModification.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/InlineRuleModification.java	(revision 5)
@@ -0,0 +1,85 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.modifications;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.PerformChangeOperation;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
+import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.InlineRulesProcessor;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class InlineRuleModification implements ISemanticModification {
+	
+	IResourceDescriptions resourceDescriptions;
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	public InlineRuleModification(IResourceDescriptions resourceDescriptions) {
+		this.resourceDescriptions = resourceDescriptions;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+	
+	public void apply(EObject element, IModificationContext context)
+			throws Exception {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return;
+		}
+
+		if (!(element instanceof Rule))
+			return;
+		
+		Rule rule = (Rule) element;
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		
+		List<CompositeNode> references = Utils.findReferences(rule,
+				resourceDescriptions, editor);
+		
+		nodePairs.add(new DeclarationReferencesPair(NodeUtil.getNodeAdapter(rule).getParserNode(), references));
+		
+		InlineRulesProcessor processor = new InlineRulesProcessor(editor, rootNode.getParserNode(), doc, nodePairs, true);
+
+		NullProgressMonitor pm = new NullProgressMonitor();
+
+		Change change;
+		try {
+			change = processor.createChange(pm);
+			change.initializeValidationData(pm);
+			change.setEnabled(true);
+			PerformChangeOperation operation = new PerformChangeOperation(
+					change);
+			operation.setUndoManager(RefactoringCore.getUndoManager(),
+					processor.getProcessorName());
+			operation.run(pm);
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemovePassthroughRuleModification.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemovePassthroughRuleModification.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemovePassthroughRuleModification.java	(revision 5)
@@ -0,0 +1,74 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.modifications;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.PerformChangeOperation;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
+import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.ReplacePassthroughRuleProcessor;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class RemovePassthroughRuleModification implements ISemanticModification {
+
+	IResourceDescriptions resourceDescriptions;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public RemovePassthroughRuleModification(
+			IResourceDescriptions resourceDescriptions) {
+		this.resourceDescriptions = resourceDescriptions;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public void apply(EObject element, IModificationContext context)
+			throws Exception {
+		// get current editor
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		Rule rule = (Rule) element;
+
+		NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+		
+		List<CompositeNode> references = Utils.findReferences(element,
+				resourceDescriptions, editor);
+
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		nodePairs.add(new DeclarationReferencesPair((CompositeNode) declarationNode.getParserNode(), references));
+		
+		ReplacePassthroughRuleProcessor processor = new ReplacePassthroughRuleProcessor(
+				editor, editor.getDocument(), nodePairs, true);
+
+		NullProgressMonitor pm = new NullProgressMonitor();
+		Change change;
+		try {
+			change = processor.createChange(pm);
+			change.initializeValidationData(pm);
+			change.setEnabled(true);
+			PerformChangeOperation operation = new PerformChangeOperation(
+					change);
+			operation.setUndoManager(RefactoringCore.getUndoManager(),
+					processor.getProcessorName());
+			operation.run(pm);
+			change.dispose();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemoveUnusedRuleModification.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemoveUnusedRuleModification.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/modifications/RemoveUnusedRuleModification.java	(revision 5)
@@ -0,0 +1,70 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.modifications;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.runtime.NullProgressMonitor;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.PerformChangeOperation;
+import org.eclipse.ltk.core.refactoring.RefactoringCore;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.edit.IModificationContext;
+import org.eclipse.xtext.ui.editor.model.edit.ISemanticModification;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.RemoveUnusedRulesProcessor;
+
+public class RemoveUnusedRuleModification implements ISemanticModification {
+
+	IResourceDescriptions resourceDescriptions;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public RemoveUnusedRuleModification(
+			IResourceDescriptions resourceDescriptions) {
+		this.resourceDescriptions = resourceDescriptions;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public void apply(EObject element, IModificationContext context)
+			throws Exception {
+		// get current editor
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+				.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+		Rule rule = (Rule) element;
+
+		NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+		
+		List<CompositeNode> unusedNodes = new ArrayList<CompositeNode>();
+		
+		unusedNodes.add(declarationNode.getParserNode());
+		
+		RemoveUnusedRulesProcessor processor = new RemoveUnusedRulesProcessor(
+				editor, editor.getDocument(), unusedNodes);
+		
+		NullProgressMonitor pm = new NullProgressMonitor();
+		Change change;
+		try {
+			change = processor.createChange(pm);
+			change.initializeValidationData(pm);
+			change.setEnabled(true);
+			PerformChangeOperation operation = new PerformChangeOperation(
+					change);
+			operation.setUndoManager(RefactoringCore.getUndoManager(),
+					processor.getProcessorName());
+			operation.run(pm);
+			change.dispose();
+		} catch (Exception e) {
+			e.printStackTrace();
+		}
+
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/InlineRulesProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/InlineRulesProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/InlineRulesProcessor.java	(revision 5)
@@ -0,0 +1,168 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.processors;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class InlineRulesProcessor extends RefactoringProcessor {
+	
+	private IFile file;
+	private CompositeNode rootNode;
+	private XtextDocument document;
+	private List<DeclarationReferencesPair> nodePairs;
+	private boolean isRemoveLine;
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	public InlineRulesProcessor(XtextEditor editor, CompositeNode root, XtextDocument doc,  List<DeclarationReferencesPair> nodePairs, boolean removal) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.rootNode = root;
+		this.document = doc;
+		this.nodePairs = nodePairs;
+		this.isRemoveLine = removal;
+		
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Inline Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Inline Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (rootNode != null);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (rootNode == null)
+			status.addFatalError("Root node is null!");
+
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+
+		CompositeChange compositeChange = new CompositeChange("Inline Rule");
+		pm.beginTask("Inline Rules Refactoring", 2);
+
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Inline Rules", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+
+		// inline Rules
+		for (int i=0; i < nodePairs.size(); i++) {
+			CompositeNode declarationRule = nodePairs.get(i).getDeclarationNode();
+			List<CompositeNode> ruleReferences = nodePairs.get(i).getReferenceNodes();
+
+			try {
+				String ruleText = document.get(declarationRule.getOffset(), declarationRule.getLength());
+				String ruleRightHandSide = ruleText.substring(ruleText.indexOf("::=")+3).trim();
+				if (ruleRightHandSide.length() == 0)
+					return compositeChange;
+				
+				ruleRightHandSide = "(" + ruleRightHandSide + ")";
+				//TODO: handle the parentheses more intelligently!
+				
+				// replace references with passthrough rule name
+				for (int j=0; j < ruleReferences.size(); j++) {
+					CompositeNode ruleReference = ruleReferences.get(j);
+					ReplaceEdit replaceEdit2 = new ReplaceEdit(ruleReference.getOffset(), ruleReference.getLength(), ruleRightHandSide);
+					multiEdit.addChild(replaceEdit2);
+					TextEditGroup editGroup2 = new TextEditGroup("reference renaming", replaceEdit2);
+					fileChange.addTextEditGroup(editGroup2);
+					pm.worked(1);
+				}
+
+				// remove old line
+				if (isRemoveLine) {
+					int amount = Utils.stepBackNewlines(document, declarationRule.getOffset());
+					DeleteEdit deleteEdit = new DeleteEdit(declarationRule.getOffset() - amount, declarationRule.getLength() + amount);
+					multiEdit.addChild(deleteEdit);
+					TextEditGroup editGroup3 = new TextEditGroup("remove old line", deleteEdit);
+					fileChange.addTextEditGroup(editGroup3);
+					pm.worked(1);
+				}
+			} catch (BadLocationException e) {
+				// TODO Auto-generated catch block
+				e.printStackTrace();
+			}
+			
+		}
+
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/RemoveUnusedRulesProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/RemoveUnusedRulesProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/RemoveUnusedRulesProcessor.java	(revision 5)
@@ -0,0 +1,142 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.processors;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class RemoveUnusedRulesProcessor extends RefactoringProcessor {
+	IFile file;
+	private List<CompositeNode> unusedRuleNodes;
+	private IXtextDocument document;
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	public RemoveUnusedRulesProcessor(XtextEditor editor, IXtextDocument doc, List<CompositeNode> unusedRuleNodes) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.unusedRuleNodes = unusedRuleNodes;
+		this.document = doc;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Remove Unused Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Remove Unused Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (unusedRuleNodes != null) && (unusedRuleNodes.size() > 0);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (unusedRuleNodes == null) {
+			status.addFatalError("No unused rule node!");
+		} else if (unusedRuleNodes.size() == 0) {
+			status.addFatalError("No unused rule node!");
+		} 
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		/*
+		 * Create a change, initialise the IProgressMonitor with 2 task:
+		 * 1. renaming the reference with the rule's right side
+		 * 2. renaming the whole rule with an empty string
+		 */
+		CompositeChange compositeChange = new CompositeChange("Remove Unused Rules");
+		pm.beginTask("Remove Unused Rules", unusedRuleNodes.size());
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Remove Unused Rule", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		for (int i=0; i < unusedRuleNodes.size(); i++) {
+			CompositeNode declarationRule = unusedRuleNodes.get(i);
+
+			// delete the declaration
+			int offset = declarationRule.getOffset();
+			int amount = Utils.stepBackNewlines(document, offset);
+			
+			DeleteEdit deleteEdit = new DeleteEdit(offset-amount, declarationRule.getLength()+amount);
+			multiEdit.addChild(deleteEdit);
+			TextEditGroup editGroup = new TextEditGroup("declaration removal", deleteEdit);
+			fileChange.addTextEditGroup(editGroup);
+			pm.worked(1);
+		}
+		
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/ReplacePassthroughRuleProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/ReplacePassthroughRuleProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/quickfix/processors/ReplacePassthroughRuleProcessor.java	(revision 5)
@@ -0,0 +1,179 @@
+package de.ugoe.cs.swe.bnftools.ui.quickfix.processors;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.DeleteEdit;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.RuleReference;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class ReplacePassthroughRuleProcessor extends RefactoringProcessor {
+	IFile file;
+	private List<DeclarationReferencesPair> nodePairs;
+	private boolean isRemoveLine;
+	private IXtextDocument document;
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	public ReplacePassthroughRuleProcessor(XtextEditor editor, IXtextDocument doc, List<DeclarationReferencesPair> nodePairs, boolean removal) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.nodePairs = nodePairs;
+		this.isRemoveLine = removal;
+		this.document = doc;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Replace Passthrough Rule Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Replace Passthrough Rule Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		if ((nodePairs != null) && (nodePairs.size() > 0))
+			return false;
+		
+		
+		return true;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (nodePairs == null) {
+			status.addFatalError("No passthrough rules to replace!");
+		} else if (nodePairs.size() == 0) {
+			status.addFatalError("No passthrough rules to replace!");
+		}
+		
+		boolean isNodeWithReferences = false;
+		for (int i=0; i < nodePairs.size(); i++) {
+			if (nodePairs.get(i).getReferenceNodes().size() > 0) {
+				isNodeWithReferences = true;
+			}
+		}
+		
+		if (!isNodeWithReferences)
+			status.addFatalError("No passthrough rules to replace!");
+		
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		/*
+		 * Create a change, initialise the IProgressMonitor with 2 task:
+		 * 1. renaming the reference with the rule's right side
+		 * 2. renaming the whole rule with an empty string
+		 */
+		CompositeChange compositeChange = new CompositeChange("Replace Passthrough Rule");
+		pm.beginTask("Replace Passthrough Rule Refactoring", nodePairs.size());
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Replace Passthrough Rule", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		for (int i=0; i < nodePairs.size(); i++) {
+			CompositeNode declarationRule = nodePairs.get(i).getDeclarationNode();
+			List<CompositeNode> ruleReferences = nodePairs.get(i).getReferenceNodes();
+			// get the replacement name
+			Rule rule = (Rule) declarationRule.getElement();
+			RuleReference rightSideRule = EbnfAnalysisUtils.getPassthroughRuleReference(rule);
+			String replaceRuleName = rightSideRule.getRuleref().getName();
+
+			// replace references with passthrough rule name
+			for (int j=0; j < ruleReferences.size(); j++) {
+				CompositeNode ruleReference = ruleReferences.get(j);
+				ReplaceEdit replaceEdit = new ReplaceEdit(ruleReference.getOffset(), ruleReference.getLength(), replaceRuleName);
+				multiEdit.addChild(replaceEdit);
+				TextEditGroup editGroup2 = new TextEditGroup("reference renaming", replaceEdit);
+				fileChange.addTextEditGroup(editGroup2);
+				pm.worked(1);
+			}
+
+			// remove old line
+			if (isRemoveLine) {
+				int amount = Utils.stepBackNewlines(document, declarationRule.getOffset());
+				DeleteEdit deleteEdit = new DeleteEdit(declarationRule.getOffset() - amount, declarationRule.getLength() + amount);
+				multiEdit.addChild(deleteEdit);
+				TextEditGroup editGroup3 = new TextEditGroup("remove old line", deleteEdit);
+				fileChange.addTextEditGroup(editGroup3);
+				pm.worked(1);
+			}
+		}
+		
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringHandler.java	(revision 5)
@@ -0,0 +1,57 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.autorenumber;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+
+public class AutoRenumberRefactoringHandler extends AbstractHandler {
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		AutoRenumberRefactoringProcessor processor = new AutoRenumberRefactoringProcessor(
+				editor, rootNode.getParserNode(), doc);
+
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+		
+		return null;
+	}
+
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/autorenumber/AutoRenumberRefactoringProcessor.java	(revision 5)
@@ -0,0 +1,149 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.autorenumber;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+public class AutoRenumberRefactoringProcessor extends RefactoringProcessor {
+	IFile file;
+	private CompositeNode rootNode;
+	private XtextDocument document;
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	public AutoRenumberRefactoringProcessor(XtextEditor editor, CompositeNode root, XtextDocument doc) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.rootNode = root;
+		this.document = doc;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Autorenumbering Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Autorenumbering Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (rootNode != null);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (rootNode == null)
+			status.addFatalError("Root node is null!");
+
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		/*
+		 * Create a change, initialise the IProgressMonitor with 2 task:
+		 * 1. renaming the reference with the rule's right side
+		 * 2. renaming the whole rule with an empty string
+		 */
+		CompositeChange compositeChange = new CompositeChange("Autorenumbering");
+		pm.beginTask("Autorenumbering Refactoring", 2);
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Autorenumbering", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		int counter = 1;
+		// renumber the rules
+		for (int i=0; i < rootNode.getChildren().size(); i++) {
+			AbstractNode child = rootNode.getChildren().get(i);
+			if (!(child.getElement() instanceof Rule))
+				continue;
+			String ruleText;
+			try {
+				ruleText = document.get(child.getOffset(), child.getLength());
+				int numberSeperatorPosition = ruleText.indexOf(".");
+				if (numberSeperatorPosition >= 0) {
+					int startOffset = child.getOffset();
+					int length = numberSeperatorPosition;
+					
+					ReplaceEdit replaceEdit = new ReplaceEdit(startOffset, length, Integer.toString(counter));
+					multiEdit.addChild(replaceEdit);
+					TextEditGroup editGroup2 = new TextEditGroup("renumbering", replaceEdit);
+					fileChange.addTextEditGroup(editGroup2);
+					pm.worked(1);
+				}
+				counter++;
+			} catch (BadLocationException e) {
+				e.printStackTrace();
+			}
+		}
+		
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoring.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoring.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoring.java	(revision 5)
@@ -0,0 +1,12 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.generic;
+
+import org.eclipse.ltk.core.refactoring.participants.ProcessorBasedRefactoring;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+
+public class GenericRefactoring extends ProcessorBasedRefactoring {
+
+	public GenericRefactoring(RefactoringProcessor processor) {
+		super(processor);
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoringWizard.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoringWizard.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/generic/GenericRefactoringWizard.java	(revision 5)
@@ -0,0 +1,18 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.generic;
+
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+
+public class GenericRefactoringWizard extends RefactoringWizard {
+
+	public GenericRefactoringWizard(Refactoring refactoring, int flags) {
+		super(refactoring, flags);
+	}
+
+	// ---------------------------------------------------------------------------
+
+	@Override
+	protected void addUserInputPages() {
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinesinglereferencedrules/InlineSingleReferencedRulesRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinesinglereferencedrules/InlineSingleReferencedRulesRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinesinglereferencedrules/InlineSingleReferencedRulesRefactoringHandler.java	(revision 5)
@@ -0,0 +1,87 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.inlinesinglereferencedrules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.InlineRulesProcessor;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class InlineSingleReferencedRulesRefactoringHandler extends
+		AbstractHandler {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		for (int i=0; i < rootNode.getParserNode().getChildren().size(); i++) {
+			AbstractNode currentNode = rootNode.getParserNode().getChildren().get(i);
+			if (currentNode.getElement() instanceof Rule) {
+				Rule rule = (Rule) currentNode.getElement();
+				NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+				List<CompositeNode> references = Utils.findReferences(rule,
+						resourceDescriptions, editor);
+
+				if (references.size() == 1) {
+					DeclarationReferencesPair nodePair = new DeclarationReferencesPair(declarationNode.getParserNode(), references);
+					nodePairs.add(nodePair);
+				}
+			}
+		}
+
+		InlineRulesProcessor processor = new InlineRulesProcessor(editor, rootNode.getParserNode(), doc, nodePairs, false);
+		
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+		
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringHandler.java	(revision 5)
@@ -0,0 +1,86 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.inlinetokenrules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class InlineTokenRulesRefactoringHandler extends AbstractHandler {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		for (int i=0; i < rootNode.getParserNode().getChildren().size(); i++) {
+			AbstractNode currentNode = rootNode.getParserNode().getChildren().get(i);
+			if (currentNode.getElement() instanceof Rule) {
+				Rule rule = (Rule) currentNode.getElement();
+				NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+				if (EbnfAnalysisUtils.isTokenRule(rule)) {
+					List<CompositeNode> references = Utils.findReferences(rule,
+							resourceDescriptions, editor);
+					
+					DeclarationReferencesPair nodePair = new DeclarationReferencesPair(declarationNode.getParserNode(), references);
+					nodePairs.add(nodePair);
+				}
+			}
+		}
+		
+		InlineTokenRulesRefactoringProcessor processor = new InlineTokenRulesRefactoringProcessor(
+				editor, rootNode.getParserNode(), doc, nodePairs);
+
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/inlinetokenrules/InlineTokenRulesRefactoringProcessor.java	(revision 5)
@@ -0,0 +1,147 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.inlinetokenrules;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ebnf.StringRule;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+
+public class InlineTokenRulesRefactoringProcessor extends RefactoringProcessor {
+	IFile file;
+	private CompositeNode rootNode;
+	private List<DeclarationReferencesPair> nodePairs;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public InlineTokenRulesRefactoringProcessor(XtextEditor editor, CompositeNode root, XtextDocument doc,  List<DeclarationReferencesPair> nodePairs) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.rootNode = root;
+		this.nodePairs = nodePairs;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Inline Token Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Inline Token Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (rootNode != null);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (rootNode == null)
+			status.addFatalError("Root node is null!");
+
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+
+		CompositeChange compositeChange = new CompositeChange("Inline Token Rule");
+		pm.beginTask("Inline Token Rules Refactoring", 2);
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Inline Token Rules", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		// Inline Token Rules
+		for (int i=0; i < nodePairs.size(); i++) {
+			CompositeNode declarationRule = nodePairs.get(i).getDeclarationNode();
+			List<CompositeNode> ruleReferences = nodePairs.get(i).getReferenceNodes();
+
+			// get the replacement name
+			StringRule stringRule = EbnfAnalysisUtils.getTokenRuleTerminal((Rule) declarationRule.getElement());
+			String replaceString = "";
+			if (stringRule.getLiteral().length() > 0) {
+				replaceString = "\"" + stringRule.getLiteral() + "\""; 
+			} else {
+				replaceString = "\"\"\""; 
+			}
+			
+			// replace references with passthrough rule name
+			for (int j=0; j < ruleReferences.size(); j++) {
+				CompositeNode ruleReference = ruleReferences.get(j);
+				ReplaceEdit replaceEdit2 = new ReplaceEdit(ruleReference.getOffset(), ruleReference.getLength(), replaceString);
+				multiEdit.addChild(replaceEdit2);
+				TextEditGroup editGroup2 = new TextEditGroup("reference renaming", replaceEdit2);
+				fileChange.addTextEditGroup(editGroup2);
+				pm.worked(1);
+			}
+		}
+		
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/removeunusedrules/RemoveUnusedRulesRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/removeunusedrules/RemoveUnusedRulesRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/removeunusedrules/RemoveUnusedRulesRefactoringHandler.java	(revision 5)
@@ -0,0 +1,89 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.removeunusedrules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.RemoveUnusedRulesProcessor;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class RemoveUnusedRulesRefactoringHandler extends AbstractHandler {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+
+		List<CompositeNode> unusedRules = new ArrayList<CompositeNode>();
+		
+		int counter = 0;
+		for (int i=0; i < rootNode.getParserNode().getChildren().size(); i++) {
+			AbstractNode currentNode = rootNode.getParserNode().getChildren().get(i);
+			if (currentNode.getElement() instanceof Rule) {
+				Rule rule = (Rule) currentNode.getElement();
+				NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+				List<CompositeNode> references = Utils.findReferences(rule,
+							resourceDescriptions, editor);
+
+				if ((references.size() == 0) && (counter > 0)){
+					unusedRules.add(declarationNode.getParserNode());
+				}
+				counter++;
+			}
+		}
+
+		RemoveUnusedRulesProcessor processor = new RemoveUnusedRulesProcessor(
+				editor, editor.getDocument(), unusedRules);
+		
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+
+		
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenamePageComposite.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenamePageComposite.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenamePageComposite.java	(revision 5)
@@ -0,0 +1,43 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.rename;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Text;
+
+public class RenamePageComposite extends Composite {
+	private Text renameText;
+
+	public RenamePageComposite(Composite parent, int style) {
+		super(parent, style);
+		final GridLayout gridLayout = new GridLayout();
+		setLayout(gridLayout);
+
+		final Composite composite = new Composite(this, SWT.NONE);
+		composite.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING,
+				true, false));
+		final GridLayout gridLayout_1 = new GridLayout();
+		gridLayout_1.numColumns = 2;
+		composite.setLayout(gridLayout_1);
+
+		final Label renameLabel = new Label(composite, SWT.NONE);
+		renameLabel.setLayoutData(new GridData(GridData.BEGINNING,
+				GridData.CENTER, false, true));
+		renameLabel.setText("New Name:");
+
+		renameText = new Text(composite, SWT.BORDER);
+		renameText.setLayoutData(new GridData(GridData.FILL, GridData.CENTER,
+				true, true));
+	}
+
+	@Override
+	public void dispose() {
+		super.dispose();
+	}
+
+	public Text getRenameText() {
+		return renameText;
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameProcessor.java	(revision 5)
@@ -0,0 +1,175 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.rename;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.utils.EObjectSelectionResolver;
+import de.ugoe.cs.swe.bnftools.utils.URIFragmentResolver;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class RenameProcessor extends
+		org.eclipse.ltk.core.refactoring.participants.RenameProcessor {
+
+	private List<CompositeNode> references = null;
+	private String currentName;
+	private CompositeNode declaration;
+	private IFile file;
+
+	// --------------------------------------------------------------------------------
+
+	public RenameProcessor(XtextEditor editor,
+			IResourceDescriptions resourceDescriptions) {
+		
+		final ITextSelection selection = (ITextSelection) editor
+				.getSelectionProvider().getSelection();
+		
+		final IEObjectDescription eObjectDescription = editor.getDocument()
+				.readOnly(new EObjectSelectionResolver(selection, resourceDescriptions));
+
+		declaration = editor.getDocument().readOnly(
+				new URIFragmentResolver(eObjectDescription.getEObjectURI()
+						.fragment()));
+
+		if (declaration.getElement() instanceof Rule) {
+			Rule r = (Rule) declaration.getElement();
+			currentName = r.getName();
+		}
+
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		
+		if (eObjectDescription != null) {
+			references = Utils.findReferenceDescriptions(eObjectDescription, resourceDescriptions, editor);
+		}
+
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Rename Processor Identifier";
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Rename Processor";
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (references != null);
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (references == null)
+			status.addFatalError("Could not obtain references!");
+
+		return status;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		RefactoringStatus status = new RefactoringStatus();
+		RenameRefactoring refactoring = (RenameRefactoring) getRefactoring();
+		if (currentName.equals(refactoring.getRenameText())) {
+			status.addFatalError("Name unchanged!");
+		} else if (refactoring.getRenameText().length() <= 0) {
+			status.addFatalError("name must not be empty!");
+		}
+
+		return status;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+		CompositeChange compositeChange = new CompositeChange("Rename");
+		pm.beginTask("Rename Refactoring", references.size());
+
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Declaraction Renaming", file);
+		
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		RenameRefactoring refactoring = (RenameRefactoring) getRefactoring();
+		String replaceText = refactoring.getRenameText();
+		
+		ReplaceEdit replaceEdit = new ReplaceEdit(declaration.getOffset(), ((Rule)declaration.getElement()).getName().length(), replaceText);
+		multiEdit.addChild(replaceEdit);
+		
+		TextEditGroup editGroup = new TextEditGroup("declaration update", replaceEdit);
+		fileChange.addTextEditGroup(editGroup);
+		pm.worked(1);
+		
+		
+		for (int i=0; i < references.size(); i++) {
+			CompositeNode reference = references.get(i);
+			
+			replaceEdit = new ReplaceEdit(reference.getOffset(), ((Rule)declaration.getElement()).getName().length(), replaceText);
+			multiEdit.addChild(replaceEdit);
+			editGroup = new TextEditGroup("reference update", replaceEdit);
+			fileChange.addTextEditGroup(editGroup);
+			
+			pm.worked(1);
+		}
+
+		return compositeChange;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+	// --------------------------------------------------------------------------------
+
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoring.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoring.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoring.java	(revision 5)
@@ -0,0 +1,22 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.rename;
+
+import org.eclipse.ltk.core.refactoring.participants.RenameProcessor;
+
+public class RenameRefactoring extends
+		org.eclipse.ltk.core.refactoring.participants.RenameRefactoring {
+
+	private String renameText;
+
+	public RenameRefactoring(RenameProcessor processor) {
+		super(processor);
+	}
+
+	public String getRenameText() {
+		return renameText;
+	}
+
+	public void setRenameText(String renameText) {
+		this.renameText = renameText;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringHandler.java	(revision 5)
@@ -0,0 +1,79 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.rename;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.jface.dialogs.MessageDialog;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.handlers.HandlerUtil;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.utils.EObjectSelectionResolver;
+import de.ugoe.cs.swe.bnftools.utils.URIFragmentResolver;
+
+public class RenameRefactoringHandler extends AbstractHandler {
+
+	@Inject
+	private IResourceDescriptions resourceDescriptions;
+
+	// --------------------------------------------------------------------------------
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		try {
+			String currentName = "";
+
+			XtextEditor editor = (XtextEditor) HandlerUtil
+					.getActiveEditor(event);
+
+			final ITextSelection selection = (ITextSelection) editor
+					.getSelectionProvider().getSelection();
+
+			final IEObjectDescription eObjectDescription = editor
+					.getDocument()
+					.readOnly(
+							new EObjectSelectionResolver(selection, resourceDescriptions));
+
+			CompositeNode o = editor.getDocument().readOnly(
+					new URIFragmentResolver(eObjectDescription.getEObjectURI()
+							.fragment()));
+
+			if (o.getElement() instanceof Rule) {
+				Rule r = (Rule) o.getElement();
+				currentName = r.getName();
+			}
+			
+			RenameProcessor processor = new RenameProcessor(editor,
+					resourceDescriptions);
+			RenameRefactoring refactoring = new RenameRefactoring(processor);
+
+			RenameRefactoringWizard wizard = new RenameRefactoringWizard(
+					refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+			wizard.setRenameText(currentName);
+
+			RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+					wizard);
+
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+
+		} catch (Exception e) {
+			MessageDialog.openInformation(
+					Display.getDefault().getActiveShell(),
+					"Rename Refactoring",
+					"Error while applying refactoring to workbench/wizard: "
+							+ e.getMessage());
+			e.printStackTrace();
+		}
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringWizard.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringWizard.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/rename/RenameRefactoringWizard.java	(revision 5)
@@ -0,0 +1,88 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.rename;
+
+import org.eclipse.jface.wizard.IWizardPage;
+import org.eclipse.ltk.core.refactoring.Refactoring;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.UserInputWizardPage;
+import org.eclipse.swt.widgets.Composite;
+
+public class RenameRefactoringWizard extends RefactoringWizard {
+
+	private RenameInputWizardPage wizardPage;
+	private String renameText = "";
+
+	// ---------------------------------------------------------------------------
+
+	public RenameRefactoringWizard(Refactoring refactoring, int flags) {
+		super(refactoring, flags);
+	}
+
+	// ---------------------------------------------------------------------------
+
+	@Override
+	protected void addUserInputPages() {
+		wizardPage = new RenameInputWizardPage("Refactoring");
+		wizardPage.setRenameText(renameText);
+		addPage(wizardPage);
+	}
+
+	// ---------------------------------------------------------------------------
+
+	public void setRenameText(String s) {
+		renameText = s;
+		if (wizardPage != null)
+			wizardPage.setRenameText(s);
+	}
+
+	// ---------------------------------------------------------------------------
+
+	static class RenameInputWizardPage extends UserInputWizardPage {
+
+		private RenamePageComposite composite;
+		private String renameText;
+
+		public RenameInputWizardPage(String name) {
+			super(name);
+			setTitle("Rename Refactoring");
+			setDescription("Automated Refactoring to rename rule names, rule references etc."
+					+ " with the possibility to automatically update references");
+		}
+
+		public void createControl(Composite parent) {
+			composite = new RenamePageComposite(parent, 0);
+			composite.getRenameText().setText(renameText);
+			composite.getRenameText().selectAll();
+			setControl(composite);
+		}
+
+		public String getRenameText() {
+			return composite.getRenameText().getText();
+		}
+
+		public void setRenameText(String s) {
+			renameText = s;
+			if (composite != null)
+				composite.getRenameText().setText(renameText);
+		}
+
+		@Override
+		public IWizardPage getNextPage() {
+			RenameRefactoring refactoring = (RenameRefactoring) getRefactoring();
+			if (refactoring != null) {
+				refactoring.setRenameText(getRenameText());
+			}
+			return super.getNextPage();
+		}
+
+		@Override
+		protected boolean performFinish() {
+			RenameRefactoring refactoring = (RenameRefactoring) getRefactoring();
+			if (refactoring != null) {
+				refactoring.setRenameText(getRenameText());
+			}
+
+			return super.performFinish();
+		}
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/replacepassthroughrules/ReplaceAllPassthroughRulesRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/replacepassthroughrules/ReplaceAllPassthroughRulesRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/replacepassthroughrules/ReplaceAllPassthroughRulesRefactoringHandler.java	(revision 5)
@@ -0,0 +1,91 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.replacepassthroughrules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.quickfix.processors.ReplacePassthroughRuleProcessor;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class ReplaceAllPassthroughRulesRefactoringHandler extends
+		AbstractHandler {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		for (int i=0; i < rootNode.getParserNode().getChildren().size(); i++) {
+			AbstractNode currentNode = rootNode.getParserNode().getChildren().get(i);
+			if (currentNode.getElement() instanceof Rule) {
+				Rule rule = (Rule) currentNode.getElement();
+				NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+				if (EbnfAnalysisUtils.isPassthroughRule(rule)) {
+					List<CompositeNode> references = Utils.findReferences(rule,
+							resourceDescriptions, editor);
+					
+					DeclarationReferencesPair nodePair = new DeclarationReferencesPair(declarationNode.getParserNode(), references);
+					nodePairs.add(nodePair);
+				}
+			}
+		}
+
+		ReplacePassthroughRuleProcessor processor = new ReplacePassthroughRuleProcessor(
+				editor, editor.getDocument(), nodePairs, false);
+		
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringHandler.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringHandler.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringHandler.java	(revision 5)
@@ -0,0 +1,87 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.uppercasetokenrules;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.core.commands.AbstractHandler;
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizard;
+import org.eclipse.ltk.ui.refactoring.RefactoringWizardOpenOperation;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import com.google.inject.Inject;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoring;
+import de.ugoe.cs.swe.bnftools.ui.refactoring.generic.GenericRefactoringWizard;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+import de.ugoe.cs.swe.bnftools.utils.RootEObjectFinder;
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class UppercaseTokenRulesRefactoringHandler extends AbstractHandler {
+
+	@Inject
+	IResourceDescriptions resourceDescriptions;
+
+	public Object execute(ExecutionEvent event) throws ExecutionException {
+		XtextEditor editor = (XtextEditor) PlatformUI.getWorkbench()
+		.getActiveWorkbenchWindow().getActivePage().getActiveEditor();
+
+//TODO: better error handling		
+		if (!(editor.getDocument() instanceof XtextDocument)) {
+			return null;
+		}
+		
+		XtextDocument doc = (XtextDocument) editor.getDocument();
+		EObject root = doc.readOnly(new RootEObjectFinder());
+		NodeAdapter rootNode = NodeUtil.getNodeAdapter(root);
+		
+		List<DeclarationReferencesPair> nodePairs = new ArrayList<DeclarationReferencesPair>();
+		for (int i=0; i < rootNode.getParserNode().getChildren().size(); i++) {
+			AbstractNode currentNode = rootNode.getParserNode().getChildren().get(i);
+			if (currentNode.getElement() instanceof Rule) {
+				Rule rule = (Rule) currentNode.getElement();
+				NodeAdapter declarationNode = NodeUtil.getNodeAdapter(rule);
+				if (EbnfAnalysisUtils.isTokenRule(rule)) {
+					List<CompositeNode> references = Utils.findReferences(rule,
+							resourceDescriptions, editor);
+					
+					DeclarationReferencesPair nodePair = new DeclarationReferencesPair(declarationNode.getParserNode(), references);
+					nodePairs.add(nodePair);
+				}
+			}
+		}
+		
+		UppercaseTokenRulesRefactoringProcessor processor = new UppercaseTokenRulesRefactoringProcessor(
+				editor, rootNode.getParserNode(), doc, nodePairs);
+
+		GenericRefactoring refactoring = new GenericRefactoring(processor);
+		
+		GenericRefactoringWizard wizard = new GenericRefactoringWizard(
+				refactoring, RefactoringWizard.WIZARD_BASED_USER_INTERFACE);
+
+		RefactoringWizardOpenOperation openOperation = new RefactoringWizardOpenOperation(
+				wizard);
+
+		try {
+			openOperation.run(Display.getCurrent().getActiveShell(),
+					"Refactoring not possible!");
+		} catch (InterruptedException e1) {
+			e1.printStackTrace();
+		}
+		
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringProcessor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringProcessor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/refactoring/uppercasetokenrules/UppercaseTokenRulesRefactoringProcessor.java	(revision 5)
@@ -0,0 +1,153 @@
+package de.ugoe.cs.swe.bnftools.ui.refactoring.uppercasetokenrules;
+
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.core.runtime.OperationCanceledException;
+import org.eclipse.ltk.core.refactoring.Change;
+import org.eclipse.ltk.core.refactoring.CompositeChange;
+import org.eclipse.ltk.core.refactoring.RefactoringStatus;
+import org.eclipse.ltk.core.refactoring.TextFileChange;
+import org.eclipse.ltk.core.refactoring.participants.CheckConditionsContext;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringParticipant;
+import org.eclipse.ltk.core.refactoring.participants.RefactoringProcessor;
+import org.eclipse.ltk.core.refactoring.participants.SharableParticipants;
+import org.eclipse.text.edits.MultiTextEdit;
+import org.eclipse.text.edits.ReplaceEdit;
+import org.eclipse.text.edits.TextEditGroup;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.XtextDocument;
+
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+import de.ugoe.cs.swe.bnftools.utils.DeclarationReferencesPair;
+
+public class UppercaseTokenRulesRefactoringProcessor extends RefactoringProcessor {
+	IFile file;
+	private CompositeNode rootNode;
+	private List<DeclarationReferencesPair> nodePairs;
+
+	// ----------------------------------------------------------------------------------------------------
+
+	public UppercaseTokenRulesRefactoringProcessor(XtextEditor editor, CompositeNode root, XtextDocument doc,  List<DeclarationReferencesPair> nodePairs) {
+		file = (IFile) editor.getEditorInput().getAdapter(IFile.class);
+		this.rootNode = root;
+		this.nodePairs = nodePairs;
+	}
+	
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Object[] getElements() {
+		return null;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getIdentifier() {
+		return "Uppercase Token Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public String getProcessorName() {
+		return "Uppercase Token Rules Processor";
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public boolean isApplicable() throws CoreException {
+		return (rootNode != null);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkInitialConditions(IProgressMonitor pm)
+			throws CoreException, OperationCanceledException {
+		
+		RefactoringStatus status = new RefactoringStatus();
+
+		if (rootNode == null)
+			status.addFatalError("Root node is null!");
+
+		return status;
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringStatus checkFinalConditions(IProgressMonitor pm,
+			CheckConditionsContext context) throws CoreException,
+			OperationCanceledException {
+		
+		return checkInitialConditions(pm);
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public Change createChange(IProgressMonitor pm) throws CoreException,
+			OperationCanceledException {
+
+		CompositeChange compositeChange = new CompositeChange("Uppercase Token Rule");
+		pm.beginTask("Uppercase Token Rules Refactoring", 2);
+		
+		//initialising the edit
+		MultiTextEdit multiEdit = new MultiTextEdit();
+		TextFileChange fileChange = new TextFileChange("Uppercase Token Rules", file);
+		fileChange.setEdit(multiEdit);
+		fileChange.setTextType("bnf");
+		compositeChange.add(fileChange);
+		
+		// uppercase Token Rules
+		for (int i=0; i < nodePairs.size(); i++) {
+			CompositeNode declarationRule = nodePairs.get(i).getDeclarationNode();
+			List<CompositeNode> ruleReferences = nodePairs.get(i).getReferenceNodes();
+
+			// get the replacement name
+			Rule rule = (Rule) declarationRule.getElement();
+			String replaceRuleName = rule.getName().toUpperCase();
+
+			LeafNode nameNode = null;
+			for (int j=0; j < declarationRule.getLeafNodes().size(); j++) {
+				if (declarationRule.getLeafNodes().get(j).getText().equals(rule.getName()))
+					nameNode = declarationRule.getLeafNodes().get(j);
+			}
+			
+			ReplaceEdit replaceEdit = new ReplaceEdit(nameNode.getOffset(), nameNode.getLength(), replaceRuleName);
+			multiEdit.addChild(replaceEdit);
+			TextEditGroup editGroup = new TextEditGroup("reference renaming", replaceEdit);
+			fileChange.addTextEditGroup(editGroup);
+			pm.worked(1);
+			
+			// replace references with passthrough rule name
+			for (int j=0; j < ruleReferences.size(); j++) {
+				CompositeNode ruleReference = ruleReferences.get(j);
+				ReplaceEdit replaceEdit2 = new ReplaceEdit(ruleReference.getOffset(), ruleReference.getLength(), replaceRuleName);
+				multiEdit.addChild(replaceEdit2);
+				TextEditGroup editGroup2 = new TextEditGroup("reference renaming", replaceEdit);
+				fileChange.addTextEditGroup(editGroup2);
+				pm.worked(1);
+			}
+		}
+		
+		return compositeChange;
+		
+	}
+
+	// ----------------------------------------------------------------------------------------------------
+
+	@Override
+	public RefactoringParticipant[] loadParticipants(RefactoringStatus status,
+			SharableParticipants sharedParticipants) throws CoreException {
+		return null;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfAntlrTokenToAttributeMapper.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfAntlrTokenToAttributeMapper.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfAntlrTokenToAttributeMapper.java	(revision 5)
@@ -0,0 +1,43 @@
+package de.ugoe.cs.swe.bnftools.ui.syntaxcoloring;
+
+import org.eclipse.xtext.ui.editor.syntaxcoloring.antlr.DefaultAntlrTokenToAttributeIdMapper;
+
+public class EtsiBnfAntlrTokenToAttributeMapper extends
+		DefaultAntlrTokenToAttributeIdMapper {
+	String[] punctuation = new String[]{"::=", ";"};
+	String[] operators = new String[]{"|", "+"};
+	String[] parentheses = new String[]{"}", "{", "(", ")", "[", "]"};
+	
+	@Override
+	protected String calculateId(String tokenName, int tokenType) {
+		if (tokenName.contains("STRING")) {
+			return EtsiBnfHighlightingConfiguration.STRING_ID;
+		}
+		if (tokenName.contains("COLON")) {
+			return EtsiBnfHighlightingConfiguration.STRING_ID;
+		}
+		if (tokenName.contains("RULE_ID")) {
+			return EtsiBnfHighlightingConfiguration.ID_ID;
+		}
+		if (tokenName.contains("SECTIONHEADER")) {
+			return EtsiBnfHighlightingConfiguration.SECTIONHEADER_ID;
+		}
+		for (int i=0; i < punctuation.length; i++) {
+			if (tokenName.contains(punctuation[i]))
+				return EtsiBnfHighlightingConfiguration.PUNCTUATION_ID;
+		}
+		for (int i=0; i < operators.length; i++) {
+			if (tokenName.contains(operators[i]))
+				return EtsiBnfHighlightingConfiguration.OPERATOR_ID;
+		}
+		for (int i=0; i < parentheses.length; i++) {
+			if (tokenName.contains(parentheses[i]))
+				return EtsiBnfHighlightingConfiguration.PARENTHESES_ID;
+		}
+		if("RULE_ML_COMMENT".equals(tokenName) | "RULE_SL_COMMENT".equals(tokenName)) {
+			return EtsiBnfHighlightingConfiguration.COMMENT_ID;
+		}
+		return EtsiBnfHighlightingConfiguration.DEFAULT_ID;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfHighlightingConfiguration.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfHighlightingConfiguration.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfHighlightingConfiguration.java	(revision 5)
@@ -0,0 +1,87 @@
+package de.ugoe.cs.swe.bnftools.ui.syntaxcoloring;
+
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.RGB;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.DefaultHighlightingConfiguration;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightingConfigurationAcceptor;
+import org.eclipse.xtext.ui.editor.utils.TextStyle;
+
+public class EtsiBnfHighlightingConfiguration extends DefaultHighlightingConfiguration {
+
+	public static final String ID_ID = "Id";
+	public static final String CROSSREF_ID = "Crossreference";
+	public static final String OPERATOR_ID = "Operator";
+	public static final String PARENTHESES_ID = "Parentheses";
+	public static final String RULENAME_ID = "Rule Name";
+	public static final String TOKENRULE_ID = "Token Rule";
+	public static final String SECTIONHEADER_ID = "Section Header";
+
+	@Override
+	public void configure(IHighlightingConfigurationAcceptor acceptor) {
+		super.configure(acceptor);
+		acceptor.acceptDefaultHighlighting(ID_ID, "Rule Id", IdTextStyle());
+		acceptor.acceptDefaultHighlighting(OPERATOR_ID, "Operator", OperatorTextStyle());
+		acceptor.acceptDefaultHighlighting(PARENTHESES_ID, "Parentheses", ParenthesesTextStyle());
+		acceptor.acceptDefaultHighlighting(CROSSREF_ID, "Rule Crossreference", CrossreferenceTextStyle());
+		acceptor.acceptDefaultHighlighting(RULENAME_ID, "Rule Name", RuleNameTextStyle());
+		acceptor.acceptDefaultHighlighting(TOKENRULE_ID, "Token Rule", TokenRuleTextStyle());
+		acceptor.acceptDefaultHighlighting(SECTIONHEADER_ID, "SectionHeader", SectionHeaderTextStyle());
+	}
+
+	public TextStyle IdTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(60, 60, 60));
+		return textStyle;
+	}
+
+	public TextStyle RuleNameTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(60, 60, 60));
+		textStyle.setBackgroundColor(new RGB(200,255,200));
+		textStyle.setStyle(SWT.BOLD);
+		return textStyle;
+	}
+
+	public TextStyle TokenRuleTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(60, 60, 60));
+		textStyle.setBackgroundColor(new RGB(255,200,255));
+		textStyle.setStyle(SWT.BOLD);
+		return textStyle;
+	}
+
+	public TextStyle SectionHeaderTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(255, 255, 255));
+		textStyle.setBackgroundColor(new RGB(120,120,120));
+		textStyle.setStyle(SWT.BOLD);
+		return textStyle;
+	}
+
+	public TextStyle CrossreferenceTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(60, 60, 60));
+		textStyle.setStyle(SWT.ITALIC);
+		return textStyle;
+	}
+
+	public TextStyle OperatorTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(200, 100, 0));
+		return textStyle;
+	}
+
+	public TextStyle ParenthesesTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(255, 0, 255));
+		return textStyle;
+	}
+
+	public TextStyle punctuationTextStyle() {
+		TextStyle textStyle = new TextStyle();
+		textStyle.setColor(new RGB(255, 0, 0));
+		textStyle.setStyle(SWT.BOLD);
+		return textStyle;
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfSemanticHighlightingCalculator.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfSemanticHighlightingCalculator.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/syntaxcoloring/EtsiBnfSemanticHighlightingCalculator.java	(revision 5)
@@ -0,0 +1,57 @@
+package de.ugoe.cs.swe.bnftools.ui.syntaxcoloring;
+
+import org.eclipse.xtext.CrossReference;
+import org.eclipse.xtext.parsetree.AbstractNode;
+import org.eclipse.xtext.parsetree.LeafNode;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.IHighlightedPositionAcceptor;
+import org.eclipse.xtext.ui.editor.syntaxcoloring.ISemanticHighlightingCalculator;
+
+import de.ugoe.cs.swe.bnftools.analysis.EbnfAnalysisUtils;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+public class EtsiBnfSemanticHighlightingCalculator implements
+		ISemanticHighlightingCalculator {
+
+	public void provideHighlightingFor(XtextResource resource,
+			IHighlightedPositionAcceptor acceptor) {
+
+		if (resource == null)
+			return;
+
+		Iterable<AbstractNode> allNodes = NodeUtil.getAllContents(resource
+				.getParseResult().getRootNode());
+		
+		for (AbstractNode node : allNodes) {
+			if (node.getGrammarElement() instanceof CrossReference) {
+				acceptor.addPosition(node.getOffset(), node.getLength(),
+						EtsiBnfHighlightingConfiguration.CROSSREF_ID);
+			} else if (node.getElement() instanceof Rule) {
+				Rule rule = (Rule) node.getElement();
+				
+				int dividerPosition = 0;
+				for (int i = 0; i < node.getLeafNodes().size(); i++) {
+					LeafNode currentNode = node.getLeafNodes().get(i);
+					if (currentNode.getText().equals(rule.getName())) {
+						dividerPosition = currentNode.getOffset()
+								+ currentNode.getLength();
+						break;
+					}
+				}
+				int length = dividerPosition - node.getOffset();
+				if (length > 0) {
+					if (EbnfAnalysisUtils.isTokenRule(rule)) {
+						acceptor.addPosition(node.getOffset(), length,
+								EtsiBnfHighlightingConfiguration.TOKENRULE_ID);
+					} else {
+						acceptor.addPosition(node.getOffset(), length,
+								EtsiBnfHighlightingConfiguration.RULENAME_ID);
+					}
+				}
+			}
+		}
+
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/AlternativeFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/AlternativeFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/AlternativeFigure.java	(revision 5)
@@ -0,0 +1,33 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.ToolbarLayout;
+
+public class AlternativeFigure extends SyntaxDiagramFigure {
+
+	public AlternativeFigure() {
+		super();
+
+		ToolbarLayout layout = new ToolbarLayout();
+		setLayoutManager(layout);
+		
+		setBorder(new LineMarginBorder(10,40,15,40,0));
+	}
+
+	public void addSyntaxFigure(SyntaxDiagramFigure f) {
+		
+		PathFigure leftPath = new PathFigure();
+		leftPath.setTargetDecoration(null);
+		leftPath.setSourceAnchor(this.getLeftAnchor());
+		leftPath.setTargetAnchor(f.getLeftAnchor());
+		add(leftPath);
+
+		PathFigure rightPath = new PathFigure();
+//		rightPath.setTargetDecoration(null);
+		rightPath.setSourceAnchor(f.getRightAnchor());
+		rightPath.setTargetAnchor(this.getRightAnchor());
+		add(rightPath);
+		
+		add(f);
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/DragAndDropListener.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/DragAndDropListener.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/DragAndDropListener.java	(revision 5)
@@ -0,0 +1,32 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.MouseEvent;
+import org.eclipse.draw2d.MouseListener;
+import org.eclipse.draw2d.MouseMotionListener;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.draw2d.geometry.Point;
+
+public class DragAndDropListener extends MouseMotionListener.Stub implements
+		MouseListener {
+
+	Point start;
+
+	public void mousePressed(MouseEvent e) {
+		start = e.getLocation();		
+	}
+
+	public void mouseReleased(MouseEvent e) {
+	}
+
+	public void mouseDoubleClicked(MouseEvent e) {
+	}
+
+	public void mouseDragged(MouseEvent e) {
+		Point p = e.getLocation();
+		Dimension d = p.getDifference(start);
+		start = p;
+		Figure f = ((Figure) e.getSource());
+		f.setBounds(f.getBounds().getTranslated(d.width, d.height));
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/LineMarginBorder.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/LineMarginBorder.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/LineMarginBorder.java	(revision 5)
@@ -0,0 +1,45 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.Graphics;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.LineBorder;
+import org.eclipse.draw2d.geometry.Insets;
+
+public class LineMarginBorder extends LineBorder {
+	private Insets insets;
+	private int borderWidth;
+
+	public LineMarginBorder(int horizontal, int vertical, int borderWidth) {
+		super(borderWidth);
+		insets = new Insets(vertical, horizontal, vertical, horizontal);
+		this.borderWidth = borderWidth;
+	}
+
+	public LineMarginBorder(int top, int left, int bottom, int right,
+			int borderWidth) {
+		super(borderWidth);
+		insets = new Insets(top, left, bottom, right);
+		this.borderWidth = borderWidth;
+	}
+
+	public Insets getInsets(IFigure figure) {
+		return insets;
+	}
+
+	public void paint(IFigure figure, Graphics graphics, Insets insets) {
+		if (borderWidth > 0) {
+			tempRect.setBounds(getPaintRectangle(figure, insets));
+			if (getWidth() % 2 == 1) {
+				tempRect.width--;
+				tempRect.height--;
+			}
+			tempRect.shrink(getWidth() / 2, getWidth() / 2);
+			graphics.setLineWidth(getWidth());
+			graphics.setLineStyle(getStyle());
+			if (getColor() != null)
+				graphics.setForegroundColor(getColor());
+			graphics.drawRectangle(tempRect);
+		}
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/NonTerminalFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/NonTerminalFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/NonTerminalFigure.java	(revision 5)
@@ -0,0 +1,62 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RectangleFigure;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+
+public class NonTerminalFigure extends SyntaxDiagramFigure {
+	private String nonterminalString;
+
+	public NonTerminalFigure(String nonterminalString) {
+		super();
+		this.nonterminalString = nonterminalString;
+
+		SyntaxDiagramFigure innerFigure = new SyntaxDiagramFigure();
+		setBorder(new LineMarginBorder(0, 0, 0));
+		innerFigure.setLayoutManager(new StackLayout());
+
+	    FlowLayout layout = new FlowLayout();
+	    layout.setMajorAlignment(FlowLayout.ALIGN_CENTER);
+	    setLayoutManager(layout);	
+
+		RectangleFigure rectangle = new RectangleFigure();
+		rectangle.setAntialias(SWT.ON);
+		rectangle.setBackgroundColor(new Color(null, 220, 220, 220));
+		rectangle.setForegroundColor(new Color(null, 170, 170, 170));
+		innerFigure.add(rectangle);
+		
+		Label nonterminalStringLabel = new Label(this.nonterminalString);
+		nonterminalStringLabel.setForegroundColor(new Color(null, 200, 0, 0));
+		nonterminalStringLabel.setTextAlignment(PositionConstants.CENTER);
+		nonterminalStringLabel.setBorder(new MarginBorder(3,8,3,8));
+		innerFigure.add(nonterminalStringLabel);
+		
+		PathFigure leftPath = new PathFigure();
+		leftPath.setSourceAnchor(this.getLeftAnchor());
+		leftPath.setTargetAnchor(innerFigure.getLeftAnchor());
+
+		PathFigure rightPath = new PathFigure();
+		rightPath.setTargetDecoration(null);
+		rightPath.setSourceAnchor(innerFigure.getRightAnchor());
+		rightPath.setTargetAnchor(this.getRightAnchor());
+		
+		add(leftPath);
+		add(rightPath);
+		
+		add(innerFigure);
+	}
+
+	public String getTerminalString() {
+		return nonterminalString;
+	}
+
+	public void setTerminalString(String terminalString) {
+		this.nonterminalString = terminalString;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionFigure.java	(revision 5)
@@ -0,0 +1,93 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.BorderLayout;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+
+public class OptionFigure extends SyntaxDiagramFigure {
+
+	private BorderLayout layout;
+
+	public OptionFigure(SyntaxDiagramFigure optionFigure) {
+		super();
+
+		layout = new BorderLayout();
+		
+		setLayoutManager(layout);
+		addFigure(optionFigure);
+		setBorder(new LineMarginBorder(10,40,10,40,0));
+	}
+	
+	private void addFigure(SyntaxDiagramFigure f) {
+		SyntaxDiagramFigure upperContainer = new SyntaxDiagramFigure();
+		//upperContainer.setBorder(new LineBorder());
+		upperContainer.setPreferredSize(new Dimension(10,40));
+		ToolbarLayout loopLayout = new ToolbarLayout();
+		loopLayout.setStretchMinorAxis(false);
+		loopLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
+		loopLayout.setVertical(true);
+		upperContainer.setLayoutManager(loopLayout);
+		//upperContainer.setForegroundColor(ColorConstants.blue);
+		upperContainer.setVisible(true);
+		add(upperContainer, BorderLayout.TOP);
+		setLeftAnchor(new SideAnchor(this, upperContainer.getLeftAnchor(), SideAnchor.LEFT_SIDE));
+		setRightAnchor(new SideAnchor(this, upperContainer.getRightAnchor(), SideAnchor.RIGHT_SIDE));
+		layout.setConstraint(upperContainer, BorderLayout.TOP);
+
+		SyntaxDiagramFigure dummy = new SyntaxDiagramFigure();
+		//dummy.setBorder(new LineBorder());
+		dummy.setPreferredSize(-1, upperContainer.getPreferredSize().height);
+		dummy.setVisible(true);
+		upperContainer.add(dummy);
+
+		PathFigure upperGoThroughPath1 = new PathFigure();
+		upperGoThroughPath1.setSourceAnchor(upperContainer.getLeftAnchor());
+		upperGoThroughPath1.setTargetAnchor(dummy.getLeftAnchor());
+		upperContainer.add(upperGoThroughPath1);
+
+		PathFigure upperGoThroughPath2 = new PathFigure();
+		upperGoThroughPath2.setSourceAnchor(dummy.getRightAnchor());
+		upperGoThroughPath2.setTargetAnchor(upperContainer.getRightAnchor());
+		upperContainer.add(upperGoThroughPath2);
+
+		PathFigure upperGoThroughPath3 = new PathFigure();
+		upperGoThroughPath3.setTargetDecoration(null);
+		upperGoThroughPath3.setSourceAnchor(dummy.getRightAnchor());
+		upperGoThroughPath3.setTargetAnchor(this.getRightAnchor());
+		add(upperGoThroughPath3);
+
+		
+		SyntaxDiagramFigure centerContainer = new SyntaxDiagramFigure();
+		centerContainer.setLayoutManager(new ToolbarLayout());
+		centerContainer.setVisible(true);
+		add(centerContainer, BorderLayout.CENTER);
+		layout.setConstraint(centerContainer, BorderLayout.CENTER);
+
+//		PathFigure innerGoThroughPath = new PathFigure();
+//		innerGoThroughPath.setSourceAnchor(upperContainer.getLeftAnchor());
+//		innerGoThroughPath.setTargetAnchor(upperContainer.getRightAnchor());
+//		upperContainer.add(innerGoThroughPath);
+
+		PathFigure innerGoThroughPath2 = new PathFigure();
+//		innerGoThroughPath2.setTargetDecoration(null);
+		innerGoThroughPath2.setSourceAnchor(this.getLeftAnchor());
+		innerGoThroughPath2.setTargetAnchor(upperContainer.getLeftAnchor());
+		add(innerGoThroughPath2);
+
+		centerContainer.add(f);
+		
+		PathFigure leftPath = new PathFigure();
+		leftPath.setTargetDecoration(null);
+		leftPath.setSourceAnchor(this.getLeftAnchor());
+		leftPath.setTargetAnchor(f.getLeftAnchor());
+		add(leftPath);
+
+		PathFigure rightPath = new PathFigure();
+//		rightPath.setTargetDecoration(null);
+		rightPath.setSourceAnchor(f.getRightAnchor());
+		rightPath.setTargetAnchor(this.getRightAnchor());
+		add(rightPath);
+
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionRepetitionFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionRepetitionFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/OptionRepetitionFigure.java	(revision 5)
@@ -0,0 +1,30 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.ToolbarLayout;
+
+public class OptionRepetitionFigure extends SyntaxDiagramFigure {
+
+	public OptionRepetitionFigure(SyntaxDiagramFigure f) {
+		super();
+
+		setLayoutManager(new ToolbarLayout());
+
+		RepetitionFigure repetition = new RepetitionFigure(f);
+		OptionFigure optional = new OptionFigure(repetition);
+
+		add(optional);
+
+		PathFigure leftConnectionPath = new PathFigure();
+		leftConnectionPath.setSourceAnchor(this.getLeftAnchor());
+		leftConnectionPath.setTargetAnchor(optional.getLeftAnchor());
+		add(leftConnectionPath);
+
+		PathFigure rightConnectionPath = new PathFigure();
+		rightConnectionPath.setSourceAnchor(optional.getRightAnchor());
+		rightConnectionPath.setTargetAnchor(this.getRightAnchor());
+		add(rightConnectionPath);
+
+		setBorder(new LineMarginBorder(10, 40, 10, 40, 0));
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/PathFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/PathFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/PathFigure.java	(revision 5)
@@ -0,0 +1,11 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+import org.eclipse.draw2d.ManhattanConnectionRouter;
+import org.eclipse.draw2d.PolylineConnection;
+import org.eclipse.draw2d.PolylineDecoration;
+
+class PathFigure extends PolylineConnection {
+	public PathFigure() {
+		setTargetDecoration(new PolylineDecoration());
+		setConnectionRouter(new ManhattanConnectionRouter());
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/RepetitionFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/RepetitionFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/RepetitionFigure.java	(revision 5)
@@ -0,0 +1,90 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.BorderLayout;
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.LineBorder;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+
+public class RepetitionFigure extends SyntaxDiagramFigure {
+	
+	private BorderLayout layout;
+
+	public RepetitionFigure(SyntaxDiagramFigure repetitionFigure) {
+		layout = new BorderLayout();
+		
+		setLayoutManager(layout);
+		addFigure(repetitionFigure);
+		setBorder(new LineMarginBorder(10,40,10,40,0));
+	}
+
+	private void addFigure(SyntaxDiagramFigure f) {
+		SyntaxDiagramFigure upperContainer = new SyntaxDiagramFigure();
+		//upperContainer.setBorder(new LineBorder());
+		upperContainer.setLayoutManager(new ToolbarLayout());
+		upperContainer.setVisible(true);
+		add(upperContainer, BorderLayout.TOP);
+		setLeftAnchor(new SideAnchor(this, upperContainer.getLeftAnchor(), SideAnchor.LEFT_SIDE));
+		setRightAnchor(new SideAnchor(this, upperContainer.getRightAnchor(), SideAnchor.RIGHT_SIDE));
+		layout.setConstraint(upperContainer, BorderLayout.TOP);
+
+		SyntaxDiagramFigure centerContainer = new SyntaxDiagramFigure();
+		//centerContainer.setBorder(new LineBorder());
+		ToolbarLayout loopLayout = new ToolbarLayout();
+		loopLayout.setStretchMinorAxis(false);
+		loopLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
+		loopLayout.setVertical(true);
+		centerContainer.setLayoutManager(loopLayout);
+		centerContainer.setPreferredSize(new Dimension(50,40));
+		//centerContainer.setForegroundColor(new Color(null,new RGB(255,0,0)));
+		centerContainer.setVisible(true);
+		add(centerContainer, BorderLayout.CENTER);
+		layout.setConstraint(centerContainer, BorderLayout.CENTER);
+		
+		upperContainer.add(f);
+
+		PathFigure leftPath = new PathFigure();
+		leftPath.setTargetDecoration(null);
+		leftPath.setSourceAnchor(this.getLeftAnchor());
+		leftPath.setTargetAnchor(f.getLeftAnchor());
+		add(leftPath);
+
+		PathFigure rightPath = new PathFigure();
+		rightPath.setTargetDecoration(null);
+		rightPath.setSourceAnchor(f.getRightAnchor());
+		rightPath.setTargetAnchor(this.getRightAnchor());
+		add(rightPath);
+
+		PathFigure rightLoopPath = new PathFigure();
+		rightLoopPath.setSourceAnchor(upperContainer.getRightAnchor());
+		rightLoopPath.setTargetAnchor(centerContainer.getRightAnchor());
+		add(rightLoopPath);
+
+		PathFigure leftLoopPath = new PathFigure();
+		leftLoopPath.setSourceAnchor(centerContainer.getLeftAnchor());
+		leftLoopPath.setTargetAnchor(upperContainer.getLeftAnchor());
+		add(leftLoopPath);
+		
+		SyntaxDiagramFigure dummy = new SyntaxDiagramFigure();
+		dummy.setBorder(new LineBorder());
+		dummy.setForegroundColor(ColorConstants.blue);
+		dummy.setLeftAnchor(new SideAnchor(dummy, centerContainer.getLeftAnchor(),SideAnchor.LEFT_SIDE));
+		dummy.setRightAnchor(new SideAnchor(dummy, centerContainer.getRightAnchor(),SideAnchor.RIGHT_SIDE));
+		dummy.setPreferredSize(-1, centerContainer.getPreferredSize().height);
+		dummy.setVisible(true);
+		centerContainer.add(dummy, BorderLayout.CENTER);
+		
+		PathFigure leftMainLoopPath = new PathFigure();
+//		leftMainLoopPath.setTargetDecoration(null);
+		leftMainLoopPath.setSourceAnchor(centerContainer.getRightAnchor());
+		leftMainLoopPath.setTargetAnchor(dummy.getRightAnchor());
+		centerContainer.add(leftMainLoopPath);
+
+		PathFigure rightMainLoopPath = new PathFigure();
+//		rightMainLoopPath.setTargetDecoration(null);
+		rightMainLoopPath.setSourceAnchor(dummy.getLeftAnchor());
+		rightMainLoopPath.setTargetAnchor(centerContainer.getLeftAnchor());
+		centerContainer.add(rightMainLoopPath);
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SideAnchor.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SideAnchor.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SideAnchor.java	(revision 5)
@@ -0,0 +1,48 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+import org.eclipse.draw2d.AbstractConnectionAnchor;
+import org.eclipse.draw2d.IFigure;
+import org.eclipse.draw2d.geometry.Point;
+import org.eclipse.draw2d.geometry.PrecisionPoint;
+import org.eclipse.draw2d.geometry.Rectangle;
+
+class SideAnchor extends AbstractConnectionAnchor {
+
+	public static int LEFT_SIDE = 1;
+	public static int RIGHT_SIDE = 2;
+	private int side = LEFT_SIDE;
+	private SideAnchor heightRef = null;
+	
+	public SideAnchor(IFigure owner, int side) {
+		super(owner);
+		this.side = side;
+	}
+
+	public SideAnchor(IFigure owner, SideAnchor heightRef, int side) {
+		super(owner);
+		this.side = side;
+		this.heightRef = heightRef;
+	}
+	
+	public Point getLocation(Point loc) {
+		Rectangle r = getOwner().getBounds();
+		int x,y;
+		
+		if (side == SideAnchor.LEFT_SIDE) {
+			x = r.x ;
+			
+		} else {
+			x = r.x + r.width;
+		}
+		if (heightRef == null) {
+			y = r.y + r.height/2 ;
+		} else {
+			Rectangle heightBounds = heightRef.getOwner().getBounds();
+			y = heightBounds.y + heightBounds.height/2;
+		}
+
+		Point p = new PrecisionPoint(x, y);
+		getOwner().translateToAbsolute(p);
+
+		return p;
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagram.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagram.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagram.java	(revision 5)
@@ -0,0 +1,50 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.ToolbarLayout;
+
+public class SyntaxDiagram extends SyntaxDiagramFigure {
+	private SyntaxDiagramFigure lastFigure = null;
+
+	public SyntaxDiagram() {
+		ToolbarLayout contentsLayout = new ToolbarLayout();
+		contentsLayout.setSpacing(20);
+		contentsLayout.setVertical(false);
+		contentsLayout.setStretchMinorAxis(false);
+		contentsLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
+//		setForegroundColor(ColorConstants.darkGreen);
+//		setBorder(new LineBorder());
+		setLayoutManager(contentsLayout);
+		setBackgroundColor(ColorConstants.white);
+		setOpaque(true);
+	}
+
+	public void addSyntaxFigure(SyntaxDiagramFigure f) {
+		
+		if (lastFigure != null) {
+			PathFigure sequenceConnectionPath = new PathFigure();
+			sequenceConnectionPath.setTargetDecoration(null);
+			sequenceConnectionPath.setSourceAnchor(lastFigure.getRightAnchor());
+			sequenceConnectionPath.setTargetAnchor(f.getLeftAnchor());
+			add(sequenceConnectionPath);
+		} else {
+			PathFigure sequenceConnectionPath = new PathFigure();
+			sequenceConnectionPath.setTargetDecoration(null);
+			sequenceConnectionPath.setSourceAnchor(getLeftAnchor());
+			sequenceConnectionPath.setTargetAnchor(f.getLeftAnchor());
+			add(sequenceConnectionPath);
+		}
+		
+		add(f);
+		lastFigure  = f;
+	}
+	
+	public void finish() {
+		if (lastFigure != null) {
+			PathFigure sequenceConnectionPath = new PathFigure();
+			sequenceConnectionPath.setSourceAnchor(lastFigure.getRightAnchor());
+			sequenceConnectionPath.setTargetAnchor(getRightAnchor());
+			add(sequenceConnectionPath);
+		}
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramCreator.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramCreator.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramCreator.java	(revision 5)
@@ -0,0 +1,111 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+
+import de.ugoe.cs.swe.bnftools.ebnf.DefinitionList;
+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;
+
+public class SyntaxDiagramCreator {
+
+	private NodeAdapter node;
+
+	public SyntaxDiagramCreator(NodeAdapter node) {
+		this.node = node;
+	}
+	
+	public SyntaxDiagramFigure createSyntaxDiagram() {
+		if (node == null) 
+			return new SyntaxDiagramFigure();
+
+		EObject ruleRoot = (EObject) node.getParserNode().getElement();
+		
+		SyntaxDiagramFigure syntaxDiagramFigure = create(ruleRoot);
+		
+		return syntaxDiagramFigure;
+	}
+	
+	private SyntaxDiagramFigure create(EObject o) {
+		if (o instanceof Rule) {
+			SyntaxDiagramFigure f = create(o.eContents().get(0));
+			return f;
+		} else if (o instanceof DefinitionList) {
+			if (o.eContents().size() == 1) {
+				SyntaxDiagramFigure f = create(o.eContents().get(0));
+				return f;
+			} else {
+				AlternativeFigure af = new AlternativeFigure();
+				for (int i=0; i < o.eContents().size();i++) {
+					SyntaxDiagramFigure f = create(o.eContents().get(i));
+					if (f != null)
+						af.addSyntaxFigure(f);
+				}
+				return af;
+			}
+		} else if (o instanceof SingleDefinition) {
+			SyntaxDiagram outer = new SyntaxDiagram();
+			for (int i=0; i < o.eContents().size();i++) {
+				SyntaxDiagramFigure f = create(o.eContents().get(i));
+				if (f != null)
+					outer.addSyntaxFigure(f);
+			}
+			outer.finish();
+			return outer;
+		} else if (o instanceof GroupedSequence) {
+			SyntaxDiagram syntaxDiagram = new SyntaxDiagram();
+			for (int i=0; i < o.eContents().size();i++) {
+				SyntaxDiagramFigure f = create(o.eContents().get(i));
+				if (f != null)
+					syntaxDiagram.addSyntaxFigure(f);
+			}
+			return syntaxDiagram;
+		} else if (o instanceof OptionalSequence) {
+			SyntaxDiagram syntaxDiagram = new SyntaxDiagram();
+			for (int i=0; i < o.eContents().size();i++) {
+				SyntaxDiagramFigure f = create(o.eContents().get(i));
+				if (f != null)
+					syntaxDiagram.addSyntaxFigure(f);
+			}
+			OptionFigure af = new OptionFigure(syntaxDiagram);
+			syntaxDiagram.finish();
+			return af;
+		} else if (o instanceof RepeatedSequence) {
+			RepeatedSequence e = (RepeatedSequence) o;
+			SyntaxDiagram syntaxDiagram = new SyntaxDiagram();
+			for (int i=0; i < o.eContents().size();i++) {
+				SyntaxDiagramFigure f = create(o.eContents().get(i));
+				if (f != null)
+					syntaxDiagram.addSyntaxFigure(f);
+			}
+			if (e.isMorethanonce()) {
+				RepetitionFigure rf = new RepetitionFigure(syntaxDiagram);
+				syntaxDiagram.finish();
+				return rf;
+			} else {
+				OptionRepetitionFigure rf = new OptionRepetitionFigure(syntaxDiagram);
+				syntaxDiagram.finish();
+				return rf;
+			}
+		} else if (o instanceof de.ugoe.cs.swe.bnftools.ebnf.StringRule) {
+			de.ugoe.cs.swe.bnftools.ebnf.StringRule e = (de.ugoe.cs.swe.bnftools.ebnf.StringRule) o;
+			if (e.getColon() != null)
+				return new TerminalFigure(e.getColon());
+			else
+				return new TerminalFigure(e.getLiteral());
+			
+		} else if (o instanceof RuleReference) {
+			RuleReference e = (RuleReference) o;
+			return new NonTerminalFigure(e.getRuleref().getName());
+		} else {
+			return create(o.eContents().get(0));
+		}
+		
+//		return null;
+	}
+	
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramFigure.java	(revision 5)
@@ -0,0 +1,32 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.Figure;
+
+public class SyntaxDiagramFigure extends Figure {
+
+	SideAnchor leftAnchor = new SideAnchor(this, SideAnchor.LEFT_SIDE);
+	SideAnchor rightAnchor = new SideAnchor(this, SideAnchor.RIGHT_SIDE);
+
+	public SyntaxDiagramFigure() {
+		// DragAndDropListener dndListener = new DragAndDropListener();
+		// addMouseListener(dndListener);
+		// addMouseMotionListener(dndListener);
+	}
+	
+	public SideAnchor getLeftAnchor() {
+		return leftAnchor;
+	}
+
+	public void setLeftAnchor(SideAnchor leftAnchor) {
+		this.leftAnchor = leftAnchor;
+	}
+
+	public SideAnchor getRightAnchor() {
+		return rightAnchor;
+	}
+
+	public void setRightAnchor(SideAnchor rightAnchor) {
+		this.rightAnchor = rightAnchor;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramView.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramView.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/SyntaxDiagramView.java	(revision 5)
@@ -0,0 +1,114 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.ColorConstants;
+import org.eclipse.draw2d.Figure;
+import org.eclipse.draw2d.FigureCanvas;
+import org.eclipse.draw2d.LightweightSystem;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.ToolbarLayout;
+import org.eclipse.draw2d.Viewport;
+import org.eclipse.draw2d.geometry.Rectangle;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.FillLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.part.ViewPart;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import de.ugoe.cs.swe.bnftools.utils.Utils;
+
+public class SyntaxDiagramView extends ViewPart {
+
+	public static final String ID = "org.etsi.bnftools.views.syntaxdiagram.SyntaxDiagramView"; //$NON-NLS-1$
+
+	private FigureCanvas canvas;
+
+	public SyntaxDiagramView() {
+	}
+
+	public void createPartControl(Composite parent) {
+		Composite container = new Composite(parent, SWT.NONE);
+
+		container.setLayout(new FillLayout());
+		canvas = new FigureCanvas(container, SWT.V_SCROLL | SWT.H_SCROLL);
+		canvas.setViewport(new Viewport(true));
+		canvas.setScrollBarVisibility(FigureCanvas.ALWAYS);
+
+		createActions();
+		initializeToolBar();
+		initializeMenu();
+
+		getSite().getWorkbenchWindow().getSelectionService()
+				.addPostSelectionListener(new ISelectionListener() {
+					public void selectionChanged(IWorkbenchPart part,
+							ISelection selection) {
+						if (selection instanceof ITextSelection) {
+							IWorkbenchPage activePage = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+							if (activePage == null)
+								return;
+							IEditorPart activeEditor = activePage.getActiveEditor();
+							if (activeEditor == null)
+								return;
+							XtextEditor xtextEditor = (XtextEditor) activeEditor.getAdapter(XtextEditor.class);
+							
+							ITextSelection mySelection = (ITextSelection) selection;
+
+							if ((xtextEditor != null) && (mySelection != null)) {
+								NodeAdapter node = Utils.findNodeFromSelection(
+										xtextEditor, mySelection);
+								if (node != null)
+									draw(node);
+							}
+						}
+					}
+				});
+	}
+
+	public void draw(NodeAdapter node) {
+		Figure mainFigure = new Figure();
+		mainFigure.setBounds(new Rectangle(canvas.getBounds()));
+		ToolbarLayout mainLayout = new ToolbarLayout();
+		mainLayout.setStretchMinorAxis(false);
+		mainLayout.setMinorAlignment(ToolbarLayout.ALIGN_CENTER);
+		mainFigure.setLayoutManager(mainLayout);
+		mainFigure.setOpaque(true);
+		mainFigure.setBackgroundColor(ColorConstants.white);
+		mainFigure.setBorder(new MarginBorder(10));
+
+		canvas.setContents(mainFigure);
+
+		LightweightSystem lws = new LightweightSystem(canvas);
+		lws.setContents(canvas.getViewport());
+
+		SyntaxDiagramFigure newSyntaxDiagram = new SyntaxDiagramCreator(node).createSyntaxDiagram();
+		
+		mainFigure.add(newSyntaxDiagram);
+	}
+
+	private void createActions() {
+		// Create the actions
+	}
+
+	private void initializeToolBar() {
+		// IToolBarManager toolbarManager = getViewSite().getActionBars()
+		// .getToolBarManager();
+	}
+
+	private void initializeMenu() {
+		// IMenuManager menuManager = getViewSite().getActionBars()
+		// .getMenuManager();
+	}
+
+	@Override
+	public void setFocus() {
+		// Set the focus
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/TerminalFigure.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/TerminalFigure.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/ui/views/syntaxdiagram/TerminalFigure.java	(revision 5)
@@ -0,0 +1,64 @@
+package de.ugoe.cs.swe.bnftools.ui.views.syntaxdiagram;
+
+import org.eclipse.draw2d.FlowLayout;
+import org.eclipse.draw2d.Label;
+import org.eclipse.draw2d.MarginBorder;
+import org.eclipse.draw2d.PositionConstants;
+import org.eclipse.draw2d.RoundedRectangle;
+import org.eclipse.draw2d.StackLayout;
+import org.eclipse.draw2d.geometry.Dimension;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.graphics.Color;
+
+public class TerminalFigure extends SyntaxDiagramFigure {
+	private String terminalString;
+
+	public TerminalFigure(String terminalString) {
+		super();
+		this.terminalString = terminalString;
+
+		SyntaxDiagramFigure innerFigure = new SyntaxDiagramFigure();
+		setBorder(new LineMarginBorder(0, 0, 0));
+		innerFigure.setLayoutManager(new StackLayout());
+		
+	    FlowLayout layout = new FlowLayout();
+	    layout.setMajorAlignment(FlowLayout.ALIGN_CENTER);
+	    setLayoutManager(layout);	
+
+		RoundedRectangle rectangle = new RoundedRectangle();
+		rectangle.setAntialias(SWT.ON);
+		rectangle.setCornerDimensions(new Dimension(16,16));
+		rectangle.setBackgroundColor(new Color(null, 250, 210, 210));
+		rectangle.setForegroundColor(new Color(null, 250, 180, 180));
+		innerFigure.add(rectangle);
+
+		Label terminalStringLabel = new Label(this.terminalString);
+		terminalStringLabel.setForegroundColor(new Color(null, 0, 0, 200));
+		terminalStringLabel.setTextAlignment(PositionConstants.CENTER);
+		terminalStringLabel.setBorder(new MarginBorder(3,8,3,8));
+		innerFigure.add(terminalStringLabel);
+		
+		PathFigure leftPath = new PathFigure();
+		leftPath.setSourceAnchor(this.getLeftAnchor());
+		leftPath.setTargetAnchor(innerFigure.getLeftAnchor());
+
+		PathFigure rightPath = new PathFigure();
+		rightPath.setTargetDecoration(null);
+		rightPath.setSourceAnchor(innerFigure.getRightAnchor());
+		rightPath.setTargetAnchor(this.getRightAnchor());
+		
+		add(leftPath);
+		add(rightPath);
+		
+		add(innerFigure);
+	}
+
+	public String getTerminalString() {
+		return terminalString;
+	}
+
+	public void setTerminalString(String terminalString) {
+		this.terminalString = terminalString;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/DeclarationReferencesPair.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/DeclarationReferencesPair.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/DeclarationReferencesPair.java	(revision 5)
@@ -0,0 +1,32 @@
+package de.ugoe.cs.swe.bnftools.utils;
+
+import java.util.List;
+
+import org.eclipse.xtext.parsetree.CompositeNode;
+
+public class DeclarationReferencesPair {
+	private CompositeNode declarationNode;
+	private List<CompositeNode> referenceNodes;
+
+	public DeclarationReferencesPair(CompositeNode declarationNode, List<CompositeNode> references) {
+		this.declarationNode = declarationNode;
+		this.referenceNodes = references;
+	}
+	
+	public CompositeNode getDeclarationNode() {
+		return declarationNode;
+	}
+
+	public void setDeclarationNode(CompositeNode declarationNode) {
+		this.declarationNode = declarationNode;
+	}
+
+	public List<CompositeNode> getReferenceNodes() {
+		return referenceNodes;
+	}
+
+	public void setReferenceNodes(List<CompositeNode> referenceNodes) {
+		this.referenceNodes = referenceNodes;
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/EObjectSelectionResolver.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/EObjectSelectionResolver.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/EObjectSelectionResolver.java	(revision 5)
@@ -0,0 +1,54 @@
+package de.ugoe.cs.swe.bnftools.utils;
+
+import java.util.Iterator;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.util.EcoreUtil;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.xtext.resource.EObjectAtOffsetHelper;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.IResourceDescription;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+public class EObjectSelectionResolver implements
+		IUnitOfWork<IEObjectDescription, XtextResource> {
+	private final ITextSelection selection;
+	private IResourceDescriptions resourceDescriptions;
+
+	public EObjectSelectionResolver(ITextSelection selection,
+			IResourceDescriptions resourceDescriptions) {
+		this.selection = selection;
+		this.resourceDescriptions = resourceDescriptions;
+	}
+
+	public IEObjectDescription exec(XtextResource state) throws Exception {
+		EObject element = EObjectAtOffsetHelper.resolveElementAt(state,
+				selection.getOffset(), null);
+		if (element != null) {
+			final URI eObjectURI = EcoreUtil.getURI(element);
+			IResourceDescription resourceDescription = resourceDescriptions
+					.getResourceDescription(eObjectURI.trimFragment());
+			if (resourceDescription != null) {
+				Iterator<IEObjectDescription> eObjectDescriptions = Iterables
+						.filter(resourceDescription.getExportedObjects(),
+								new Predicate<IEObjectDescription>() {
+									public boolean apply(
+											IEObjectDescription input) {
+										return input.getEObjectURI().equals(
+												eObjectURI);
+									}
+								}).iterator();
+				if (eObjectDescriptions.hasNext()) {
+					return eObjectDescriptions.next();
+				}
+			}
+		}
+		return null;
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/RootEObjectFinder.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/RootEObjectFinder.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/RootEObjectFinder.java	(revision 5)
@@ -0,0 +1,15 @@
+package de.ugoe.cs.swe.bnftools.utils;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parser.IParseResult;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+public class RootEObjectFinder implements IUnitOfWork<EObject, XtextResource> {
+
+	public EObject exec(XtextResource state) throws Exception {
+		IParseResult parseResult = state.getParseResult();
+		return parseResult.getRootASTElement();
+	}
+
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/URIFragmentResolver.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/URIFragmentResolver.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/URIFragmentResolver.java	(revision 5)
@@ -0,0 +1,25 @@
+package de.ugoe.cs.swe.bnftools.utils;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+public class URIFragmentResolver implements
+		IUnitOfWork<CompositeNode, XtextResource> {
+	private String uriFragment;
+
+	public URIFragmentResolver(String uriFragment) {
+		this.uriFragment = uriFragment;
+	}
+
+	public CompositeNode exec(XtextResource state) throws Exception {
+		EObject o = state.getEObject(uriFragment);
+		NodeAdapter node = NodeUtil.getNodeAdapter(o);
+
+		return node.getParserNode();
+
+	}
+}
Index: trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java
===================================================================
--- trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java	(revision 5)
+++ trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src/de/ugoe/cs/swe/bnftools/utils/Utils.java	(revision 5)
@@ -0,0 +1,110 @@
+package de.ugoe.cs.swe.bnftools.utils;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.emf.common.util.EList;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.text.BadLocationException;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.xtext.builder.builderState.impl.ReferenceDescriptionImpl;
+import org.eclipse.xtext.parsetree.CompositeNode;
+import org.eclipse.xtext.parsetree.NodeAdapter;
+import org.eclipse.xtext.parsetree.NodeUtil;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.IReferenceDescription;
+import org.eclipse.xtext.resource.IResourceDescription;
+import org.eclipse.xtext.resource.IResourceDescriptions;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.ui.editor.model.IXtextDocument;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+import de.ugoe.cs.swe.bnftools.ebnf.EtsiBnf;
+import de.ugoe.cs.swe.bnftools.ebnf.Rule;
+
+public class Utils {
+	
+	static public NodeAdapter findNodeFromSelection(
+			final XtextEditor xtextEditor, ITextSelection mySelection) {
+		NodeAdapter node = null;
+		if ((xtextEditor == null) || (xtextEditor.getDocument() == null))
+			return null;
+		EtsiBnf root = (EtsiBnf) xtextEditor.getDocument().readOnly(
+				new RootEObjectFinder());
+		EList<Rule> rules = root.getRule();
+		for (int i = 0; i < rules.size(); i++) {
+			node = NodeUtil.getNodeAdapter(rules.get(i));
+			if ((node.getParserNode().getOffset() <= mySelection.getOffset())
+					&& (mySelection.getOffset() <= node.getParserNode()
+							.getOffset()
+							+ node.getParserNode().getLength())) {
+				return node;
+			}
+		}
+		return null;
+	}
+	
+	// --------------------------------------------------------------------------------
+
+	static public List<CompositeNode> findReferenceDescriptions(
+			final IEObjectDescription eObjectDescription, IResourceDescriptions resourceDescriptions, XtextEditor editor) {
+//TODO: resolved nur innerhalb derselben datei!
+		List<CompositeNode> references = new ArrayList<CompositeNode>();
+
+		for (IResourceDescription resourceDescription : resourceDescriptions
+				.getAllResourceDescriptions()) {
+			Iterable<IReferenceDescription> matchingReferenceDescriptors = Iterables
+					.filter(resourceDescription.getReferenceDescriptions(),
+							new Predicate<IReferenceDescription>() {
+								public boolean apply(IReferenceDescription input) {
+									return eObjectDescription
+											.getEObjectURI()
+											.equals(input.getTargetEObjectUri());
+								}
+							});
+			for (IReferenceDescription matchingReferenceDescription : matchingReferenceDescriptors) {
+//TODO: dieser check ignoriert links zu anderen dateien wg. exception
+				if ((matchingReferenceDescription instanceof org.eclipse.xtext.resource.impl.DefaultReferenceDescription) || (matchingReferenceDescription instanceof ReferenceDescriptionImpl)){
+					CompositeNode node = editor.getDocument().readOnly(
+							new URIFragmentResolver(matchingReferenceDescription
+									.getSourceEObjectUri().fragment()));
+					references.add(node);
+				}
+			}
+		}
+		return references;
+	}
+
+	// --------------------------------------------------------------------------------
+
+	static public List<CompositeNode> findReferences(EObject o, IResourceDescriptions resourceDescriptions, XtextEditor editor) {
+		final IEObjectDescription eObjectDescription = editor.getDocument()
+		.readOnly(new EObjectResolver(o, resourceDescriptions));
+
+		List<CompositeNode> referenceDescriptions = Utils.findReferenceDescriptions(eObjectDescription, resourceDescriptions, editor);
+		return referenceDescriptions;
+	}
+	
+	// --------------------------------------------------------------------------------
+
+	static public int stepBackNewlines(IXtextDocument document, int offset) {
+		if (offset <= 0)
+			return 0;
+		
+		try {
+			int tempOffset = offset;
+			String str = document.get(tempOffset-1, 1);
+			while (str.equals("\n") || str.equals("\r") || str.equals(" ")) {
+				tempOffset -= 1;
+				str = document.get(tempOffset-1, 1);
+			}
+			return offset - tempOffset;
+		} catch (BadLocationException e) {
+			e.printStackTrace();
+		}
+		return 0;
+	}
+
+}
