Index: v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java
===================================================================
--- v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 61)
+++ v2/trunk/de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnfParser.java	(revision 97)
@@ -19,12 +19,15 @@
 import java.util.List;
 import java.util.ArrayList;
-
+import java.util.Map;
+import java.util.HashMap;
 @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'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_SECTIONHEADER", "RULE_STRING", "RULE_INT", "RULE_LOGIC", "RULE_COLON", "RULE_WS", "RULE_SL_COMMENT", "RULE_ML_COMMENT", "')'", "']'", "'}'", "'|'", "'('", "'['", "'{'", "'*'", "'+'", "'grammar'", "';'", "'import'", "'/'", "'label:'", "'::='", "'.'", "'<-'", "'global'", "'combinator:'", "'rule'", "'hook'", "'#'", "','", "'/bnf'", "'/delta'", "'/merge'", "'core'", "'package'", "'update'"
     };
     public static final int RULE_ID=4;
+    public static final int T__40=40;
     public static final int RULE_SECTIONHEADER=5;
+    public static final int T__41=41;
     public static final int T__29=29;
     public static final int T__28=28;
@@ -72,4 +75,6 @@
         public InternalEbnfParser(TokenStream input, RecognizerSharedState state) {
             super(input, state);
+            this.state.ruleMemo = new HashMap[356+1];
+             
              
         }
@@ -101,27 +106,34 @@
 
     // $ANTLR start "entryRuleEtsiBnf"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:60:1: entryRuleEtsiBnf : ruleEtsiBnf EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:62:1: entryRuleEtsiBnf : ruleEtsiBnf EOF ;
     public final void entryRuleEtsiBnf() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:61:1: ( ruleEtsiBnf EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:62:1: ruleEtsiBnf EOF
-            {
-             before(grammarAccess.getEtsiBnfRule()); 
-            pushFollow(FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf61);
+        int entryRuleEtsiBnf_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 1) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:63:1: ( ruleEtsiBnf EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:64:1: ruleEtsiBnf EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfRule()); 
+            }
+            pushFollow(FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf74);
             ruleEtsiBnf();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleEtsiBnf68); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleEtsiBnf81); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 1, entryRuleEtsiBnf_StartIndex); }
         }
         return ;
@@ -131,41 +143,48 @@
 
     // $ANTLR start "ruleEtsiBnf"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:69:1: ruleEtsiBnf : ( ( rule__EtsiBnf__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:71:1: ruleEtsiBnf : ( ( rule__EtsiBnf__Alternatives ) ) ;
     public final void ruleEtsiBnf() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:73:2: ( ( ( rule__EtsiBnf__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:74:1: ( ( rule__EtsiBnf__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:74:1: ( ( rule__EtsiBnf__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:75:1: ( rule__EtsiBnf__Alternatives )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:76:1: ( rule__EtsiBnf__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:76:2: rule__EtsiBnf__Alternatives
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf94);
+        int ruleEtsiBnf_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 2) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:75:2: ( ( ( 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 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:76:1: ( ( rule__EtsiBnf__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:77:1: ( rule__EtsiBnf__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:78:1: ( rule__EtsiBnf__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:78:2: rule__EtsiBnf__Alternatives
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf107);
             rule__EtsiBnf__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 2, ruleEtsiBnf_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -178,27 +197,34 @@
 
     // $ANTLR start "entryRuleImportSection"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:88:1: entryRuleImportSection : ruleImportSection EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:90:1: entryRuleImportSection : ruleImportSection EOF ;
     public final void entryRuleImportSection() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:89:1: ( ruleImportSection EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:90:1: ruleImportSection EOF
-            {
-             before(grammarAccess.getImportSectionRule()); 
-            pushFollow(FOLLOW_ruleImportSection_in_entryRuleImportSection121);
+        int entryRuleImportSection_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 3) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:91:1: ( ruleImportSection EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:92:1: ruleImportSection EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportSectionRule()); 
+            }
+            pushFollow(FOLLOW_ruleImportSection_in_entryRuleImportSection134);
             ruleImportSection();
 
             state._fsp--;
-
-             after(grammarAccess.getImportSectionRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleImportSection128); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportSectionRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImportSection141); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 3, entryRuleImportSection_StartIndex); }
         }
         return ;
@@ -208,40 +234,48 @@
 
     // $ANTLR start "ruleImportSection"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:97:1: ruleImportSection : ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:99:1: ruleImportSection : ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) ;
     public final void ruleImportSection() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:101:2: ( ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:102:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:102:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:103:1: ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:103:1: ( ( rule__ImportSection__ImportsAssignment ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:104:1: ( rule__ImportSection__ImportsAssignment )
-            {
-             before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:1: ( rule__ImportSection__ImportsAssignment )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:2: rule__ImportSection__ImportsAssignment
-            {
-            pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection156);
+        int ruleImportSection_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 4) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:103:2: ( ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:104:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:104:1: ( ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:1: ( ( rule__ImportSection__ImportsAssignment ) ) ( ( rule__ImportSection__ImportsAssignment )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:105:1: ( ( rule__ImportSection__ImportsAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:106:1: ( rule__ImportSection__ImportsAssignment )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:107:1: ( rule__ImportSection__ImportsAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:107:2: rule__ImportSection__ImportsAssignment
+            {
+            pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection169);
             rule__ImportSection__ImportsAssignment();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
-
-            }
-
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:108:1: ( ( rule__ImportSection__ImportsAssignment )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:109:1: ( rule__ImportSection__ImportsAssignment )*
-            {
-             before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:110:1: ( rule__ImportSection__ImportsAssignment )*
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            }
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:110:1: ( ( rule__ImportSection__ImportsAssignment )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:111:1: ( rule__ImportSection__ImportsAssignment )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:112:1: ( rule__ImportSection__ImportsAssignment )*
             loop1:
             do {
@@ -256,11 +290,11 @@
                 switch (alt1) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:110:2: rule__ImportSection__ImportsAssignment
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:112:2: rule__ImportSection__ImportsAssignment
             	    {
-            	    pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection168);
+            	    pushFollow(FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection181);
             	    rule__ImportSection__ImportsAssignment();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -272,20 +306,23 @@
             } while (true);
 
-             after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportSectionAccess().getImportsAssignment()); 
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 4, ruleImportSection_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -298,27 +335,34 @@
 
     // $ANTLR start "entryRuleBnfEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:123:1: entryRuleBnfEntry : ruleBnfEntry EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:125:1: entryRuleBnfEntry : ruleBnfEntry EOF ;
     public final void entryRuleBnfEntry() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:124:1: ( ruleBnfEntry EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:125:1: ruleBnfEntry EOF
-            {
-             before(grammarAccess.getBnfEntryRule()); 
-            pushFollow(FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry198);
+        int entryRuleBnfEntry_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 5) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:126:1: ( ruleBnfEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:127:1: ruleBnfEntry EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getBnfEntryRule()); 
+            }
+            pushFollow(FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry211);
             ruleBnfEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getBnfEntryRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleBnfEntry205); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getBnfEntryRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleBnfEntry218); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 5, entryRuleBnfEntry_StartIndex); }
         }
         return ;
@@ -328,41 +372,48 @@
 
     // $ANTLR start "ruleBnfEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:132:1: ruleBnfEntry : ( ( rule__BnfEntry__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:134:1: ruleBnfEntry : ( ( rule__BnfEntry__Alternatives ) ) ;
     public final void ruleBnfEntry() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:136:2: ( ( ( rule__BnfEntry__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:137:1: ( ( rule__BnfEntry__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:137:1: ( ( rule__BnfEntry__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:138:1: ( rule__BnfEntry__Alternatives )
-            {
-             before(grammarAccess.getBnfEntryAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:1: ( rule__BnfEntry__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:2: rule__BnfEntry__Alternatives
-            {
-            pushFollow(FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry231);
+        int ruleBnfEntry_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:138:2: ( ( ( rule__BnfEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:1: ( ( rule__BnfEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:139:1: ( ( rule__BnfEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:140:1: ( rule__BnfEntry__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getBnfEntryAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:141:1: ( rule__BnfEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:141:2: rule__BnfEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry244);
             rule__BnfEntry__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getBnfEntryAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getBnfEntryAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 6, ruleBnfEntry_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -375,27 +426,34 @@
 
     // $ANTLR start "entryRuleDeltaEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:151:1: entryRuleDeltaEntry : ruleDeltaEntry EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:153:1: entryRuleDeltaEntry : ruleDeltaEntry EOF ;
     public final void entryRuleDeltaEntry() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:152:1: ( ruleDeltaEntry EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:153:1: ruleDeltaEntry EOF
-            {
-             before(grammarAccess.getDeltaEntryRule()); 
-            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry258);
+        int entryRuleDeltaEntry_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:154:1: ( ruleDeltaEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:155:1: ruleDeltaEntry EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDeltaEntryRule()); 
+            }
+            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry271);
             ruleDeltaEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getDeltaEntryRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry265); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDeltaEntryRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry278); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 7, entryRuleDeltaEntry_StartIndex); }
         }
         return ;
@@ -405,41 +463,48 @@
 
     // $ANTLR start "ruleDeltaEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:160:1: ruleDeltaEntry : ( ( rule__DeltaEntry__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:162:1: ruleDeltaEntry : ( ( rule__DeltaEntry__Alternatives ) ) ;
     public final void ruleDeltaEntry() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:164:2: ( ( ( rule__DeltaEntry__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:165:1: ( ( rule__DeltaEntry__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:165:1: ( ( rule__DeltaEntry__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:166:1: ( rule__DeltaEntry__Alternatives )
-            {
-             before(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:1: ( rule__DeltaEntry__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:2: rule__DeltaEntry__Alternatives
-            {
-            pushFollow(FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry291);
+        int ruleDeltaEntry_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:166:2: ( ( ( rule__DeltaEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:1: ( ( rule__DeltaEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:167:1: ( ( rule__DeltaEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:168:1: ( rule__DeltaEntry__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:169:1: ( rule__DeltaEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:169:2: rule__DeltaEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry304);
             rule__DeltaEntry__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDeltaEntryAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 8, ruleDeltaEntry_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -452,27 +517,34 @@
 
     // $ANTLR start "entryRuleMergeEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:179:1: entryRuleMergeEntry : ruleMergeEntry EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:181:1: entryRuleMergeEntry : ruleMergeEntry EOF ;
     public final void entryRuleMergeEntry() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:180:1: ( ruleMergeEntry EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:181:1: ruleMergeEntry EOF
-            {
-             before(grammarAccess.getMergeEntryRule()); 
-            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry318);
+        int entryRuleMergeEntry_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:182:1: ( ruleMergeEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:183:1: ruleMergeEntry EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeEntryRule()); 
+            }
+            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry331);
             ruleMergeEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getMergeEntryRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry325); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeEntryRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry338); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 9, entryRuleMergeEntry_StartIndex); }
         }
         return ;
@@ -482,41 +554,48 @@
 
     // $ANTLR start "ruleMergeEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:188:1: ruleMergeEntry : ( ( rule__MergeEntry__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:190:1: ruleMergeEntry : ( ( rule__MergeEntry__Alternatives ) ) ;
     public final void ruleMergeEntry() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:192:2: ( ( ( rule__MergeEntry__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:193:1: ( ( rule__MergeEntry__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:193:1: ( ( rule__MergeEntry__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:194:1: ( rule__MergeEntry__Alternatives )
-            {
-             before(grammarAccess.getMergeEntryAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:1: ( rule__MergeEntry__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:2: rule__MergeEntry__Alternatives
-            {
-            pushFollow(FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry351);
+        int ruleMergeEntry_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:194:2: ( ( ( rule__MergeEntry__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:1: ( ( rule__MergeEntry__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:195:1: ( ( rule__MergeEntry__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:196:1: ( rule__MergeEntry__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeEntryAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:197:1: ( rule__MergeEntry__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:197:2: rule__MergeEntry__Alternatives
+            {
+            pushFollow(FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry364);
             rule__MergeEntry__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getMergeEntryAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeEntryAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 10, ruleMergeEntry_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -529,27 +608,34 @@
 
     // $ANTLR start "entryRuleSectionHeading"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:207:1: entryRuleSectionHeading : ruleSectionHeading EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:209:1: entryRuleSectionHeading : ruleSectionHeading EOF ;
     public final void entryRuleSectionHeading() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:208:1: ( ruleSectionHeading EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:209:1: ruleSectionHeading EOF
-            {
-             before(grammarAccess.getSectionHeadingRule()); 
-            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading378);
+        int entryRuleSectionHeading_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:210:1: ( ruleSectionHeading EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:211:1: ruleSectionHeading EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSectionHeadingRule()); 
+            }
+            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading391);
             ruleSectionHeading();
 
             state._fsp--;
-
-             after(grammarAccess.getSectionHeadingRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading385); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSectionHeadingRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading398); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 11, entryRuleSectionHeading_StartIndex); }
         }
         return ;
@@ -559,41 +645,48 @@
 
     // $ANTLR start "ruleSectionHeading"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:216:1: ruleSectionHeading : ( ( rule__SectionHeading__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:218:1: ruleSectionHeading : ( ( rule__SectionHeading__Group__0 ) ) ;
     public final void ruleSectionHeading() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:220:2: ( ( ( rule__SectionHeading__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:221:1: ( ( rule__SectionHeading__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:221:1: ( ( rule__SectionHeading__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:222:1: ( rule__SectionHeading__Group__0 )
-            {
-             before(grammarAccess.getSectionHeadingAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:223:1: ( rule__SectionHeading__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:223:2: rule__SectionHeading__Group__0
-            {
-            pushFollow(FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading411);
+        int ruleSectionHeading_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:222: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:223:1: ( ( rule__SectionHeading__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:223: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:224:1: ( rule__SectionHeading__Group__0 )
+            {
+            if ( state.backtracking==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:225: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:225:2: rule__SectionHeading__Group__0
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading424);
             rule__SectionHeading__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getSectionHeadingAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSectionHeadingAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 12, ruleSectionHeading_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -606,27 +699,34 @@
 
     // $ANTLR start "entryRuleImport"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:235:1: entryRuleImport : ruleImport EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:237:1: entryRuleImport : ruleImport EOF ;
     public final void entryRuleImport() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:236:1: ( ruleImport EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:237:1: ruleImport EOF
-            {
-             before(grammarAccess.getImportRule()); 
-            pushFollow(FOLLOW_ruleImport_in_entryRuleImport438);
+        int entryRuleImport_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 13) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:238:1: ( ruleImport EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:239:1: ruleImport EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportRule()); 
+            }
+            pushFollow(FOLLOW_ruleImport_in_entryRuleImport451);
             ruleImport();
 
             state._fsp--;
-
-             after(grammarAccess.getImportRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleImport445); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImport458); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 13, entryRuleImport_StartIndex); }
         }
         return ;
@@ -636,41 +736,48 @@
 
     // $ANTLR start "ruleImport"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:244:1: ruleImport : ( ( rule__Import__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:246:1: ruleImport : ( ( rule__Import__Group__0 ) ) ;
     public final void ruleImport() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:248:2: ( ( ( rule__Import__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:249:1: ( ( rule__Import__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:249:1: ( ( rule__Import__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:250:1: ( rule__Import__Group__0 )
-            {
-             before(grammarAccess.getImportAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:251:1: ( rule__Import__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:251:2: rule__Import__Group__0
-            {
-            pushFollow(FOLLOW_rule__Import__Group__0_in_ruleImport471);
+        int ruleImport_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:250: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:251:1: ( ( rule__Import__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:251: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:252:1: ( rule__Import__Group__0 )
+            {
+            if ( state.backtracking==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:253: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:253:2: rule__Import__Group__0
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0_in_ruleImport484);
             rule__Import__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getImportAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 14, ruleImport_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -683,27 +790,34 @@
 
     // $ANTLR start "entryRuleRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:263:1: entryRuleRule : ruleRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:265:1: entryRuleRule : ruleRule EOF ;
     public final void entryRuleRule() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:264:1: ( ruleRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:265:1: ruleRule EOF
-            {
-             before(grammarAccess.getRuleRule()); 
-            pushFollow(FOLLOW_ruleRule_in_entryRuleRule498);
+        int entryRuleRule_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:266:1: ( ruleRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:267:1: ruleRule EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleRule()); 
+            }
+            pushFollow(FOLLOW_ruleRule_in_entryRuleRule511);
             ruleRule();
 
             state._fsp--;
-
-             after(grammarAccess.getRuleRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRule505); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRule518); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 15, entryRuleRule_StartIndex); }
         }
         return ;
@@ -713,41 +827,48 @@
 
     // $ANTLR start "ruleRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:272:1: ruleRule : ( ( rule__Rule__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:274:1: ruleRule : ( ( rule__Rule__Group__0 ) ) ;
     public final void ruleRule() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:276:2: ( ( ( rule__Rule__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:277:1: ( ( rule__Rule__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:277:1: ( ( rule__Rule__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:278:1: ( rule__Rule__Group__0 )
-            {
-             before(grammarAccess.getRuleAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:279:1: ( rule__Rule__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:279:2: rule__Rule__Group__0
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__0_in_ruleRule531);
+        int ruleRule_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:278: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:279:1: ( ( rule__Rule__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:279: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:280:1: ( rule__Rule__Group__0 )
+            {
+            if ( state.backtracking==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:281: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:281:2: rule__Rule__Group__0
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0_in_ruleRule544);
             rule__Rule__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 16, ruleRule_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -760,27 +881,34 @@
 
     // $ANTLR start "entryRuleExtRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:291:1: entryRuleExtRule : ruleExtRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:293:1: entryRuleExtRule : ruleExtRule EOF ;
     public final void entryRuleExtRule() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:292:1: ( ruleExtRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:293:1: ruleExtRule EOF
-            {
-             before(grammarAccess.getExtRuleRule()); 
-            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule558);
+        int entryRuleExtRule_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:294:1: ( ruleExtRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:295:1: ruleExtRule EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleRule()); 
+            }
+            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule571);
             ruleExtRule();
 
             state._fsp--;
-
-             after(grammarAccess.getExtRuleRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule565); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule578); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 17, entryRuleExtRule_StartIndex); }
         }
         return ;
@@ -790,41 +918,48 @@
 
     // $ANTLR start "ruleExtRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:300:1: ruleExtRule : ( ( rule__ExtRule__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:302:1: ruleExtRule : ( ( rule__ExtRule__Group__0 ) ) ;
     public final void ruleExtRule() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:304:2: ( ( ( rule__ExtRule__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:305:1: ( ( rule__ExtRule__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:305:1: ( ( rule__ExtRule__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:306:1: ( rule__ExtRule__Group__0 )
-            {
-             before(grammarAccess.getExtRuleAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:307:1: ( rule__ExtRule__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:307:2: rule__ExtRule__Group__0
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule591);
+        int ruleExtRule_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:306: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:307:1: ( ( rule__ExtRule__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:307: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:308:1: ( rule__ExtRule__Group__0 )
+            {
+            if ( state.backtracking==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:309: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:309:2: rule__ExtRule__Group__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule604);
             rule__ExtRule__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 18, ruleExtRule_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -837,27 +972,34 @@
 
     // $ANTLR start "entryRuleMergeRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:319:1: entryRuleMergeRule : ruleMergeRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:321:1: entryRuleMergeRule : ruleMergeRule EOF ;
     public final void entryRuleMergeRule() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:320:1: ( ruleMergeRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:321:1: ruleMergeRule EOF
-            {
-             before(grammarAccess.getMergeRuleRule()); 
-            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule618);
+        int entryRuleMergeRule_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:322:1: ( ruleMergeRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:323:1: ruleMergeRule EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeRuleRule()); 
+            }
+            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule631);
             ruleMergeRule();
 
             state._fsp--;
-
-             after(grammarAccess.getMergeRuleRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule625); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeRuleRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule638); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 19, entryRuleMergeRule_StartIndex); }
         }
         return ;
@@ -867,41 +1009,48 @@
 
     // $ANTLR start "ruleMergeRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:328:1: ruleMergeRule : ( ( rule__MergeRule__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:330:1: ruleMergeRule : ( ( rule__MergeRule__Alternatives ) ) ;
     public final void ruleMergeRule() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:332:2: ( ( ( rule__MergeRule__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:333:1: ( ( rule__MergeRule__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:333:1: ( ( rule__MergeRule__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:334:1: ( rule__MergeRule__Alternatives )
-            {
-             before(grammarAccess.getMergeRuleAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:1: ( rule__MergeRule__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:2: rule__MergeRule__Alternatives
-            {
-            pushFollow(FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule651);
+        int ruleMergeRule_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:334:2: ( ( ( rule__MergeRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:1: ( ( rule__MergeRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:335:1: ( ( rule__MergeRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:336:1: ( rule__MergeRule__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeRuleAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:337:1: ( rule__MergeRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:337:2: rule__MergeRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule664);
             rule__MergeRule__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getMergeRuleAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeRuleAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 20, ruleMergeRule_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -914,27 +1063,34 @@
 
     // $ANTLR start "entryRuleGlobalCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:347:1: entryRuleGlobalCombinator : ruleGlobalCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:349:1: entryRuleGlobalCombinator : ruleGlobalCombinator EOF ;
     public final void entryRuleGlobalCombinator() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:348:1: ( ruleGlobalCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:349:1: ruleGlobalCombinator EOF
-            {
-             before(grammarAccess.getGlobalCombinatorRule()); 
-            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator678);
+        int entryRuleGlobalCombinator_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:350:1: ( ruleGlobalCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:351:1: ruleGlobalCombinator EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGlobalCombinatorRule()); 
+            }
+            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator691);
             ruleGlobalCombinator();
 
             state._fsp--;
-
-             after(grammarAccess.getGlobalCombinatorRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator685); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator698); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 21, entryRuleGlobalCombinator_StartIndex); }
         }
         return ;
@@ -944,41 +1100,48 @@
 
     // $ANTLR start "ruleGlobalCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:356:1: ruleGlobalCombinator : ( ( rule__GlobalCombinator__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:358:1: ruleGlobalCombinator : ( ( rule__GlobalCombinator__Group__0 ) ) ;
     public final void ruleGlobalCombinator() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:360:2: ( ( ( rule__GlobalCombinator__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:361:1: ( ( rule__GlobalCombinator__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:361:1: ( ( rule__GlobalCombinator__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:362:1: ( rule__GlobalCombinator__Group__0 )
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:363:1: ( rule__GlobalCombinator__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:363:2: rule__GlobalCombinator__Group__0
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator711);
+        int ruleGlobalCombinator_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:362: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:363:1: ( ( rule__GlobalCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:363: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:364:1: ( rule__GlobalCombinator__Group__0 )
+            {
+            if ( state.backtracking==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:365: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:365:2: rule__GlobalCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator724);
             rule__GlobalCombinator__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getGlobalCombinatorAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 22, ruleGlobalCombinator_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -991,27 +1154,34 @@
 
     // $ANTLR start "entryRuleRuleCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:375:1: entryRuleRuleCombinator : ruleRuleCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:377:1: entryRuleRuleCombinator : ruleRuleCombinator EOF ;
     public final void entryRuleRuleCombinator() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:376:1: ( ruleRuleCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:377:1: ruleRuleCombinator EOF
-            {
-             before(grammarAccess.getRuleCombinatorRule()); 
-            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator738);
+        int entryRuleRuleCombinator_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:378:1: ( ruleRuleCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:379:1: ruleRuleCombinator EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorRule()); 
+            }
+            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator751);
             ruleRuleCombinator();
 
             state._fsp--;
-
-             after(grammarAccess.getRuleCombinatorRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator745); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator758); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 23, entryRuleRuleCombinator_StartIndex); }
         }
         return ;
@@ -1021,41 +1191,48 @@
 
     // $ANTLR start "ruleRuleCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:384:1: ruleRuleCombinator : ( ( rule__RuleCombinator__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:386:1: ruleRuleCombinator : ( ( rule__RuleCombinator__Group__0 ) ) ;
     public final void ruleRuleCombinator() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:388:2: ( ( ( rule__RuleCombinator__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:389:1: ( ( rule__RuleCombinator__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:389:1: ( ( rule__RuleCombinator__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:390:1: ( rule__RuleCombinator__Group__0 )
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391:1: ( rule__RuleCombinator__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391:2: rule__RuleCombinator__Group__0
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator771);
+        int ruleRuleCombinator_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:390: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:391:1: ( ( rule__RuleCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:391: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:392:1: ( rule__RuleCombinator__Group__0 )
+            {
+            if ( state.backtracking==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:393: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:393:2: rule__RuleCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator784);
             rule__RuleCombinator__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleCombinatorAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 24, ruleRuleCombinator_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1068,27 +1245,34 @@
 
     // $ANTLR start "entryRuleHookCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:403:1: entryRuleHookCombinator : ruleHookCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:405:1: entryRuleHookCombinator : ruleHookCombinator EOF ;
     public final void entryRuleHookCombinator() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:404:1: ( ruleHookCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:405:1: ruleHookCombinator EOF
-            {
-             before(grammarAccess.getHookCombinatorRule()); 
-            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator798);
+        int entryRuleHookCombinator_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:406:1: ( ruleHookCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:407:1: ruleHookCombinator EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorRule()); 
+            }
+            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator811);
             ruleHookCombinator();
 
             state._fsp--;
-
-             after(grammarAccess.getHookCombinatorRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator805); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator818); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 25, entryRuleHookCombinator_StartIndex); }
         }
         return ;
@@ -1098,41 +1282,48 @@
 
     // $ANTLR start "ruleHookCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:412:1: ruleHookCombinator : ( ( rule__HookCombinator__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:414:1: ruleHookCombinator : ( ( rule__HookCombinator__Group__0 ) ) ;
     public final void ruleHookCombinator() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:416:2: ( ( ( rule__HookCombinator__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:417:1: ( ( rule__HookCombinator__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:417:1: ( ( rule__HookCombinator__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:418:1: ( rule__HookCombinator__Group__0 )
-            {
-             before(grammarAccess.getHookCombinatorAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419:1: ( rule__HookCombinator__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419:2: rule__HookCombinator__Group__0
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator831);
+        int ruleHookCombinator_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:418: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:419:1: ( ( rule__HookCombinator__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:419: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:420:1: ( rule__HookCombinator__Group__0 )
+            {
+            if ( state.backtracking==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:421: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:421:2: rule__HookCombinator__Group__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator844);
             rule__HookCombinator__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getHookCombinatorAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 26, ruleHookCombinator_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1145,27 +1336,34 @@
 
     // $ANTLR start "entryRuleDefinitionList"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:431:1: entryRuleDefinitionList : ruleDefinitionList EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:433:1: entryRuleDefinitionList : ruleDefinitionList EOF ;
     public final void entryRuleDefinitionList() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:432:1: ( ruleDefinitionList EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:433:1: ruleDefinitionList EOF
-            {
-             before(grammarAccess.getDefinitionListRule()); 
-            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList858);
+        int entryRuleDefinitionList_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:434:1: ( ruleDefinitionList EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:435:1: ruleDefinitionList EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDefinitionListRule()); 
+            }
+            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList871);
             ruleDefinitionList();
 
             state._fsp--;
-
-             after(grammarAccess.getDefinitionListRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList865); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList878); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 27, entryRuleDefinitionList_StartIndex); }
         }
         return ;
@@ -1175,41 +1373,48 @@
 
     // $ANTLR start "ruleDefinitionList"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:440:1: ruleDefinitionList : ( ( rule__DefinitionList__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:442:1: ruleDefinitionList : ( ( rule__DefinitionList__Group__0 ) ) ;
     public final void ruleDefinitionList() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:444:2: ( ( ( rule__DefinitionList__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:445:1: ( ( rule__DefinitionList__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:445:1: ( ( rule__DefinitionList__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:446:1: ( rule__DefinitionList__Group__0 )
-            {
-             before(grammarAccess.getDefinitionListAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447:1: ( rule__DefinitionList__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447:2: rule__DefinitionList__Group__0
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList891);
+        int ruleDefinitionList_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:446: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:447:1: ( ( rule__DefinitionList__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:447: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:448:1: ( rule__DefinitionList__Group__0 )
+            {
+            if ( state.backtracking==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:449: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:449:2: rule__DefinitionList__Group__0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList904);
             rule__DefinitionList__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getDefinitionListAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 28, ruleDefinitionList_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1222,27 +1427,34 @@
 
     // $ANTLR start "entryRuleSingleDefinition"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:459:1: entryRuleSingleDefinition : ruleSingleDefinition EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:461:1: entryRuleSingleDefinition : ruleSingleDefinition EOF ;
     public final void entryRuleSingleDefinition() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:460:1: ( ruleSingleDefinition EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:461:1: ruleSingleDefinition EOF
-            {
-             before(grammarAccess.getSingleDefinitionRule()); 
-            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition918);
+        int entryRuleSingleDefinition_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:462:1: ( ruleSingleDefinition EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:463:1: ruleSingleDefinition EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSingleDefinitionRule()); 
+            }
+            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition931);
             ruleSingleDefinition();
 
             state._fsp--;
-
-             after(grammarAccess.getSingleDefinitionRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition925); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSingleDefinitionRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition938); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 29, entryRuleSingleDefinition_StartIndex); }
         }
         return ;
@@ -1252,40 +1464,48 @@
 
     // $ANTLR start "ruleSingleDefinition"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:468:1: ruleSingleDefinition : ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:470:1: ruleSingleDefinition : ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) ) ;
     public final void ruleSingleDefinition() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:472:2: ( ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:473:1: ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:473:1: ( ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__SingleDefinition__TermsAssignment ) ) ( ( rule__SingleDefinition__TermsAssignment )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474:1: ( ( rule__SingleDefinition__TermsAssignment ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:475:1: ( rule__SingleDefinition__TermsAssignment )
-            {
-             before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:476:1: ( rule__SingleDefinition__TermsAssignment )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:476:2: rule__SingleDefinition__TermsAssignment
-            {
-            pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition953);
+        int ruleSingleDefinition_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:474: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:475: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:475: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:476: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:476:1: ( ( rule__SingleDefinition__TermsAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:477:1: ( rule__SingleDefinition__TermsAssignment )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:478:1: ( rule__SingleDefinition__TermsAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:478:2: rule__SingleDefinition__TermsAssignment
+            {
+            pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition966);
             rule__SingleDefinition__TermsAssignment();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
-
-            }
-
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:479:1: ( ( rule__SingleDefinition__TermsAssignment )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:480:1: ( rule__SingleDefinition__TermsAssignment )*
-            {
-             before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:481:1: ( rule__SingleDefinition__TermsAssignment )*
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            }
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:481:1: ( ( rule__SingleDefinition__TermsAssignment )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:482:1: ( rule__SingleDefinition__TermsAssignment )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:483:1: ( rule__SingleDefinition__TermsAssignment )*
             loop2:
             do {
@@ -1318,11 +1538,11 @@
                 switch (alt2) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:481:2: rule__SingleDefinition__TermsAssignment
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:483:2: rule__SingleDefinition__TermsAssignment
             	    {
-            	    pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition965);
+            	    pushFollow(FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition978);
             	    rule__SingleDefinition__TermsAssignment();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -1334,20 +1554,23 @@
             } while (true);
 
-             after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSingleDefinitionAccess().getTermsAssignment()); 
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 30, ruleSingleDefinition_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1360,27 +1583,34 @@
 
     // $ANTLR start "entryRuleTerm"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:494:1: entryRuleTerm : ruleTerm EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:496:1: entryRuleTerm : ruleTerm EOF ;
     public final void entryRuleTerm() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:495:1: ( ruleTerm EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:496:1: ruleTerm EOF
-            {
-             before(grammarAccess.getTermRule()); 
-            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm995);
+        int entryRuleTerm_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:497:1: ( ruleTerm EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:498:1: ruleTerm EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermRule()); 
+            }
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm1008);
             ruleTerm();
 
             state._fsp--;
-
-             after(grammarAccess.getTermRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm1002); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm1015); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 31, entryRuleTerm_StartIndex); }
         }
         return ;
@@ -1390,41 +1620,48 @@
 
     // $ANTLR start "ruleTerm"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:503:1: ruleTerm : ( ( rule__Term__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:505:1: ruleTerm : ( ( rule__Term__Alternatives ) ) ;
     public final void ruleTerm() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:507:2: ( ( ( rule__Term__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:508:1: ( ( rule__Term__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:508:1: ( ( rule__Term__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:509:1: ( rule__Term__Alternatives )
-            {
-             before(grammarAccess.getTermAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:1: ( rule__Term__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:2: rule__Term__Alternatives
-            {
-            pushFollow(FOLLOW_rule__Term__Alternatives_in_ruleTerm1028);
+        int ruleTerm_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:509:2: ( ( ( rule__Term__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:1: ( ( rule__Term__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:510:1: ( ( rule__Term__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:511:1: ( rule__Term__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:512:1: ( rule__Term__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:512:2: rule__Term__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Term__Alternatives_in_ruleTerm1041);
             rule__Term__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getTermAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 32, ruleTerm_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1437,27 +1674,34 @@
 
     // $ANTLR start "entryRuleAtom"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:522:1: entryRuleAtom : ruleAtom EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:524:1: entryRuleAtom : ruleAtom EOF ;
     public final void entryRuleAtom() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:523:1: ( ruleAtom EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:524:1: ruleAtom EOF
-            {
-             before(grammarAccess.getAtomRule()); 
-            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom1055);
+        int entryRuleAtom_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:525:1: ( ruleAtom EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:526:1: ruleAtom EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAtomRule()); 
+            }
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom1068);
             ruleAtom();
 
             state._fsp--;
-
-             after(grammarAccess.getAtomRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom1062); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAtomRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom1075); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 33, entryRuleAtom_StartIndex); }
         }
         return ;
@@ -1467,41 +1711,48 @@
 
     // $ANTLR start "ruleAtom"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:531:1: ruleAtom : ( ( rule__Atom__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:533:1: ruleAtom : ( ( rule__Atom__Alternatives ) ) ;
     public final void ruleAtom() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:535:2: ( ( ( rule__Atom__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:536:1: ( ( rule__Atom__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:536:1: ( ( rule__Atom__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:537:1: ( rule__Atom__Alternatives )
-            {
-             before(grammarAccess.getAtomAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:1: ( rule__Atom__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:2: rule__Atom__Alternatives
-            {
-            pushFollow(FOLLOW_rule__Atom__Alternatives_in_ruleAtom1088);
+        int ruleAtom_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:537:2: ( ( ( rule__Atom__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:1: ( ( rule__Atom__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:538:1: ( ( rule__Atom__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:539:1: ( rule__Atom__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAtomAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:540:1: ( rule__Atom__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:540:2: rule__Atom__Alternatives
+            {
+            pushFollow(FOLLOW_rule__Atom__Alternatives_in_ruleAtom1101);
             rule__Atom__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getAtomAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAtomAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 34, ruleAtom_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1514,27 +1765,34 @@
 
     // $ANTLR start "entryRuleRuleReference"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:550:1: entryRuleRuleReference : ruleRuleReference EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:552:1: entryRuleRuleReference : ruleRuleReference EOF ;
     public final void entryRuleRuleReference() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:551:1: ( ruleRuleReference EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:552:1: ruleRuleReference EOF
-            {
-             before(grammarAccess.getRuleReferenceRule()); 
-            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference1115);
+        int entryRuleRuleReference_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:553:1: ( ruleRuleReference EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:554:1: ruleRuleReference EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleReferenceRule()); 
+            }
+            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference1128);
             ruleRuleReference();
 
             state._fsp--;
-
-             after(grammarAccess.getRuleReferenceRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference1122); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleReferenceRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference1135); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 35, entryRuleRuleReference_StartIndex); }
         }
         return ;
@@ -1544,41 +1802,48 @@
 
     // $ANTLR start "ruleRuleReference"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:559:1: ruleRuleReference : ( ( rule__RuleReference__RulerefAssignment ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:561:1: ruleRuleReference : ( ( rule__RuleReference__RulerefAssignment ) ) ;
     public final void ruleRuleReference() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:563:2: ( ( ( rule__RuleReference__RulerefAssignment ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:564:1: ( ( rule__RuleReference__RulerefAssignment ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:564:1: ( ( rule__RuleReference__RulerefAssignment ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:565:1: ( rule__RuleReference__RulerefAssignment )
-            {
-             before(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:1: ( rule__RuleReference__RulerefAssignment )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:2: rule__RuleReference__RulerefAssignment
-            {
-            pushFollow(FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1148);
+        int ruleRuleReference_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:565:2: ( ( ( rule__RuleReference__RulerefAssignment ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:566:1: ( ( rule__RuleReference__RulerefAssignment ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:567:1: ( rule__RuleReference__RulerefAssignment )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:568:1: ( rule__RuleReference__RulerefAssignment )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:568:2: rule__RuleReference__RulerefAssignment
+            {
+            pushFollow(FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1161);
             rule__RuleReference__RulerefAssignment();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleReferenceAccess().getRulerefAssignment()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 36, ruleRuleReference_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1591,27 +1856,34 @@
 
     // $ANTLR start "entryRuleStringRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:578:1: entryRuleStringRule : ruleStringRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:580:1: entryRuleStringRule : ruleStringRule EOF ;
     public final void entryRuleStringRule() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:579:1: ( ruleStringRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:580:1: ruleStringRule EOF
-            {
-             before(grammarAccess.getStringRuleRule()); 
-            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule1175);
+        int entryRuleStringRule_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:581:1: ( ruleStringRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:582:1: ruleStringRule EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getStringRuleRule()); 
+            }
+            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule1188);
             ruleStringRule();
 
             state._fsp--;
-
-             after(grammarAccess.getStringRuleRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule1182); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getStringRuleRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule1195); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 37, entryRuleStringRule_StartIndex); }
         }
         return ;
@@ -1621,41 +1893,48 @@
 
     // $ANTLR start "ruleStringRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:587:1: ruleStringRule : ( ( rule__StringRule__Alternatives ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:589:1: ruleStringRule : ( ( rule__StringRule__Alternatives ) ) ;
     public final void ruleStringRule() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:591:2: ( ( ( rule__StringRule__Alternatives ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:592:1: ( ( rule__StringRule__Alternatives ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:592:1: ( ( rule__StringRule__Alternatives ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:593:1: ( rule__StringRule__Alternatives )
-            {
-             before(grammarAccess.getStringRuleAccess().getAlternatives()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:1: ( rule__StringRule__Alternatives )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:2: rule__StringRule__Alternatives
-            {
-            pushFollow(FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1208);
+        int ruleStringRule_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:593:2: ( ( ( rule__StringRule__Alternatives ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:1: ( ( rule__StringRule__Alternatives ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:594:1: ( ( rule__StringRule__Alternatives ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:595:1: ( rule__StringRule__Alternatives )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getStringRuleAccess().getAlternatives()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:596:1: ( rule__StringRule__Alternatives )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:596:2: rule__StringRule__Alternatives
+            {
+            pushFollow(FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1221);
             rule__StringRule__Alternatives();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getStringRuleAccess().getAlternatives()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getStringRuleAccess().getAlternatives()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 38, ruleStringRule_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1668,27 +1947,34 @@
 
     // $ANTLR start "entryRuleGroupedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:606:1: entryRuleGroupedSequence : ruleGroupedSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:608:1: entryRuleGroupedSequence : ruleGroupedSequence EOF ;
     public final void entryRuleGroupedSequence() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:607:1: ( ruleGroupedSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:608:1: ruleGroupedSequence EOF
-            {
-             before(grammarAccess.getGroupedSequenceRule()); 
-            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1235);
+        int entryRuleGroupedSequence_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:609:1: ( ruleGroupedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:610:1: ruleGroupedSequence EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGroupedSequenceRule()); 
+            }
+            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1248);
             ruleGroupedSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getGroupedSequenceRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence1242); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence1255); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 39, entryRuleGroupedSequence_StartIndex); }
         }
         return ;
@@ -1698,41 +1984,48 @@
 
     // $ANTLR start "ruleGroupedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:615:1: ruleGroupedSequence : ( ( rule__GroupedSequence__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:617:1: ruleGroupedSequence : ( ( rule__GroupedSequence__Group__0 ) ) ;
     public final void ruleGroupedSequence() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:619:2: ( ( ( rule__GroupedSequence__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:620:1: ( ( rule__GroupedSequence__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:620:1: ( ( rule__GroupedSequence__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:621:1: ( rule__GroupedSequence__Group__0 )
-            {
-             before(grammarAccess.getGroupedSequenceAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622:1: ( rule__GroupedSequence__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622:2: rule__GroupedSequence__Group__0
-            {
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1268);
+        int ruleGroupedSequence_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:621: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:622:1: ( ( rule__GroupedSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:622: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:623:1: ( rule__GroupedSequence__Group__0 )
+            {
+            if ( state.backtracking==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:624: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:624:2: rule__GroupedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1281);
             rule__GroupedSequence__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getGroupedSequenceAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 40, ruleGroupedSequence_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1745,27 +2038,34 @@
 
     // $ANTLR start "entryRuleOptionalSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:634:1: entryRuleOptionalSequence : ruleOptionalSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:636:1: entryRuleOptionalSequence : ruleOptionalSequence EOF ;
     public final void entryRuleOptionalSequence() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:635:1: ( ruleOptionalSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:636:1: ruleOptionalSequence EOF
-            {
-             before(grammarAccess.getOptionalSequenceRule()); 
-            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1295);
+        int entryRuleOptionalSequence_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:637:1: ( ruleOptionalSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:638:1: ruleOptionalSequence EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOptionalSequenceRule()); 
+            }
+            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1308);
             ruleOptionalSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getOptionalSequenceRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence1302); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence1315); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 41, entryRuleOptionalSequence_StartIndex); }
         }
         return ;
@@ -1775,41 +2075,48 @@
 
     // $ANTLR start "ruleOptionalSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:643:1: ruleOptionalSequence : ( ( rule__OptionalSequence__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:645:1: ruleOptionalSequence : ( ( rule__OptionalSequence__Group__0 ) ) ;
     public final void ruleOptionalSequence() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:647:2: ( ( ( rule__OptionalSequence__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:648:1: ( ( rule__OptionalSequence__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:648:1: ( ( rule__OptionalSequence__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:649:1: ( rule__OptionalSequence__Group__0 )
-            {
-             before(grammarAccess.getOptionalSequenceAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650:1: ( rule__OptionalSequence__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650:2: rule__OptionalSequence__Group__0
-            {
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1328);
+        int ruleOptionalSequence_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:649: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:650:1: ( ( rule__OptionalSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:650: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:651:1: ( rule__OptionalSequence__Group__0 )
+            {
+            if ( state.backtracking==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:652: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:652:2: rule__OptionalSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1341);
             rule__OptionalSequence__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getOptionalSequenceAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 42, ruleOptionalSequence_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1822,27 +2129,34 @@
 
     // $ANTLR start "entryRuleRepeatedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:662:1: entryRuleRepeatedSequence : ruleRepeatedSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:664:1: entryRuleRepeatedSequence : ruleRepeatedSequence EOF ;
     public final void entryRuleRepeatedSequence() throws RecognitionException {
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:663:1: ( ruleRepeatedSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:664:1: ruleRepeatedSequence EOF
-            {
-             before(grammarAccess.getRepeatedSequenceRule()); 
-            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1355);
+        int entryRuleRepeatedSequence_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:665:1: ( ruleRepeatedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:666:1: ruleRepeatedSequence EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceRule()); 
+            }
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1368);
             ruleRepeatedSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getRepeatedSequenceRule()); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence1362); 
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence1375); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 43, entryRuleRepeatedSequence_StartIndex); }
         }
         return ;
@@ -1852,41 +2166,48 @@
 
     // $ANTLR start "ruleRepeatedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:671:1: ruleRepeatedSequence : ( ( rule__RepeatedSequence__Group__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:673:1: ruleRepeatedSequence : ( ( rule__RepeatedSequence__Group__0 ) ) ;
     public final void ruleRepeatedSequence() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:675:2: ( ( ( rule__RepeatedSequence__Group__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:676:1: ( ( rule__RepeatedSequence__Group__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:676:1: ( ( rule__RepeatedSequence__Group__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:677:1: ( rule__RepeatedSequence__Group__0 )
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getGroup()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:678:1: ( rule__RepeatedSequence__Group__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:678:2: rule__RepeatedSequence__Group__0
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1388);
+        int ruleRepeatedSequence_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:677: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:678:1: ( ( rule__RepeatedSequence__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:678: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:679:1: ( rule__RepeatedSequence__Group__0 )
+            {
+            if ( state.backtracking==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:680: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:680:2: rule__RepeatedSequence__Group__0
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1401);
             rule__RepeatedSequence__Group__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRepeatedSequenceAccess().getGroup()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 44, ruleRepeatedSequence_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -1898,12 +2219,105 @@
 
 
+    // $ANTLR start "entryRuleRepeatRange"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:692:1: entryRuleRepeatRange : ruleRepeatRange EOF ;
+    public final void entryRuleRepeatRange() throws RecognitionException {
+        int entryRuleRepeatRange_StartIndex = input.index();
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:693:1: ( ruleRepeatRange EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:694:1: ruleRepeatRange EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeRule()); 
+            }
+            pushFollow(FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange1428);
+            ruleRepeatRange();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeRule()); 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatRange1435); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 45, entryRuleRepeatRange_StartIndex); }
+        }
+        return ;
+    }
+    // $ANTLR end "entryRuleRepeatRange"
+
+
+    // $ANTLR start "ruleRepeatRange"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:701:1: ruleRepeatRange : ( ( rule__RepeatRange__Group__0 ) ) ;
+    public final void ruleRepeatRange() throws RecognitionException {
+        int ruleRepeatRange_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:705:2: ( ( ( rule__RepeatRange__Group__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:706:1: ( ( rule__RepeatRange__Group__0 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:706:1: ( ( rule__RepeatRange__Group__0 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:707:1: ( rule__RepeatRange__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getGroup()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:708:1: ( rule__RepeatRange__Group__0 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:708:2: rule__RepeatRange__Group__0
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__0_in_ruleRepeatRange1461);
+            rule__RepeatRange__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getGroup()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 46, ruleRepeatRange_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "ruleRepeatRange"
+
+
     // $ANTLR start "rule__EtsiBnf__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:690:1: rule__EtsiBnf__Alternatives : ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:720:1: rule__EtsiBnf__Alternatives : ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) );
     public final void rule__EtsiBnf__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:694:1: ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) )
+        int rule__EtsiBnf__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 47) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:724:1: ( ( ( rule__EtsiBnf__Group_0__0 ) ) | ( ( rule__EtsiBnf__Group_1__0 ) ) | ( ( rule__EtsiBnf__Group_2__0 ) ) )
             int alt3=3;
             switch ( input.LA(1) ) {
@@ -1913,10 +2327,10 @@
                 }
                 break;
-            case 35:
+            case 37:
                 {
                 alt3=2;
                 }
                 break;
-            case 36:
+            case 38:
                 {
                 alt3=3;
@@ -1924,4 +2338,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 3, 0, input);
@@ -1932,22 +2347,26 @@
             switch (alt3) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:695:1: ( ( rule__EtsiBnf__Group_0__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725:1: ( ( rule__EtsiBnf__Group_0__0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:695:1: ( ( rule__EtsiBnf__Group_0__0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:696:1: ( rule__EtsiBnf__Group_0__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725: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:726:1: ( rule__EtsiBnf__Group_0__0 )
                     {
-                     before(grammarAccess.getEtsiBnfAccess().getGroup_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:697:1: ( rule__EtsiBnf__Group_0__0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:697:2: rule__EtsiBnf__Group_0__0
+                    if ( state.backtracking==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:727: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:727:2: rule__EtsiBnf__Group_0__0
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1424);
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1497);
                     rule__EtsiBnf__Group_0__0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getEtsiBnfAccess().getGroup_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getEtsiBnfAccess().getGroup_0()); 
+                    }
 
                     }
@@ -1957,22 +2376,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:701:6: ( ( rule__EtsiBnf__Group_1__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731:6: ( ( rule__EtsiBnf__Group_1__0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:701:6: ( ( rule__EtsiBnf__Group_1__0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:702:1: ( rule__EtsiBnf__Group_1__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731: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:732:1: ( rule__EtsiBnf__Group_1__0 )
                     {
-                     before(grammarAccess.getEtsiBnfAccess().getGroup_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:703:1: ( rule__EtsiBnf__Group_1__0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:703:2: rule__EtsiBnf__Group_1__0
+                    if ( state.backtracking==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:733: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:733:2: rule__EtsiBnf__Group_1__0
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1442);
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1515);
                     rule__EtsiBnf__Group_1__0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getEtsiBnfAccess().getGroup_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getEtsiBnfAccess().getGroup_1()); 
+                    }
 
                     }
@@ -1982,22 +2405,26 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:707:6: ( ( rule__EtsiBnf__Group_2__0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:737:6: ( ( rule__EtsiBnf__Group_2__0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:707:6: ( ( rule__EtsiBnf__Group_2__0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:708:1: ( rule__EtsiBnf__Group_2__0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:737: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:738:1: ( rule__EtsiBnf__Group_2__0 )
                     {
-                     before(grammarAccess.getEtsiBnfAccess().getGroup_2()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:709:1: ( rule__EtsiBnf__Group_2__0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:709:2: rule__EtsiBnf__Group_2__0
+                    if ( state.backtracking==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:739: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:739:2: rule__EtsiBnf__Group_2__0
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1460);
+                    pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1533);
                     rule__EtsiBnf__Group_2__0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getEtsiBnfAccess().getGroup_2()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getEtsiBnfAccess().getGroup_2()); 
+                    }
 
                     }
@@ -2014,4 +2441,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 47, rule__EtsiBnf__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2024,11 +2452,13 @@
 
     // $ANTLR start "rule__BnfEntry__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:718:1: rule__BnfEntry__Alternatives : ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:748:1: rule__BnfEntry__Alternatives : ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) );
     public final void rule__BnfEntry__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:722:1: ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) )
+        int rule__BnfEntry__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 48) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:752:1: ( ( ( rule__BnfEntry__SectionheaderAssignment_0 ) ) | ( ( rule__BnfEntry__RuleAssignment_1 ) ) )
             int alt4=2;
             int LA4_0 = input.LA(1);
@@ -2041,4 +2471,5 @@
             }
             else {
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 4, 0, input);
@@ -2048,22 +2479,26 @@
             switch (alt4) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:723:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:723:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:724:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:1: ( ( rule__BnfEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:754:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
                     {
-                     before(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:725:2: rule__BnfEntry__SectionheaderAssignment_0
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:755:1: ( rule__BnfEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:755:2: rule__BnfEntry__SectionheaderAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1493);
+                    pushFollow(FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1566);
                     rule__BnfEntry__SectionheaderAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getBnfEntryAccess().getSectionheaderAssignment_0()); 
+                    }
 
                     }
@@ -2073,22 +2508,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:729:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:729:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:730:1: ( rule__BnfEntry__RuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:6: ( ( rule__BnfEntry__RuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:760:1: ( rule__BnfEntry__RuleAssignment_1 )
                     {
-                     before(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731:1: ( rule__BnfEntry__RuleAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:731:2: rule__BnfEntry__RuleAssignment_1
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:761:1: ( rule__BnfEntry__RuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:761:2: rule__BnfEntry__RuleAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1511);
+                    pushFollow(FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1584);
                     rule__BnfEntry__RuleAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getBnfEntryAccess().getRuleAssignment_1()); 
+                    }
 
                     }
@@ -2105,4 +2544,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 48, rule__BnfEntry__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2115,11 +2555,13 @@
 
     // $ANTLR start "rule__DeltaEntry__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:740:1: rule__DeltaEntry__Alternatives : ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:770:1: rule__DeltaEntry__Alternatives : ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) );
     public final void rule__DeltaEntry__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:744:1: ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) )
+        int rule__DeltaEntry__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 49) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:774:1: ( ( ( rule__DeltaEntry__RuleAssignment_0 ) ) | ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) ) | ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) ) )
             int alt5=3;
             switch ( input.LA(1) ) {
@@ -2137,11 +2579,12 @@
                             int LA5_2 = input.LA(5);
 
-                            if ( (LA5_2==27) ) {
+                            if ( (LA5_2==17) ) {
+                                alt5=3;
+                            }
+                            else if ( (LA5_2==27) ) {
                                 alt5=1;
                             }
-                            else if ( (LA5_2==17) ) {
-                                alt5=3;
-                            }
                             else {
+                                if (state.backtracking>0) {state.failed=true; return ;}
                                 NoViableAltException nvae =
                                     new NoViableAltException("", 5, 2, input);
@@ -2151,4 +2594,5 @@
                         }
                         else {
+                            if (state.backtracking>0) {state.failed=true; return ;}
                             NoViableAltException nvae =
                                 new NoViableAltException("", 5, 5, input);
@@ -2158,4 +2602,5 @@
                     }
                     else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
                             new NoViableAltException("", 5, 4, input);
@@ -2170,11 +2615,12 @@
                         int LA5_2 = input.LA(4);
 
-                        if ( (LA5_2==27) ) {
+                        if ( (LA5_2==17) ) {
+                            alt5=3;
+                        }
+                        else if ( (LA5_2==27) ) {
                             alt5=1;
                         }
-                        else if ( (LA5_2==17) ) {
-                            alt5=3;
-                        }
                         else {
+                            if (state.backtracking>0) {state.failed=true; return ;}
                             NoViableAltException nvae =
                                 new NoViableAltException("", 5, 2, input);
@@ -2184,4 +2630,5 @@
                     }
                     else {
+                        if (state.backtracking>0) {state.failed=true; return ;}
                         NoViableAltException nvae =
                             new NoViableAltException("", 5, 5, input);
@@ -2191,4 +2638,5 @@
                 }
                 else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
                         new NoViableAltException("", 5, 1, input);
@@ -2202,11 +2650,12 @@
                 int LA5_2 = input.LA(2);
 
-                if ( (LA5_2==27) ) {
+                if ( (LA5_2==17) ) {
+                    alt5=3;
+                }
+                else if ( (LA5_2==27) ) {
                     alt5=1;
                 }
-                else if ( (LA5_2==17) ) {
-                    alt5=3;
-                }
                 else {
+                    if (state.backtracking>0) {state.failed=true; return ;}
                     NoViableAltException nvae =
                         new NoViableAltException("", 5, 2, input);
@@ -2222,4 +2671,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 5, 0, input);
@@ -2230,22 +2680,26 @@
             switch (alt5) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:745:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:745:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:746:1: ( rule__DeltaEntry__RuleAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:1: ( ( rule__DeltaEntry__RuleAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:776:1: ( rule__DeltaEntry__RuleAssignment_0 )
                     {
-                     before(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:747:1: ( rule__DeltaEntry__RuleAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:747:2: rule__DeltaEntry__RuleAssignment_0
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:777:1: ( rule__DeltaEntry__RuleAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:777:2: rule__DeltaEntry__RuleAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1544);
+                    pushFollow(FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1617);
                     rule__DeltaEntry__RuleAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getDeltaEntryAccess().getRuleAssignment_0()); 
+                    }
 
                     }
@@ -2255,22 +2709,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:751:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:751:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:752:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:6: ( ( rule__DeltaEntry__SectionheaderAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:782:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
                     {
-                     before(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:753:2: rule__DeltaEntry__SectionheaderAssignment_1
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:783:1: ( rule__DeltaEntry__SectionheaderAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:783:2: rule__DeltaEntry__SectionheaderAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1562);
+                    pushFollow(FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1635);
                     rule__DeltaEntry__SectionheaderAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getDeltaEntryAccess().getSectionheaderAssignment_1()); 
+                    }
 
                     }
@@ -2280,22 +2738,26 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:757:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:787:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:757:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:758:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:787:6: ( ( rule__DeltaEntry__ExtRuleAssignment_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:788:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
                     {
-                     before(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:759:2: rule__DeltaEntry__ExtRuleAssignment_2
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:789:1: ( rule__DeltaEntry__ExtRuleAssignment_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:789:2: rule__DeltaEntry__ExtRuleAssignment_2
                     {
-                    pushFollow(FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1580);
+                    pushFollow(FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1653);
                     rule__DeltaEntry__ExtRuleAssignment_2();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getDeltaEntryAccess().getExtRuleAssignment_2()); 
+                    }
 
                     }
@@ -2312,4 +2774,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 49, rule__DeltaEntry__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2322,11 +2785,13 @@
 
     // $ANTLR start "rule__MergeEntry__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:768:1: rule__MergeEntry__Alternatives : ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:798:1: rule__MergeEntry__Alternatives : ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) );
     public final void rule__MergeEntry__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:772:1: ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) )
+        int rule__MergeEntry__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 50) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:802:1: ( ( ( rule__MergeEntry__SectionheaderAssignment_0 ) ) | ( ( rule__MergeEntry__MergeRuleAssignment_1 ) ) )
             int alt6=2;
             int LA6_0 = input.LA(1);
@@ -2339,4 +2804,5 @@
             }
             else {
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 6, 0, input);
@@ -2346,22 +2812,26 @@
             switch (alt6) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:773:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:773:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:774:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:1: ( ( rule__MergeEntry__SectionheaderAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:804:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
                     {
-                     before(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:775:2: rule__MergeEntry__SectionheaderAssignment_0
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:805:1: ( rule__MergeEntry__SectionheaderAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:805:2: rule__MergeEntry__SectionheaderAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1613);
+                    pushFollow(FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1686);
                     rule__MergeEntry__SectionheaderAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMergeEntryAccess().getSectionheaderAssignment_0()); 
+                    }
 
                     }
@@ -2371,22 +2841,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:779:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:779:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:780:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:6: ( ( rule__MergeEntry__MergeRuleAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:810:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
                     {
-                     before(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:781:2: rule__MergeEntry__MergeRuleAssignment_1
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:811:1: ( rule__MergeEntry__MergeRuleAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:811:2: rule__MergeEntry__MergeRuleAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1631);
+                    pushFollow(FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1704);
                     rule__MergeEntry__MergeRuleAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMergeEntryAccess().getMergeRuleAssignment_1()); 
+                    }
 
                     }
@@ -2403,4 +2877,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 50, rule__MergeEntry__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2413,24 +2888,26 @@
 
     // $ANTLR start "rule__Import__Alternatives_2_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:790:1: rule__Import__Alternatives_2_1 : ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:820:1: rule__Import__Alternatives_2_1 : ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) );
     public final void rule__Import__Alternatives_2_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:794:1: ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) )
+        int rule__Import__Alternatives_2_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 51) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:824:1: ( ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) ) | ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) ) )
             int alt7=3;
             switch ( input.LA(1) ) {
-            case 37:
+            case 39:
                 {
                 alt7=1;
                 }
                 break;
-            case 38:
+            case 40:
                 {
                 alt7=2;
                 }
                 break;
-            case 39:
+            case 41:
                 {
                 alt7=3;
@@ -2438,4 +2915,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 7, 0, input);
@@ -2446,22 +2924,26 @@
             switch (alt7) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:795:1: ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825:1: ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:795:1: ( ( rule__Import__GrammarTypeAssignment_2_1_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:796:1: ( rule__Import__GrammarTypeAssignment_2_1_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825: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:826:1: ( rule__Import__GrammarTypeAssignment_2_1_0 )
                     {
-                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:797:1: ( rule__Import__GrammarTypeAssignment_2_1_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:797:2: rule__Import__GrammarTypeAssignment_2_1_0
+                    if ( state.backtracking==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:827: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:827:2: rule__Import__GrammarTypeAssignment_2_1_0
                     {
-                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11664);
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11737);
                     rule__Import__GrammarTypeAssignment_2_1_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_0()); 
+                    }
 
                     }
@@ -2471,22 +2953,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:801:6: ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:831:6: ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:801:6: ( ( rule__Import__GrammarTypeAssignment_2_1_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:802:1: ( rule__Import__GrammarTypeAssignment_2_1_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:831: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:832:1: ( rule__Import__GrammarTypeAssignment_2_1_1 )
                     {
-                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:1: ( rule__Import__GrammarTypeAssignment_2_1_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:803:2: rule__Import__GrammarTypeAssignment_2_1_1
+                    if ( state.backtracking==0 ) {
+                       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:833: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:833:2: rule__Import__GrammarTypeAssignment_2_1_1
                     {
-                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11682);
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11755);
                     rule__Import__GrammarTypeAssignment_2_1_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_1()); 
+                    }
 
                     }
@@ -2496,22 +2982,26 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:807:6: ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837:6: ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:807:6: ( ( rule__Import__GrammarTypeAssignment_2_1_2 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:808:1: ( rule__Import__GrammarTypeAssignment_2_1_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837: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:838:1: ( rule__Import__GrammarTypeAssignment_2_1_2 )
                     {
-                     before(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:1: ( rule__Import__GrammarTypeAssignment_2_1_2 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:809:2: rule__Import__GrammarTypeAssignment_2_1_2
+                    if ( state.backtracking==0 ) {
+                       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:839: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:839:2: rule__Import__GrammarTypeAssignment_2_1_2
                     {
-                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11700);
+                    pushFollow(FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11773);
                     rule__Import__GrammarTypeAssignment_2_1_2();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getImportAccess().getGrammarTypeAssignment_2_1_2()); 
+                    }
 
                     }
@@ -2528,4 +3018,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 51, rule__Import__Alternatives_2_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2538,11 +3029,13 @@
 
     // $ANTLR start "rule__ExtRule__Alternatives_4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:818:1: rule__ExtRule__Alternatives_4 : ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:848:1: rule__ExtRule__Alternatives_4 : ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) );
     public final void rule__ExtRule__Alternatives_4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:822:1: ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) )
+        int rule__ExtRule__Alternatives_4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 52) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:852:1: ( ( ( rule__ExtRule__ElementsAssignment_4_0 ) ) | ( ')' ) | ( ']' ) | ( '}' ) | ( '|' ) | ( '(' ) | ( '[' ) | ( '{' ) | ( '*' ) | ( '+' ) )
             int alt8=10;
             switch ( input.LA(1) ) {
@@ -2600,4 +3093,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 8, 0, input);
@@ -2608,22 +3102,26 @@
             switch (alt8) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:823:1: ( ( rule__ExtRule__ElementsAssignment_4_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853:1: ( ( rule__ExtRule__ElementsAssignment_4_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:823:1: ( ( rule__ExtRule__ElementsAssignment_4_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:824:1: ( rule__ExtRule__ElementsAssignment_4_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853: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:854:1: ( rule__ExtRule__ElementsAssignment_4_0 )
                     {
-                     before(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825:1: ( rule__ExtRule__ElementsAssignment_4_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:825:2: rule__ExtRule__ElementsAssignment_4_0
+                    if ( state.backtracking==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:855: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:855:2: rule__ExtRule__ElementsAssignment_4_0
                     {
-                    pushFollow(FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41733);
+                    pushFollow(FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41806);
                     rule__ExtRule__ElementsAssignment_4_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getElementsAssignment_4_0()); 
+                    }
 
                     }
@@ -2633,12 +3131,16 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:829:6: ( ')' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:859:6: ( ')' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:829:6: ( ')' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:830:1: ')'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:859:6: ( ')' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:860:1: ')'
                     {
-                     before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
-                    match(input,13,FOLLOW_13_in_rule__ExtRule__Alternatives_41752); 
-                     after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+                    }
+                    match(input,13,FOLLOW_13_in_rule__ExtRule__Alternatives_41825); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_4_1()); 
+                    }
 
                     }
@@ -2648,12 +3150,16 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837:6: ( ']' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:867:6: ( ']' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:837:6: ( ']' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:838:1: ']'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:867:6: ( ']' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:868:1: ']'
                     {
-                     before(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
-                    match(input,14,FOLLOW_14_in_rule__ExtRule__Alternatives_41772); 
-                     after(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+                    }
+                    match(input,14,FOLLOW_14_in_rule__ExtRule__Alternatives_41845); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getRightSquareBracketKeyword_4_2()); 
+                    }
 
                     }
@@ -2663,12 +3169,16 @@
                     break;
                 case 4 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:845:6: ( '}' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:875:6: ( '}' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:845:6: ( '}' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:846:1: '}'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:875:6: ( '}' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:876:1: '}'
                     {
-                     before(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
-                    match(input,15,FOLLOW_15_in_rule__ExtRule__Alternatives_41792); 
-                     after(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+                    }
+                    match(input,15,FOLLOW_15_in_rule__ExtRule__Alternatives_41865); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getRightCurlyBracketKeyword_4_3()); 
+                    }
 
                     }
@@ -2678,12 +3188,16 @@
                     break;
                 case 5 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853:6: ( '|' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:883:6: ( '|' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:853:6: ( '|' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:854:1: '|'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:883:6: ( '|' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:884:1: '|'
                     {
-                     before(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
-                    match(input,16,FOLLOW_16_in_rule__ExtRule__Alternatives_41812); 
-                     after(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+                    }
+                    match(input,16,FOLLOW_16_in_rule__ExtRule__Alternatives_41885); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getVerticalLineKeyword_4_4()); 
+                    }
 
                     }
@@ -2693,12 +3207,16 @@
                     break;
                 case 6 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:861:6: ( '(' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:891:6: ( '(' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:861:6: ( '(' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:862:1: '('
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:891:6: ( '(' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:892:1: '('
                     {
-                     before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
-                    match(input,17,FOLLOW_17_in_rule__ExtRule__Alternatives_41832); 
-                     after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+                    }
+                    match(input,17,FOLLOW_17_in_rule__ExtRule__Alternatives_41905); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_4_5()); 
+                    }
 
                     }
@@ -2708,12 +3226,16 @@
                     break;
                 case 7 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:869:6: ( '[' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:899:6: ( '[' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:869:6: ( '[' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:870:1: '['
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:899:6: ( '[' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:900:1: '['
                     {
-                     before(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
-                    match(input,18,FOLLOW_18_in_rule__ExtRule__Alternatives_41852); 
-                     after(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+                    }
+                    match(input,18,FOLLOW_18_in_rule__ExtRule__Alternatives_41925); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getLeftSquareBracketKeyword_4_6()); 
+                    }
 
                     }
@@ -2723,12 +3245,16 @@
                     break;
                 case 8 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:877:6: ( '{' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:907:6: ( '{' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:877:6: ( '{' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:878:1: '{'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:907:6: ( '{' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:908:1: '{'
                     {
-                     before(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
-                    match(input,19,FOLLOW_19_in_rule__ExtRule__Alternatives_41872); 
-                     after(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+                    }
+                    match(input,19,FOLLOW_19_in_rule__ExtRule__Alternatives_41945); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getLeftCurlyBracketKeyword_4_7()); 
+                    }
 
                     }
@@ -2738,12 +3264,16 @@
                     break;
                 case 9 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:885:6: ( '*' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:915:6: ( '*' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:885:6: ( '*' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:886:1: '*'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:915:6: ( '*' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:916:1: '*'
                     {
-                     before(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
-                    match(input,20,FOLLOW_20_in_rule__ExtRule__Alternatives_41892); 
-                     after(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+                    }
+                    match(input,20,FOLLOW_20_in_rule__ExtRule__Alternatives_41965); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getAsteriskKeyword_4_8()); 
+                    }
 
                     }
@@ -2753,12 +3283,16 @@
                     break;
                 case 10 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:893:6: ( '+' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( '+' )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:893:6: ( '+' )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:894:1: '+'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( '+' )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:924:1: '+'
                     {
-                     before(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
-                    match(input,21,FOLLOW_21_in_rule__ExtRule__Alternatives_41912); 
-                     after(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+                    }
+                    match(input,21,FOLLOW_21_in_rule__ExtRule__Alternatives_41985); if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getExtRuleAccess().getPlusSignKeyword_4_9()); 
+                    }
 
                     }
@@ -2775,4 +3309,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 52, rule__ExtRule__Alternatives_4_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2785,11 +3320,13 @@
 
     // $ANTLR start "rule__MergeRule__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:906:1: rule__MergeRule__Alternatives : ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:936:1: rule__MergeRule__Alternatives : ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) );
     public final void rule__MergeRule__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:910:1: ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) )
+        int rule__MergeRule__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 53) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:940:1: ( ( ruleGlobalCombinator ) | ( ruleRuleCombinator ) | ( ruleHookCombinator ) )
             int alt9=3;
             switch ( input.LA(1) ) {
@@ -2810,4 +3347,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 9, 0, input);
@@ -2818,16 +3356,20 @@
             switch (alt9) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:911:1: ( ruleGlobalCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:1: ( ruleGlobalCombinator )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:911:1: ( ruleGlobalCombinator )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:912:1: ruleGlobalCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:1: ( ruleGlobalCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:942:1: ruleGlobalCombinator
                     {
-                     before(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
-                    pushFollow(FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1946);
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                    }
+                    pushFollow(FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives2019);
                     ruleGlobalCombinator();
 
                     state._fsp--;
-
-                     after(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMergeRuleAccess().getGlobalCombinatorParserRuleCall_0()); 
+                    }
 
                     }
@@ -2837,16 +3379,20 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:917:6: ( ruleRuleCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:6: ( ruleRuleCombinator )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:917:6: ( ruleRuleCombinator )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:918:1: ruleRuleCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:6: ( ruleRuleCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:948:1: ruleRuleCombinator
                     {
-                     before(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
-                    pushFollow(FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1963);
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                    }
+                    pushFollow(FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives2036);
                     ruleRuleCombinator();
 
                     state._fsp--;
-
-                     after(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMergeRuleAccess().getRuleCombinatorParserRuleCall_1()); 
+                    }
 
                     }
@@ -2856,16 +3402,20 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( ruleHookCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:6: ( ruleHookCombinator )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:923:6: ( ruleHookCombinator )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:924:1: ruleHookCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:6: ( ruleHookCombinator )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:954:1: ruleHookCombinator
                     {
-                     before(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
-                    pushFollow(FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1980);
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                    }
+                    pushFollow(FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives2053);
                     ruleHookCombinator();
 
                     state._fsp--;
-
-                     after(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getMergeRuleAccess().getHookCombinatorParserRuleCall_2()); 
+                    }
 
                     }
@@ -2882,4 +3432,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 53, rule__MergeRule__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -2892,11 +3443,13 @@
 
     // $ANTLR start "rule__Term__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:934:1: rule__Term__Alternatives : ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:964:1: rule__Term__Alternatives : ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) );
     public final void rule__Term__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:938:1: ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) )
+        int rule__Term__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 54) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:968:1: ( ( ( rule__Term__TermAtomAssignment_0 ) ) | ( ( rule__Term__TermGroupedSequenceAssignment_1 ) ) | ( ( rule__Term__TermOptionalSequenceAssignment_2 ) ) | ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) ) )
             int alt10=4;
             switch ( input.LA(1) ) {
@@ -2924,4 +3477,5 @@
                 break;
             default:
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 10, 0, input);
@@ -2932,22 +3486,26 @@
             switch (alt10) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:939:1: ( ( rule__Term__TermAtomAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:969:1: ( ( rule__Term__TermAtomAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:939:1: ( ( rule__Term__TermAtomAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:940:1: ( rule__Term__TermAtomAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:969: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:970:1: ( rule__Term__TermAtomAssignment_0 )
                     {
-                     before(grammarAccess.getTermAccess().getTermAtomAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:1: ( rule__Term__TermAtomAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:941:2: rule__Term__TermAtomAssignment_0
+                    if ( state.backtracking==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:971: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:971:2: rule__Term__TermAtomAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2012);
+                    pushFollow(FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2085);
                     rule__Term__TermAtomAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getTermAccess().getTermAtomAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getTermAccess().getTermAtomAssignment_0()); 
+                    }
 
                     }
@@ -2957,22 +3515,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:945:6: ( ( rule__Term__TermGroupedSequenceAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975:6: ( ( rule__Term__TermGroupedSequenceAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:945:6: ( ( rule__Term__TermGroupedSequenceAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:946:1: ( rule__Term__TermGroupedSequenceAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975: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:976:1: ( rule__Term__TermGroupedSequenceAssignment_1 )
                     {
-                     before(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:1: ( rule__Term__TermGroupedSequenceAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:947:2: rule__Term__TermGroupedSequenceAssignment_1
+                    if ( state.backtracking==0 ) {
+                       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:977: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:977:2: rule__Term__TermGroupedSequenceAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2030);
+                    pushFollow(FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2103);
                     rule__Term__TermGroupedSequenceAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getTermAccess().getTermGroupedSequenceAssignment_1()); 
+                    }
 
                     }
@@ -2982,22 +3544,26 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:951:6: ( ( rule__Term__TermOptionalSequenceAssignment_2 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981:6: ( ( rule__Term__TermOptionalSequenceAssignment_2 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:951:6: ( ( rule__Term__TermOptionalSequenceAssignment_2 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:952:1: ( rule__Term__TermOptionalSequenceAssignment_2 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981: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:982:1: ( rule__Term__TermOptionalSequenceAssignment_2 )
                     {
-                     before(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:1: ( rule__Term__TermOptionalSequenceAssignment_2 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:953:2: rule__Term__TermOptionalSequenceAssignment_2
+                    if ( state.backtracking==0 ) {
+                       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:983: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:983:2: rule__Term__TermOptionalSequenceAssignment_2
                     {
-                    pushFollow(FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2048);
+                    pushFollow(FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2121);
                     rule__Term__TermOptionalSequenceAssignment_2();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getTermAccess().getTermOptionalSequenceAssignment_2()); 
+                    }
 
                     }
@@ -3007,22 +3573,26 @@
                     break;
                 case 4 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:957:6: ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:987:6: ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:957:6: ( ( rule__Term__TermRepeatedSequenceAssignment_3 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:958:1: ( rule__Term__TermRepeatedSequenceAssignment_3 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:987: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:988:1: ( rule__Term__TermRepeatedSequenceAssignment_3 )
                     {
-                     before(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:959:1: ( rule__Term__TermRepeatedSequenceAssignment_3 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:959:2: rule__Term__TermRepeatedSequenceAssignment_3
+                    if ( state.backtracking==0 ) {
+                       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:989: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:989:2: rule__Term__TermRepeatedSequenceAssignment_3
                     {
-                    pushFollow(FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2066);
+                    pushFollow(FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2139);
                     rule__Term__TermRepeatedSequenceAssignment_3();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getTermAccess().getTermRepeatedSequenceAssignment_3()); 
+                    }
 
                     }
@@ -3039,4 +3609,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 54, rule__Term__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3049,11 +3620,13 @@
 
     // $ANTLR start "rule__Atom__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:968:1: rule__Atom__Alternatives : ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:998:1: rule__Atom__Alternatives : ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) );
     public final void rule__Atom__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:972:1: ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) )
+        int rule__Atom__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 55) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1002:1: ( ( ( rule__Atom__AtomStringRuleAssignment_0 ) ) | ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) ) )
             int alt11=2;
             int LA11_0 = input.LA(1);
@@ -3066,4 +3639,5 @@
             }
             else {
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 11, 0, input);
@@ -3073,22 +3647,26 @@
             switch (alt11) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:973:1: ( ( rule__Atom__AtomStringRuleAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003:1: ( ( rule__Atom__AtomStringRuleAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:973:1: ( ( rule__Atom__AtomStringRuleAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:974:1: ( rule__Atom__AtomStringRuleAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003: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:1004:1: ( rule__Atom__AtomStringRuleAssignment_0 )
                     {
-                     before(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975:1: ( rule__Atom__AtomStringRuleAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:975:2: rule__Atom__AtomStringRuleAssignment_0
+                    if ( state.backtracking==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:1005: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:1005:2: rule__Atom__AtomStringRuleAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2099);
+                    pushFollow(FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2172);
                     rule__Atom__AtomStringRuleAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAtomAccess().getAtomStringRuleAssignment_0()); 
+                    }
 
                     }
@@ -3098,22 +3676,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:979:6: ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1009:6: ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:979:6: ( ( rule__Atom__AtomRuleReferenceAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:980:1: ( rule__Atom__AtomRuleReferenceAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1009: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:1010:1: ( rule__Atom__AtomRuleReferenceAssignment_1 )
                     {
-                     before(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981:1: ( rule__Atom__AtomRuleReferenceAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:981:2: rule__Atom__AtomRuleReferenceAssignment_1
+                    if ( state.backtracking==0 ) {
+                       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:1011: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:1011:2: rule__Atom__AtomRuleReferenceAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2117);
+                    pushFollow(FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2190);
                     rule__Atom__AtomRuleReferenceAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getAtomAccess().getAtomRuleReferenceAssignment_1()); 
+                    }
 
                     }
@@ -3130,4 +3712,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 55, rule__Atom__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3140,11 +3723,13 @@
 
     // $ANTLR start "rule__StringRule__Alternatives"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:990:1: rule__StringRule__Alternatives : ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) );
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1020:1: rule__StringRule__Alternatives : ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) );
     public final void rule__StringRule__Alternatives() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:994:1: ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) )
+        int rule__StringRule__Alternatives_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 56) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1024:1: ( ( ( rule__StringRule__LiteralAssignment_0 ) ) | ( ( rule__StringRule__ColonAssignment_1 ) ) )
             int alt12=2;
             int LA12_0 = input.LA(1);
@@ -3157,4 +3742,5 @@
             }
             else {
+                if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
                     new NoViableAltException("", 12, 0, input);
@@ -3164,22 +3750,26 @@
             switch (alt12) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:995:1: ( ( rule__StringRule__LiteralAssignment_0 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1025:1: ( ( rule__StringRule__LiteralAssignment_0 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:995:1: ( ( rule__StringRule__LiteralAssignment_0 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:996:1: ( rule__StringRule__LiteralAssignment_0 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1025: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:1026:1: ( rule__StringRule__LiteralAssignment_0 )
                     {
-                     before(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:997:1: ( rule__StringRule__LiteralAssignment_0 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:997:2: rule__StringRule__LiteralAssignment_0
+                    if ( state.backtracking==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:1027: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:1027:2: rule__StringRule__LiteralAssignment_0
                     {
-                    pushFollow(FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2150);
+                    pushFollow(FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2223);
                     rule__StringRule__LiteralAssignment_0();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getStringRuleAccess().getLiteralAssignment_0()); 
+                    }
 
                     }
@@ -3189,22 +3779,26 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1001:6: ( ( rule__StringRule__ColonAssignment_1 ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031:6: ( ( rule__StringRule__ColonAssignment_1 ) )
                     {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1001:6: ( ( rule__StringRule__ColonAssignment_1 ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1002:1: ( rule__StringRule__ColonAssignment_1 )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031: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:1032:1: ( rule__StringRule__ColonAssignment_1 )
                     {
-                     before(grammarAccess.getStringRuleAccess().getColonAssignment_1()); 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003:1: ( rule__StringRule__ColonAssignment_1 )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1003:2: rule__StringRule__ColonAssignment_1
+                    if ( state.backtracking==0 ) {
+                       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:1033: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:1033:2: rule__StringRule__ColonAssignment_1
                     {
-                    pushFollow(FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2168);
+                    pushFollow(FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2241);
                     rule__StringRule__ColonAssignment_1();
 
                     state._fsp--;
-
-
-                    }
-
-                     after(grammarAccess.getStringRuleAccess().getColonAssignment_1()); 
+                    if (state.failed) return ;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getStringRuleAccess().getColonAssignment_1()); 
+                    }
 
                     }
@@ -3221,4 +3815,5 @@
         }
         finally {
+            if ( state.backtracking>0 ) { memoize(input, 56, rule__StringRule__Alternatives_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3230,33 +3825,147 @@
 
 
+    // $ANTLR start "rule__RepeatedSequence__Alternatives_3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1042:1: rule__RepeatedSequence__Alternatives_3 : ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? ) | ( ( rule__RepeatedSequence__RangeAssignment_3_1 )? ) );
+    public final void rule__RepeatedSequence__Alternatives_3() throws RecognitionException {
+        int rule__RepeatedSequence__Alternatives_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 57) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1046:1: ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? ) | ( ( rule__RepeatedSequence__RangeAssignment_3_1 )? ) )
+            int alt15=2;
+            alt15 = dfa15.predict(input);
+            switch (alt15) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1047:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1047:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1048:1: ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )?
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3_0()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1049:1: ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )?
+                    int alt13=2;
+                    int LA13_0 = input.LA(1);
+
+                    if ( (LA13_0==21) ) {
+                        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:1049:2: rule__RepeatedSequence__MorethanonceAssignment_3_0
+                            {
+                            pushFollow(FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_0_in_rule__RepeatedSequence__Alternatives_32274);
+                            rule__RepeatedSequence__MorethanonceAssignment_3_0();
+
+                            state._fsp--;
+                            if (state.failed) return ;
+
+                            }
+                            break;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_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:1053:6: ( ( rule__RepeatedSequence__RangeAssignment_3_1 )? )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1053:6: ( ( rule__RepeatedSequence__RangeAssignment_3_1 )? )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1054:1: ( rule__RepeatedSequence__RangeAssignment_3_1 )?
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getRepeatedSequenceAccess().getRangeAssignment_3_1()); 
+                    }
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1055:1: ( rule__RepeatedSequence__RangeAssignment_3_1 )?
+                    int alt14=2;
+                    int LA14_0 = input.LA(1);
+
+                    if ( (LA14_0==34) ) {
+                        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:1055:2: rule__RepeatedSequence__RangeAssignment_3_1
+                            {
+                            pushFollow(FOLLOW_rule__RepeatedSequence__RangeAssignment_3_1_in_rule__RepeatedSequence__Alternatives_32293);
+                            rule__RepeatedSequence__RangeAssignment_3_1();
+
+                            state._fsp--;
+                            if (state.failed) return ;
+
+                            }
+                            break;
+
+                    }
+
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getRepeatedSequenceAccess().getRangeAssignment_3_1()); 
+                    }
+
+                    }
+
+
+                    }
+                    break;
+
+            }
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 57, rule__RepeatedSequence__Alternatives_3_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__Alternatives_3"
+
+
     // $ANTLR start "rule__EtsiBnf__Group_0__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1014:1: rule__EtsiBnf__Group_0__0 : rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1066:1: rule__EtsiBnf__Group_0__0 : rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1 ;
     public final void rule__EtsiBnf__Group_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1018:1: ( rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1019:2: rule__EtsiBnf__Group_0__0__Impl rule__EtsiBnf__Group_0__1
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__02199);
+        int rule__EtsiBnf__Group_0__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 58) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1070: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:1071: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__02325);
             rule__EtsiBnf__Group_0__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02202);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02328);
             rule__EtsiBnf__Group_0__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 58, rule__EtsiBnf__Group_0__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3269,31 +3978,38 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1026:1: rule__EtsiBnf__Group_0__0__Impl : ( 'grammar' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1078:1: rule__EtsiBnf__Group_0__0__Impl : ( 'grammar' ) ;
     public final void rule__EtsiBnf__Group_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1030:1: ( ( 'grammar' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031:1: ( 'grammar' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1031:1: ( 'grammar' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1032:1: 'grammar'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
-            match(input,22,FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2230); 
-             after(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__Group_0__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 59) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1082:1: ( ( 'grammar' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1083:1: ( 'grammar' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1083:1: ( 'grammar' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1084:1: 'grammar'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
+            }
+            match(input,22,FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2356); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getGrammarKeyword_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 59, rule__EtsiBnf__Group_0__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3306,32 +4022,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1045:1: rule__EtsiBnf__Group_0__1 : rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1097:1: rule__EtsiBnf__Group_0__1 : rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2 ;
     public final void rule__EtsiBnf__Group_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1049:1: ( rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1050:2: rule__EtsiBnf__Group_0__1__Impl rule__EtsiBnf__Group_0__2
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12261);
+        int rule__EtsiBnf__Group_0__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 60) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1101: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:1102: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__12387);
             rule__EtsiBnf__Group_0__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12264);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12390);
             rule__EtsiBnf__Group_0__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 60, rule__EtsiBnf__Group_0__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3344,41 +4063,48 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1057:1: rule__EtsiBnf__Group_0__1__Impl : ( ( rule__EtsiBnf__NameAssignment_0_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1109:1: rule__EtsiBnf__Group_0__1__Impl : ( ( rule__EtsiBnf__NameAssignment_0_1 ) ) ;
     public final void rule__EtsiBnf__Group_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1061:1: ( ( ( rule__EtsiBnf__NameAssignment_0_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1062:1: ( ( rule__EtsiBnf__NameAssignment_0_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1062:1: ( ( rule__EtsiBnf__NameAssignment_0_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1063:1: ( rule__EtsiBnf__NameAssignment_0_1 )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1064:1: ( rule__EtsiBnf__NameAssignment_0_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1064:2: rule__EtsiBnf__NameAssignment_0_1
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2291);
+        int rule__EtsiBnf__Group_0__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 61) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1113: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:1114: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:1114: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:1115:1: ( rule__EtsiBnf__NameAssignment_0_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1116: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:1116:2: rule__EtsiBnf__NameAssignment_0_1
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2417);
             rule__EtsiBnf__NameAssignment_0_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getNameAssignment_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 61, rule__EtsiBnf__Group_0__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3391,27 +4117,30 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1074:1: rule__EtsiBnf__Group_0__2 : rule__EtsiBnf__Group_0__2__Impl ;
+    // ../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_0__2 : rule__EtsiBnf__Group_0__2__Impl ;
     public final void rule__EtsiBnf__Group_0__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1078:1: ( rule__EtsiBnf__Group_0__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1079:2: rule__EtsiBnf__Group_0__2__Impl
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22321);
+        int rule__EtsiBnf__Group_0__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 62) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1130: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:1131:2: rule__EtsiBnf__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22447);
             rule__EtsiBnf__Group_0__2__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 62, rule__EtsiBnf__Group_0__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3424,41 +4153,48 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1085:1: rule__EtsiBnf__Group_0__2__Impl : ( ( rule__EtsiBnf__Group_0_2__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1137:1: rule__EtsiBnf__Group_0__2__Impl : ( ( rule__EtsiBnf__Group_0_2__0 ) ) ;
     public final void rule__EtsiBnf__Group_0__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1089:1: ( ( ( rule__EtsiBnf__Group_0_2__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1090:1: ( ( rule__EtsiBnf__Group_0_2__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1090:1: ( ( rule__EtsiBnf__Group_0_2__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1091:1: ( rule__EtsiBnf__Group_0_2__0 )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1092:1: ( rule__EtsiBnf__Group_0_2__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1092:2: rule__EtsiBnf__Group_0_2__0
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2348);
+        int rule__EtsiBnf__Group_0__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 63) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1141:1: ( ( ( rule__EtsiBnf__Group_0_2__0 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1142: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:1142: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:1143:1: ( rule__EtsiBnf__Group_0_2__0 )
+            {
+            if ( state.backtracking==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:1144: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:1144:2: rule__EtsiBnf__Group_0_2__0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2474);
             rule__EtsiBnf__Group_0_2__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getGroup_0_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 63, rule__EtsiBnf__Group_0__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3471,32 +4207,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1108:1: rule__EtsiBnf__Group_0_2__0 : rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1160:1: rule__EtsiBnf__Group_0_2__0 : rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1 ;
     public final void rule__EtsiBnf__Group_0_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1112:1: ( rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1113:2: rule__EtsiBnf__Group_0_2__0__Impl rule__EtsiBnf__Group_0_2__1
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02384);
+        int rule__EtsiBnf__Group_0_2__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 64) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1164: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:1165: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__02510);
             rule__EtsiBnf__Group_0_2__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02387);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02513);
             rule__EtsiBnf__Group_0_2__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 64, rule__EtsiBnf__Group_0_2__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3509,33 +4248,37 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1120:1: rule__EtsiBnf__Group_0_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1172:1: rule__EtsiBnf__Group_0_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? ) ;
     public final void rule__EtsiBnf__Group_0_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1124:1: ( ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1125:1: ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1125:1: ( ( rule__EtsiBnf__TypeAssignment_0_2_0 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1126:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1127:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
-            int alt13=2;
-            int LA13_0 = input.LA(1);
-
-            if ( (LA13_0==34) ) {
-                alt13=1;
-            }
-            switch (alt13) {
+        int rule__EtsiBnf__Group_0_2__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 65) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1176: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:1177: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:1177: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:1178:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
+            {
+            if ( state.backtracking==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:1179:1: ( rule__EtsiBnf__TypeAssignment_0_2_0 )?
+            int alt16=2;
+            int LA16_0 = input.LA(1);
+
+            if ( (LA16_0==36) ) {
+                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:1127:2: 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:1179:2: rule__EtsiBnf__TypeAssignment_0_2_0
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2414);
+                    pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2540);
                     rule__EtsiBnf__TypeAssignment_0_2_0();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -3544,17 +4287,20 @@
             }
 
-             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_0_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 65, rule__EtsiBnf__Group_0_2__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3567,32 +4313,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1137:1: rule__EtsiBnf__Group_0_2__1 : rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1189:1: rule__EtsiBnf__Group_0_2__1 : rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2 ;
     public final void rule__EtsiBnf__Group_0_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1141:1: ( rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1142:2: rule__EtsiBnf__Group_0_2__1__Impl rule__EtsiBnf__Group_0_2__2
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12445);
+        int rule__EtsiBnf__Group_0_2__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 66) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1193: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:1194: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__12571);
             rule__EtsiBnf__Group_0_2__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12448);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12574);
             rule__EtsiBnf__Group_0_2__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 66, rule__EtsiBnf__Group_0_2__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3605,31 +4354,38 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1149:1: rule__EtsiBnf__Group_0_2__1__Impl : ( ';' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1201:1: rule__EtsiBnf__Group_0_2__1__Impl : ( ';' ) ;
     public final void rule__EtsiBnf__Group_0_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1153:1: ( ( ';' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1154:1: ( ';' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1154:1: ( ';' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1155:1: ';'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
-            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2476); 
-             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__Group_0_2__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 67) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1205:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1206:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1206:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1207:1: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
+            }
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2602); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_0_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 67, rule__EtsiBnf__Group_0_2__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3642,32 +4398,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1168:1: rule__EtsiBnf__Group_0_2__2 : rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1220:1: rule__EtsiBnf__Group_0_2__2 : rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3 ;
     public final void rule__EtsiBnf__Group_0_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1172:1: ( rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1173:2: rule__EtsiBnf__Group_0_2__2__Impl rule__EtsiBnf__Group_0_2__3
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22507);
+        int rule__EtsiBnf__Group_0_2__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 68) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1224: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:1225: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__22633);
             rule__EtsiBnf__Group_0_2__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22510);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22636);
             rule__EtsiBnf__Group_0_2__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 68, rule__EtsiBnf__Group_0_2__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3680,33 +4439,37 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1180:1: rule__EtsiBnf__Group_0_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1232:1: rule__EtsiBnf__Group_0_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) ;
     public final void rule__EtsiBnf__Group_0_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1184:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1185:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1185:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1186:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1187:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
-            int alt14=2;
-            int LA14_0 = input.LA(1);
-
-            if ( (LA14_0==24) ) {
-                alt14=1;
-            }
-            switch (alt14) {
+        int rule__EtsiBnf__Group_0_2__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 69) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1236:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1237:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1237:1: ( ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1238:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1239:1: ( rule__EtsiBnf__ImportSectionAssignment_0_2_2 )?
+            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:1187:2: rule__EtsiBnf__ImportSectionAssignment_0_2_2
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1239:2: rule__EtsiBnf__ImportSectionAssignment_0_2_2
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2537);
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2663);
                     rule__EtsiBnf__ImportSectionAssignment_0_2_2();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -3715,17 +4478,20 @@
             }
 
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_0_2_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 69, rule__EtsiBnf__Group_0_2__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3738,27 +4504,30 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1197:1: rule__EtsiBnf__Group_0_2__3 : rule__EtsiBnf__Group_0_2__3__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1249:1: rule__EtsiBnf__Group_0_2__3 : rule__EtsiBnf__Group_0_2__3__Impl ;
     public final void rule__EtsiBnf__Group_0_2__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1201:1: ( rule__EtsiBnf__Group_0_2__3__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1202:2: rule__EtsiBnf__Group_0_2__3__Impl
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32568);
+        int rule__EtsiBnf__Group_0_2__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 70) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1253: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:1254:2: rule__EtsiBnf__Group_0_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32694);
             rule__EtsiBnf__Group_0_2__3__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 70, rule__EtsiBnf__Group_0_2__3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3771,59 +4540,67 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_0_2__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1208:1: rule__EtsiBnf__Group_0_2__3__Impl : ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1260:1: rule__EtsiBnf__Group_0_2__3__Impl : ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) ;
     public final void rule__EtsiBnf__Group_0_2__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1212:1: ( ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1213:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1213:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1214:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1214:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1215:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1216:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1216:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2597);
+        int rule__EtsiBnf__Group_0_2__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 71) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1264:1: ( ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1265:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1265:1: ( ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1266:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) ) ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1266:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1267:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1268:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1268:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2723);
             rule__EtsiBnf__BnfEntryAssignment_0_2_3();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
-
-            }
-
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1219:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1220:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
-            {
-             before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1221:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
-            loop15:
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            }
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1271:1: ( ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1272:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1273:1: ( rule__EtsiBnf__BnfEntryAssignment_0_2_3 )*
+            loop18:
             do {
-                int alt15=2;
-                int LA15_0 = input.LA(1);
-
-                if ( ((LA15_0>=RULE_ID && LA15_0<=RULE_SECTIONHEADER)||LA15_0==RULE_INT) ) {
-                    alt15=1;
+                int alt18=2;
+                int LA18_0 = input.LA(1);
+
+                if ( ((LA18_0>=RULE_ID && LA18_0<=RULE_SECTIONHEADER)||LA18_0==RULE_INT) ) {
+                    alt18=1;
                 }
 
 
-                switch (alt15) {
+                switch (alt18) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1221:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1273:2: rule__EtsiBnf__BnfEntryAssignment_0_2_3
             	    {
-            	    pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2609);
+            	    pushFollow(FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2735);
             	    rule__EtsiBnf__BnfEntryAssignment_0_2_3();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -3831,24 +4608,27 @@
 
             	default :
-            	    break loop15;
+            	    break loop18;
                 }
             } while (true);
 
-             after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getBnfEntryAssignment_0_2_3()); 
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 71, rule__EtsiBnf__Group_0_2__3__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3861,32 +4641,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1240:1: rule__EtsiBnf__Group_1__0 : rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1292:1: rule__EtsiBnf__Group_1__0 : rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1 ;
     public final void rule__EtsiBnf__Group_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1244:1: ( rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1245:2: rule__EtsiBnf__Group_1__0__Impl rule__EtsiBnf__Group_1__1
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02650);
+        int rule__EtsiBnf__Group_1__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 72) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1296: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:1297: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__02776);
             rule__EtsiBnf__Group_1__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02653);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02779);
             rule__EtsiBnf__Group_1__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 72, rule__EtsiBnf__Group_1__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3899,41 +4682,48 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1252:1: rule__EtsiBnf__Group_1__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_1_0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1304:1: rule__EtsiBnf__Group_1__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_1_0 ) ) ;
     public final void rule__EtsiBnf__Group_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1256:1: ( ( ( rule__EtsiBnf__TypeAssignment_1_0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1257:1: ( ( rule__EtsiBnf__TypeAssignment_1_0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1257:1: ( ( rule__EtsiBnf__TypeAssignment_1_0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1258:1: ( rule__EtsiBnf__TypeAssignment_1_0 )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1259:1: ( rule__EtsiBnf__TypeAssignment_1_0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1259:2: rule__EtsiBnf__TypeAssignment_1_0
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2680);
+        int rule__EtsiBnf__Group_1__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 73) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1308: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:1309: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:1309: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:1310:1: ( rule__EtsiBnf__TypeAssignment_1_0 )
+            {
+            if ( state.backtracking==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:1311: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:1311:2: rule__EtsiBnf__TypeAssignment_1_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2806);
             rule__EtsiBnf__TypeAssignment_1_0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 73, rule__EtsiBnf__Group_1__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3946,32 +4736,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1269:1: rule__EtsiBnf__Group_1__1 : rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1321:1: rule__EtsiBnf__Group_1__1 : rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2 ;
     public final void rule__EtsiBnf__Group_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1273:1: ( rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1274:2: rule__EtsiBnf__Group_1__1__Impl rule__EtsiBnf__Group_1__2
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12710);
+        int rule__EtsiBnf__Group_1__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 74) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1325: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:1326: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__12836);
             rule__EtsiBnf__Group_1__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12713);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12839);
             rule__EtsiBnf__Group_1__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 74, rule__EtsiBnf__Group_1__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -3984,31 +4777,38 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1281:1: rule__EtsiBnf__Group_1__1__Impl : ( ';' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1333:1: rule__EtsiBnf__Group_1__1__Impl : ( ';' ) ;
     public final void rule__EtsiBnf__Group_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1285:1: ( ( ';' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1286:1: ( ';' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1286:1: ( ';' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1287:1: ';'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
-            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2741); 
-             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__Group_1__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 75) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1337:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1338:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1338:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1339:1: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
+            }
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2867); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 75, rule__EtsiBnf__Group_1__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4021,32 +4821,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1300:1: rule__EtsiBnf__Group_1__2 : rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1352:1: rule__EtsiBnf__Group_1__2 : rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3 ;
     public final void rule__EtsiBnf__Group_1__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1304:1: ( rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1305:2: rule__EtsiBnf__Group_1__2__Impl rule__EtsiBnf__Group_1__3
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22772);
+        int rule__EtsiBnf__Group_1__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 76) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1356: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:1357: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__22898);
             rule__EtsiBnf__Group_1__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22775);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22901);
             rule__EtsiBnf__Group_1__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 76, rule__EtsiBnf__Group_1__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4059,33 +4862,37 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1312:1: rule__EtsiBnf__Group_1__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1364:1: rule__EtsiBnf__Group_1__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) ;
     public final void rule__EtsiBnf__Group_1__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1316:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1317:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1317:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1318:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1319:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
-            int alt16=2;
-            int LA16_0 = input.LA(1);
-
-            if ( (LA16_0==24) ) {
-                alt16=1;
-            }
-            switch (alt16) {
+        int rule__EtsiBnf__Group_1__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 77) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1368:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1369:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1369:1: ( ( rule__EtsiBnf__ImportSectionAssignment_1_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1370:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1371:1: ( rule__EtsiBnf__ImportSectionAssignment_1_2 )?
+            int alt19=2;
+            int LA19_0 = input.LA(1);
+
+            if ( (LA19_0==24) ) {
+                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:1319:2: rule__EtsiBnf__ImportSectionAssignment_1_2
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1371:2: rule__EtsiBnf__ImportSectionAssignment_1_2
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2802);
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2928);
                     rule__EtsiBnf__ImportSectionAssignment_1_2();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -4094,17 +4901,20 @@
             }
 
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_1_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 77, rule__EtsiBnf__Group_1__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4117,27 +4927,30 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1329:1: rule__EtsiBnf__Group_1__3 : rule__EtsiBnf__Group_1__3__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1381:1: rule__EtsiBnf__Group_1__3 : rule__EtsiBnf__Group_1__3__Impl ;
     public final void rule__EtsiBnf__Group_1__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1333:1: ( rule__EtsiBnf__Group_1__3__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1334:2: rule__EtsiBnf__Group_1__3__Impl
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32833);
+        int rule__EtsiBnf__Group_1__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 78) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1385: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:1386:2: rule__EtsiBnf__Group_1__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32959);
             rule__EtsiBnf__Group_1__3__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 78, rule__EtsiBnf__Group_1__3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4150,37 +4963,41 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_1__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1340:1: rule__EtsiBnf__Group_1__3__Impl : ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1392:1: rule__EtsiBnf__Group_1__3__Impl : ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) ;
     public final void rule__EtsiBnf__Group_1__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1344:1: ( ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1345:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1345:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1346:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
-            {
-             before(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1347:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
-            loop17:
+        int rule__EtsiBnf__Group_1__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 79) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1396:1: ( ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1397:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1397:1: ( ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1398:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1399:1: ( rule__EtsiBnf__DeltaEntryAssignment_1_3 )*
+            loop20:
             do {
-                int alt17=2;
-                int LA17_0 = input.LA(1);
-
-                if ( ((LA17_0>=RULE_ID && LA17_0<=RULE_SECTIONHEADER)||LA17_0==RULE_INT) ) {
-                    alt17=1;
+                int alt20=2;
+                int LA20_0 = input.LA(1);
+
+                if ( ((LA20_0>=RULE_ID && LA20_0<=RULE_SECTIONHEADER)||LA20_0==RULE_INT) ) {
+                    alt20=1;
                 }
 
 
-                switch (alt17) {
+                switch (alt20) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1347:2: rule__EtsiBnf__DeltaEntryAssignment_1_3
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1399:2: rule__EtsiBnf__DeltaEntryAssignment_1_3
             	    {
-            	    pushFollow(FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2860);
+            	    pushFollow(FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2986);
             	    rule__EtsiBnf__DeltaEntryAssignment_1_3();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -4188,21 +5005,24 @@
 
             	default :
-            	    break loop17;
+            	    break loop20;
                 }
             } while (true);
 
-             after(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getDeltaEntryAssignment_1_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 79, rule__EtsiBnf__Group_1__3__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4215,32 +5035,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1365:1: rule__EtsiBnf__Group_2__0 : rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1417:1: rule__EtsiBnf__Group_2__0 : rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1 ;
     public final void rule__EtsiBnf__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1369:1: ( rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1370:2: rule__EtsiBnf__Group_2__0__Impl rule__EtsiBnf__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__02899);
+        int rule__EtsiBnf__Group_2__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 80) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1421: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:1422: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__03025);
             rule__EtsiBnf__Group_2__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02902);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__03028);
             rule__EtsiBnf__Group_2__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 80, rule__EtsiBnf__Group_2__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4253,41 +5076,48 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1377:1: rule__EtsiBnf__Group_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_2_0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1429:1: rule__EtsiBnf__Group_2__0__Impl : ( ( rule__EtsiBnf__TypeAssignment_2_0 ) ) ;
     public final void rule__EtsiBnf__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1381:1: ( ( ( rule__EtsiBnf__TypeAssignment_2_0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1382:1: ( ( rule__EtsiBnf__TypeAssignment_2_0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1382:1: ( ( rule__EtsiBnf__TypeAssignment_2_0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1383:1: ( rule__EtsiBnf__TypeAssignment_2_0 )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1384:1: ( rule__EtsiBnf__TypeAssignment_2_0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1384:2: rule__EtsiBnf__TypeAssignment_2_0
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2929);
+        int rule__EtsiBnf__Group_2__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 81) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1433: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:1434: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:1434: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:1435:1: ( rule__EtsiBnf__TypeAssignment_2_0 )
+            {
+            if ( state.backtracking==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:1436: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:1436:2: rule__EtsiBnf__TypeAssignment_2_0
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl3055);
             rule__EtsiBnf__TypeAssignment_2_0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeAssignment_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 81, rule__EtsiBnf__Group_2__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4300,32 +5130,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1394:1: rule__EtsiBnf__Group_2__1 : rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1446:1: rule__EtsiBnf__Group_2__1 : rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2 ;
     public final void rule__EtsiBnf__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1398:1: ( rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1399:2: rule__EtsiBnf__Group_2__1__Impl rule__EtsiBnf__Group_2__2
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__12959);
+        int rule__EtsiBnf__Group_2__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 82) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1450: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:1451: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__13085);
             rule__EtsiBnf__Group_2__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12962);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__13088);
             rule__EtsiBnf__Group_2__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 82, rule__EtsiBnf__Group_2__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4338,31 +5171,38 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1406:1: rule__EtsiBnf__Group_2__1__Impl : ( ';' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1458:1: rule__EtsiBnf__Group_2__1__Impl : ( ';' ) ;
     public final void rule__EtsiBnf__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1410:1: ( ( ';' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1411:1: ( ';' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1411:1: ( ';' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1412:1: ';'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
-            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2990); 
-             after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__Group_2__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 83) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1462:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1463:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1463:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1464:1: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
+            }
+            match(input,23,FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl3116); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getSemicolonKeyword_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 83, rule__EtsiBnf__Group_2__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4375,32 +5215,35 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1425:1: rule__EtsiBnf__Group_2__2 : rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1477:1: rule__EtsiBnf__Group_2__2 : rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3 ;
     public final void rule__EtsiBnf__Group_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1429:1: ( rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1430:2: rule__EtsiBnf__Group_2__2__Impl rule__EtsiBnf__Group_2__3
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__23021);
+        int rule__EtsiBnf__Group_2__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 84) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1481: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:1482: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__23147);
             rule__EtsiBnf__Group_2__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23024);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23150);
             rule__EtsiBnf__Group_2__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 84, rule__EtsiBnf__Group_2__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4413,33 +5256,37 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1437:1: rule__EtsiBnf__Group_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1489:1: rule__EtsiBnf__Group_2__2__Impl : ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) ;
     public final void rule__EtsiBnf__Group_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1441:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1442:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1442:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1443:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1444:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
-            int alt18=2;
-            int LA18_0 = input.LA(1);
-
-            if ( (LA18_0==24) ) {
-                alt18=1;
-            }
-            switch (alt18) {
+        int rule__EtsiBnf__Group_2__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 85) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1493:1: ( ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1494:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1494:1: ( ( rule__EtsiBnf__ImportSectionAssignment_2_2 )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1495:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1496:1: ( rule__EtsiBnf__ImportSectionAssignment_2_2 )?
+            int alt21=2;
+            int LA21_0 = input.LA(1);
+
+            if ( (LA21_0==24) ) {
+                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:1444:2: rule__EtsiBnf__ImportSectionAssignment_2_2
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1496:2: rule__EtsiBnf__ImportSectionAssignment_2_2
                     {
-                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3051);
+                    pushFollow(FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3177);
                     rule__EtsiBnf__ImportSectionAssignment_2_2();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -4448,17 +5295,20 @@
             }
 
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionAssignment_2_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 85, rule__EtsiBnf__Group_2__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4471,27 +5321,30 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1454:1: rule__EtsiBnf__Group_2__3 : rule__EtsiBnf__Group_2__3__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1506:1: rule__EtsiBnf__Group_2__3 : rule__EtsiBnf__Group_2__3__Impl ;
     public final void rule__EtsiBnf__Group_2__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1458:1: ( rule__EtsiBnf__Group_2__3__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1459:2: rule__EtsiBnf__Group_2__3__Impl
-            {
-            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33082);
+        int rule__EtsiBnf__Group_2__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 86) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1510: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:1511:2: rule__EtsiBnf__Group_2__3__Impl
+            {
+            pushFollow(FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33208);
             rule__EtsiBnf__Group_2__3__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 86, rule__EtsiBnf__Group_2__3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4504,37 +5357,41 @@
 
     // $ANTLR start "rule__EtsiBnf__Group_2__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1465:1: rule__EtsiBnf__Group_2__3__Impl : ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1517:1: rule__EtsiBnf__Group_2__3__Impl : ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) ;
     public final void rule__EtsiBnf__Group_2__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1469:1: ( ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1470:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1470:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1471:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
-            {
-             before(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1472:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
-            loop19:
+        int rule__EtsiBnf__Group_2__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 87) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1521:1: ( ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1522:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1522:1: ( ( rule__EtsiBnf__MergeEntryAssignment_2_3 )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1523:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1524:1: ( rule__EtsiBnf__MergeEntryAssignment_2_3 )*
+            loop22:
             do {
-                int alt19=2;
-                int LA19_0 = input.LA(1);
-
-                if ( (LA19_0==RULE_SECTIONHEADER||LA19_0==30||(LA19_0>=32 && LA19_0<=33)) ) {
-                    alt19=1;
+                int alt22=2;
+                int LA22_0 = input.LA(1);
+
+                if ( (LA22_0==RULE_SECTIONHEADER||LA22_0==30||(LA22_0>=32 && LA22_0<=33)) ) {
+                    alt22=1;
                 }
 
 
-                switch (alt19) {
+                switch (alt22) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1472:2: rule__EtsiBnf__MergeEntryAssignment_2_3
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1524:2: rule__EtsiBnf__MergeEntryAssignment_2_3
             	    {
-            	    pushFollow(FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3109);
+            	    pushFollow(FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3235);
             	    rule__EtsiBnf__MergeEntryAssignment_2_3();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -4542,21 +5399,24 @@
 
             	default :
-            	    break loop19;
+            	    break loop22;
                 }
             } while (true);
 
-             after(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getMergeEntryAssignment_2_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 87, rule__EtsiBnf__Group_2__3__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4569,32 +5429,35 @@
 
     // $ANTLR start "rule__SectionHeading__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1490:1: rule__SectionHeading__Group__0 : rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1542:1: rule__SectionHeading__Group__0 : rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1 ;
     public final void rule__SectionHeading__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1494:1: ( rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1495:2: rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1
-            {
-            pushFollow(FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03148);
+        int rule__SectionHeading__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 88) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1546: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:1547:2: rule__SectionHeading__Group__0__Impl rule__SectionHeading__Group__1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03274);
             rule__SectionHeading__Group__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03151);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03277);
             rule__SectionHeading__Group__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 88, rule__SectionHeading__Group__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4607,31 +5470,38 @@
 
     // $ANTLR start "rule__SectionHeading__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1502:1: rule__SectionHeading__Group__0__Impl : ( () ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1554:1: rule__SectionHeading__Group__0__Impl : ( () ) ;
     public final void rule__SectionHeading__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1506:1: ( ( () ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1507:1: ( () )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1507:1: ( () )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1508:1: ()
-            {
-             before(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1509:1: ()
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1511:1: 
-            {
-            }
-
-             after(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); 
-
-            }
-
-
-            }
-
-        }
-        finally {
+        int rule__SectionHeading__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 89) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1558:1: ( ( () ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1559:1: ( () )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1559:1: ( () )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1560:1: ()
+            {
+            if ( state.backtracking==0 ) {
+               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:1561:1: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1563:1: 
+            {
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSectionHeadingAccess().getSectionHeadingAction_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 89, rule__SectionHeading__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4644,27 +5514,30 @@
 
     // $ANTLR start "rule__SectionHeading__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1521:1: rule__SectionHeading__Group__1 : rule__SectionHeading__Group__1__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1573:1: rule__SectionHeading__Group__1 : rule__SectionHeading__Group__1__Impl ;
     public final void rule__SectionHeading__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1525:1: ( rule__SectionHeading__Group__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1526:2: rule__SectionHeading__Group__1__Impl
-            {
-            pushFollow(FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13209);
+        int rule__SectionHeading__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 90) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1577: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:1578:2: rule__SectionHeading__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13335);
             rule__SectionHeading__Group__1__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 90, rule__SectionHeading__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4677,41 +5550,48 @@
 
     // $ANTLR start "rule__SectionHeading__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1532:1: rule__SectionHeading__Group__1__Impl : ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1584:1: rule__SectionHeading__Group__1__Impl : ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) ) ;
     public final void rule__SectionHeading__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1536:1: ( ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1537:1: ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1537:1: ( ( rule__SectionHeading__SectionHeaderAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1538:1: ( rule__SectionHeading__SectionHeaderAssignment_1 )
-            {
-             before(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1539:1: ( rule__SectionHeading__SectionHeaderAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1539:2: rule__SectionHeading__SectionHeaderAssignment_1
-            {
-            pushFollow(FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3236);
+        int rule__SectionHeading__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 91) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1588: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:1589: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:1589: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:1590:1: ( rule__SectionHeading__SectionHeaderAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1591: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:1591:2: rule__SectionHeading__SectionHeaderAssignment_1
+            {
+            pushFollow(FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3362);
             rule__SectionHeading__SectionHeaderAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSectionHeadingAccess().getSectionHeaderAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 91, rule__SectionHeading__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4724,32 +5604,35 @@
 
     // $ANTLR start "rule__Import__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1553:1: rule__Import__Group__0 : rule__Import__Group__0__Impl rule__Import__Group__1 ;
+    // ../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__0 : rule__Import__Group__0__Impl rule__Import__Group__1 ;
     public final void rule__Import__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1557:1: ( rule__Import__Group__0__Impl rule__Import__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1558:2: rule__Import__Group__0__Impl rule__Import__Group__1
-            {
-            pushFollow(FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03270);
+        int rule__Import__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 92) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1609: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:1610:2: rule__Import__Group__0__Impl rule__Import__Group__1
+            {
+            pushFollow(FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03396);
             rule__Import__Group__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03273);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03399);
             rule__Import__Group__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 92, rule__Import__Group__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4762,31 +5645,38 @@
 
     // $ANTLR start "rule__Import__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1565:1: rule__Import__Group__0__Impl : ( 'import' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1617:1: rule__Import__Group__0__Impl : ( 'import' ) ;
     public final void rule__Import__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1569:1: ( ( 'import' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1570:1: ( 'import' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1570:1: ( 'import' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1571:1: 'import'
-            {
-             before(grammarAccess.getImportAccess().getImportKeyword_0()); 
-            match(input,24,FOLLOW_24_in_rule__Import__Group__0__Impl3301); 
-             after(grammarAccess.getImportAccess().getImportKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 93) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1621:1: ( ( 'import' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1622:1: ( 'import' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1622:1: ( 'import' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1623:1: 'import'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getImportKeyword_0()); 
+            }
+            match(input,24,FOLLOW_24_in_rule__Import__Group__0__Impl3427); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getImportKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 93, rule__Import__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4799,32 +5689,35 @@
 
     // $ANTLR start "rule__Import__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1584:1: rule__Import__Group__1 : rule__Import__Group__1__Impl rule__Import__Group__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1636:1: rule__Import__Group__1 : rule__Import__Group__1__Impl rule__Import__Group__2 ;
     public final void rule__Import__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1588:1: ( rule__Import__Group__1__Impl rule__Import__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1589:2: rule__Import__Group__1__Impl rule__Import__Group__2
-            {
-            pushFollow(FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13332);
+        int rule__Import__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 94) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1640: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:1641:2: rule__Import__Group__1__Impl rule__Import__Group__2
+            {
+            pushFollow(FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13458);
             rule__Import__Group__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13335);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13461);
             rule__Import__Group__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 94, rule__Import__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4837,41 +5730,48 @@
 
     // $ANTLR start "rule__Import__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1596:1: rule__Import__Group__1__Impl : ( ( rule__Import__ImportURIAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1648:1: rule__Import__Group__1__Impl : ( ( rule__Import__ImportURIAssignment_1 ) ) ;
     public final void rule__Import__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1600:1: ( ( ( rule__Import__ImportURIAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1601:1: ( ( rule__Import__ImportURIAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1601:1: ( ( rule__Import__ImportURIAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1602:1: ( rule__Import__ImportURIAssignment_1 )
-            {
-             before(grammarAccess.getImportAccess().getImportURIAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1603:1: ( rule__Import__ImportURIAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1603:2: rule__Import__ImportURIAssignment_1
-            {
-            pushFollow(FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3362);
+        int rule__Import__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 95) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1652: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:1653: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:1653: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:1654:1: ( rule__Import__ImportURIAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1655: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:1655:2: rule__Import__ImportURIAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3488);
             rule__Import__ImportURIAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getImportAccess().getImportURIAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getImportURIAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 95, rule__Import__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4884,32 +5784,35 @@
 
     // $ANTLR start "rule__Import__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1613:1: rule__Import__Group__2 : rule__Import__Group__2__Impl rule__Import__Group__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1665:1: rule__Import__Group__2 : rule__Import__Group__2__Impl rule__Import__Group__3 ;
     public final void rule__Import__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1617:1: ( rule__Import__Group__2__Impl rule__Import__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1618:2: rule__Import__Group__2__Impl rule__Import__Group__3
-            {
-            pushFollow(FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23392);
+        int rule__Import__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 96) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1669: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:1670:2: rule__Import__Group__2__Impl rule__Import__Group__3
+            {
+            pushFollow(FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23518);
             rule__Import__Group__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23395);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23521);
             rule__Import__Group__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 96, rule__Import__Group__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -4922,875 +5825,37 @@
 
     // $ANTLR start "rule__Import__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1625:1: rule__Import__Group__2__Impl : ( ( rule__Import__Group_2__0 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1677:1: rule__Import__Group__2__Impl : ( ( rule__Import__Group_2__0 )? ) ;
     public final void rule__Import__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1629:1: ( ( ( rule__Import__Group_2__0 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1630:1: ( ( rule__Import__Group_2__0 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1630:1: ( ( rule__Import__Group_2__0 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1631:1: ( rule__Import__Group_2__0 )?
-            {
-             before(grammarAccess.getImportAccess().getGroup_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1632:1: ( rule__Import__Group_2__0 )?
-            int alt20=2;
-            int LA20_0 = input.LA(1);
-
-            if ( (LA20_0==25) ) {
-                alt20=1;
-            }
-            switch (alt20) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1632:2: rule__Import__Group_2__0
-                    {
-                    pushFollow(FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3422);
-                    rule__Import__Group_2__0();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getImportAccess().getGroup_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group__2__Impl"
-
-
-    // $ANTLR start "rule__Import__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1642:1: rule__Import__Group__3 : rule__Import__Group__3__Impl rule__Import__Group__4 ;
-    public final void rule__Import__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1646:1: ( rule__Import__Group__3__Impl rule__Import__Group__4 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1647:2: rule__Import__Group__3__Impl rule__Import__Group__4
-            {
-            pushFollow(FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33453);
-            rule__Import__Group__3__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33456);
-            rule__Import__Group__4();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group__3"
-
-
-    // $ANTLR start "rule__Import__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1654:1: rule__Import__Group__3__Impl : ( ( rule__Import__Group_3__0 )? ) ;
-    public final void rule__Import__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1658:1: ( ( ( rule__Import__Group_3__0 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1659:1: ( ( rule__Import__Group_3__0 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1659:1: ( ( rule__Import__Group_3__0 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1660:1: ( rule__Import__Group_3__0 )?
-            {
-             before(grammarAccess.getImportAccess().getGroup_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1661:1: ( rule__Import__Group_3__0 )?
-            int alt21=2;
-            int LA21_0 = input.LA(1);
-
-            if ( (LA21_0==26) ) {
-                alt21=1;
-            }
-            switch (alt21) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1661:2: rule__Import__Group_3__0
-                    {
-                    pushFollow(FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3483);
-                    rule__Import__Group_3__0();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getImportAccess().getGroup_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group__3__Impl"
-
-
-    // $ANTLR start "rule__Import__Group__4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1671:1: rule__Import__Group__4 : rule__Import__Group__4__Impl ;
-    public final void rule__Import__Group__4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1675:1: ( rule__Import__Group__4__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1676:2: rule__Import__Group__4__Impl
-            {
-            pushFollow(FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43514);
-            rule__Import__Group__4__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group__4"
-
-
-    // $ANTLR start "rule__Import__Group__4__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1682:1: rule__Import__Group__4__Impl : ( ';' ) ;
-    public final void rule__Import__Group__4__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1686:1: ( ( ';' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1687:1: ( ';' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1687:1: ( ';' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1688:1: ';'
-            {
-             before(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
-            match(input,23,FOLLOW_23_in_rule__Import__Group__4__Impl3542); 
-             after(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group__4__Impl"
-
-
-    // $ANTLR start "rule__Import__Group_2__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1711:1: rule__Import__Group_2__0 : rule__Import__Group_2__0__Impl rule__Import__Group_2__1 ;
-    public final void rule__Import__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1715:1: ( rule__Import__Group_2__0__Impl rule__Import__Group_2__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1716:2: rule__Import__Group_2__0__Impl rule__Import__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03583);
-            rule__Import__Group_2__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03586);
-            rule__Import__Group_2__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_2__0"
-
-
-    // $ANTLR start "rule__Import__Group_2__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1723:1: rule__Import__Group_2__0__Impl : ( '/' ) ;
-    public final void rule__Import__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1727:1: ( ( '/' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1728:1: ( '/' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1728:1: ( '/' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1729:1: '/'
-            {
-             before(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
-            match(input,25,FOLLOW_25_in_rule__Import__Group_2__0__Impl3614); 
-             after(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_2__0__Impl"
-
-
-    // $ANTLR start "rule__Import__Group_2__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1742:1: rule__Import__Group_2__1 : rule__Import__Group_2__1__Impl ;
-    public final void rule__Import__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1746:1: ( rule__Import__Group_2__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1747:2: rule__Import__Group_2__1__Impl
-            {
-            pushFollow(FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13645);
-            rule__Import__Group_2__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_2__1"
-
-
-    // $ANTLR start "rule__Import__Group_2__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1753:1: rule__Import__Group_2__1__Impl : ( ( rule__Import__Alternatives_2_1 ) ) ;
-    public final void rule__Import__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1757:1: ( ( ( rule__Import__Alternatives_2_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1758:1: ( ( rule__Import__Alternatives_2_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1758:1: ( ( rule__Import__Alternatives_2_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1759:1: ( rule__Import__Alternatives_2_1 )
-            {
-             before(grammarAccess.getImportAccess().getAlternatives_2_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1760:1: ( rule__Import__Alternatives_2_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1760:2: rule__Import__Alternatives_2_1
-            {
-            pushFollow(FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3672);
-            rule__Import__Alternatives_2_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getImportAccess().getAlternatives_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__Import__Group_3__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1774:1: rule__Import__Group_3__0 : rule__Import__Group_3__0__Impl rule__Import__Group_3__1 ;
-    public final void rule__Import__Group_3__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1778:1: ( rule__Import__Group_3__0__Impl rule__Import__Group_3__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1779:2: rule__Import__Group_3__0__Impl rule__Import__Group_3__1
-            {
-            pushFollow(FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03706);
-            rule__Import__Group_3__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03709);
-            rule__Import__Group_3__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_3__0"
-
-
-    // $ANTLR start "rule__Import__Group_3__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1786:1: rule__Import__Group_3__0__Impl : ( 'label:' ) ;
-    public final void rule__Import__Group_3__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1790:1: ( ( 'label:' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1791:1: ( 'label:' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1791:1: ( 'label:' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1792:1: 'label:'
-            {
-             before(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
-            match(input,26,FOLLOW_26_in_rule__Import__Group_3__0__Impl3737); 
-             after(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_3__0__Impl"
-
-
-    // $ANTLR start "rule__Import__Group_3__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1805:1: rule__Import__Group_3__1 : rule__Import__Group_3__1__Impl ;
-    public final void rule__Import__Group_3__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1809:1: ( rule__Import__Group_3__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1810:2: rule__Import__Group_3__1__Impl
-            {
-            pushFollow(FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13768);
-            rule__Import__Group_3__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_3__1"
-
-
-    // $ANTLR start "rule__Import__Group_3__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1816:1: rule__Import__Group_3__1__Impl : ( ( rule__Import__LabelAssignment_3_1 ) ) ;
-    public final void rule__Import__Group_3__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1820:1: ( ( ( rule__Import__LabelAssignment_3_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1821:1: ( ( rule__Import__LabelAssignment_3_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1821:1: ( ( rule__Import__LabelAssignment_3_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1822:1: ( rule__Import__LabelAssignment_3_1 )
-            {
-             before(grammarAccess.getImportAccess().getLabelAssignment_3_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1823:1: ( rule__Import__LabelAssignment_3_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1823:2: rule__Import__LabelAssignment_3_1
-            {
-            pushFollow(FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3795);
-            rule__Import__LabelAssignment_3_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getImportAccess().getLabelAssignment_3_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Import__Group_3__1__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1837:1: rule__Rule__Group__0 : rule__Rule__Group__0__Impl rule__Rule__Group__1 ;
-    public final void rule__Rule__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1841:1: ( rule__Rule__Group__0__Impl rule__Rule__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1842:2: rule__Rule__Group__0__Impl rule__Rule__Group__1
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03829);
-            rule__Rule__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03832);
-            rule__Rule__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__0"
-
-
-    // $ANTLR start "rule__Rule__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1849:1: rule__Rule__Group__0__Impl : ( ( rule__Rule__Group_0__0 )? ) ;
-    public final void rule__Rule__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1853:1: ( ( ( rule__Rule__Group_0__0 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1854:1: ( ( rule__Rule__Group_0__0 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1854:1: ( ( rule__Rule__Group_0__0 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1855:1: ( rule__Rule__Group_0__0 )?
-            {
-             before(grammarAccess.getRuleAccess().getGroup_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1856:1: ( rule__Rule__Group_0__0 )?
-            int alt22=2;
-            int LA22_0 = input.LA(1);
-
-            if ( (LA22_0==RULE_INT) ) {
-                alt22=1;
-            }
-            switch (alt22) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1856:2: rule__Rule__Group_0__0
-                    {
-                    pushFollow(FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3859);
-                    rule__Rule__Group_0__0();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getRuleAccess().getGroup_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__0__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1866:1: rule__Rule__Group__1 : rule__Rule__Group__1__Impl rule__Rule__Group__2 ;
-    public final void rule__Rule__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1870:1: ( rule__Rule__Group__1__Impl rule__Rule__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1871:2: rule__Rule__Group__1__Impl rule__Rule__Group__2
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13890);
-            rule__Rule__Group__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13893);
-            rule__Rule__Group__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__1"
-
-
-    // $ANTLR start "rule__Rule__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1878:1: rule__Rule__Group__1__Impl : ( ( rule__Rule__NameAssignment_1 ) ) ;
-    public final void rule__Rule__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1882:1: ( ( ( rule__Rule__NameAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1883:1: ( ( rule__Rule__NameAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1883:1: ( ( rule__Rule__NameAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1884:1: ( rule__Rule__NameAssignment_1 )
-            {
-             before(grammarAccess.getRuleAccess().getNameAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1885:1: ( rule__Rule__NameAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1885:2: rule__Rule__NameAssignment_1
-            {
-            pushFollow(FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3920);
-            rule__Rule__NameAssignment_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleAccess().getNameAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__1__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1895:1: rule__Rule__Group__2 : rule__Rule__Group__2__Impl rule__Rule__Group__3 ;
-    public final void rule__Rule__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1899:1: ( rule__Rule__Group__2__Impl rule__Rule__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1900:2: rule__Rule__Group__2__Impl rule__Rule__Group__3
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23950);
-            rule__Rule__Group__2__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23953);
-            rule__Rule__Group__3();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__2"
-
-
-    // $ANTLR start "rule__Rule__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1907:1: rule__Rule__Group__2__Impl : ( '::=' ) ;
-    public final void rule__Rule__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1911:1: ( ( '::=' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1912:1: ( '::=' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1912:1: ( '::=' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1913:1: '::='
-            {
-             before(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
-            match(input,27,FOLLOW_27_in_rule__Rule__Group__2__Impl3981); 
-             after(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__2__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1926:1: rule__Rule__Group__3 : rule__Rule__Group__3__Impl rule__Rule__Group__4 ;
-    public final void rule__Rule__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1930:1: ( rule__Rule__Group__3__Impl rule__Rule__Group__4 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1931:2: rule__Rule__Group__3__Impl rule__Rule__Group__4
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34012);
-            rule__Rule__Group__3__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34015);
-            rule__Rule__Group__4();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__3"
-
-
-    // $ANTLR start "rule__Rule__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1938:1: rule__Rule__Group__3__Impl : ( ( rule__Rule__DefinitionListAssignment_3 )? ) ;
-    public final void rule__Rule__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1942:1: ( ( ( rule__Rule__DefinitionListAssignment_3 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1943:1: ( ( rule__Rule__DefinitionListAssignment_3 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1943:1: ( ( rule__Rule__DefinitionListAssignment_3 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1944:1: ( rule__Rule__DefinitionListAssignment_3 )?
-            {
-             before(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1945:1: ( rule__Rule__DefinitionListAssignment_3 )?
+        int rule__Import__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 97) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1681: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:1682: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:1682: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:1683:1: ( rule__Import__Group_2__0 )?
+            {
+            if ( state.backtracking==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:1684:1: ( rule__Import__Group_2__0 )?
             int alt23=2;
             int LA23_0 = input.LA(1);
 
-            if ( (LA23_0==RULE_STRING||LA23_0==RULE_COLON||(LA23_0>=17 && LA23_0<=19)) ) {
+            if ( (LA23_0==25) ) {
                 alt23=1;
-            }
-            else if ( (LA23_0==RULE_ID) ) {
-                int LA23_2 = input.LA(2);
-
-                if ( (LA23_2==EOF||(LA23_2>=RULE_ID && LA23_2<=RULE_INT)||LA23_2==RULE_COLON||LA23_2==16||(LA23_2>=18 && LA23_2<=19)||LA23_2==23) ) {
-                    alt23=1;
-                }
-                else if ( (LA23_2==17) ) {
-                    int LA23_4 = input.LA(3);
-
-                    if ( (LA23_4==RULE_ID||LA23_4==RULE_STRING||LA23_4==RULE_COLON||(LA23_4>=17 && LA23_4<=19)) ) {
-                        alt23=1;
-                    }
-                }
             }
             switch (alt23) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1945:2: rule__Rule__DefinitionListAssignment_3
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1684:2: rule__Import__Group_2__0
                     {
-                    pushFollow(FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4042);
-                    rule__Rule__DefinitionListAssignment_3();
+                    pushFollow(FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3548);
+                    rule__Import__Group_2__0();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -5799,85 +5864,104 @@
             }
 
-             after(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__3__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group__4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1955:1: rule__Rule__Group__4 : rule__Rule__Group__4__Impl ;
-    public final void rule__Rule__Group__4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1959:1: ( rule__Rule__Group__4__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1960:2: rule__Rule__Group__4__Impl
-            {
-            pushFollow(FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44073);
-            rule__Rule__Group__4__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__4"
-
-
-    // $ANTLR start "rule__Rule__Group__4__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1966:1: rule__Rule__Group__4__Impl : ( ( ';' )? ) ;
-    public final void rule__Rule__Group__4__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1970:1: ( ( ( ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1971:1: ( ( ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1971:1: ( ( ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1972:1: ( ';' )?
-            {
-             before(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1973:1: ( ';' )?
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGroup_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 97, rule__Import__Group__2__Impl_StartIndex); }
+
+            	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:1694:1: rule__Import__Group__3 : rule__Import__Group__3__Impl rule__Import__Group__4 ;
+    public final void rule__Import__Group__3() throws RecognitionException {
+        int rule__Import__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 98) ) { return ; }
+            // ../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__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:1699:2: rule__Import__Group__3__Impl rule__Import__Group__4
+            {
+            pushFollow(FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33579);
+            rule__Import__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33582);
+            rule__Import__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 98, rule__Import__Group__3_StartIndex); }
+
+            	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:1706:1: rule__Import__Group__3__Impl : ( ( rule__Import__Group_3__0 )? ) ;
+    public final void rule__Import__Group__3__Impl() throws RecognitionException {
+        int rule__Import__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 99) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1710: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:1711: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:1711: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:1712:1: ( rule__Import__Group_3__0 )?
+            {
+            if ( state.backtracking==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:1713:1: ( rule__Import__Group_3__0 )?
             int alt24=2;
             int LA24_0 = input.LA(1);
 
-            if ( (LA24_0==23) ) {
+            if ( (LA24_0==26) ) {
                 alt24=1;
             }
             switch (alt24) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1974:2: ';'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1713:2: rule__Import__Group_3__0
                     {
-                    match(input,23,FOLLOW_23_in_rule__Rule__Group__4__Impl4102); 
+                    pushFollow(FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3609);
+                    rule__Import__Group_3__0();
+
+                    state._fsp--;
+                    if (state.failed) return ;
 
                     }
@@ -5886,179 +5970,534 @@
             }
 
-             after(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group__4__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group_0__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1995:1: rule__Rule__Group_0__0 : rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1 ;
-    public final void rule__Rule__Group_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1999:1: ( rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2000:2: rule__Rule__Group_0__0__Impl rule__Rule__Group_0__1
-            {
-            pushFollow(FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__04145);
-            rule__Rule__Group_0__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04148);
-            rule__Rule__Group_0__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__0"
-
-
-    // $ANTLR start "rule__Rule__Group_0__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2007:1: rule__Rule__Group_0__0__Impl : ( ( rule__Rule__RulenumberAssignment_0_0 ) ) ;
-    public final void rule__Rule__Group_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2011:1: ( ( ( rule__Rule__RulenumberAssignment_0_0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2012:1: ( ( rule__Rule__RulenumberAssignment_0_0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2012:1: ( ( rule__Rule__RulenumberAssignment_0_0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2013:1: ( rule__Rule__RulenumberAssignment_0_0 )
-            {
-             before(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2014:1: ( rule__Rule__RulenumberAssignment_0_0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2014:2: rule__Rule__RulenumberAssignment_0_0
-            {
-            pushFollow(FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4175);
-            rule__Rule__RulenumberAssignment_0_0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__0__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group_0__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2024:1: rule__Rule__Group_0__1 : rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2 ;
-    public final void rule__Rule__Group_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2028:1: ( rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2029:2: rule__Rule__Group_0__1__Impl rule__Rule__Group_0__2
-            {
-            pushFollow(FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__14205);
-            rule__Rule__Group_0__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14208);
-            rule__Rule__Group_0__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__1"
-
-
-    // $ANTLR start "rule__Rule__Group_0__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2036:1: rule__Rule__Group_0__1__Impl : ( ( rule__Rule__RulevariantAssignment_0_1 )? ) ;
-    public final void rule__Rule__Group_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2040:1: ( ( ( rule__Rule__RulevariantAssignment_0_1 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2041:1: ( ( rule__Rule__RulevariantAssignment_0_1 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2041:1: ( ( rule__Rule__RulevariantAssignment_0_1 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2042:1: ( rule__Rule__RulevariantAssignment_0_1 )?
-            {
-             before(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2043:1: ( rule__Rule__RulevariantAssignment_0_1 )?
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGroup_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 99, rule__Import__Group__3__Impl_StartIndex); }
+
+            	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:1723:1: rule__Import__Group__4 : rule__Import__Group__4__Impl ;
+    public final void rule__Import__Group__4() throws RecognitionException {
+        int rule__Import__Group__4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 100) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1727: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:1728:2: rule__Import__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43640);
+            rule__Import__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 100, rule__Import__Group__4_StartIndex); }
+
+            	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:1734:1: rule__Import__Group__4__Impl : ( ';' ) ;
+    public final void rule__Import__Group__4__Impl() throws RecognitionException {
+        int rule__Import__Group__4__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 101) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1738:1: ( ( ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1739:1: ( ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1739:1: ( ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1740:1: ';'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
+            }
+            match(input,23,FOLLOW_23_in_rule__Import__Group__4__Impl3668); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getSemicolonKeyword_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 101, rule__Import__Group__4__Impl_StartIndex); }
+
+            	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:1763: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 rule__Import__Group_2__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 102) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1767: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:1768: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__03709);
+            rule__Import__Group_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03712);
+            rule__Import__Group_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 102, rule__Import__Group_2__0_StartIndex); }
+
+            	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:1775:1: rule__Import__Group_2__0__Impl : ( '/' ) ;
+    public final void rule__Import__Group_2__0__Impl() throws RecognitionException {
+        int rule__Import__Group_2__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 103) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1779:1: ( ( '/' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1780:1: ( '/' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1780:1: ( '/' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1781:1: '/'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
+            }
+            match(input,25,FOLLOW_25_in_rule__Import__Group_2__0__Impl3740); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getSolidusKeyword_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 103, rule__Import__Group_2__0__Impl_StartIndex); }
+
+            	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:1794:1: rule__Import__Group_2__1 : rule__Import__Group_2__1__Impl ;
+    public final void rule__Import__Group_2__1() throws RecognitionException {
+        int rule__Import__Group_2__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 104) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1798: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:1799:2: rule__Import__Group_2__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13771);
+            rule__Import__Group_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 104, rule__Import__Group_2__1_StartIndex); }
+
+            	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:1805:1: rule__Import__Group_2__1__Impl : ( ( rule__Import__Alternatives_2_1 ) ) ;
+    public final void rule__Import__Group_2__1__Impl() throws RecognitionException {
+        int rule__Import__Group_2__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 105) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1809: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:1810: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:1810: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:1811:1: ( rule__Import__Alternatives_2_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1812: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:1812:2: rule__Import__Alternatives_2_1
+            {
+            pushFollow(FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3798);
+            rule__Import__Alternatives_2_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getAlternatives_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 105, rule__Import__Group_2__1__Impl_StartIndex); }
+
+            	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:1826: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 rule__Import__Group_3__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 106) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1830: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:1831: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__03832);
+            rule__Import__Group_3__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03835);
+            rule__Import__Group_3__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 106, rule__Import__Group_3__0_StartIndex); }
+
+            	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:1838:1: rule__Import__Group_3__0__Impl : ( 'label:' ) ;
+    public final void rule__Import__Group_3__0__Impl() throws RecognitionException {
+        int rule__Import__Group_3__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 107) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1842:1: ( ( 'label:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1843:1: ( 'label:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1843:1: ( 'label:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1844:1: 'label:'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
+            }
+            match(input,26,FOLLOW_26_in_rule__Import__Group_3__0__Impl3863); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getLabelKeyword_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 107, rule__Import__Group_3__0__Impl_StartIndex); }
+
+            	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:1857:1: rule__Import__Group_3__1 : rule__Import__Group_3__1__Impl ;
+    public final void rule__Import__Group_3__1() throws RecognitionException {
+        int rule__Import__Group_3__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 108) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1861: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:1862:2: rule__Import__Group_3__1__Impl
+            {
+            pushFollow(FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13894);
+            rule__Import__Group_3__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 108, rule__Import__Group_3__1_StartIndex); }
+
+            	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:1868:1: rule__Import__Group_3__1__Impl : ( ( rule__Import__LabelAssignment_3_1 ) ) ;
+    public final void rule__Import__Group_3__1__Impl() throws RecognitionException {
+        int rule__Import__Group_3__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 109) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1872: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:1873: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:1873: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:1874:1: ( rule__Import__LabelAssignment_3_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1875: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:1875:2: rule__Import__LabelAssignment_3_1
+            {
+            pushFollow(FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3921);
+            rule__Import__LabelAssignment_3_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getLabelAssignment_3_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 109, rule__Import__Group_3__1__Impl_StartIndex); }
+
+            	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:1889:1: rule__Rule__Group__0 : rule__Rule__Group__0__Impl rule__Rule__Group__1 ;
+    public final void rule__Rule__Group__0() throws RecognitionException {
+        int rule__Rule__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 110) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1893: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:1894:2: rule__Rule__Group__0__Impl rule__Rule__Group__1
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03955);
+            rule__Rule__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03958);
+            rule__Rule__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 110, rule__Rule__Group__0_StartIndex); }
+
+            	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:1901:1: rule__Rule__Group__0__Impl : ( ( rule__Rule__Group_0__0 )? ) ;
+    public final void rule__Rule__Group__0__Impl() throws RecognitionException {
+        int rule__Rule__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 111) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1905: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:1906: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:1906: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:1907:1: ( rule__Rule__Group_0__0 )?
+            {
+            if ( state.backtracking==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:1908:1: ( rule__Rule__Group_0__0 )?
             int alt25=2;
             int LA25_0 = input.LA(1);
 
-            if ( (LA25_0==RULE_ID) ) {
+            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:2043:2: 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:1908:2: rule__Rule__Group_0__0
                     {
-                    pushFollow(FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4235);
-                    rule__Rule__RulevariantAssignment_0_1();
+                    pushFollow(FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3985);
+                    rule__Rule__Group_0__0();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -6067,164 +6506,782 @@
             }
 
-             after(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__1__Impl"
-
-
-    // $ANTLR start "rule__Rule__Group_0__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2053:1: rule__Rule__Group_0__2 : rule__Rule__Group_0__2__Impl ;
-    public final void rule__Rule__Group_0__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2057:1: ( rule__Rule__Group_0__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2058:2: rule__Rule__Group_0__2__Impl
-            {
-            pushFollow(FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24266);
-            rule__Rule__Group_0__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__2"
-
-
-    // $ANTLR start "rule__Rule__Group_0__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2064:1: rule__Rule__Group_0__2__Impl : ( '.' ) ;
-    public final void rule__Rule__Group_0__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2068:1: ( ( '.' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2069:1: ( '.' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2069:1: ( '.' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2070:1: '.'
-            {
-             before(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
-            match(input,28,FOLLOW_28_in_rule__Rule__Group_0__2__Impl4294); 
-             after(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__Rule__Group_0__2__Impl"
-
-
-    // $ANTLR start "rule__ExtRule__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2089:1: rule__ExtRule__Group__0 : rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1 ;
-    public final void rule__ExtRule__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2093:1: ( rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2094:2: rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04331);
-            rule__ExtRule__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04334);
-            rule__ExtRule__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group__0"
-
-
-    // $ANTLR start "rule__ExtRule__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2101:1: rule__ExtRule__Group__0__Impl : ( ( rule__ExtRule__Group_0__0 )? ) ;
-    public final void rule__ExtRule__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2105:1: ( ( ( rule__ExtRule__Group_0__0 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2106:1: ( ( rule__ExtRule__Group_0__0 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2106:1: ( ( rule__ExtRule__Group_0__0 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2107:1: ( rule__ExtRule__Group_0__0 )?
-            {
-             before(grammarAccess.getExtRuleAccess().getGroup_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2108:1: ( rule__ExtRule__Group_0__0 )?
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getGroup_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 111, rule__Rule__Group__0__Impl_StartIndex); }
+
+            	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:1918:1: rule__Rule__Group__1 : rule__Rule__Group__1__Impl rule__Rule__Group__2 ;
+    public final void rule__Rule__Group__1() throws RecognitionException {
+        int rule__Rule__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 112) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1922: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:1923:2: rule__Rule__Group__1__Impl rule__Rule__Group__2
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__14016);
+            rule__Rule__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__14019);
+            rule__Rule__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 112, rule__Rule__Group__1_StartIndex); }
+
+            	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:1930:1: rule__Rule__Group__1__Impl : ( ( rule__Rule__NameAssignment_1 ) ) ;
+    public final void rule__Rule__Group__1__Impl() throws RecognitionException {
+        int rule__Rule__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 113) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1934: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:1935: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:1935: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:1936:1: ( rule__Rule__NameAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:1937: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:1937:2: rule__Rule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl4046);
+            rule__Rule__NameAssignment_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getNameAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 113, rule__Rule__Group__1__Impl_StartIndex); }
+
+            	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:1947:1: rule__Rule__Group__2 : rule__Rule__Group__2__Impl rule__Rule__Group__3 ;
+    public final void rule__Rule__Group__2() throws RecognitionException {
+        int rule__Rule__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 114) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1951: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:1952:2: rule__Rule__Group__2__Impl rule__Rule__Group__3
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__24076);
+            rule__Rule__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__24079);
+            rule__Rule__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 114, rule__Rule__Group__2_StartIndex); }
+
+            	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:1959:1: rule__Rule__Group__2__Impl : ( '::=' ) ;
+    public final void rule__Rule__Group__2__Impl() throws RecognitionException {
+        int rule__Rule__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 115) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1963:1: ( ( '::=' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1964:1: ( '::=' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1964:1: ( '::=' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1965:1: '::='
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
+            }
+            match(input,27,FOLLOW_27_in_rule__Rule__Group__2__Impl4107); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getColonColonEqualsSignKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 115, rule__Rule__Group__2__Impl_StartIndex); }
+
+            	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:1978:1: rule__Rule__Group__3 : rule__Rule__Group__3__Impl rule__Rule__Group__4 ;
+    public final void rule__Rule__Group__3() throws RecognitionException {
+        int rule__Rule__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 116) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1982: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:1983:2: rule__Rule__Group__3__Impl rule__Rule__Group__4
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34138);
+            rule__Rule__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34141);
+            rule__Rule__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 116, rule__Rule__Group__3_StartIndex); }
+
+            	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:1990:1: rule__Rule__Group__3__Impl : ( ( rule__Rule__DefinitionListAssignment_3 )? ) ;
+    public final void rule__Rule__Group__3__Impl() throws RecognitionException {
+        int rule__Rule__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 117) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1994: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:1995: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:1995: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:1996:1: ( rule__Rule__DefinitionListAssignment_3 )?
+            {
+            if ( state.backtracking==0 ) {
+               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:1997:1: ( rule__Rule__DefinitionListAssignment_3 )?
             int alt26=2;
             int LA26_0 = input.LA(1);
 
-            if ( (LA26_0==RULE_INT) ) {
+            if ( (LA26_0==RULE_STRING||LA26_0==RULE_COLON||(LA26_0>=17 && LA26_0<=19)) ) {
                 alt26=1;
+            }
+            else 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==16||(LA26_2>=18 && LA26_2<=19)||LA26_2==23) ) {
+                    alt26=1;
+                }
+                else if ( (LA26_2==17) ) {
+                    int LA26_4 = input.LA(3);
+
+                    if ( (LA26_4==RULE_ID||LA26_4==RULE_STRING||LA26_4==RULE_COLON||(LA26_4>=17 && LA26_4<=19)) ) {
+                        alt26=1;
+                    }
+                }
             }
             switch (alt26) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2108:2: rule__ExtRule__Group_0__0
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1997:2: rule__Rule__DefinitionListAssignment_3
                     {
-                    pushFollow(FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4361);
+                    pushFollow(FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4168);
+                    rule__Rule__DefinitionListAssignment_3();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getDefinitionListAssignment_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 117, rule__Rule__Group__3__Impl_StartIndex); }
+
+            	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:2007:1: rule__Rule__Group__4 : rule__Rule__Group__4__Impl ;
+    public final void rule__Rule__Group__4() throws RecognitionException {
+        int rule__Rule__Group__4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 118) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2011: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:2012:2: rule__Rule__Group__4__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44199);
+            rule__Rule__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 118, rule__Rule__Group__4_StartIndex); }
+
+            	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:2018:1: rule__Rule__Group__4__Impl : ( ( ';' )? ) ;
+    public final void rule__Rule__Group__4__Impl() throws RecognitionException {
+        int rule__Rule__Group__4__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 119) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2022:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2023:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2023:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2024:1: ( ';' )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2025: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:2026:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__Rule__Group__4__Impl4228); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getSemicolonKeyword_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 119, rule__Rule__Group__4__Impl_StartIndex); }
+
+            	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:2047: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 rule__Rule__Group_0__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 120) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2051: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:2052: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__04271);
+            rule__Rule__Group_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04274);
+            rule__Rule__Group_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 120, rule__Rule__Group_0__0_StartIndex); }
+
+            	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:2059:1: rule__Rule__Group_0__0__Impl : ( ( rule__Rule__RulenumberAssignment_0_0 ) ) ;
+    public final void rule__Rule__Group_0__0__Impl() throws RecognitionException {
+        int rule__Rule__Group_0__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 121) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2063: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:2064: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:2064: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:2065:1: ( rule__Rule__RulenumberAssignment_0_0 )
+            {
+            if ( state.backtracking==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:2066: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:2066:2: rule__Rule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4301);
+            rule__Rule__RulenumberAssignment_0_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getRulenumberAssignment_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 121, rule__Rule__Group_0__0__Impl_StartIndex); }
+
+            	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:2076: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 rule__Rule__Group_0__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 122) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2080: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:2081: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__14331);
+            rule__Rule__Group_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14334);
+            rule__Rule__Group_0__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 122, rule__Rule__Group_0__1_StartIndex); }
+
+            	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:2088:1: rule__Rule__Group_0__1__Impl : ( ( rule__Rule__RulevariantAssignment_0_1 )? ) ;
+    public final void rule__Rule__Group_0__1__Impl() throws RecognitionException {
+        int rule__Rule__Group_0__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 123) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2092: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:2093: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:2093: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:2094:1: ( rule__Rule__RulevariantAssignment_0_1 )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2095:1: ( rule__Rule__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:2095:2: rule__Rule__RulevariantAssignment_0_1
+                    {
+                    pushFollow(FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4361);
+                    rule__Rule__RulevariantAssignment_0_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getRulevariantAssignment_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 123, rule__Rule__Group_0__1__Impl_StartIndex); }
+
+            	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:2105:1: rule__Rule__Group_0__2 : rule__Rule__Group_0__2__Impl ;
+    public final void rule__Rule__Group_0__2() throws RecognitionException {
+        int rule__Rule__Group_0__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 124) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2109: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:2110:2: rule__Rule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24392);
+            rule__Rule__Group_0__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 124, rule__Rule__Group_0__2_StartIndex); }
+
+            	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:2116:1: rule__Rule__Group_0__2__Impl : ( '.' ) ;
+    public final void rule__Rule__Group_0__2__Impl() throws RecognitionException {
+        int rule__Rule__Group_0__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 125) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2120:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2121:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2121:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2122:1: '.'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
+            }
+            match(input,28,FOLLOW_28_in_rule__Rule__Group_0__2__Impl4420); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getFullStopKeyword_0_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 125, rule__Rule__Group_0__2__Impl_StartIndex); }
+
+            	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:2141:1: rule__ExtRule__Group__0 : rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1 ;
+    public final void rule__ExtRule__Group__0() throws RecognitionException {
+        int rule__ExtRule__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 126) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2145: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:2146:2: rule__ExtRule__Group__0__Impl rule__ExtRule__Group__1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04457);
+            rule__ExtRule__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04460);
+            rule__ExtRule__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 126, rule__ExtRule__Group__0_StartIndex); }
+
+            	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:2153:1: rule__ExtRule__Group__0__Impl : ( ( rule__ExtRule__Group_0__0 )? ) ;
+    public final void rule__ExtRule__Group__0__Impl() throws RecognitionException {
+        int rule__ExtRule__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 127) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2157: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:2158: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:2158: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:2159:1: ( rule__ExtRule__Group_0__0 )?
+            {
+            if ( state.backtracking==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:2160:1: ( rule__ExtRule__Group_0__0 )?
+            int alt29=2;
+            int LA29_0 = input.LA(1);
+
+            if ( (LA29_0==RULE_INT) ) {
+                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:2160:2: rule__ExtRule__Group_0__0
+                    {
+                    pushFollow(FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4487);
                     rule__ExtRule__Group_0__0();
 
                     state._fsp--;
-
+                    if (state.failed) return ;
 
                     }
@@ -6233,17 +7290,20 @@
             }
 
-             after(grammarAccess.getExtRuleAccess().getGroup_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getGroup_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 127, rule__ExtRule__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6256,32 +7316,35 @@
 
     // $ANTLR start "rule__ExtRule__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2118:1: rule__ExtRule__Group__1 : rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2170:1: rule__ExtRule__Group__1 : rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2 ;
     public final void rule__ExtRule__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2122:1: ( rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2123:2: rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14392);
+        int rule__ExtRule__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 128) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2174: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:2175:2: rule__ExtRule__Group__1__Impl rule__ExtRule__Group__2
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14518);
             rule__ExtRule__Group__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14395);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14521);
             rule__ExtRule__Group__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 128, rule__ExtRule__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6294,41 +7357,48 @@
 
     // $ANTLR start "rule__ExtRule__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2130:1: rule__ExtRule__Group__1__Impl : ( ( rule__ExtRule__NameAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2182:1: rule__ExtRule__Group__1__Impl : ( ( rule__ExtRule__NameAssignment_1 ) ) ;
     public final void rule__ExtRule__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2134:1: ( ( ( rule__ExtRule__NameAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2135:1: ( ( rule__ExtRule__NameAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2135:1: ( ( rule__ExtRule__NameAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2136:1: ( rule__ExtRule__NameAssignment_1 )
-            {
-             before(grammarAccess.getExtRuleAccess().getNameAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2137:1: ( rule__ExtRule__NameAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2137:2: rule__ExtRule__NameAssignment_1
-            {
-            pushFollow(FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4422);
+        int rule__ExtRule__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 129) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2186: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:2187: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:2187: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:2188:1: ( rule__ExtRule__NameAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2189: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:2189:2: rule__ExtRule__NameAssignment_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4548);
             rule__ExtRule__NameAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getNameAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getNameAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 129, rule__ExtRule__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6341,32 +7411,35 @@
 
     // $ANTLR start "rule__ExtRule__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2147:1: rule__ExtRule__Group__2 : rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2199:1: rule__ExtRule__Group__2 : rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3 ;
     public final void rule__ExtRule__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2151:1: ( rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2152:2: rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24452);
+        int rule__ExtRule__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 130) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2203: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:2204:2: rule__ExtRule__Group__2__Impl rule__ExtRule__Group__3
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24578);
             rule__ExtRule__Group__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24455);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24581);
             rule__ExtRule__Group__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 130, rule__ExtRule__Group__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6379,41 +7452,48 @@
 
     // $ANTLR start "rule__ExtRule__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2159:1: rule__ExtRule__Group__2__Impl : ( ( rule__ExtRule__Group_2__0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2211:1: rule__ExtRule__Group__2__Impl : ( ( rule__ExtRule__Group_2__0 ) ) ;
     public final void rule__ExtRule__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2163:1: ( ( ( rule__ExtRule__Group_2__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2164:1: ( ( rule__ExtRule__Group_2__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2164:1: ( ( rule__ExtRule__Group_2__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2165:1: ( rule__ExtRule__Group_2__0 )
-            {
-             before(grammarAccess.getExtRuleAccess().getGroup_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2166:1: ( rule__ExtRule__Group_2__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2166:2: rule__ExtRule__Group_2__0
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4482);
+        int rule__ExtRule__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 131) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2215: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:2216: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:2216: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:2217:1: ( rule__ExtRule__Group_2__0 )
+            {
+            if ( state.backtracking==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:2218: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:2218:2: rule__ExtRule__Group_2__0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4608);
             rule__ExtRule__Group_2__0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getGroup_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getGroup_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 131, rule__ExtRule__Group__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6426,32 +7506,35 @@
 
     // $ANTLR start "rule__ExtRule__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2176:1: rule__ExtRule__Group__3 : rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2228:1: rule__ExtRule__Group__3 : rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4 ;
     public final void rule__ExtRule__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2180:1: ( rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2181:2: rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34512);
+        int rule__ExtRule__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 132) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2232: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:2233:2: rule__ExtRule__Group__3__Impl rule__ExtRule__Group__4
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34638);
             rule__ExtRule__Group__3__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34515);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34641);
             rule__ExtRule__Group__4();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 132, rule__ExtRule__Group__3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6464,31 +7547,38 @@
 
     // $ANTLR start "rule__ExtRule__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2188:1: rule__ExtRule__Group__3__Impl : ( '<-' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2240:1: rule__ExtRule__Group__3__Impl : ( '<-' ) ;
     public final void rule__ExtRule__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2192:1: ( ( '<-' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2193:1: ( '<-' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2193:1: ( '<-' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2194:1: '<-'
-            {
-             before(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
-            match(input,29,FOLLOW_29_in_rule__ExtRule__Group__3__Impl4543); 
-             after(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__ExtRule__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 133) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2244:1: ( ( '<-' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2245:1: ( '<-' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2245:1: ( '<-' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2246:1: '<-'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
+            }
+            match(input,29,FOLLOW_29_in_rule__ExtRule__Group__3__Impl4669); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getLessThanSignHyphenMinusKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 133, rule__ExtRule__Group__3__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6501,32 +7591,35 @@
 
     // $ANTLR start "rule__ExtRule__Group__4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2207:1: rule__ExtRule__Group__4 : rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2259:1: rule__ExtRule__Group__4 : rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5 ;
     public final void rule__ExtRule__Group__4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2211:1: ( rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2212:2: rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44574);
+        int rule__ExtRule__Group__4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 134) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2263: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:2264:2: rule__ExtRule__Group__4__Impl rule__ExtRule__Group__5
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44700);
             rule__ExtRule__Group__4__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44577);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44703);
             rule__ExtRule__Group__5();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 134, rule__ExtRule__Group__4_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6539,44 +7632,48 @@
 
     // $ANTLR start "rule__ExtRule__Group__4__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2219:1: rule__ExtRule__Group__4__Impl : ( ( rule__ExtRule__Alternatives_4 )* ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2271:1: rule__ExtRule__Group__4__Impl : ( ( rule__ExtRule__Alternatives_4 )* ) ;
     public final void rule__ExtRule__Group__4__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2223:1: ( ( ( rule__ExtRule__Alternatives_4 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2224:1: ( ( rule__ExtRule__Alternatives_4 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2224:1: ( ( rule__ExtRule__Alternatives_4 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2225:1: ( rule__ExtRule__Alternatives_4 )*
-            {
-             before(grammarAccess.getExtRuleAccess().getAlternatives_4()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2226:1: ( rule__ExtRule__Alternatives_4 )*
-            loop27:
+        int rule__ExtRule__Group__4__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 135) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2275: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:2276: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:2276: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:2277:1: ( rule__ExtRule__Alternatives_4 )*
+            {
+            if ( state.backtracking==0 ) {
+               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:2278:1: ( rule__ExtRule__Alternatives_4 )*
+            loop30:
             do {
-                int alt27=2;
-                int LA27_0 = input.LA(1);
-
-                if ( (LA27_0==RULE_ID) ) {
-                    int LA27_2 = input.LA(2);
-
-                    if ( (LA27_2==EOF||(LA27_2>=RULE_ID && LA27_2<=RULE_INT)||LA27_2==RULE_COLON||(LA27_2>=13 && LA27_2<=16)||(LA27_2>=18 && LA27_2<=21)||LA27_2==23) ) {
-                        alt27=1;
-                    }
-                    else if ( (LA27_2==17) ) {
-                        int LA27_4 = input.LA(3);
-
-                        if ( (LA27_4==RULE_INT) ) {
-                            int LA27_5 = input.LA(4);
-
-                            if ( (LA27_5==RULE_ID||LA27_5==28) ) {
-                                alt27=1;
+                int alt30=2;
+                int LA30_0 = input.LA(1);
+
+                if ( (LA30_0==RULE_ID) ) {
+                    int LA30_2 = input.LA(2);
+
+                    if ( (LA30_2==EOF||(LA30_2>=RULE_ID && LA30_2<=RULE_INT)||LA30_2==RULE_COLON||(LA30_2>=13 && LA30_2<=16)||(LA30_2>=18 && LA30_2<=21)||LA30_2==23) ) {
+                        alt30=1;
+                    }
+                    else if ( (LA30_2==17) ) {
+                        int LA30_4 = input.LA(3);
+
+                        if ( (LA30_4==EOF||(LA30_4>=RULE_ID && LA30_4<=RULE_STRING)||LA30_4==RULE_COLON||(LA30_4>=13 && LA30_4<=21)||LA30_4==23) ) {
+                            alt30=1;
+                        }
+                        else if ( (LA30_4==RULE_INT) ) {
+                            int LA30_5 = input.LA(4);
+
+                            if ( (LA30_5==RULE_ID||LA30_5==28) ) {
+                                alt30=1;
                             }
 
 
                         }
-                        else if ( (LA27_4==EOF||(LA27_4>=RULE_ID && LA27_4<=RULE_STRING)||LA27_4==RULE_COLON||(LA27_4>=13 && LA27_4<=21)||LA27_4==23) ) {
-                            alt27=1;
-                        }
 
 
@@ -6585,18 +7682,18 @@
 
                 }
-                else if ( (LA27_0==RULE_STRING||LA27_0==RULE_COLON||(LA27_0>=13 && LA27_0<=21)) ) {
-                    alt27=1;
+                else if ( (LA30_0==RULE_STRING||LA30_0==RULE_COLON||(LA30_0>=13 && LA30_0<=21)) ) {
+                    alt30=1;
                 }
 
 
-                switch (alt27) {
+                switch (alt30) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2226:2: rule__ExtRule__Alternatives_4
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2278:2: rule__ExtRule__Alternatives_4
             	    {
-            	    pushFollow(FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4604);
+            	    pushFollow(FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4730);
             	    rule__ExtRule__Alternatives_4();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -6604,21 +7701,24 @@
 
             	default :
-            	    break loop27;
+            	    break loop30;
                 }
             } while (true);
 
-             after(grammarAccess.getExtRuleAccess().getAlternatives_4()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getAlternatives_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 135, rule__ExtRule__Group__4__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6631,27 +7731,30 @@
 
     // $ANTLR start "rule__ExtRule__Group__5"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2236:1: rule__ExtRule__Group__5 : rule__ExtRule__Group__5__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2288:1: rule__ExtRule__Group__5 : rule__ExtRule__Group__5__Impl ;
     public final void rule__ExtRule__Group__5() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2240:1: ( rule__ExtRule__Group__5__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2241:2: rule__ExtRule__Group__5__Impl
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54635);
+        int rule__ExtRule__Group__5_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 136) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2292: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:2293:2: rule__ExtRule__Group__5__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54761);
             rule__ExtRule__Group__5__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 136, rule__ExtRule__Group__5_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6664,29 +7767,33 @@
 
     // $ANTLR start "rule__ExtRule__Group__5__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2247:1: rule__ExtRule__Group__5__Impl : ( ( ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2299:1: rule__ExtRule__Group__5__Impl : ( ( ';' )? ) ;
     public final void rule__ExtRule__Group__5__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2251:1: ( ( ( ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2252:1: ( ( ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2252:1: ( ( ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2253:1: ( ';' )?
-            {
-             before(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2254:1: ( ';' )?
-            int alt28=2;
-            int LA28_0 = input.LA(1);
-
-            if ( (LA28_0==23) ) {
-                alt28=1;
-            }
-            switch (alt28) {
+        int rule__ExtRule__Group__5__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 137) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2303:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2304:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2304:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2305:1: ( ';' )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2306: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:2255:2: ';'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2307:2: ';'
                     {
-                    match(input,23,FOLLOW_23_in_rule__ExtRule__Group__5__Impl4664); 
+                    match(input,23,FOLLOW_23_in_rule__ExtRule__Group__5__Impl4790); if (state.failed) return ;
 
                     }
@@ -6695,17 +7802,20 @@
             }
 
-             after(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getSemicolonKeyword_5()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 137, rule__ExtRule__Group__5__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6718,32 +7828,35 @@
 
     // $ANTLR start "rule__ExtRule__Group_0__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2278:1: rule__ExtRule__Group_0__0 : rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2330:1: rule__ExtRule__Group_0__0 : rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1 ;
     public final void rule__ExtRule__Group_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2282:1: ( rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2283:2: rule__ExtRule__Group_0__0__Impl rule__ExtRule__Group_0__1
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04709);
+        int rule__ExtRule__Group_0__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 138) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2334: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:2335: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__04835);
             rule__ExtRule__Group_0__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04712);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04838);
             rule__ExtRule__Group_0__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 138, rule__ExtRule__Group_0__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6756,41 +7869,48 @@
 
     // $ANTLR start "rule__ExtRule__Group_0__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2290:1: rule__ExtRule__Group_0__0__Impl : ( ( rule__ExtRule__RulenumberAssignment_0_0 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2342:1: rule__ExtRule__Group_0__0__Impl : ( ( rule__ExtRule__RulenumberAssignment_0_0 ) ) ;
     public final void rule__ExtRule__Group_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2294:1: ( ( ( rule__ExtRule__RulenumberAssignment_0_0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2295:1: ( ( rule__ExtRule__RulenumberAssignment_0_0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2295:1: ( ( rule__ExtRule__RulenumberAssignment_0_0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2296:1: ( rule__ExtRule__RulenumberAssignment_0_0 )
-            {
-             before(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2297:1: ( rule__ExtRule__RulenumberAssignment_0_0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2297:2: rule__ExtRule__RulenumberAssignment_0_0
-            {
-            pushFollow(FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4739);
+        int rule__ExtRule__Group_0__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 139) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2346: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:2347: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:2347: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:2348:1: ( rule__ExtRule__RulenumberAssignment_0_0 )
+            {
+            if ( state.backtracking==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:2349: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:2349:2: rule__ExtRule__RulenumberAssignment_0_0
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4865);
             rule__ExtRule__RulenumberAssignment_0_0();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRulenumberAssignment_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 139, rule__ExtRule__Group_0__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6803,32 +7923,35 @@
 
     // $ANTLR start "rule__ExtRule__Group_0__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2307:1: rule__ExtRule__Group_0__1 : rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2359:1: rule__ExtRule__Group_0__1 : rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2 ;
     public final void rule__ExtRule__Group_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2311:1: ( rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2312:2: rule__ExtRule__Group_0__1__Impl rule__ExtRule__Group_0__2
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14769);
+        int rule__ExtRule__Group_0__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 140) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2363: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:2364: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__14895);
             rule__ExtRule__Group_0__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14772);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14898);
             rule__ExtRule__Group_0__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 140, rule__ExtRule__Group_0__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -6841,1095 +7964,37 @@
 
     // $ANTLR start "rule__ExtRule__Group_0__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2319:1: rule__ExtRule__Group_0__1__Impl : ( ( rule__ExtRule__RulevariantAssignment_0_1 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2371:1: rule__ExtRule__Group_0__1__Impl : ( ( rule__ExtRule__RulevariantAssignment_0_1 )? ) ;
     public final void rule__ExtRule__Group_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2323:1: ( ( ( rule__ExtRule__RulevariantAssignment_0_1 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2324:1: ( ( rule__ExtRule__RulevariantAssignment_0_1 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2324:1: ( ( rule__ExtRule__RulevariantAssignment_0_1 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2325:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
-            {
-             before(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2326:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
-            int alt29=2;
-            int LA29_0 = input.LA(1);
-
-            if ( (LA29_0==RULE_ID) ) {
-                alt29=1;
-            }
-            switch (alt29) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2326:2: rule__ExtRule__RulevariantAssignment_0_1
-                    {
-                    pushFollow(FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4799);
-                    rule__ExtRule__RulevariantAssignment_0_1();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_0__1__Impl"
-
-
-    // $ANTLR start "rule__ExtRule__Group_0__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2336:1: rule__ExtRule__Group_0__2 : rule__ExtRule__Group_0__2__Impl ;
-    public final void rule__ExtRule__Group_0__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2340:1: ( rule__ExtRule__Group_0__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2341:2: rule__ExtRule__Group_0__2__Impl
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24830);
-            rule__ExtRule__Group_0__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_0__2"
-
-
-    // $ANTLR start "rule__ExtRule__Group_0__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2347:1: rule__ExtRule__Group_0__2__Impl : ( '.' ) ;
-    public final void rule__ExtRule__Group_0__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2351:1: ( ( '.' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2352:1: ( '.' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2352:1: ( '.' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2353:1: '.'
-            {
-             before(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
-            match(input,28,FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4858); 
-             after(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_0__2__Impl"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2372:1: rule__ExtRule__Group_2__0 : rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1 ;
-    public final void rule__ExtRule__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2376:1: ( rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2377:2: rule__ExtRule__Group_2__0__Impl rule__ExtRule__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__04895);
-            rule__ExtRule__Group_2__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04898);
-            rule__ExtRule__Group_2__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__0"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2384:1: rule__ExtRule__Group_2__0__Impl : ( '(' ) ;
-    public final void rule__ExtRule__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2388:1: ( ( '(' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2389:1: ( '(' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2389:1: ( '(' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2390:1: '('
-            {
-             before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
-            match(input,17,FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4926); 
-             after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__0__Impl"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2403:1: rule__ExtRule__Group_2__1 : rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2 ;
-    public final void rule__ExtRule__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2407:1: ( rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2408:2: rule__ExtRule__Group_2__1__Impl rule__ExtRule__Group_2__2
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__14957);
-            rule__ExtRule__Group_2__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14960);
-            rule__ExtRule__Group_2__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__1"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2415:1: rule__ExtRule__Group_2__1__Impl : ( ( rule__ExtRule__RuleextAssignment_2_1 ) ) ;
-    public final void rule__ExtRule__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2419:1: ( ( ( rule__ExtRule__RuleextAssignment_2_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2420:1: ( ( rule__ExtRule__RuleextAssignment_2_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2420:1: ( ( rule__ExtRule__RuleextAssignment_2_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2421:1: ( rule__ExtRule__RuleextAssignment_2_1 )
-            {
-             before(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2422:1: ( rule__ExtRule__RuleextAssignment_2_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2422:2: rule__ExtRule__RuleextAssignment_2_1
-            {
-            pushFollow(FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4987);
-            rule__ExtRule__RuleextAssignment_2_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2432:1: rule__ExtRule__Group_2__2 : rule__ExtRule__Group_2__2__Impl ;
-    public final void rule__ExtRule__Group_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2436:1: ( rule__ExtRule__Group_2__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2437:2: rule__ExtRule__Group_2__2__Impl
-            {
-            pushFollow(FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25017);
-            rule__ExtRule__Group_2__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__2"
-
-
-    // $ANTLR start "rule__ExtRule__Group_2__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2443:1: rule__ExtRule__Group_2__2__Impl : ( ')' ) ;
-    public final void rule__ExtRule__Group_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2447:1: ( ( ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2448:1: ( ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2448:1: ( ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2449:1: ')'
-            {
-             before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
-            match(input,13,FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5045); 
-             after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__ExtRule__Group_2__2__Impl"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2468:1: rule__GlobalCombinator__Group__0 : rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1 ;
-    public final void rule__GlobalCombinator__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2472:1: ( rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2473:2: rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05082);
-            rule__GlobalCombinator__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05085);
-            rule__GlobalCombinator__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__0"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2480:1: rule__GlobalCombinator__Group__0__Impl : ( ( rule__GlobalCombinator__Group_0__0 ) ) ;
-    public final void rule__GlobalCombinator__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2484:1: ( ( ( rule__GlobalCombinator__Group_0__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2485:1: ( ( rule__GlobalCombinator__Group_0__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2485:1: ( ( rule__GlobalCombinator__Group_0__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2486:1: ( rule__GlobalCombinator__Group_0__0 )
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2487:1: ( rule__GlobalCombinator__Group_0__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2487:2: rule__GlobalCombinator__Group_0__0
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5112);
-            rule__GlobalCombinator__Group_0__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__0__Impl"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2497:1: rule__GlobalCombinator__Group__1 : rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2 ;
-    public final void rule__GlobalCombinator__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2501:1: ( rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2502:2: rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15142);
-            rule__GlobalCombinator__Group__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15145);
-            rule__GlobalCombinator__Group__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__1"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2509:1: rule__GlobalCombinator__Group__1__Impl : ( ( rule__GlobalCombinator__LogicAssignment_1 ) ) ;
-    public final void rule__GlobalCombinator__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2513:1: ( ( ( rule__GlobalCombinator__LogicAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2514:1: ( ( rule__GlobalCombinator__LogicAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2514:1: ( ( rule__GlobalCombinator__LogicAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2515:1: ( rule__GlobalCombinator__LogicAssignment_1 )
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2516:1: ( rule__GlobalCombinator__LogicAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2516:2: rule__GlobalCombinator__LogicAssignment_1
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5172);
-            rule__GlobalCombinator__LogicAssignment_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__1__Impl"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2526:1: rule__GlobalCombinator__Group__2 : rule__GlobalCombinator__Group__2__Impl ;
-    public final void rule__GlobalCombinator__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2530:1: ( rule__GlobalCombinator__Group__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2531:2: rule__GlobalCombinator__Group__2__Impl
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25202);
-            rule__GlobalCombinator__Group__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__2"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2537:1: rule__GlobalCombinator__Group__2__Impl : ( ( ';' )? ) ;
-    public final void rule__GlobalCombinator__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2541:1: ( ( ( ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2542:1: ( ( ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2542:1: ( ( ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2543:1: ( ';' )?
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2544:1: ( ';' )?
-            int alt30=2;
-            int LA30_0 = input.LA(1);
-
-            if ( (LA30_0==23) ) {
-                alt30=1;
-            }
-            switch (alt30) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2545:2: ';'
-                    {
-                    match(input,23,FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5231); 
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group__2__Impl"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group_0__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2562:1: rule__GlobalCombinator__Group_0__0 : rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1 ;
-    public final void rule__GlobalCombinator__Group_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2566:1: ( rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2567:2: rule__GlobalCombinator__Group_0__0__Impl rule__GlobalCombinator__Group_0__1
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05270);
-            rule__GlobalCombinator__Group_0__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05273);
-            rule__GlobalCombinator__Group_0__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group_0__0"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group_0__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2574:1: rule__GlobalCombinator__Group_0__0__Impl : ( 'global' ) ;
-    public final void rule__GlobalCombinator__Group_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2578:1: ( ( 'global' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2579:1: ( 'global' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2579:1: ( 'global' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2580:1: 'global'
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
-            match(input,30,FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5301); 
-             after(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group_0__0__Impl"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group_0__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2593:1: rule__GlobalCombinator__Group_0__1 : rule__GlobalCombinator__Group_0__1__Impl ;
-    public final void rule__GlobalCombinator__Group_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2597:1: ( rule__GlobalCombinator__Group_0__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2598:2: rule__GlobalCombinator__Group_0__1__Impl
-            {
-            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15332);
-            rule__GlobalCombinator__Group_0__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group_0__1"
-
-
-    // $ANTLR start "rule__GlobalCombinator__Group_0__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2604:1: rule__GlobalCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
-    public final void rule__GlobalCombinator__Group_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2608:1: ( ( 'combinator:' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2609:1: ( 'combinator:' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2609:1: ( 'combinator:' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2610:1: 'combinator:'
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
-            match(input,31,FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5360); 
-             after(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__GlobalCombinator__Group_0__1__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2627:1: rule__RuleCombinator__Group__0 : rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1 ;
-    public final void rule__RuleCombinator__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2631:1: ( rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2632:2: rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05395);
-            rule__RuleCombinator__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05398);
-            rule__RuleCombinator__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__0"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2639:1: rule__RuleCombinator__Group__0__Impl : ( ( rule__RuleCombinator__Group_0__0 ) ) ;
-    public final void rule__RuleCombinator__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2643:1: ( ( ( rule__RuleCombinator__Group_0__0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2644:1: ( ( rule__RuleCombinator__Group_0__0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2644:1: ( ( rule__RuleCombinator__Group_0__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2645:1: ( rule__RuleCombinator__Group_0__0 )
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getGroup_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2646:1: ( rule__RuleCombinator__Group_0__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2646:2: rule__RuleCombinator__Group_0__0
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5425);
-            rule__RuleCombinator__Group_0__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleCombinatorAccess().getGroup_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__0__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2656:1: rule__RuleCombinator__Group__1 : rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2 ;
-    public final void rule__RuleCombinator__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2660:1: ( rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2661:2: rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15455);
-            rule__RuleCombinator__Group__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15458);
-            rule__RuleCombinator__Group__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__1"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2668:1: rule__RuleCombinator__Group__1__Impl : ( ( rule__RuleCombinator__LogicAssignment_1 ) ) ;
-    public final void rule__RuleCombinator__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2672:1: ( ( ( rule__RuleCombinator__LogicAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2673:1: ( ( rule__RuleCombinator__LogicAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2673:1: ( ( rule__RuleCombinator__LogicAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2674:1: ( rule__RuleCombinator__LogicAssignment_1 )
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2675:1: ( rule__RuleCombinator__LogicAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2675:2: rule__RuleCombinator__LogicAssignment_1
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5485);
-            rule__RuleCombinator__LogicAssignment_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__1__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2685:1: rule__RuleCombinator__Group__2 : rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3 ;
-    public final void rule__RuleCombinator__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2689:1: ( rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2690:2: rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25515);
-            rule__RuleCombinator__Group__2__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25518);
-            rule__RuleCombinator__Group__3();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__2"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2697:1: rule__RuleCombinator__Group__2__Impl : ( ( rule__RuleCombinator__Group_2__0 )* ) ;
-    public final void rule__RuleCombinator__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2701:1: ( ( ( rule__RuleCombinator__Group_2__0 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2702:1: ( ( rule__RuleCombinator__Group_2__0 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2702:1: ( ( rule__RuleCombinator__Group_2__0 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2703:1: ( rule__RuleCombinator__Group_2__0 )*
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getGroup_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2704:1: ( rule__RuleCombinator__Group_2__0 )*
-            loop31:
-            do {
-                int alt31=2;
-                int LA31_0 = input.LA(1);
-
-                if ( (LA31_0==17) ) {
-                    alt31=1;
-                }
-
-
-                switch (alt31) {
-            	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2704:2: rule__RuleCombinator__Group_2__0
-            	    {
-            	    pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5545);
-            	    rule__RuleCombinator__Group_2__0();
-
-            	    state._fsp--;
-
-
-            	    }
-            	    break;
-
-            	default :
-            	    break loop31;
-                }
-            } while (true);
-
-             after(grammarAccess.getRuleCombinatorAccess().getGroup_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__2__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2714:1: rule__RuleCombinator__Group__3 : rule__RuleCombinator__Group__3__Impl ;
-    public final void rule__RuleCombinator__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2718:1: ( rule__RuleCombinator__Group__3__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2719:2: rule__RuleCombinator__Group__3__Impl
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35576);
-            rule__RuleCombinator__Group__3__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__3"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2725:1: rule__RuleCombinator__Group__3__Impl : ( ( ';' )? ) ;
-    public final void rule__RuleCombinator__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2729:1: ( ( ( ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2730:1: ( ( ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2730:1: ( ( ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2731:1: ( ';' )?
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2732:1: ( ';' )?
+        int rule__ExtRule__Group_0__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 141) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2375: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:2376: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:2376: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:2377:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2378:1: ( rule__ExtRule__RulevariantAssignment_0_1 )?
             int alt32=2;
             int LA32_0 = input.LA(1);
 
-            if ( (LA32_0==23) ) {
+            if ( (LA32_0==RULE_ID) ) {
                 alt32=1;
             }
             switch (alt32) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2733:2: ';'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2378:2: rule__ExtRule__RulevariantAssignment_0_1
                     {
-                    match(input,23,FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5605); 
+                    pushFollow(FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4925);
+                    rule__ExtRule__RulevariantAssignment_0_1();
+
+                    state._fsp--;
+                    if (state.failed) return ;
 
                     }
@@ -7938,1024 +8003,625 @@
             }
 
-             after(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group__3__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2752:1: rule__RuleCombinator__Group_0__0 : rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1 ;
-    public final void rule__RuleCombinator__Group_0__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2756:1: ( rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2757:2: rule__RuleCombinator__Group_0__0__Impl rule__RuleCombinator__Group_0__1
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05646);
-            rule__RuleCombinator__Group_0__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05649);
-            rule__RuleCombinator__Group_0__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__0"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2764:1: rule__RuleCombinator__Group_0__0__Impl : ( 'rule' ) ;
-    public final void rule__RuleCombinator__Group_0__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2768:1: ( ( 'rule' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2769:1: ( 'rule' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2769:1: ( 'rule' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2770:1: 'rule'
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
-            match(input,32,FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5677); 
-             after(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__0__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2783:1: rule__RuleCombinator__Group_0__1 : rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2 ;
-    public final void rule__RuleCombinator__Group_0__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2787:1: ( rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2788:2: rule__RuleCombinator__Group_0__1__Impl rule__RuleCombinator__Group_0__2
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15708);
-            rule__RuleCombinator__Group_0__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15711);
-            rule__RuleCombinator__Group_0__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__1"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2795:1: rule__RuleCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
-    public final void rule__RuleCombinator__Group_0__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2799:1: ( ( 'combinator:' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2800:1: ( 'combinator:' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2800:1: ( 'combinator:' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2801:1: 'combinator:'
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
-            match(input,31,FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5739); 
-             after(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__1__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2814:1: rule__RuleCombinator__Group_0__2 : rule__RuleCombinator__Group_0__2__Impl ;
-    public final void rule__RuleCombinator__Group_0__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2818:1: ( rule__RuleCombinator__Group_0__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2819:2: rule__RuleCombinator__Group_0__2__Impl
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25770);
-            rule__RuleCombinator__Group_0__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__2"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_0__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2825:1: rule__RuleCombinator__Group_0__2__Impl : ( ( rule__RuleCombinator__NameAssignment_0_2 ) ) ;
-    public final void rule__RuleCombinator__Group_0__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2829:1: ( ( ( rule__RuleCombinator__NameAssignment_0_2 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2830:1: ( ( rule__RuleCombinator__NameAssignment_0_2 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2830:1: ( ( rule__RuleCombinator__NameAssignment_0_2 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2831:1: ( rule__RuleCombinator__NameAssignment_0_2 )
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2832:1: ( rule__RuleCombinator__NameAssignment_0_2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2832:2: rule__RuleCombinator__NameAssignment_0_2
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5797);
-            rule__RuleCombinator__NameAssignment_0_2();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_0__2__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2848:1: rule__RuleCombinator__Group_2__0 : rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1 ;
-    public final void rule__RuleCombinator__Group_2__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2852:1: ( rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2853:2: rule__RuleCombinator__Group_2__0__Impl rule__RuleCombinator__Group_2__1
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05833);
-            rule__RuleCombinator__Group_2__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05836);
-            rule__RuleCombinator__Group_2__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__0"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2860:1: rule__RuleCombinator__Group_2__0__Impl : ( '(' ) ;
-    public final void rule__RuleCombinator__Group_2__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2864:1: ( ( '(' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2865:1: ( '(' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2865:1: ( '(' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2866:1: '('
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
-            match(input,17,FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5864); 
-             after(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__0__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2879:1: rule__RuleCombinator__Group_2__1 : rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2 ;
-    public final void rule__RuleCombinator__Group_2__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2883:1: ( rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2884:2: rule__RuleCombinator__Group_2__1__Impl rule__RuleCombinator__Group_2__2
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__15895);
-            rule__RuleCombinator__Group_2__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15898);
-            rule__RuleCombinator__Group_2__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__1"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2891:1: rule__RuleCombinator__Group_2__1__Impl : ( ( rule__RuleCombinator__LABELAssignment_2_1 ) ) ;
-    public final void rule__RuleCombinator__Group_2__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2895:1: ( ( ( rule__RuleCombinator__LABELAssignment_2_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2896:1: ( ( rule__RuleCombinator__LABELAssignment_2_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2896:1: ( ( rule__RuleCombinator__LABELAssignment_2_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2897:1: ( rule__RuleCombinator__LABELAssignment_2_1 )
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2898:1: ( rule__RuleCombinator__LABELAssignment_2_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2898:2: rule__RuleCombinator__LABELAssignment_2_1
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5925);
-            rule__RuleCombinator__LABELAssignment_2_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__1__Impl"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2908:1: rule__RuleCombinator__Group_2__2 : rule__RuleCombinator__Group_2__2__Impl ;
-    public final void rule__RuleCombinator__Group_2__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2912:1: ( rule__RuleCombinator__Group_2__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2913:2: rule__RuleCombinator__Group_2__2__Impl
-            {
-            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25955);
-            rule__RuleCombinator__Group_2__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__2"
-
-
-    // $ANTLR start "rule__RuleCombinator__Group_2__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2919:1: rule__RuleCombinator__Group_2__2__Impl : ( ')' ) ;
-    public final void rule__RuleCombinator__Group_2__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2923:1: ( ( ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2924:1: ( ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2924:1: ( ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2925:1: ')'
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
-            match(input,13,FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5983); 
-             after(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RuleCombinator__Group_2__2__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2944:1: rule__HookCombinator__Group__0 : rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1 ;
-    public final void rule__HookCombinator__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2948:1: ( rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2949:2: rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06020);
-            rule__HookCombinator__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06023);
-            rule__HookCombinator__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__0"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2956:1: rule__HookCombinator__Group__0__Impl : ( 'hook' ) ;
-    public final void rule__HookCombinator__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2960:1: ( ( 'hook' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2961:1: ( 'hook' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2961:1: ( 'hook' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2962:1: 'hook'
-            {
-             before(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
-            match(input,33,FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6051); 
-             after(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__0__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2975:1: rule__HookCombinator__Group__1 : rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2 ;
-    public final void rule__HookCombinator__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2979:1: ( rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2980:2: rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16082);
-            rule__HookCombinator__Group__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16085);
-            rule__HookCombinator__Group__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__1"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2987:1: rule__HookCombinator__Group__1__Impl : ( 'combinator:' ) ;
-    public final void rule__HookCombinator__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2991:1: ( ( 'combinator:' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2992:1: ( 'combinator:' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2992:1: ( 'combinator:' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2993:1: 'combinator:'
-            {
-             before(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
-            match(input,31,FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6113); 
-             after(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__1__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3006:1: rule__HookCombinator__Group__2 : rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3 ;
-    public final void rule__HookCombinator__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3010:1: ( rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3011:2: rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26144);
-            rule__HookCombinator__Group__2__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26147);
-            rule__HookCombinator__Group__3();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__2"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3018:1: rule__HookCombinator__Group__2__Impl : ( ( rule__HookCombinator__NameAssignment_2 ) ) ;
-    public final void rule__HookCombinator__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3022:1: ( ( ( rule__HookCombinator__NameAssignment_2 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3023:1: ( ( rule__HookCombinator__NameAssignment_2 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3023:1: ( ( rule__HookCombinator__NameAssignment_2 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3024:1: ( rule__HookCombinator__NameAssignment_2 )
-            {
-             before(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3025:1: ( rule__HookCombinator__NameAssignment_2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3025:2: rule__HookCombinator__NameAssignment_2
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6174);
-            rule__HookCombinator__NameAssignment_2();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__2__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3035:1: rule__HookCombinator__Group__3 : rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4 ;
-    public final void rule__HookCombinator__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3039:1: ( rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3040:2: rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36204);
-            rule__HookCombinator__Group__3__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36207);
-            rule__HookCombinator__Group__4();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__3"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3047:1: rule__HookCombinator__Group__3__Impl : ( '(' ) ;
-    public final void rule__HookCombinator__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3051:1: ( ( '(' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3052:1: ( '(' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3052:1: ( '(' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3053:1: '('
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
-            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6235); 
-             after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__3__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3066:1: rule__HookCombinator__Group__4 : rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5 ;
-    public final void rule__HookCombinator__Group__4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3070:1: ( rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3071:2: rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46266);
-            rule__HookCombinator__Group__4__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46269);
-            rule__HookCombinator__Group__5();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__4"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__4__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3078:1: rule__HookCombinator__Group__4__Impl : ( ( rule__HookCombinator__RuleextAssignment_4 ) ) ;
-    public final void rule__HookCombinator__Group__4__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3082:1: ( ( ( rule__HookCombinator__RuleextAssignment_4 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3083:1: ( ( rule__HookCombinator__RuleextAssignment_4 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3083:1: ( ( rule__HookCombinator__RuleextAssignment_4 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3084:1: ( rule__HookCombinator__RuleextAssignment_4 )
-            {
-             before(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3085:1: ( rule__HookCombinator__RuleextAssignment_4 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3085:2: rule__HookCombinator__RuleextAssignment_4
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6296);
-            rule__HookCombinator__RuleextAssignment_4();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__4__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__5"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3095:1: rule__HookCombinator__Group__5 : rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6 ;
-    public final void rule__HookCombinator__Group__5() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3099:1: ( rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3100:2: rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56326);
-            rule__HookCombinator__Group__5__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56329);
-            rule__HookCombinator__Group__6();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__5"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__5__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3107:1: rule__HookCombinator__Group__5__Impl : ( ')' ) ;
-    public final void rule__HookCombinator__Group__5__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3111:1: ( ( ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3112:1: ( ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3112:1: ( ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3113:1: ')'
-            {
-             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
-            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6357); 
-             after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__5__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__6"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3126:1: rule__HookCombinator__Group__6 : rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7 ;
-    public final void rule__HookCombinator__Group__6() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3130:1: ( rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3131:2: rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66388);
-            rule__HookCombinator__Group__6__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66391);
-            rule__HookCombinator__Group__7();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__6"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__6__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3138:1: rule__HookCombinator__Group__6__Impl : ( ( rule__HookCombinator__LogicAssignment_6 )? ) ;
-    public final void rule__HookCombinator__Group__6__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3142:1: ( ( ( rule__HookCombinator__LogicAssignment_6 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3143:1: ( ( rule__HookCombinator__LogicAssignment_6 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3143:1: ( ( rule__HookCombinator__LogicAssignment_6 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3144:1: ( rule__HookCombinator__LogicAssignment_6 )?
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3145:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRulevariantAssignment_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 141, rule__ExtRule__Group_0__1__Impl_StartIndex); }
+
+            	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:2388:1: rule__ExtRule__Group_0__2 : rule__ExtRule__Group_0__2__Impl ;
+    public final void rule__ExtRule__Group_0__2() throws RecognitionException {
+        int rule__ExtRule__Group_0__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 142) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2392: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:2393:2: rule__ExtRule__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24956);
+            rule__ExtRule__Group_0__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 142, rule__ExtRule__Group_0__2_StartIndex); }
+
+            	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:2399:1: rule__ExtRule__Group_0__2__Impl : ( '.' ) ;
+    public final void rule__ExtRule__Group_0__2__Impl() throws RecognitionException {
+        int rule__ExtRule__Group_0__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 143) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2403:1: ( ( '.' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2404:1: ( '.' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2404:1: ( '.' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2405:1: '.'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
+            }
+            match(input,28,FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4984); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getFullStopKeyword_0_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 143, rule__ExtRule__Group_0__2__Impl_StartIndex); }
+
+            	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:2424: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 rule__ExtRule__Group_2__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 144) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2428: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:2429: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__05021);
+            rule__ExtRule__Group_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__05024);
+            rule__ExtRule__Group_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 144, rule__ExtRule__Group_2__0_StartIndex); }
+
+            	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:2436:1: rule__ExtRule__Group_2__0__Impl : ( '(' ) ;
+    public final void rule__ExtRule__Group_2__0__Impl() throws RecognitionException {
+        int rule__ExtRule__Group_2__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 145) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2440:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2441:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2441:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2442:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl5052); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getLeftParenthesisKeyword_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 145, rule__ExtRule__Group_2__0__Impl_StartIndex); }
+
+            	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:2455: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 rule__ExtRule__Group_2__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 146) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2459: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:2460: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__15083);
+            rule__ExtRule__Group_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__15086);
+            rule__ExtRule__Group_2__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 146, rule__ExtRule__Group_2__1_StartIndex); }
+
+            	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:2467:1: rule__ExtRule__Group_2__1__Impl : ( ( rule__ExtRule__RuleextAssignment_2_1 ) ) ;
+    public final void rule__ExtRule__Group_2__1__Impl() throws RecognitionException {
+        int rule__ExtRule__Group_2__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 147) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2471: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:2472: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:2472: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:2473:1: ( rule__ExtRule__RuleextAssignment_2_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2474: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:2474:2: rule__ExtRule__RuleextAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl5113);
+            rule__ExtRule__RuleextAssignment_2_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRuleextAssignment_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 147, rule__ExtRule__Group_2__1__Impl_StartIndex); }
+
+            	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:2484:1: rule__ExtRule__Group_2__2 : rule__ExtRule__Group_2__2__Impl ;
+    public final void rule__ExtRule__Group_2__2() throws RecognitionException {
+        int rule__ExtRule__Group_2__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 148) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2488: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:2489:2: rule__ExtRule__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25143);
+            rule__ExtRule__Group_2__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 148, rule__ExtRule__Group_2__2_StartIndex); }
+
+            	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:2495:1: rule__ExtRule__Group_2__2__Impl : ( ')' ) ;
+    public final void rule__ExtRule__Group_2__2__Impl() throws RecognitionException {
+        int rule__ExtRule__Group_2__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 149) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2499:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2500:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2500:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2501:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5171); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRightParenthesisKeyword_2_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 149, rule__ExtRule__Group_2__2__Impl_StartIndex); }
+
+            	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:2520:1: rule__GlobalCombinator__Group__0 : rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1 ;
+    public final void rule__GlobalCombinator__Group__0() throws RecognitionException {
+        int rule__GlobalCombinator__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 150) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2524: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:2525:2: rule__GlobalCombinator__Group__0__Impl rule__GlobalCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05208);
+            rule__GlobalCombinator__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05211);
+            rule__GlobalCombinator__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 150, rule__GlobalCombinator__Group__0_StartIndex); }
+
+            	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:2532:1: rule__GlobalCombinator__Group__0__Impl : ( ( rule__GlobalCombinator__Group_0__0 ) ) ;
+    public final void rule__GlobalCombinator__Group__0__Impl() throws RecognitionException {
+        int rule__GlobalCombinator__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 151) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2536: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:2537: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:2537: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:2538:1: ( rule__GlobalCombinator__Group_0__0 )
+            {
+            if ( state.backtracking==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:2539: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:2539:2: rule__GlobalCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5238);
+            rule__GlobalCombinator__Group_0__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getGroup_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 151, rule__GlobalCombinator__Group__0__Impl_StartIndex); }
+
+            	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:2549:1: rule__GlobalCombinator__Group__1 : rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2 ;
+    public final void rule__GlobalCombinator__Group__1() throws RecognitionException {
+        int rule__GlobalCombinator__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 152) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2553: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:2554:2: rule__GlobalCombinator__Group__1__Impl rule__GlobalCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15268);
+            rule__GlobalCombinator__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15271);
+            rule__GlobalCombinator__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 152, rule__GlobalCombinator__Group__1_StartIndex); }
+
+            	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:2561:1: rule__GlobalCombinator__Group__1__Impl : ( ( rule__GlobalCombinator__LogicAssignment_1 ) ) ;
+    public final void rule__GlobalCombinator__Group__1__Impl() throws RecognitionException {
+        int rule__GlobalCombinator__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 153) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2565: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:2566: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:2566: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:2567:1: ( rule__GlobalCombinator__LogicAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2568: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:2568:2: rule__GlobalCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5298);
+            rule__GlobalCombinator__LogicAssignment_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getLogicAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 153, rule__GlobalCombinator__Group__1__Impl_StartIndex); }
+
+            	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:2578:1: rule__GlobalCombinator__Group__2 : rule__GlobalCombinator__Group__2__Impl ;
+    public final void rule__GlobalCombinator__Group__2() throws RecognitionException {
+        int rule__GlobalCombinator__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 154) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2582: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:2583:2: rule__GlobalCombinator__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25328);
+            rule__GlobalCombinator__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 154, rule__GlobalCombinator__Group__2_StartIndex); }
+
+            	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:2589:1: rule__GlobalCombinator__Group__2__Impl : ( ( ';' )? ) ;
+    public final void rule__GlobalCombinator__Group__2__Impl() throws RecognitionException {
+        int rule__GlobalCombinator__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 155) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2593:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2594:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2594:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2595:1: ( ';' )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2596:1: ( ';' )?
             int alt33=2;
             int LA33_0 = input.LA(1);
 
-            if ( (LA33_0==RULE_LOGIC) ) {
+            if ( (LA33_0==23) ) {
                 alt33=1;
             }
             switch (alt33) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3145:2: rule__HookCombinator__LogicAssignment_6
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2597:2: ';'
                     {
-                    pushFollow(FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6418);
-                    rule__HookCombinator__LogicAssignment_6();
-
-                    state._fsp--;
-
+                    match(input,23,FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5357); if (state.failed) return ;
 
                     }
@@ -8964,101 +8630,444 @@
             }
 
-             after(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__6__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__7"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3155:1: rule__HookCombinator__Group__7 : rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8 ;
-    public final void rule__HookCombinator__Group__7() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3159:1: ( rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3160:2: rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76449);
-            rule__HookCombinator__Group__7__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76452);
-            rule__HookCombinator__Group__8();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__7"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__7__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3167:1: rule__HookCombinator__Group__7__Impl : ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) ) ;
-    public final void rule__HookCombinator__Group__7__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3171:1: ( ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3172:1: ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3172:1: ( ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3173:1: ( ( rule__HookCombinator__Group_7__0 ) ) ( ( rule__HookCombinator__Group_7__0 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3173:1: ( ( rule__HookCombinator__Group_7__0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3174:1: ( rule__HookCombinator__Group_7__0 )
-            {
-             before(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3175:1: ( rule__HookCombinator__Group_7__0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3175:2: rule__HookCombinator__Group_7__0
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6481);
-            rule__HookCombinator__Group_7__0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
-
-            }
-
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3178:1: ( ( rule__HookCombinator__Group_7__0 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3179:1: ( rule__HookCombinator__Group_7__0 )*
-            {
-             before(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3180:1: ( rule__HookCombinator__Group_7__0 )*
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getSemicolonKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 155, rule__GlobalCombinator__Group__2__Impl_StartIndex); }
+
+            	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:2614: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 rule__GlobalCombinator__Group_0__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 156) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2618: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:2619: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__05396);
+            rule__GlobalCombinator__Group_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05399);
+            rule__GlobalCombinator__Group_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 156, rule__GlobalCombinator__Group_0__0_StartIndex); }
+
+            	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:2626:1: rule__GlobalCombinator__Group_0__0__Impl : ( 'global' ) ;
+    public final void rule__GlobalCombinator__Group_0__0__Impl() throws RecognitionException {
+        int rule__GlobalCombinator__Group_0__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 157) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2630:1: ( ( 'global' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2631:1: ( 'global' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2631:1: ( 'global' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2632:1: 'global'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
+            }
+            match(input,30,FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5427); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getGlobalKeyword_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 157, rule__GlobalCombinator__Group_0__0__Impl_StartIndex); }
+
+            	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:2645:1: rule__GlobalCombinator__Group_0__1 : rule__GlobalCombinator__Group_0__1__Impl ;
+    public final void rule__GlobalCombinator__Group_0__1() throws RecognitionException {
+        int rule__GlobalCombinator__Group_0__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 158) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2649: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:2650:2: rule__GlobalCombinator__Group_0__1__Impl
+            {
+            pushFollow(FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15458);
+            rule__GlobalCombinator__Group_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 158, rule__GlobalCombinator__Group_0__1_StartIndex); }
+
+            	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:2656:1: rule__GlobalCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
+    public final void rule__GlobalCombinator__Group_0__1__Impl() throws RecognitionException {
+        int rule__GlobalCombinator__Group_0__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 159) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2660:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2661:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2661:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2662:1: 'combinator:'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
+            }
+            match(input,31,FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5486); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getCombinatorKeyword_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 159, rule__GlobalCombinator__Group_0__1__Impl_StartIndex); }
+
+            	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:2679:1: rule__RuleCombinator__Group__0 : rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1 ;
+    public final void rule__RuleCombinator__Group__0() throws RecognitionException {
+        int rule__RuleCombinator__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 160) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2683: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:2684:2: rule__RuleCombinator__Group__0__Impl rule__RuleCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05521);
+            rule__RuleCombinator__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05524);
+            rule__RuleCombinator__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 160, rule__RuleCombinator__Group__0_StartIndex); }
+
+            	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:2691:1: rule__RuleCombinator__Group__0__Impl : ( ( rule__RuleCombinator__Group_0__0 ) ) ;
+    public final void rule__RuleCombinator__Group__0__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 161) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2695: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:2696: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:2696: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:2697:1: ( rule__RuleCombinator__Group_0__0 )
+            {
+            if ( state.backtracking==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:2698: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:2698:2: rule__RuleCombinator__Group_0__0
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5551);
+            rule__RuleCombinator__Group_0__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getGroup_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 161, rule__RuleCombinator__Group__0__Impl_StartIndex); }
+
+            	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:2708:1: rule__RuleCombinator__Group__1 : rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2 ;
+    public final void rule__RuleCombinator__Group__1() throws RecognitionException {
+        int rule__RuleCombinator__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 162) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2712: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:2713:2: rule__RuleCombinator__Group__1__Impl rule__RuleCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15581);
+            rule__RuleCombinator__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15584);
+            rule__RuleCombinator__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 162, rule__RuleCombinator__Group__1_StartIndex); }
+
+            	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:2720:1: rule__RuleCombinator__Group__1__Impl : ( ( rule__RuleCombinator__LogicAssignment_1 ) ) ;
+    public final void rule__RuleCombinator__Group__1__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 163) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2724: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:2725: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:2725: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:2726:1: ( rule__RuleCombinator__LogicAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2727: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:2727:2: rule__RuleCombinator__LogicAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5611);
+            rule__RuleCombinator__LogicAssignment_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getLogicAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 163, rule__RuleCombinator__Group__1__Impl_StartIndex); }
+
+            	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:2737:1: rule__RuleCombinator__Group__2 : rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3 ;
+    public final void rule__RuleCombinator__Group__2() throws RecognitionException {
+        int rule__RuleCombinator__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 164) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2741: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:2742:2: rule__RuleCombinator__Group__2__Impl rule__RuleCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25641);
+            rule__RuleCombinator__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25644);
+            rule__RuleCombinator__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 164, rule__RuleCombinator__Group__2_StartIndex); }
+
+            	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:2749:1: rule__RuleCombinator__Group__2__Impl : ( ( rule__RuleCombinator__Group_2__0 )* ) ;
+    public final void rule__RuleCombinator__Group__2__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 165) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2753: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:2754: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:2754: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:2755:1: ( rule__RuleCombinator__Group_2__0 )*
+            {
+            if ( state.backtracking==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:2756:1: ( rule__RuleCombinator__Group_2__0 )*
             loop34:
             do {
@@ -9073,11 +9082,11 @@
                 switch (alt34) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3180:2: rule__HookCombinator__Group_7__0
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2756:2: rule__RuleCombinator__Group_2__0
             	    {
-            	    pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6493);
-            	    rule__HookCombinator__Group_7__0();
+            	    pushFollow(FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5671);
+            	    rule__RuleCombinator__Group_2__0();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -9089,77 +9098,84 @@
             } while (true);
 
-             after(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
-
-            }
-
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__7__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__8"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3191:1: rule__HookCombinator__Group__8 : rule__HookCombinator__Group__8__Impl ;
-    public final void rule__HookCombinator__Group__8() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3195:1: ( rule__HookCombinator__Group__8__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3196:2: rule__HookCombinator__Group__8__Impl
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86526);
-            rule__HookCombinator__Group__8__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__8"
-
-
-    // $ANTLR start "rule__HookCombinator__Group__8__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3202:1: rule__HookCombinator__Group__8__Impl : ( ( ';' )? ) ;
-    public final void rule__HookCombinator__Group__8__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3206:1: ( ( ( ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3207:1: ( ( ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3207:1: ( ( ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3208:1: ( ';' )?
-            {
-             before(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3209:1: ( ';' )?
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getGroup_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 165, rule__RuleCombinator__Group__2__Impl_StartIndex); }
+
+            	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:2766:1: rule__RuleCombinator__Group__3 : rule__RuleCombinator__Group__3__Impl ;
+    public final void rule__RuleCombinator__Group__3() throws RecognitionException {
+        int rule__RuleCombinator__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 166) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2770: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:2771:2: rule__RuleCombinator__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35702);
+            rule__RuleCombinator__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 166, rule__RuleCombinator__Group__3_StartIndex); }
+
+            	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:2777:1: rule__RuleCombinator__Group__3__Impl : ( ( ';' )? ) ;
+    public final void rule__RuleCombinator__Group__3__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 167) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2781:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2782:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2782:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2783:1: ( ';' )?
+            {
+            if ( state.backtracking==0 ) {
+               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:2784:1: ( ';' )?
             int alt35=2;
             int LA35_0 = input.LA(1);
@@ -9170,7 +9186,7 @@
             switch (alt35) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3210:2: ';'
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2785:2: ';'
                     {
-                    match(input,23,FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6555); 
+                    match(input,23,FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5731); if (state.failed) return ;
 
                     }
@@ -9179,408 +9195,1290 @@
             }
 
-             after(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group__8__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3239:1: rule__HookCombinator__Group_7__0 : rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1 ;
-    public final void rule__HookCombinator__Group_7__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3243:1: ( rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3244:2: rule__HookCombinator__Group_7__0__Impl rule__HookCombinator__Group_7__1
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06606);
-            rule__HookCombinator__Group_7__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06609);
-            rule__HookCombinator__Group_7__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__0"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3251:1: rule__HookCombinator__Group_7__0__Impl : ( '(' ) ;
-    public final void rule__HookCombinator__Group_7__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3255:1: ( ( '(' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3256:1: ( '(' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3256:1: ( '(' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3257:1: '('
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
-            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6637); 
-             after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__0__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3270:1: rule__HookCombinator__Group_7__1 : rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2 ;
-    public final void rule__HookCombinator__Group_7__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3274:1: ( rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3275:2: rule__HookCombinator__Group_7__1__Impl rule__HookCombinator__Group_7__2
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16668);
-            rule__HookCombinator__Group_7__1__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16671);
-            rule__HookCombinator__Group_7__2();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__1"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3282:1: rule__HookCombinator__Group_7__1__Impl : ( ( rule__HookCombinator__LABELAssignment_7_1 ) ) ;
-    public final void rule__HookCombinator__Group_7__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3286:1: ( ( ( rule__HookCombinator__LABELAssignment_7_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3287:1: ( ( rule__HookCombinator__LABELAssignment_7_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3287:1: ( ( rule__HookCombinator__LABELAssignment_7_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3288:1: ( rule__HookCombinator__LABELAssignment_7_1 )
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3289:1: ( rule__HookCombinator__LABELAssignment_7_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3289:2: rule__HookCombinator__LABELAssignment_7_1
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6698);
-            rule__HookCombinator__LABELAssignment_7_1();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__1__Impl"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3299:1: rule__HookCombinator__Group_7__2 : rule__HookCombinator__Group_7__2__Impl ;
-    public final void rule__HookCombinator__Group_7__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3303:1: ( rule__HookCombinator__Group_7__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3304:2: rule__HookCombinator__Group_7__2__Impl
-            {
-            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26728);
-            rule__HookCombinator__Group_7__2__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__2"
-
-
-    // $ANTLR start "rule__HookCombinator__Group_7__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3310:1: rule__HookCombinator__Group_7__2__Impl : ( ')' ) ;
-    public final void rule__HookCombinator__Group_7__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3314:1: ( ( ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3315:1: ( ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3315:1: ( ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3316:1: ')'
-            {
-             before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
-            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6756); 
-             after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__HookCombinator__Group_7__2__Impl"
-
-
-    // $ANTLR start "rule__DefinitionList__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3335:1: rule__DefinitionList__Group__0 : rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1 ;
-    public final void rule__DefinitionList__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3339:1: ( rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3340:2: rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06793);
-            rule__DefinitionList__Group__0__Impl();
-
-            state._fsp--;
-
-            pushFollow(FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06796);
-            rule__DefinitionList__Group__1();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DefinitionList__Group__0"
-
-
-    // $ANTLR start "rule__DefinitionList__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3347:1: rule__DefinitionList__Group__0__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) ) ;
-    public final void rule__DefinitionList__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3351:1: ( ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3352:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3352:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3353:1: ( rule__DefinitionList__SingleDefinitionAssignment_0 )
-            {
-             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3354:1: ( rule__DefinitionList__SingleDefinitionAssignment_0 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3354:2: rule__DefinitionList__SingleDefinitionAssignment_0
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6823);
-            rule__DefinitionList__SingleDefinitionAssignment_0();
-
-            state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DefinitionList__Group__0__Impl"
-
-
-    // $ANTLR start "rule__DefinitionList__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3364:1: rule__DefinitionList__Group__1 : rule__DefinitionList__Group__1__Impl ;
-    public final void rule__DefinitionList__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3368:1: ( rule__DefinitionList__Group__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3369:2: rule__DefinitionList__Group__1__Impl
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16853);
-            rule__DefinitionList__Group__1__Impl();
-
-            state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__DefinitionList__Group__1"
-
-
-    // $ANTLR start "rule__DefinitionList__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3375:1: rule__DefinitionList__Group__1__Impl : ( ( rule__DefinitionList__Group_1__0 )* ) ;
-    public final void rule__DefinitionList__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3379:1: ( ( ( rule__DefinitionList__Group_1__0 )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3380:1: ( ( rule__DefinitionList__Group_1__0 )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3380:1: ( ( rule__DefinitionList__Group_1__0 )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3381:1: ( rule__DefinitionList__Group_1__0 )*
-            {
-             before(grammarAccess.getDefinitionListAccess().getGroup_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3382:1: ( rule__DefinitionList__Group_1__0 )*
-            loop36:
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getSemicolonKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 167, rule__RuleCombinator__Group__3__Impl_StartIndex); }
+
+            	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:2804: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 rule__RuleCombinator__Group_0__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 168) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2808: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:2809: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__05772);
+            rule__RuleCombinator__Group_0__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05775);
+            rule__RuleCombinator__Group_0__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 168, rule__RuleCombinator__Group_0__0_StartIndex); }
+
+            	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:2816:1: rule__RuleCombinator__Group_0__0__Impl : ( 'rule' ) ;
+    public final void rule__RuleCombinator__Group_0__0__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_0__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 169) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2820:1: ( ( 'rule' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2821:1: ( 'rule' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2821:1: ( 'rule' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2822:1: 'rule'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
+            }
+            match(input,32,FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5803); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getRuleKeyword_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 169, rule__RuleCombinator__Group_0__0__Impl_StartIndex); }
+
+            	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:2835: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 rule__RuleCombinator__Group_0__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 170) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2839: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:2840: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__15834);
+            rule__RuleCombinator__Group_0__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15837);
+            rule__RuleCombinator__Group_0__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 170, rule__RuleCombinator__Group_0__1_StartIndex); }
+
+            	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:2847:1: rule__RuleCombinator__Group_0__1__Impl : ( 'combinator:' ) ;
+    public final void rule__RuleCombinator__Group_0__1__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_0__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 171) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2851:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2852:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2852:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2853:1: 'combinator:'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
+            }
+            match(input,31,FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5865); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getCombinatorKeyword_0_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 171, rule__RuleCombinator__Group_0__1__Impl_StartIndex); }
+
+            	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:2866:1: rule__RuleCombinator__Group_0__2 : rule__RuleCombinator__Group_0__2__Impl ;
+    public final void rule__RuleCombinator__Group_0__2() throws RecognitionException {
+        int rule__RuleCombinator__Group_0__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 172) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2870: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:2871:2: rule__RuleCombinator__Group_0__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25896);
+            rule__RuleCombinator__Group_0__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 172, rule__RuleCombinator__Group_0__2_StartIndex); }
+
+            	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:2877:1: rule__RuleCombinator__Group_0__2__Impl : ( ( rule__RuleCombinator__NameAssignment_0_2 ) ) ;
+    public final void rule__RuleCombinator__Group_0__2__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_0__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 173) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2881: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:2882: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:2882: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:2883:1: ( rule__RuleCombinator__NameAssignment_0_2 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2884: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:2884:2: rule__RuleCombinator__NameAssignment_0_2
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5923);
+            rule__RuleCombinator__NameAssignment_0_2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getNameAssignment_0_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 173, rule__RuleCombinator__Group_0__2__Impl_StartIndex); }
+
+            	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:2900: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 rule__RuleCombinator__Group_2__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 174) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2904: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:2905: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__05959);
+            rule__RuleCombinator__Group_2__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05962);
+            rule__RuleCombinator__Group_2__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 174, rule__RuleCombinator__Group_2__0_StartIndex); }
+
+            	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:2912:1: rule__RuleCombinator__Group_2__0__Impl : ( '(' ) ;
+    public final void rule__RuleCombinator__Group_2__0__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_2__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 175) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2916:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2917:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2917:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2918:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5990); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getLeftParenthesisKeyword_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 175, rule__RuleCombinator__Group_2__0__Impl_StartIndex); }
+
+            	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:2931: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 rule__RuleCombinator__Group_2__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 176) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2935: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:2936: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__16021);
+            rule__RuleCombinator__Group_2__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__16024);
+            rule__RuleCombinator__Group_2__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 176, rule__RuleCombinator__Group_2__1_StartIndex); }
+
+            	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:2943:1: rule__RuleCombinator__Group_2__1__Impl : ( ( rule__RuleCombinator__LABELAssignment_2_1 ) ) ;
+    public final void rule__RuleCombinator__Group_2__1__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_2__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 177) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2947: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:2948: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:2948: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:2949:1: ( rule__RuleCombinator__LABELAssignment_2_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:2950: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:2950:2: rule__RuleCombinator__LABELAssignment_2_1
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl6051);
+            rule__RuleCombinator__LABELAssignment_2_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getLABELAssignment_2_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 177, rule__RuleCombinator__Group_2__1__Impl_StartIndex); }
+
+            	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:2960:1: rule__RuleCombinator__Group_2__2 : rule__RuleCombinator__Group_2__2__Impl ;
+    public final void rule__RuleCombinator__Group_2__2() throws RecognitionException {
+        int rule__RuleCombinator__Group_2__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 178) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2964: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:2965:2: rule__RuleCombinator__Group_2__2__Impl
+            {
+            pushFollow(FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__26081);
+            rule__RuleCombinator__Group_2__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 178, rule__RuleCombinator__Group_2__2_StartIndex); }
+
+            	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:2971:1: rule__RuleCombinator__Group_2__2__Impl : ( ')' ) ;
+    public final void rule__RuleCombinator__Group_2__2__Impl() throws RecognitionException {
+        int rule__RuleCombinator__Group_2__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 179) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2975:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2976:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2976:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:2977:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl6109); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getRightParenthesisKeyword_2_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 179, rule__RuleCombinator__Group_2__2__Impl_StartIndex); }
+
+            	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:2996:1: rule__HookCombinator__Group__0 : rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1 ;
+    public final void rule__HookCombinator__Group__0() throws RecognitionException {
+        int rule__HookCombinator__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 180) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3000: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:3001:2: rule__HookCombinator__Group__0__Impl rule__HookCombinator__Group__1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06146);
+            rule__HookCombinator__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06149);
+            rule__HookCombinator__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 180, rule__HookCombinator__Group__0_StartIndex); }
+
+            	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:3008:1: rule__HookCombinator__Group__0__Impl : ( 'hook' ) ;
+    public final void rule__HookCombinator__Group__0__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 181) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3012:1: ( ( 'hook' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3013:1: ( 'hook' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3013:1: ( 'hook' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3014:1: 'hook'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
+            }
+            match(input,33,FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6177); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getHookKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 181, rule__HookCombinator__Group__0__Impl_StartIndex); }
+
+            	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:3027:1: rule__HookCombinator__Group__1 : rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2 ;
+    public final void rule__HookCombinator__Group__1() throws RecognitionException {
+        int rule__HookCombinator__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 182) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3031: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:3032:2: rule__HookCombinator__Group__1__Impl rule__HookCombinator__Group__2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16208);
+            rule__HookCombinator__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16211);
+            rule__HookCombinator__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 182, rule__HookCombinator__Group__1_StartIndex); }
+
+            	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:3039:1: rule__HookCombinator__Group__1__Impl : ( 'combinator:' ) ;
+    public final void rule__HookCombinator__Group__1__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 183) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3043:1: ( ( 'combinator:' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3044:1: ( 'combinator:' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3044:1: ( 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3045:1: 'combinator:'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
+            }
+            match(input,31,FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6239); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getCombinatorKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 183, rule__HookCombinator__Group__1__Impl_StartIndex); }
+
+            	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:3058:1: rule__HookCombinator__Group__2 : rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3 ;
+    public final void rule__HookCombinator__Group__2() throws RecognitionException {
+        int rule__HookCombinator__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 184) ) { return ; }
+            // ../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__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:3063:2: rule__HookCombinator__Group__2__Impl rule__HookCombinator__Group__3
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26270);
+            rule__HookCombinator__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26273);
+            rule__HookCombinator__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 184, rule__HookCombinator__Group__2_StartIndex); }
+
+            	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:3070:1: rule__HookCombinator__Group__2__Impl : ( ( rule__HookCombinator__NameAssignment_2 ) ) ;
+    public final void rule__HookCombinator__Group__2__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 185) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3074: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:3075: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:3075: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:3076:1: ( rule__HookCombinator__NameAssignment_2 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3077: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:3077:2: rule__HookCombinator__NameAssignment_2
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6300);
+            rule__HookCombinator__NameAssignment_2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getNameAssignment_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 185, rule__HookCombinator__Group__2__Impl_StartIndex); }
+
+            	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:3087:1: rule__HookCombinator__Group__3 : rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4 ;
+    public final void rule__HookCombinator__Group__3() throws RecognitionException {
+        int rule__HookCombinator__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 186) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3091: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:3092:2: rule__HookCombinator__Group__3__Impl rule__HookCombinator__Group__4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36330);
+            rule__HookCombinator__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36333);
+            rule__HookCombinator__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 186, rule__HookCombinator__Group__3_StartIndex); }
+
+            	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:3099:1: rule__HookCombinator__Group__3__Impl : ( '(' ) ;
+    public final void rule__HookCombinator__Group__3__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 187) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3103:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3104:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3104:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3105:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6361); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 187, rule__HookCombinator__Group__3__Impl_StartIndex); }
+
+            	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:3118:1: rule__HookCombinator__Group__4 : rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5 ;
+    public final void rule__HookCombinator__Group__4() throws RecognitionException {
+        int rule__HookCombinator__Group__4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 188) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3122: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:3123:2: rule__HookCombinator__Group__4__Impl rule__HookCombinator__Group__5
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46392);
+            rule__HookCombinator__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46395);
+            rule__HookCombinator__Group__5();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 188, rule__HookCombinator__Group__4_StartIndex); }
+
+            	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:3130:1: rule__HookCombinator__Group__4__Impl : ( ( rule__HookCombinator__RuleextAssignment_4 ) ) ;
+    public final void rule__HookCombinator__Group__4__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__4__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 189) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3134: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:3135: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:3135: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:3136:1: ( rule__HookCombinator__RuleextAssignment_4 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3137: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:3137:2: rule__HookCombinator__RuleextAssignment_4
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6422);
+            rule__HookCombinator__RuleextAssignment_4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getRuleextAssignment_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 189, rule__HookCombinator__Group__4__Impl_StartIndex); }
+
+            	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:3147:1: rule__HookCombinator__Group__5 : rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6 ;
+    public final void rule__HookCombinator__Group__5() throws RecognitionException {
+        int rule__HookCombinator__Group__5_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 190) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3151: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:3152:2: rule__HookCombinator__Group__5__Impl rule__HookCombinator__Group__6
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56452);
+            rule__HookCombinator__Group__5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56455);
+            rule__HookCombinator__Group__6();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 190, rule__HookCombinator__Group__5_StartIndex); }
+
+            	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:3159:1: rule__HookCombinator__Group__5__Impl : ( ')' ) ;
+    public final void rule__HookCombinator__Group__5__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__5__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 191) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3163:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3164:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3164:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3165:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6483); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_5()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 191, rule__HookCombinator__Group__5__Impl_StartIndex); }
+
+            	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:3178:1: rule__HookCombinator__Group__6 : rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7 ;
+    public final void rule__HookCombinator__Group__6() throws RecognitionException {
+        int rule__HookCombinator__Group__6_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 192) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3182: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:3183:2: rule__HookCombinator__Group__6__Impl rule__HookCombinator__Group__7
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66514);
+            rule__HookCombinator__Group__6__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66517);
+            rule__HookCombinator__Group__7();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 192, rule__HookCombinator__Group__6_StartIndex); }
+
+            	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:3190:1: rule__HookCombinator__Group__6__Impl : ( ( rule__HookCombinator__LogicAssignment_6 )? ) ;
+    public final void rule__HookCombinator__Group__6__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__6__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 193) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3194: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:3195: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:3195: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:3196:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            {
+            if ( state.backtracking==0 ) {
+               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:3197:1: ( rule__HookCombinator__LogicAssignment_6 )?
+            int alt36=2;
+            int LA36_0 = input.LA(1);
+
+            if ( (LA36_0==RULE_LOGIC) ) {
+                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:3197:2: rule__HookCombinator__LogicAssignment_6
+                    {
+                    pushFollow(FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6544);
+                    rule__HookCombinator__LogicAssignment_6();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLogicAssignment_6()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 193, rule__HookCombinator__Group__6__Impl_StartIndex); }
+
+            	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:3207:1: rule__HookCombinator__Group__7 : rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8 ;
+    public final void rule__HookCombinator__Group__7() throws RecognitionException {
+        int rule__HookCombinator__Group__7_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 194) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3211: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:3212:2: rule__HookCombinator__Group__7__Impl rule__HookCombinator__Group__8
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76575);
+            rule__HookCombinator__Group__7__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76578);
+            rule__HookCombinator__Group__8();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 194, rule__HookCombinator__Group__7_StartIndex); }
+
+            	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:3219: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 rule__HookCombinator__Group__7__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 195) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3223: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:3224: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:3224: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:3225: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:3225: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:3226:1: ( rule__HookCombinator__Group_7__0 )
+            {
+            if ( state.backtracking==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:3227: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:3227:2: rule__HookCombinator__Group_7__0
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6607);
+            rule__HookCombinator__Group_7__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               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:3230: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:3231:1: ( rule__HookCombinator__Group_7__0 )*
+            {
+            if ( state.backtracking==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:3232:1: ( rule__HookCombinator__Group_7__0 )*
+            loop37:
             do {
-                int alt36=2;
-                int LA36_0 = input.LA(1);
-
-                if ( (LA36_0==16) ) {
-                    alt36=1;
+                int alt37=2;
+                int LA37_0 = input.LA(1);
+
+                if ( (LA37_0==17) ) {
+                    alt37=1;
                 }
 
 
-                switch (alt36) {
+                switch (alt37) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3382:2: rule__DefinitionList__Group_1__0
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3232:2: rule__HookCombinator__Group_7__0
             	    {
-            	    pushFollow(FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6880);
-            	    rule__DefinitionList__Group_1__0();
+            	    pushFollow(FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6619);
+            	    rule__HookCombinator__Group_7__0();
 
             	    state._fsp--;
-
+            	    if (state.failed) return ;
 
             	    }
@@ -9588,21 +10486,587 @@
 
             	default :
-            	    break loop36;
+            	    break loop37;
                 }
             } while (true);
 
-             after(grammarAccess.getDefinitionListAccess().getGroup_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getGroup_7()); 
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 195, rule__HookCombinator__Group__7__Impl_StartIndex); }
+
+            	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:3243:1: rule__HookCombinator__Group__8 : rule__HookCombinator__Group__8__Impl ;
+    public final void rule__HookCombinator__Group__8() throws RecognitionException {
+        int rule__HookCombinator__Group__8_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 196) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3247: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:3248:2: rule__HookCombinator__Group__8__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86652);
+            rule__HookCombinator__Group__8__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 196, rule__HookCombinator__Group__8_StartIndex); }
+
+            	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:3254:1: rule__HookCombinator__Group__8__Impl : ( ( ';' )? ) ;
+    public final void rule__HookCombinator__Group__8__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group__8__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 197) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3258:1: ( ( ( ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3259:1: ( ( ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3259:1: ( ( ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3260:1: ( ';' )?
+            {
+            if ( state.backtracking==0 ) {
+               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:3261:1: ( ';' )?
+            int alt38=2;
+            int LA38_0 = input.LA(1);
+
+            if ( (LA38_0==23) ) {
+                alt38=1;
+            }
+            switch (alt38) {
+                case 1 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3262:2: ';'
+                    {
+                    match(input,23,FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6681); if (state.failed) return ;
+
+                    }
+                    break;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getSemicolonKeyword_8()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 197, rule__HookCombinator__Group__8__Impl_StartIndex); }
+
+            	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:3291: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 rule__HookCombinator__Group_7__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 198) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3295: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:3296: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__06732);
+            rule__HookCombinator__Group_7__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06735);
+            rule__HookCombinator__Group_7__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 198, rule__HookCombinator__Group_7__0_StartIndex); }
+
+            	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:3303:1: rule__HookCombinator__Group_7__0__Impl : ( '(' ) ;
+    public final void rule__HookCombinator__Group_7__0__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group_7__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 199) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3307:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3308:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3308:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3309:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6763); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLeftParenthesisKeyword_7_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 199, rule__HookCombinator__Group_7__0__Impl_StartIndex); }
+
+            	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:3322: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 rule__HookCombinator__Group_7__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 200) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3326: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:3327: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__16794);
+            rule__HookCombinator__Group_7__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16797);
+            rule__HookCombinator__Group_7__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 200, rule__HookCombinator__Group_7__1_StartIndex); }
+
+            	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:3334:1: rule__HookCombinator__Group_7__1__Impl : ( ( rule__HookCombinator__LABELAssignment_7_1 ) ) ;
+    public final void rule__HookCombinator__Group_7__1__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group_7__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 201) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3338: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:3339: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:3339: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:3340:1: ( rule__HookCombinator__LABELAssignment_7_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3341: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:3341:2: rule__HookCombinator__LABELAssignment_7_1
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6824);
+            rule__HookCombinator__LABELAssignment_7_1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLABELAssignment_7_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 201, rule__HookCombinator__Group_7__1__Impl_StartIndex); }
+
+            	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:3351:1: rule__HookCombinator__Group_7__2 : rule__HookCombinator__Group_7__2__Impl ;
+    public final void rule__HookCombinator__Group_7__2() throws RecognitionException {
+        int rule__HookCombinator__Group_7__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 202) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3355: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:3356:2: rule__HookCombinator__Group_7__2__Impl
+            {
+            pushFollow(FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26854);
+            rule__HookCombinator__Group_7__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 202, rule__HookCombinator__Group_7__2_StartIndex); }
+
+            	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:3362:1: rule__HookCombinator__Group_7__2__Impl : ( ')' ) ;
+    public final void rule__HookCombinator__Group_7__2__Impl() throws RecognitionException {
+        int rule__HookCombinator__Group_7__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 203) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3366:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3367:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3367:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3368:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6882); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getRightParenthesisKeyword_7_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 203, rule__HookCombinator__Group_7__2__Impl_StartIndex); }
+
+            	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:3387:1: rule__DefinitionList__Group__0 : rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1 ;
+    public final void rule__DefinitionList__Group__0() throws RecognitionException {
+        int rule__DefinitionList__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 204) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3391: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:3392:2: rule__DefinitionList__Group__0__Impl rule__DefinitionList__Group__1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06919);
+            rule__DefinitionList__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06922);
+            rule__DefinitionList__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 204, rule__DefinitionList__Group__0_StartIndex); }
+
+            	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:3399:1: rule__DefinitionList__Group__0__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_0 ) ) ;
+    public final void rule__DefinitionList__Group__0__Impl() throws RecognitionException {
+        int rule__DefinitionList__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 205) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3403: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:3404: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:3404: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:3405:1: ( rule__DefinitionList__SingleDefinitionAssignment_0 )
+            {
+            if ( state.backtracking==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:3406: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:3406:2: rule__DefinitionList__SingleDefinitionAssignment_0
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6949);
+            rule__DefinitionList__SingleDefinitionAssignment_0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 205, rule__DefinitionList__Group__0__Impl_StartIndex); }
+
+            	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:3416:1: rule__DefinitionList__Group__1 : rule__DefinitionList__Group__1__Impl ;
+    public final void rule__DefinitionList__Group__1() throws RecognitionException {
+        int rule__DefinitionList__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 206) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3420: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:3421:2: rule__DefinitionList__Group__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16979);
+            rule__DefinitionList__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 206, rule__DefinitionList__Group__1_StartIndex); }
+
+            	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:3427:1: rule__DefinitionList__Group__1__Impl : ( ( rule__DefinitionList__Group_1__0 )* ) ;
+    public final void rule__DefinitionList__Group__1__Impl() throws RecognitionException {
+        int rule__DefinitionList__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 207) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3431:1: ( ( ( rule__DefinitionList__Group_1__0 )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3432: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:3432: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:3433:1: ( rule__DefinitionList__Group_1__0 )*
+            {
+            if ( state.backtracking==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:3434:1: ( rule__DefinitionList__Group_1__0 )*
+            loop39:
+            do {
+                int alt39=2;
+                int LA39_0 = input.LA(1);
+
+                if ( (LA39_0==16) ) {
+                    alt39=1;
+                }
+
+
+                switch (alt39) {
+            	case 1 :
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3434:2: rule__DefinitionList__Group_1__0
+            	    {
+            	    pushFollow(FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl7006);
+            	    rule__DefinitionList__Group_1__0();
+
+            	    state._fsp--;
+            	    if (state.failed) return ;
+
+            	    }
+            	    break;
+
+            	default :
+            	    break loop39;
+                }
+            } while (true);
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getGroup_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 207, rule__DefinitionList__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9615,32 +11079,35 @@
 
     // $ANTLR start "rule__DefinitionList__Group_1__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3396:1: rule__DefinitionList__Group_1__0 : rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3448:1: rule__DefinitionList__Group_1__0 : rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1 ;
     public final void rule__DefinitionList__Group_1__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3400:1: ( rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3401:2: rule__DefinitionList__Group_1__0__Impl rule__DefinitionList__Group_1__1
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__06915);
+        int rule__DefinitionList__Group_1__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 208) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3452: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:3453: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__07041);
             rule__DefinitionList__Group_1__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06918);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__07044);
             rule__DefinitionList__Group_1__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 208, rule__DefinitionList__Group_1__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9653,31 +11120,38 @@
 
     // $ANTLR start "rule__DefinitionList__Group_1__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3408:1: rule__DefinitionList__Group_1__0__Impl : ( '|' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3460:1: rule__DefinitionList__Group_1__0__Impl : ( '|' ) ;
     public final void rule__DefinitionList__Group_1__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3412:1: ( ( '|' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3413:1: ( '|' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3413:1: ( '|' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3414:1: '|'
-            {
-             before(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
-            match(input,16,FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6946); 
-             after(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__DefinitionList__Group_1__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 209) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3464:1: ( ( '|' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3465:1: ( '|' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3465:1: ( '|' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3466:1: '|'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
+            }
+            match(input,16,FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl7072); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getVerticalLineKeyword_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 209, rule__DefinitionList__Group_1__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9690,27 +11164,30 @@
 
     // $ANTLR start "rule__DefinitionList__Group_1__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3427:1: rule__DefinitionList__Group_1__1 : rule__DefinitionList__Group_1__1__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3479:1: rule__DefinitionList__Group_1__1 : rule__DefinitionList__Group_1__1__Impl ;
     public final void rule__DefinitionList__Group_1__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3431:1: ( rule__DefinitionList__Group_1__1__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3432:2: rule__DefinitionList__Group_1__1__Impl
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16977);
+        int rule__DefinitionList__Group_1__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 210) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3483: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:3484:2: rule__DefinitionList__Group_1__1__Impl
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__17103);
             rule__DefinitionList__Group_1__1__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 210, rule__DefinitionList__Group_1__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9723,41 +11200,48 @@
 
     // $ANTLR start "rule__DefinitionList__Group_1__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3438:1: rule__DefinitionList__Group_1__1__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3490:1: rule__DefinitionList__Group_1__1__Impl : ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) ) ;
     public final void rule__DefinitionList__Group_1__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3442:1: ( ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3443:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3443:1: ( ( rule__DefinitionList__SingleDefinitionAssignment_1_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3444:1: ( rule__DefinitionList__SingleDefinitionAssignment_1_1 )
-            {
-             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3445:1: ( rule__DefinitionList__SingleDefinitionAssignment_1_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3445:2: rule__DefinitionList__SingleDefinitionAssignment_1_1
-            {
-            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7004);
+        int rule__DefinitionList__Group_1__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 211) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3494: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:3495: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:3495: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:3496:1: ( rule__DefinitionList__SingleDefinitionAssignment_1_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3497: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:3497:2: rule__DefinitionList__SingleDefinitionAssignment_1_1
+            {
+            pushFollow(FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7130);
             rule__DefinitionList__SingleDefinitionAssignment_1_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getSingleDefinitionAssignment_1_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 211, rule__DefinitionList__Group_1__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9770,32 +11254,35 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3459:1: rule__GroupedSequence__Group__0 : rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3511:1: rule__GroupedSequence__Group__0 : rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1 ;
     public final void rule__GroupedSequence__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3463:1: ( rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3464:2: rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1
-            {
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07038);
+        int rule__GroupedSequence__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 212) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3515: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:3516:2: rule__GroupedSequence__Group__0__Impl rule__GroupedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07164);
             rule__GroupedSequence__Group__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07041);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07167);
             rule__GroupedSequence__Group__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 212, rule__GroupedSequence__Group__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9808,31 +11295,38 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3471:1: rule__GroupedSequence__Group__0__Impl : ( '(' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3523:1: rule__GroupedSequence__Group__0__Impl : ( '(' ) ;
     public final void rule__GroupedSequence__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3475:1: ( ( '(' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3476:1: ( '(' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3476:1: ( '(' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3477:1: '('
-            {
-             before(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
-            match(input,17,FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7069); 
-             after(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__GroupedSequence__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 213) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3527:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3528:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3528:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3529:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7195); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceAccess().getLeftParenthesisKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 213, rule__GroupedSequence__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9845,32 +11339,35 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3490:1: rule__GroupedSequence__Group__1 : rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3542:1: rule__GroupedSequence__Group__1 : rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2 ;
     public final void rule__GroupedSequence__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3494:1: ( rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3495:2: rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2
-            {
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17100);
+        int rule__GroupedSequence__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 214) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3546: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:3547:2: rule__GroupedSequence__Group__1__Impl rule__GroupedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17226);
             rule__GroupedSequence__Group__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17103);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17229);
             rule__GroupedSequence__Group__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 214, rule__GroupedSequence__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9883,41 +11380,48 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3502:1: rule__GroupedSequence__Group__1__Impl : ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3554:1: rule__GroupedSequence__Group__1__Impl : ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) ) ;
     public final void rule__GroupedSequence__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3506:1: ( ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3507:1: ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3507:1: ( ( rule__GroupedSequence__DefinitionListAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3508:1: ( rule__GroupedSequence__DefinitionListAssignment_1 )
-            {
-             before(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3509:1: ( rule__GroupedSequence__DefinitionListAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3509:2: rule__GroupedSequence__DefinitionListAssignment_1
-            {
-            pushFollow(FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7130);
+        int rule__GroupedSequence__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 215) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3558: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:3559: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:3559: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:3560:1: ( rule__GroupedSequence__DefinitionListAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3561: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:3561:2: rule__GroupedSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7256);
             rule__GroupedSequence__DefinitionListAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceAccess().getDefinitionListAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 215, rule__GroupedSequence__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9930,27 +11434,30 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3519:1: rule__GroupedSequence__Group__2 : rule__GroupedSequence__Group__2__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3571:1: rule__GroupedSequence__Group__2 : rule__GroupedSequence__Group__2__Impl ;
     public final void rule__GroupedSequence__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3523:1: ( rule__GroupedSequence__Group__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3524:2: rule__GroupedSequence__Group__2__Impl
-            {
-            pushFollow(FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27160);
+        int rule__GroupedSequence__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 216) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3575: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:3576:2: rule__GroupedSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27286);
             rule__GroupedSequence__Group__2__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 216, rule__GroupedSequence__Group__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -9963,31 +11470,38 @@
 
     // $ANTLR start "rule__GroupedSequence__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3530:1: rule__GroupedSequence__Group__2__Impl : ( ')' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3582:1: rule__GroupedSequence__Group__2__Impl : ( ')' ) ;
     public final void rule__GroupedSequence__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3534:1: ( ( ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3535:1: ( ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3535:1: ( ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3536:1: ')'
-            {
-             before(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
-            match(input,13,FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7188); 
-             after(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__GroupedSequence__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 217) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3586:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3587:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3587:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3588:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7314); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceAccess().getRightParenthesisKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 217, rule__GroupedSequence__Group__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10000,32 +11514,35 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3555:1: rule__OptionalSequence__Group__0 : rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3607:1: rule__OptionalSequence__Group__0 : rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1 ;
     public final void rule__OptionalSequence__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3559:1: ( rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3560:2: rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1
-            {
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07225);
+        int rule__OptionalSequence__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 218) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3611: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:3612:2: rule__OptionalSequence__Group__0__Impl rule__OptionalSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07351);
             rule__OptionalSequence__Group__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07228);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07354);
             rule__OptionalSequence__Group__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 218, rule__OptionalSequence__Group__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10038,31 +11555,38 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3567:1: rule__OptionalSequence__Group__0__Impl : ( '[' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3619:1: rule__OptionalSequence__Group__0__Impl : ( '[' ) ;
     public final void rule__OptionalSequence__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3571:1: ( ( '[' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3572:1: ( '[' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3572:1: ( '[' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3573:1: '['
-            {
-             before(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
-            match(input,18,FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7256); 
-             after(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__OptionalSequence__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 219) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3623:1: ( ( '[' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3624:1: ( '[' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3624:1: ( '[' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3625:1: '['
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
+            }
+            match(input,18,FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7382); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceAccess().getLeftSquareBracketKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 219, rule__OptionalSequence__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10075,32 +11599,35 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3586:1: rule__OptionalSequence__Group__1 : rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3638:1: rule__OptionalSequence__Group__1 : rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2 ;
     public final void rule__OptionalSequence__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3590:1: ( rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3591:2: rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2
-            {
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17287);
+        int rule__OptionalSequence__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 220) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3642: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:3643:2: rule__OptionalSequence__Group__1__Impl rule__OptionalSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17413);
             rule__OptionalSequence__Group__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17290);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17416);
             rule__OptionalSequence__Group__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 220, rule__OptionalSequence__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10113,41 +11640,48 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3598:1: rule__OptionalSequence__Group__1__Impl : ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3650:1: rule__OptionalSequence__Group__1__Impl : ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) ) ;
     public final void rule__OptionalSequence__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3602:1: ( ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3603:1: ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3603:1: ( ( rule__OptionalSequence__DefinitionListAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3604:1: ( rule__OptionalSequence__DefinitionListAssignment_1 )
-            {
-             before(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3605:1: ( rule__OptionalSequence__DefinitionListAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3605:2: rule__OptionalSequence__DefinitionListAssignment_1
-            {
-            pushFollow(FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7317);
+        int rule__OptionalSequence__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 221) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3654: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:3655: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:3655: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:3656:1: ( rule__OptionalSequence__DefinitionListAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3657: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:3657:2: rule__OptionalSequence__DefinitionListAssignment_1
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7443);
             rule__OptionalSequence__DefinitionListAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceAccess().getDefinitionListAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 221, rule__OptionalSequence__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10160,27 +11694,30 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3615:1: rule__OptionalSequence__Group__2 : rule__OptionalSequence__Group__2__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3667:1: rule__OptionalSequence__Group__2 : rule__OptionalSequence__Group__2__Impl ;
     public final void rule__OptionalSequence__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3619:1: ( rule__OptionalSequence__Group__2__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3620:2: rule__OptionalSequence__Group__2__Impl
-            {
-            pushFollow(FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27347);
+        int rule__OptionalSequence__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 222) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3671: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:3672:2: rule__OptionalSequence__Group__2__Impl
+            {
+            pushFollow(FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27473);
             rule__OptionalSequence__Group__2__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 222, rule__OptionalSequence__Group__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10193,31 +11730,38 @@
 
     // $ANTLR start "rule__OptionalSequence__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3626:1: rule__OptionalSequence__Group__2__Impl : ( ']' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3678:1: rule__OptionalSequence__Group__2__Impl : ( ']' ) ;
     public final void rule__OptionalSequence__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3630:1: ( ( ']' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3631:1: ( ']' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3631:1: ( ']' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3632:1: ']'
-            {
-             before(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
-            match(input,14,FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7375); 
-             after(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__OptionalSequence__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 223) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3682:1: ( ( ']' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3683:1: ( ']' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3683:1: ( ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3684:1: ']'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
+            }
+            match(input,14,FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7501); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceAccess().getRightSquareBracketKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 223, rule__OptionalSequence__Group__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10230,32 +11774,35 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3651:1: rule__RepeatedSequence__Group__0 : rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3703:1: rule__RepeatedSequence__Group__0 : rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1 ;
     public final void rule__RepeatedSequence__Group__0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3655:1: ( rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3656:2: rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07412);
+        int rule__RepeatedSequence__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 224) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3707: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:3708:2: rule__RepeatedSequence__Group__0__Impl rule__RepeatedSequence__Group__1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07538);
             rule__RepeatedSequence__Group__0__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07415);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07541);
             rule__RepeatedSequence__Group__1();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 224, rule__RepeatedSequence__Group__0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10268,31 +11815,38 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__0__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3663:1: rule__RepeatedSequence__Group__0__Impl : ( '{' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3715:1: rule__RepeatedSequence__Group__0__Impl : ( '{' ) ;
     public final void rule__RepeatedSequence__Group__0__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3667:1: ( ( '{' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3668:1: ( '{' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3668:1: ( '{' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3669:1: '{'
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
-            match(input,19,FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7443); 
-             after(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RepeatedSequence__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 225) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3719:1: ( ( '{' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3720:1: ( '{' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3720:1: ( '{' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3721:1: '{'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
+            }
+            match(input,19,FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7569); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getLeftCurlyBracketKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 225, rule__RepeatedSequence__Group__0__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10305,32 +11859,35 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3682:1: rule__RepeatedSequence__Group__1 : rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3734:1: rule__RepeatedSequence__Group__1 : rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2 ;
     public final void rule__RepeatedSequence__Group__1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3686:1: ( rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3687:2: rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17474);
+        int rule__RepeatedSequence__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 226) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3738: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:3739:2: rule__RepeatedSequence__Group__1__Impl rule__RepeatedSequence__Group__2
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17600);
             rule__RepeatedSequence__Group__1__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17477);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17603);
             rule__RepeatedSequence__Group__2();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 226, rule__RepeatedSequence__Group__1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10343,41 +11900,48 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__1__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3694:1: rule__RepeatedSequence__Group__1__Impl : ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3746:1: rule__RepeatedSequence__Group__1__Impl : ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) ) ;
     public final void rule__RepeatedSequence__Group__1__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3698:1: ( ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3699:1: ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3699:1: ( ( rule__RepeatedSequence__DefinitionsAssignment_1 ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3700:1: ( rule__RepeatedSequence__DefinitionsAssignment_1 )
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3701:1: ( rule__RepeatedSequence__DefinitionsAssignment_1 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3701:2: rule__RepeatedSequence__DefinitionsAssignment_1
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7504);
+        int rule__RepeatedSequence__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 227) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3750: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:3751: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:3751: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:3752:1: ( rule__RepeatedSequence__DefinitionsAssignment_1 )
+            {
+            if ( state.backtracking==0 ) {
+               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:3753: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:3753:2: rule__RepeatedSequence__DefinitionsAssignment_1
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7630);
             rule__RepeatedSequence__DefinitionsAssignment_1();
 
             state._fsp--;
-
-
-            }
-
-             after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsAssignment_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 227, rule__RepeatedSequence__Group__1__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10390,32 +11954,35 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3711:1: rule__RepeatedSequence__Group__2 : rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3 ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3763:1: rule__RepeatedSequence__Group__2 : rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3 ;
     public final void rule__RepeatedSequence__Group__2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3715:1: ( rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3 )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3716:2: rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27534);
+        int rule__RepeatedSequence__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 228) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3767: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:3768:2: rule__RepeatedSequence__Group__2__Impl rule__RepeatedSequence__Group__3
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27660);
             rule__RepeatedSequence__Group__2__Impl();
 
             state._fsp--;
-
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27537);
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27663);
             rule__RepeatedSequence__Group__3();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 228, rule__RepeatedSequence__Group__2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10428,31 +11995,38 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__2__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3723:1: rule__RepeatedSequence__Group__2__Impl : ( '}' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3775:1: rule__RepeatedSequence__Group__2__Impl : ( '}' ) ;
     public final void rule__RepeatedSequence__Group__2__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3727:1: ( ( '}' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3728:1: ( '}' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3728:1: ( '}' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3729:1: '}'
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
-            match(input,15,FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7565); 
-             after(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RepeatedSequence__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 229) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3779:1: ( ( '}' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3780:1: ( '}' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3780:1: ( '}' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3781:1: '}'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
+            }
+            match(input,15,FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7691); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getRightCurlyBracketKeyword_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 229, rule__RepeatedSequence__Group__2__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10465,27 +12039,30 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3742:1: rule__RepeatedSequence__Group__3 : rule__RepeatedSequence__Group__3__Impl ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3794:1: rule__RepeatedSequence__Group__3 : rule__RepeatedSequence__Group__3__Impl ;
     public final void rule__RepeatedSequence__Group__3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3746:1: ( rule__RepeatedSequence__Group__3__Impl )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3747:2: rule__RepeatedSequence__Group__3__Impl
-            {
-            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37596);
+        int rule__RepeatedSequence__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 230) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3798: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:3799:2: rule__RepeatedSequence__Group__3__Impl
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37722);
             rule__RepeatedSequence__Group__3__Impl();
 
             state._fsp--;
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 230, rule__RepeatedSequence__Group__3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10498,52 +12075,48 @@
 
     // $ANTLR start "rule__RepeatedSequence__Group__3__Impl"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3753:1: rule__RepeatedSequence__Group__3__Impl : ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3805:1: rule__RepeatedSequence__Group__3__Impl : ( ( rule__RepeatedSequence__Alternatives_3 ) ) ;
     public final void rule__RepeatedSequence__Group__3__Impl() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3757:1: ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3758:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3758:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3 )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3759:1: ( rule__RepeatedSequence__MorethanonceAssignment_3 )?
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3760:1: ( rule__RepeatedSequence__MorethanonceAssignment_3 )?
-            int alt37=2;
-            int LA37_0 = input.LA(1);
-
-            if ( (LA37_0==21) ) {
-                alt37=1;
-            }
-            switch (alt37) {
-                case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3760:2: rule__RepeatedSequence__MorethanonceAssignment_3
-                    {
-                    pushFollow(FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7623);
-                    rule__RepeatedSequence__MorethanonceAssignment_3();
-
-                    state._fsp--;
-
-
-                    }
-                    break;
-
-            }
-
-             after(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RepeatedSequence__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 231) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3809:1: ( ( ( rule__RepeatedSequence__Alternatives_3 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3810:1: ( ( rule__RepeatedSequence__Alternatives_3 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3810:1: ( ( rule__RepeatedSequence__Alternatives_3 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3811:1: ( rule__RepeatedSequence__Alternatives_3 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getAlternatives_3()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3812:1: ( rule__RepeatedSequence__Alternatives_3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3812:2: rule__RepeatedSequence__Alternatives_3
+            {
+            pushFollow(FOLLOW_rule__RepeatedSequence__Alternatives_3_in_rule__RepeatedSequence__Group__3__Impl7749);
+            rule__RepeatedSequence__Alternatives_3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getAlternatives_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 231, rule__RepeatedSequence__Group__3__Impl_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10555,32 +12128,564 @@
 
 
+    // $ANTLR start "rule__RepeatRange__Group__0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3830:1: rule__RepeatRange__Group__0 : rule__RepeatRange__Group__0__Impl rule__RepeatRange__Group__1 ;
+    public final void rule__RepeatRange__Group__0() throws RecognitionException {
+        int rule__RepeatRange__Group__0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 232) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3834:1: ( rule__RepeatRange__Group__0__Impl rule__RepeatRange__Group__1 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3835:2: rule__RepeatRange__Group__0__Impl rule__RepeatRange__Group__1
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__0__Impl_in_rule__RepeatRange__Group__07787);
+            rule__RepeatRange__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatRange__Group__1_in_rule__RepeatRange__Group__07790);
+            rule__RepeatRange__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 232, rule__RepeatRange__Group__0_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__0"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__0__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3842:1: rule__RepeatRange__Group__0__Impl : ( '#' ) ;
+    public final void rule__RepeatRange__Group__0__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__0__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 233) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3846:1: ( ( '#' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3847:1: ( '#' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3847:1: ( '#' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3848:1: '#'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getNumberSignKeyword_0()); 
+            }
+            match(input,34,FOLLOW_34_in_rule__RepeatRange__Group__0__Impl7818); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getNumberSignKeyword_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 233, rule__RepeatRange__Group__0__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__0__Impl"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3861:1: rule__RepeatRange__Group__1 : rule__RepeatRange__Group__1__Impl rule__RepeatRange__Group__2 ;
+    public final void rule__RepeatRange__Group__1() throws RecognitionException {
+        int rule__RepeatRange__Group__1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 234) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3865:1: ( rule__RepeatRange__Group__1__Impl rule__RepeatRange__Group__2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3866:2: rule__RepeatRange__Group__1__Impl rule__RepeatRange__Group__2
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__1__Impl_in_rule__RepeatRange__Group__17849);
+            rule__RepeatRange__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatRange__Group__2_in_rule__RepeatRange__Group__17852);
+            rule__RepeatRange__Group__2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 234, rule__RepeatRange__Group__1_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__1"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__1__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3873:1: rule__RepeatRange__Group__1__Impl : ( '(' ) ;
+    public final void rule__RepeatRange__Group__1__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__1__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 235) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3877:1: ( ( '(' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3878:1: ( '(' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3878:1: ( '(' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3879:1: '('
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getLeftParenthesisKeyword_1()); 
+            }
+            match(input,17,FOLLOW_17_in_rule__RepeatRange__Group__1__Impl7880); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getLeftParenthesisKeyword_1()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 235, rule__RepeatRange__Group__1__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__1__Impl"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3892:1: rule__RepeatRange__Group__2 : rule__RepeatRange__Group__2__Impl rule__RepeatRange__Group__3 ;
+    public final void rule__RepeatRange__Group__2() throws RecognitionException {
+        int rule__RepeatRange__Group__2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 236) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3896:1: ( rule__RepeatRange__Group__2__Impl rule__RepeatRange__Group__3 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3897:2: rule__RepeatRange__Group__2__Impl rule__RepeatRange__Group__3
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__2__Impl_in_rule__RepeatRange__Group__27911);
+            rule__RepeatRange__Group__2__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatRange__Group__3_in_rule__RepeatRange__Group__27914);
+            rule__RepeatRange__Group__3();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 236, rule__RepeatRange__Group__2_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__2"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__2__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3904:1: rule__RepeatRange__Group__2__Impl : ( ( rule__RepeatRange__FromAssignment_2 ) ) ;
+    public final void rule__RepeatRange__Group__2__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__2__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 237) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3908:1: ( ( ( rule__RepeatRange__FromAssignment_2 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3909:1: ( ( rule__RepeatRange__FromAssignment_2 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3909:1: ( ( rule__RepeatRange__FromAssignment_2 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3910:1: ( rule__RepeatRange__FromAssignment_2 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getFromAssignment_2()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3911:1: ( rule__RepeatRange__FromAssignment_2 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3911:2: rule__RepeatRange__FromAssignment_2
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__FromAssignment_2_in_rule__RepeatRange__Group__2__Impl7941);
+            rule__RepeatRange__FromAssignment_2();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getFromAssignment_2()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 237, rule__RepeatRange__Group__2__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__2__Impl"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__3"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3921:1: rule__RepeatRange__Group__3 : rule__RepeatRange__Group__3__Impl rule__RepeatRange__Group__4 ;
+    public final void rule__RepeatRange__Group__3() throws RecognitionException {
+        int rule__RepeatRange__Group__3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 238) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3925:1: ( rule__RepeatRange__Group__3__Impl rule__RepeatRange__Group__4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3926:2: rule__RepeatRange__Group__3__Impl rule__RepeatRange__Group__4
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__3__Impl_in_rule__RepeatRange__Group__37971);
+            rule__RepeatRange__Group__3__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatRange__Group__4_in_rule__RepeatRange__Group__37974);
+            rule__RepeatRange__Group__4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 238, rule__RepeatRange__Group__3_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__3"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__3__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3933:1: rule__RepeatRange__Group__3__Impl : ( ',' ) ;
+    public final void rule__RepeatRange__Group__3__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__3__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 239) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3937:1: ( ( ',' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3938:1: ( ',' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3938:1: ( ',' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3939:1: ','
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getCommaKeyword_3()); 
+            }
+            match(input,35,FOLLOW_35_in_rule__RepeatRange__Group__3__Impl8002); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getCommaKeyword_3()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 239, rule__RepeatRange__Group__3__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__3__Impl"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3952:1: rule__RepeatRange__Group__4 : rule__RepeatRange__Group__4__Impl rule__RepeatRange__Group__5 ;
+    public final void rule__RepeatRange__Group__4() throws RecognitionException {
+        int rule__RepeatRange__Group__4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 240) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3956:1: ( rule__RepeatRange__Group__4__Impl rule__RepeatRange__Group__5 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3957:2: rule__RepeatRange__Group__4__Impl rule__RepeatRange__Group__5
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__4__Impl_in_rule__RepeatRange__Group__48033);
+            rule__RepeatRange__Group__4__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FOLLOW_rule__RepeatRange__Group__5_in_rule__RepeatRange__Group__48036);
+            rule__RepeatRange__Group__5();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 240, rule__RepeatRange__Group__4_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__4"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__4__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3964:1: rule__RepeatRange__Group__4__Impl : ( ( rule__RepeatRange__ToAssignment_4 ) ) ;
+    public final void rule__RepeatRange__Group__4__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__4__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 241) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3968:1: ( ( ( rule__RepeatRange__ToAssignment_4 ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3969:1: ( ( rule__RepeatRange__ToAssignment_4 ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3969:1: ( ( rule__RepeatRange__ToAssignment_4 ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3970:1: ( rule__RepeatRange__ToAssignment_4 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getToAssignment_4()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3971:1: ( rule__RepeatRange__ToAssignment_4 )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3971:2: rule__RepeatRange__ToAssignment_4
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__ToAssignment_4_in_rule__RepeatRange__Group__4__Impl8063);
+            rule__RepeatRange__ToAssignment_4();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getToAssignment_4()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 241, rule__RepeatRange__Group__4__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__4__Impl"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__5"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3981:1: rule__RepeatRange__Group__5 : rule__RepeatRange__Group__5__Impl ;
+    public final void rule__RepeatRange__Group__5() throws RecognitionException {
+        int rule__RepeatRange__Group__5_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 242) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3985:1: ( rule__RepeatRange__Group__5__Impl )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3986:2: rule__RepeatRange__Group__5__Impl
+            {
+            pushFollow(FOLLOW_rule__RepeatRange__Group__5__Impl_in_rule__RepeatRange__Group__58093);
+            rule__RepeatRange__Group__5__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 242, rule__RepeatRange__Group__5_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__5"
+
+
+    // $ANTLR start "rule__RepeatRange__Group__5__Impl"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3992:1: rule__RepeatRange__Group__5__Impl : ( ')' ) ;
+    public final void rule__RepeatRange__Group__5__Impl() throws RecognitionException {
+        int rule__RepeatRange__Group__5__Impl_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 243) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3996:1: ( ( ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3997:1: ( ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3997:1: ( ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3998:1: ')'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getRightParenthesisKeyword_5()); 
+            }
+            match(input,13,FOLLOW_13_in_rule__RepeatRange__Group__5__Impl8121); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getRightParenthesisKeyword_5()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 243, rule__RepeatRange__Group__5__Impl_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__Group__5__Impl"
+
+
     // $ANTLR start "rule__EtsiBnf__NameAssignment_0_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3779:1: rule__EtsiBnf__NameAssignment_0_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4024:1: rule__EtsiBnf__NameAssignment_0_1 : ( RULE_ID ) ;
     public final void rule__EtsiBnf__NameAssignment_0_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3783:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3784:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3784:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3785:1: RULE_ID
-            {
-             before(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17667); 
-             after(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__NameAssignment_0_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 244) ) { return ; }
+            // ../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
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_18169); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getNameIDTerminalRuleCall_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 244, rule__EtsiBnf__NameAssignment_0_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10593,39 +12698,50 @@
 
     // $ANTLR start "rule__EtsiBnf__TypeAssignment_0_2_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3794:1: rule__EtsiBnf__TypeAssignment_0_2_0 : ( ( '/bnf' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4039:1: rule__EtsiBnf__TypeAssignment_0_2_0 : ( ( '/bnf' ) ) ;
     public final void rule__EtsiBnf__TypeAssignment_0_2_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3798:1: ( ( ( '/bnf' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3799:1: ( ( '/bnf' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3799:1: ( ( '/bnf' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3800:1: ( '/bnf' )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3801:1: ( '/bnf' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3802:1: '/bnf'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
-            match(input,34,FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07703); 
-             after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__TypeAssignment_0_2_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 245) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4043:1: ( ( ( '/bnf' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4044:1: ( ( '/bnf' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4044:1: ( ( '/bnf' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4045:1: ( '/bnf' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4046:1: ( '/bnf' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4047:1: '/bnf'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            }
+            match(input,36,FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_0_2_08205); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeBnfKeyword_0_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 245, rule__EtsiBnf__TypeAssignment_0_2_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10638,35 +12754,42 @@
 
     // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_0_2_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3817:1: rule__EtsiBnf__ImportSectionAssignment_0_2_2 : ( ruleImportSection ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4062:1: rule__EtsiBnf__ImportSectionAssignment_0_2_2 : ( ruleImportSection ) ;
     public final void rule__EtsiBnf__ImportSectionAssignment_0_2_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3821:1: ( ( ruleImportSection ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3822:1: ( ruleImportSection )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3822:1: ( ruleImportSection )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3823:1: ruleImportSection
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
-            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_27742);
+        int rule__EtsiBnf__ImportSectionAssignment_0_2_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 246) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4066:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4067:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4067:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4068:1: ruleImportSection
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+            }
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_28244);
             ruleImportSection();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_0_2_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 246, rule__EtsiBnf__ImportSectionAssignment_0_2_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10679,35 +12802,42 @@
 
     // $ANTLR start "rule__EtsiBnf__BnfEntryAssignment_0_2_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3832:1: rule__EtsiBnf__BnfEntryAssignment_0_2_3 : ( ruleBnfEntry ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4077:1: rule__EtsiBnf__BnfEntryAssignment_0_2_3 : ( ruleBnfEntry ) ;
     public final void rule__EtsiBnf__BnfEntryAssignment_0_2_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3836:1: ( ( ruleBnfEntry ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3837:1: ( ruleBnfEntry )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3837:1: ( ruleBnfEntry )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3838:1: ruleBnfEntry
-            {
-             before(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
-            pushFollow(FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_37773);
+        int rule__EtsiBnf__BnfEntryAssignment_0_2_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 247) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4081:1: ( ( ruleBnfEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4082:1: ( ruleBnfEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4082:1: ( ruleBnfEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4083:1: ruleBnfEntry
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+            }
+            pushFollow(FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_38275);
             ruleBnfEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getBnfEntryBnfEntryParserRuleCall_0_2_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 247, rule__EtsiBnf__BnfEntryAssignment_0_2_3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10720,39 +12850,50 @@
 
     // $ANTLR start "rule__EtsiBnf__TypeAssignment_1_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3847:1: rule__EtsiBnf__TypeAssignment_1_0 : ( ( '/delta' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4092:1: rule__EtsiBnf__TypeAssignment_1_0 : ( ( '/delta' ) ) ;
     public final void rule__EtsiBnf__TypeAssignment_1_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3851:1: ( ( ( '/delta' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3852:1: ( ( '/delta' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3852:1: ( ( '/delta' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3853:1: ( '/delta' )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3854:1: ( '/delta' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3855:1: '/delta'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
-            match(input,35,FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07809); 
-             after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__TypeAssignment_1_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 248) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4096:1: ( ( ( '/delta' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4097:1: ( ( '/delta' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4097:1: ( ( '/delta' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4098:1: ( '/delta' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4099:1: ( '/delta' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4100:1: '/delta'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            }
+            match(input,37,FOLLOW_37_in_rule__EtsiBnf__TypeAssignment_1_08311); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeDeltaKeyword_1_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 248, rule__EtsiBnf__TypeAssignment_1_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10765,35 +12906,42 @@
 
     // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_1_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3870:1: rule__EtsiBnf__ImportSectionAssignment_1_2 : ( ruleImportSection ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4115:1: rule__EtsiBnf__ImportSectionAssignment_1_2 : ( ruleImportSection ) ;
     public final void rule__EtsiBnf__ImportSectionAssignment_1_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3874:1: ( ( ruleImportSection ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3875:1: ( ruleImportSection )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3875:1: ( ruleImportSection )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3876:1: ruleImportSection
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
-            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_27848);
+        int rule__EtsiBnf__ImportSectionAssignment_1_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 249) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4119:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4120:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4120:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4121:1: ruleImportSection
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+            }
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_28350);
             ruleImportSection();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_1_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 249, rule__EtsiBnf__ImportSectionAssignment_1_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10806,35 +12954,42 @@
 
     // $ANTLR start "rule__EtsiBnf__DeltaEntryAssignment_1_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3885:1: rule__EtsiBnf__DeltaEntryAssignment_1_3 : ( ruleDeltaEntry ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4130:1: rule__EtsiBnf__DeltaEntryAssignment_1_3 : ( ruleDeltaEntry ) ;
     public final void rule__EtsiBnf__DeltaEntryAssignment_1_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3889:1: ( ( ruleDeltaEntry ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3890:1: ( ruleDeltaEntry )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3890:1: ( ruleDeltaEntry )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3891:1: ruleDeltaEntry
-            {
-             before(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
-            pushFollow(FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_37879);
+        int rule__EtsiBnf__DeltaEntryAssignment_1_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 250) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4134:1: ( ( ruleDeltaEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4135:1: ( ruleDeltaEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4135:1: ( ruleDeltaEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4136:1: ruleDeltaEntry
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+            }
+            pushFollow(FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_38381);
             ruleDeltaEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getDeltaEntryDeltaEntryParserRuleCall_1_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 250, rule__EtsiBnf__DeltaEntryAssignment_1_3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10847,39 +13002,50 @@
 
     // $ANTLR start "rule__EtsiBnf__TypeAssignment_2_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3900:1: rule__EtsiBnf__TypeAssignment_2_0 : ( ( '/merge' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4145:1: rule__EtsiBnf__TypeAssignment_2_0 : ( ( '/merge' ) ) ;
     public final void rule__EtsiBnf__TypeAssignment_2_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3904:1: ( ( ( '/merge' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3905:1: ( ( '/merge' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3905:1: ( ( '/merge' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3906:1: ( '/merge' )
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3907:1: ( '/merge' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3908:1: '/merge'
-            {
-             before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
-            match(input,36,FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07915); 
-             after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
-
-            }
-
-             after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__EtsiBnf__TypeAssignment_2_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 251) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4149:1: ( ( ( '/merge' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4150:1: ( ( '/merge' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4150:1: ( ( '/merge' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4151:1: ( '/merge' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4152:1: ( '/merge' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4153:1: '/merge'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            }
+            match(input,38,FOLLOW_38_in_rule__EtsiBnf__TypeAssignment_2_08417); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getTypeMergeKeyword_2_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 251, rule__EtsiBnf__TypeAssignment_2_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10892,35 +13058,42 @@
 
     // $ANTLR start "rule__EtsiBnf__ImportSectionAssignment_2_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3923:1: rule__EtsiBnf__ImportSectionAssignment_2_2 : ( ruleImportSection ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4168:1: rule__EtsiBnf__ImportSectionAssignment_2_2 : ( ruleImportSection ) ;
     public final void rule__EtsiBnf__ImportSectionAssignment_2_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3927:1: ( ( ruleImportSection ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3928:1: ( ruleImportSection )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3928:1: ( ruleImportSection )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3929:1: ruleImportSection
-            {
-             before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
-            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_27954);
+        int rule__EtsiBnf__ImportSectionAssignment_2_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 252) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4172:1: ( ( ruleImportSection ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4173:1: ( ruleImportSection )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4173:1: ( ruleImportSection )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4174:1: ruleImportSection
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+            }
+            pushFollow(FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_28456);
             ruleImportSection();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getImportSectionImportSectionParserRuleCall_2_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 252, rule__EtsiBnf__ImportSectionAssignment_2_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10933,35 +13106,42 @@
 
     // $ANTLR start "rule__EtsiBnf__MergeEntryAssignment_2_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3938:1: rule__EtsiBnf__MergeEntryAssignment_2_3 : ( ruleMergeEntry ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4183:1: rule__EtsiBnf__MergeEntryAssignment_2_3 : ( ruleMergeEntry ) ;
     public final void rule__EtsiBnf__MergeEntryAssignment_2_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3942:1: ( ( ruleMergeEntry ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3943:1: ( ruleMergeEntry )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3943:1: ( ruleMergeEntry )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3944:1: ruleMergeEntry
-            {
-             before(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
-            pushFollow(FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_37985);
+        int rule__EtsiBnf__MergeEntryAssignment_2_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 253) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4187:1: ( ( ruleMergeEntry ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4188:1: ( ruleMergeEntry )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4188:1: ( ruleMergeEntry )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4189:1: ruleMergeEntry
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+            }
+            pushFollow(FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_38487);
             ruleMergeEntry();
 
             state._fsp--;
-
-             after(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getEtsiBnfAccess().getMergeEntryMergeEntryParserRuleCall_2_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 253, rule__EtsiBnf__MergeEntryAssignment_2_3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -10974,35 +13154,42 @@
 
     // $ANTLR start "rule__ImportSection__ImportsAssignment"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3953:1: rule__ImportSection__ImportsAssignment : ( ruleImport ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4198:1: rule__ImportSection__ImportsAssignment : ( ruleImport ) ;
     public final void rule__ImportSection__ImportsAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3957:1: ( ( ruleImport ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3958:1: ( ruleImport )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3958:1: ( ruleImport )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3959:1: ruleImport
-            {
-             before(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
-            pushFollow(FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8016);
+        int rule__ImportSection__ImportsAssignment_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 254) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4202:1: ( ( ruleImport ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4203:1: ( ruleImport )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4203:1: ( ruleImport )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4204:1: ruleImport
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+            }
+            pushFollow(FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8518);
             ruleImport();
 
             state._fsp--;
-
-             after(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportSectionAccess().getImportsImportParserRuleCall_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 254, rule__ImportSection__ImportsAssignment_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11015,35 +13202,42 @@
 
     // $ANTLR start "rule__BnfEntry__SectionheaderAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3968:1: rule__BnfEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4213:1: rule__BnfEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
     public final void rule__BnfEntry__SectionheaderAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3972:1: ( ( ruleSectionHeading ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3973:1: ( ruleSectionHeading )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3973:1: ( ruleSectionHeading )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3974:1: ruleSectionHeading
-            {
-             before(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08047);
+        int rule__BnfEntry__SectionheaderAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 255) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4217:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4218:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4218:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4219:1: ruleSectionHeading
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08549);
             ruleSectionHeading();
 
             state._fsp--;
-
-             after(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getBnfEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 255, rule__BnfEntry__SectionheaderAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11056,35 +13250,42 @@
 
     // $ANTLR start "rule__BnfEntry__RuleAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3983:1: rule__BnfEntry__RuleAssignment_1 : ( ruleRule ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4228:1: rule__BnfEntry__RuleAssignment_1 : ( ruleRule ) ;
     public final void rule__BnfEntry__RuleAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3987:1: ( ( ruleRule ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3988:1: ( ruleRule )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3988:1: ( ruleRule )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3989:1: ruleRule
-            {
-             before(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18078);
+        int rule__BnfEntry__RuleAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 256) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4232:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4233:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4233:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4234:1: ruleRule
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18580);
             ruleRule();
 
             state._fsp--;
-
-             after(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getBnfEntryAccess().getRuleRuleParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 256, rule__BnfEntry__RuleAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11097,35 +13298,42 @@
 
     // $ANTLR start "rule__DeltaEntry__RuleAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:3998:1: rule__DeltaEntry__RuleAssignment_0 : ( ruleRule ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4243:1: rule__DeltaEntry__RuleAssignment_0 : ( ruleRule ) ;
     public final void rule__DeltaEntry__RuleAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4002:1: ( ( ruleRule ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4003:1: ( ruleRule )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4003:1: ( ruleRule )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4004:1: ruleRule
-            {
-             before(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08109);
+        int rule__DeltaEntry__RuleAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 257) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4247:1: ( ( ruleRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4248:1: ( ruleRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4248:1: ( ruleRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4249:1: ruleRule
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08611);
             ruleRule();
 
             state._fsp--;
-
-             after(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDeltaEntryAccess().getRuleRuleParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 257, rule__DeltaEntry__RuleAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11138,35 +13346,42 @@
 
     // $ANTLR start "rule__DeltaEntry__SectionheaderAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4013:1: rule__DeltaEntry__SectionheaderAssignment_1 : ( ruleSectionHeading ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4258:1: rule__DeltaEntry__SectionheaderAssignment_1 : ( ruleSectionHeading ) ;
     public final void rule__DeltaEntry__SectionheaderAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4017:1: ( ( ruleSectionHeading ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4018:1: ( ruleSectionHeading )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4018:1: ( ruleSectionHeading )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4019:1: ruleSectionHeading
-            {
-             before(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18140);
+        int rule__DeltaEntry__SectionheaderAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 258) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4262:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4263:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4263:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4264:1: ruleSectionHeading
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18642);
             ruleSectionHeading();
 
             state._fsp--;
-
-             after(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDeltaEntryAccess().getSectionheaderSectionHeadingParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 258, rule__DeltaEntry__SectionheaderAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11179,35 +13394,42 @@
 
     // $ANTLR start "rule__DeltaEntry__ExtRuleAssignment_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4028:1: rule__DeltaEntry__ExtRuleAssignment_2 : ( ruleExtRule ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4273:1: rule__DeltaEntry__ExtRuleAssignment_2 : ( ruleExtRule ) ;
     public final void rule__DeltaEntry__ExtRuleAssignment_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4032:1: ( ( ruleExtRule ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4033:1: ( ruleExtRule )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4033:1: ( ruleExtRule )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4034:1: ruleExtRule
-            {
-             before(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
-            pushFollow(FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28171);
+        int rule__DeltaEntry__ExtRuleAssignment_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 259) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4277:1: ( ( ruleExtRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4278:1: ( ruleExtRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4278:1: ( ruleExtRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4279:1: ruleExtRule
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+            }
+            pushFollow(FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28673);
             ruleExtRule();
 
             state._fsp--;
-
-             after(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDeltaEntryAccess().getExtRuleExtRuleParserRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 259, rule__DeltaEntry__ExtRuleAssignment_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11220,35 +13442,42 @@
 
     // $ANTLR start "rule__MergeEntry__SectionheaderAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4043:1: rule__MergeEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4288:1: rule__MergeEntry__SectionheaderAssignment_0 : ( ruleSectionHeading ) ;
     public final void rule__MergeEntry__SectionheaderAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4047:1: ( ( ruleSectionHeading ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4048:1: ( ruleSectionHeading )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4048:1: ( ruleSectionHeading )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4049:1: ruleSectionHeading
-            {
-             before(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08202);
+        int rule__MergeEntry__SectionheaderAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 260) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4292:1: ( ( ruleSectionHeading ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4293:1: ( ruleSectionHeading )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4293:1: ( ruleSectionHeading )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4294:1: ruleSectionHeading
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08704);
             ruleSectionHeading();
 
             state._fsp--;
-
-             after(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeEntryAccess().getSectionheaderSectionHeadingParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 260, rule__MergeEntry__SectionheaderAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11261,35 +13490,42 @@
 
     // $ANTLR start "rule__MergeEntry__MergeRuleAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4058:1: rule__MergeEntry__MergeRuleAssignment_1 : ( ruleMergeRule ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4303:1: rule__MergeEntry__MergeRuleAssignment_1 : ( ruleMergeRule ) ;
     public final void rule__MergeEntry__MergeRuleAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4062:1: ( ( ruleMergeRule ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4063:1: ( ruleMergeRule )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4063:1: ( ruleMergeRule )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4064:1: ruleMergeRule
-            {
-             before(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18233);
+        int rule__MergeEntry__MergeRuleAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 261) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4307:1: ( ( ruleMergeRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4308:1: ( ruleMergeRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4308:1: ( ruleMergeRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4309:1: ruleMergeRule
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18735);
             ruleMergeRule();
 
             state._fsp--;
-
-             after(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getMergeEntryAccess().getMergeRuleMergeRuleParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 261, rule__MergeEntry__MergeRuleAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11302,31 +13538,38 @@
 
     // $ANTLR start "rule__SectionHeading__SectionHeaderAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4073:1: rule__SectionHeading__SectionHeaderAssignment_1 : ( RULE_SECTIONHEADER ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4318:1: rule__SectionHeading__SectionHeaderAssignment_1 : ( RULE_SECTIONHEADER ) ;
     public final void rule__SectionHeading__SectionHeaderAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4077:1: ( ( RULE_SECTIONHEADER ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4078:1: ( RULE_SECTIONHEADER )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4078:1: ( RULE_SECTIONHEADER )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4079:1: RULE_SECTIONHEADER
-            {
-             before(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
-            match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18264); 
-             after(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__SectionHeading__SectionHeaderAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 262) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4322:1: ( ( RULE_SECTIONHEADER ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4323:1: ( RULE_SECTIONHEADER )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4323:1: ( RULE_SECTIONHEADER )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4324:1: RULE_SECTIONHEADER
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18766); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSectionHeadingAccess().getSectionHeaderSECTIONHEADERTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 262, rule__SectionHeading__SectionHeaderAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11339,31 +13582,38 @@
 
     // $ANTLR start "rule__Import__ImportURIAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4088:1: rule__Import__ImportURIAssignment_1 : ( RULE_STRING ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4333:1: rule__Import__ImportURIAssignment_1 : ( RULE_STRING ) ;
     public final void rule__Import__ImportURIAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4092:1: ( ( RULE_STRING ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4093:1: ( RULE_STRING )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4093:1: ( RULE_STRING )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4094:1: RULE_STRING
-            {
-             before(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
-            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18295); 
-             after(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__ImportURIAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 263) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4337:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4338:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4338:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4339:1: RULE_STRING
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18797); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getImportURISTRINGTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 263, rule__Import__ImportURIAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11376,39 +13626,50 @@
 
     // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4103:1: rule__Import__GrammarTypeAssignment_2_1_0 : ( ( 'core' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4348:1: rule__Import__GrammarTypeAssignment_2_1_0 : ( ( 'core' ) ) ;
     public final void rule__Import__GrammarTypeAssignment_2_1_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4107:1: ( ( ( 'core' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4108:1: ( ( 'core' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4108:1: ( ( 'core' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4109:1: ( 'core' )
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4110:1: ( 'core' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4111:1: 'core'
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
-            match(input,37,FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_08331); 
-             after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
-
-            }
-
-             after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__GrammarTypeAssignment_2_1_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 264) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4352:1: ( ( ( 'core' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4353:1: ( ( 'core' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4353:1: ( ( 'core' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4354:1: ( 'core' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4355:1: ( 'core' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4356:1: 'core'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            }
+            match(input,39,FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_08833); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypeCoreKeyword_2_1_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 264, rule__Import__GrammarTypeAssignment_2_1_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11421,39 +13682,50 @@
 
     // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4126:1: rule__Import__GrammarTypeAssignment_2_1_1 : ( ( 'package' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4371:1: rule__Import__GrammarTypeAssignment_2_1_1 : ( ( 'package' ) ) ;
     public final void rule__Import__GrammarTypeAssignment_2_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4130:1: ( ( ( 'package' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4131:1: ( ( 'package' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4131:1: ( ( 'package' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4132:1: ( 'package' )
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4133:1: ( 'package' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4134:1: 'package'
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
-            match(input,38,FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_18375); 
-             after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
-
-            }
-
-             after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__GrammarTypeAssignment_2_1_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 265) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4375:1: ( ( ( 'package' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4376:1: ( ( 'package' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4376:1: ( ( 'package' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4377:1: ( 'package' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4378:1: ( 'package' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4379:1: 'package'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            }
+            match(input,40,FOLLOW_40_in_rule__Import__GrammarTypeAssignment_2_1_18877); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypePackageKeyword_2_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 265, rule__Import__GrammarTypeAssignment_2_1_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11466,39 +13738,50 @@
 
     // $ANTLR start "rule__Import__GrammarTypeAssignment_2_1_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4149:1: rule__Import__GrammarTypeAssignment_2_1_2 : ( ( 'update' ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4394:1: rule__Import__GrammarTypeAssignment_2_1_2 : ( ( 'update' ) ) ;
     public final void rule__Import__GrammarTypeAssignment_2_1_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4153:1: ( ( ( 'update' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4154:1: ( ( 'update' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4154:1: ( ( 'update' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4155:1: ( 'update' )
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4156:1: ( 'update' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4157:1: 'update'
-            {
-             before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
-            match(input,39,FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28419); 
-             after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
-
-            }
-
-             after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__GrammarTypeAssignment_2_1_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 266) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4398:1: ( ( ( 'update' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4399:1: ( ( 'update' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4399:1: ( ( 'update' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4400:1: ( 'update' )
+            {
+            if ( state.backtracking==0 ) {
+               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:4401:1: ( 'update' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4402:1: 'update'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            }
+            match(input,41,FOLLOW_41_in_rule__Import__GrammarTypeAssignment_2_1_28921); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getGrammarTypeUpdateKeyword_2_1_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 266, rule__Import__GrammarTypeAssignment_2_1_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11511,31 +13794,38 @@
 
     // $ANTLR start "rule__Import__LabelAssignment_3_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4172:1: rule__Import__LabelAssignment_3_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4417:1: rule__Import__LabelAssignment_3_1 : ( RULE_ID ) ;
     public final void rule__Import__LabelAssignment_3_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4176:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4177:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4177:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4178:1: RULE_ID
-            {
-             before(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18458); 
-             after(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Import__LabelAssignment_3_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 267) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4421:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4422:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4422:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4423:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18960); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getImportAccess().getLabelIDTerminalRuleCall_3_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 267, rule__Import__LabelAssignment_3_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11548,31 +13838,38 @@
 
     // $ANTLR start "rule__Rule__RulenumberAssignment_0_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4187:1: rule__Rule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4432:1: rule__Rule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
     public final void rule__Rule__RulenumberAssignment_0_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4191:1: ( ( RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4192:1: ( RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4192:1: ( RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4193:1: RULE_INT
-            {
-             before(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08489); 
-             after(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Rule__RulenumberAssignment_0_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 268) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4436:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4437:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4437:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4438:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08991); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 268, rule__Rule__RulenumberAssignment_0_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11585,31 +13882,38 @@
 
     // $ANTLR start "rule__Rule__RulevariantAssignment_0_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4202:1: rule__Rule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4447:1: rule__Rule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
     public final void rule__Rule__RulevariantAssignment_0_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4206:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4207:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4207:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4208:1: RULE_ID
-            {
-             before(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18520); 
-             after(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Rule__RulevariantAssignment_0_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 269) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4451:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4452:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4452:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4453:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_19022); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 269, rule__Rule__RulevariantAssignment_0_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11622,31 +13926,38 @@
 
     // $ANTLR start "rule__Rule__NameAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4217:1: rule__Rule__NameAssignment_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4462:1: rule__Rule__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__Rule__NameAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4221:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4222:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4222:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4223:1: RULE_ID
-            {
-             before(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18551); 
-             after(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__Rule__NameAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 270) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4466:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4467:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4467:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4468:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_19053); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 270, rule__Rule__NameAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11659,35 +13970,42 @@
 
     // $ANTLR start "rule__Rule__DefinitionListAssignment_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4232:1: rule__Rule__DefinitionListAssignment_3 : ( ruleDefinitionList ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4477:1: rule__Rule__DefinitionListAssignment_3 : ( ruleDefinitionList ) ;
     public final void rule__Rule__DefinitionListAssignment_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4236:1: ( ( ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4237:1: ( ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4237:1: ( ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4238:1: ruleDefinitionList
-            {
-             before(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
-            pushFollow(FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38582);
+        int rule__Rule__DefinitionListAssignment_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 271) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4481:1: ( ( ruleDefinitionList ) )
+            // ../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: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
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+            }
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_39084);
             ruleDefinitionList();
 
             state._fsp--;
-
-             after(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleAccess().getDefinitionListDefinitionListParserRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 271, rule__Rule__DefinitionListAssignment_3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11700,31 +14018,38 @@
 
     // $ANTLR start "rule__ExtRule__RulenumberAssignment_0_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4247:1: rule__ExtRule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4492:1: rule__ExtRule__RulenumberAssignment_0_0 : ( RULE_INT ) ;
     public final void rule__ExtRule__RulenumberAssignment_0_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4251:1: ( ( RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4252:1: ( RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4252:1: ( RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4253:1: RULE_INT
-            {
-             before(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08613); 
-             after(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__ExtRule__RulenumberAssignment_0_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 272) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4496:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4497:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4497:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4498:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_09115); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRulenumberINTTerminalRuleCall_0_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 272, rule__ExtRule__RulenumberAssignment_0_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11737,31 +14062,38 @@
 
     // $ANTLR start "rule__ExtRule__RulevariantAssignment_0_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4262:1: rule__ExtRule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4507:1: rule__ExtRule__RulevariantAssignment_0_1 : ( RULE_ID ) ;
     public final void rule__ExtRule__RulevariantAssignment_0_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4266:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4267:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4267:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4268:1: RULE_ID
-            {
-             before(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18644); 
-             after(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__ExtRule__RulevariantAssignment_0_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 273) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4511:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4512:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4512:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4513:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_19146); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRulevariantIDTerminalRuleCall_0_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 273, rule__ExtRule__RulevariantAssignment_0_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11774,31 +14106,38 @@
 
     // $ANTLR start "rule__ExtRule__NameAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4277:1: rule__ExtRule__NameAssignment_1 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4522:1: rule__ExtRule__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__ExtRule__NameAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4281:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4282:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4282:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4283:1: RULE_ID
-            {
-             before(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18675); 
-             after(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__ExtRule__NameAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 274) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4526:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4527:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4527:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4528:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_19177); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getNameIDTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 274, rule__ExtRule__NameAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11811,31 +14150,38 @@
 
     // $ANTLR start "rule__ExtRule__RuleextAssignment_2_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4292:1: rule__ExtRule__RuleextAssignment_2_1 : ( RULE_INT ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4537:1: rule__ExtRule__RuleextAssignment_2_1 : ( RULE_INT ) ;
     public final void rule__ExtRule__RuleextAssignment_2_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4296:1: ( ( RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4297:1: ( RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4297:1: ( RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4298:1: RULE_INT
-            {
-             before(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18706); 
-             after(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__ExtRule__RuleextAssignment_2_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 275) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4541:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4542:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4542:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4543:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_19208); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getRuleextINTTerminalRuleCall_2_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 275, rule__ExtRule__RuleextAssignment_2_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11848,35 +14194,42 @@
 
     // $ANTLR start "rule__ExtRule__ElementsAssignment_4_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4307:1: rule__ExtRule__ElementsAssignment_4_0 : ( ruleAtom ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4552:1: rule__ExtRule__ElementsAssignment_4_0 : ( ruleAtom ) ;
     public final void rule__ExtRule__ElementsAssignment_4_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4311:1: ( ( ruleAtom ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4312:1: ( ruleAtom )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4312:1: ( ruleAtom )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4313:1: ruleAtom
-            {
-             before(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
-            pushFollow(FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08737);
+        int rule__ExtRule__ElementsAssignment_4_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 276) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4556:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4557:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4557:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4558:1: ruleAtom
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_09239);
             ruleAtom();
 
             state._fsp--;
-
-             after(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getExtRuleAccess().getElementsAtomParserRuleCall_4_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 276, rule__ExtRule__ElementsAssignment_4_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11889,31 +14242,38 @@
 
     // $ANTLR start "rule__GlobalCombinator__LogicAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4322:1: rule__GlobalCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4567:1: rule__GlobalCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
     public final void rule__GlobalCombinator__LogicAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4326:1: ( ( RULE_LOGIC ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4327:1: ( RULE_LOGIC )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4327:1: ( RULE_LOGIC )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4328:1: RULE_LOGIC
-            {
-             before(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
-            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18768); 
-             after(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__GlobalCombinator__LogicAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 277) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4571:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4572:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4572:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4573:1: RULE_LOGIC
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_19270); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGlobalCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 277, rule__GlobalCombinator__LogicAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11926,31 +14286,38 @@
 
     // $ANTLR start "rule__RuleCombinator__NameAssignment_0_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4337:1: rule__RuleCombinator__NameAssignment_0_2 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4582:1: rule__RuleCombinator__NameAssignment_0_2 : ( RULE_ID ) ;
     public final void rule__RuleCombinator__NameAssignment_0_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4341:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4342:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4342:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4343:1: RULE_ID
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28799); 
-             after(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RuleCombinator__NameAssignment_0_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 278) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4586:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4587:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4587:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4588:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_29301); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getNameIDTerminalRuleCall_0_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 278, rule__RuleCombinator__NameAssignment_0_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -11963,31 +14330,38 @@
 
     // $ANTLR start "rule__RuleCombinator__LogicAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4352:1: rule__RuleCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4597:1: rule__RuleCombinator__LogicAssignment_1 : ( RULE_LOGIC ) ;
     public final void rule__RuleCombinator__LogicAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4356:1: ( ( RULE_LOGIC ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4357:1: ( RULE_LOGIC )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4357:1: ( RULE_LOGIC )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4358:1: RULE_LOGIC
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
-            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18830); 
-             after(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RuleCombinator__LogicAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 279) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4601:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4602:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4602:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4603:1: RULE_LOGIC
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_19332); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getLogicLOGICTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 279, rule__RuleCombinator__LogicAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12000,31 +14374,38 @@
 
     // $ANTLR start "rule__RuleCombinator__LABELAssignment_2_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4367:1: rule__RuleCombinator__LABELAssignment_2_1 : ( RULE_STRING ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4612:1: rule__RuleCombinator__LABELAssignment_2_1 : ( RULE_STRING ) ;
     public final void rule__RuleCombinator__LABELAssignment_2_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4371:1: ( ( RULE_STRING ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4372:1: ( RULE_STRING )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4372:1: ( RULE_STRING )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4373:1: RULE_STRING
-            {
-             before(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
-            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18861); 
-             after(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RuleCombinator__LABELAssignment_2_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 280) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4616:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4617:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4617:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4618:1: RULE_STRING
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+            }
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_19363); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleCombinatorAccess().getLABELSTRINGTerminalRuleCall_2_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 280, rule__RuleCombinator__LABELAssignment_2_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12037,31 +14418,38 @@
 
     // $ANTLR start "rule__HookCombinator__NameAssignment_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4382:1: rule__HookCombinator__NameAssignment_2 : ( RULE_ID ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4627:1: rule__HookCombinator__NameAssignment_2 : ( RULE_ID ) ;
     public final void rule__HookCombinator__NameAssignment_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4386:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4387:1: ( RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4387:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4388:1: RULE_ID
-            {
-             before(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28892); 
-             after(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__HookCombinator__NameAssignment_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 281) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4631:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4632:1: ( RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4632:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4633:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_29394); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getNameIDTerminalRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 281, rule__HookCombinator__NameAssignment_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12074,31 +14462,38 @@
 
     // $ANTLR start "rule__HookCombinator__RuleextAssignment_4"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4397:1: rule__HookCombinator__RuleextAssignment_4 : ( RULE_INT ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4642:1: rule__HookCombinator__RuleextAssignment_4 : ( RULE_INT ) ;
     public final void rule__HookCombinator__RuleextAssignment_4() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4401:1: ( ( RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4402:1: ( RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4402:1: ( RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4403:1: RULE_INT
-            {
-             before(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
-            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48923); 
-             after(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__HookCombinator__RuleextAssignment_4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 282) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4646:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4647:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4647:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4648:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_49425); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getRuleextINTTerminalRuleCall_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 282, rule__HookCombinator__RuleextAssignment_4_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12111,31 +14506,38 @@
 
     // $ANTLR start "rule__HookCombinator__LogicAssignment_6"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4412:1: rule__HookCombinator__LogicAssignment_6 : ( RULE_LOGIC ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4657:1: rule__HookCombinator__LogicAssignment_6 : ( RULE_LOGIC ) ;
     public final void rule__HookCombinator__LogicAssignment_6() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4416:1: ( ( RULE_LOGIC ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4417:1: ( RULE_LOGIC )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4417:1: ( RULE_LOGIC )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4418:1: RULE_LOGIC
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
-            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68954); 
-             after(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__HookCombinator__LogicAssignment_6_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 283) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4661:1: ( ( RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4662:1: ( RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4662:1: ( RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4663:1: RULE_LOGIC
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+            }
+            match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_69456); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLogicLOGICTerminalRuleCall_6_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 283, rule__HookCombinator__LogicAssignment_6_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12148,31 +14550,38 @@
 
     // $ANTLR start "rule__HookCombinator__LABELAssignment_7_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4427:1: rule__HookCombinator__LABELAssignment_7_1 : ( RULE_STRING ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4672:1: rule__HookCombinator__LABELAssignment_7_1 : ( RULE_STRING ) ;
     public final void rule__HookCombinator__LABELAssignment_7_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4431:1: ( ( RULE_STRING ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4432:1: ( RULE_STRING )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4432:1: ( RULE_STRING )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4433:1: RULE_STRING
-            {
-             before(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
-            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18985); 
-             after(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__HookCombinator__LABELAssignment_7_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 284) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4676:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4677:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4677:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4678:1: RULE_STRING
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+            }
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_19487); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getHookCombinatorAccess().getLABELSTRINGTerminalRuleCall_7_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 284, rule__HookCombinator__LABELAssignment_7_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12185,35 +14594,42 @@
 
     // $ANTLR start "rule__DefinitionList__SingleDefinitionAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4442:1: rule__DefinitionList__SingleDefinitionAssignment_0 : ( ruleSingleDefinition ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4687:1: rule__DefinitionList__SingleDefinitionAssignment_0 : ( ruleSingleDefinition ) ;
     public final void rule__DefinitionList__SingleDefinitionAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4446:1: ( ( ruleSingleDefinition ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4447:1: ( ruleSingleDefinition )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4447:1: ( ruleSingleDefinition )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4448:1: ruleSingleDefinition
-            {
-             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09016);
+        int rule__DefinitionList__SingleDefinitionAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 285) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4691:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4692:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4692:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4693:1: ruleSingleDefinition
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09518);
             ruleSingleDefinition();
 
             state._fsp--;
-
-             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 285, rule__DefinitionList__SingleDefinitionAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12226,35 +14642,42 @@
 
     // $ANTLR start "rule__DefinitionList__SingleDefinitionAssignment_1_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4457:1: rule__DefinitionList__SingleDefinitionAssignment_1_1 : ( ruleSingleDefinition ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4702:1: rule__DefinitionList__SingleDefinitionAssignment_1_1 : ( ruleSingleDefinition ) ;
     public final void rule__DefinitionList__SingleDefinitionAssignment_1_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4461:1: ( ( ruleSingleDefinition ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4462:1: ( ruleSingleDefinition )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4462:1: ( ruleSingleDefinition )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4463:1: ruleSingleDefinition
-            {
-             before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
-            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19047);
+        int rule__DefinitionList__SingleDefinitionAssignment_1_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 286) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4706:1: ( ( ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:1: ( ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4707:1: ( ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4708:1: ruleSingleDefinition
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19549);
             ruleSingleDefinition();
 
             state._fsp--;
-
-             after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getDefinitionListAccess().getSingleDefinitionSingleDefinitionParserRuleCall_1_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 286, rule__DefinitionList__SingleDefinitionAssignment_1_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12267,35 +14690,42 @@
 
     // $ANTLR start "rule__SingleDefinition__TermsAssignment"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4472:1: rule__SingleDefinition__TermsAssignment : ( ruleTerm ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4717:1: rule__SingleDefinition__TermsAssignment : ( ruleTerm ) ;
     public final void rule__SingleDefinition__TermsAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4476:1: ( ( ruleTerm ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4477:1: ( ruleTerm )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4477:1: ( ruleTerm )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4478:1: ruleTerm
-            {
-             before(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
-            pushFollow(FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9078);
+        int rule__SingleDefinition__TermsAssignment_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 287) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4721:1: ( ( ruleTerm ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4722:1: ( ruleTerm )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4722:1: ( ruleTerm )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4723:1: ruleTerm
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+            }
+            pushFollow(FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9580);
             ruleTerm();
 
             state._fsp--;
-
-             after(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getSingleDefinitionAccess().getTermsTermParserRuleCall_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 287, rule__SingleDefinition__TermsAssignment_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12308,35 +14738,42 @@
 
     // $ANTLR start "rule__Term__TermAtomAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4487:1: rule__Term__TermAtomAssignment_0 : ( ruleAtom ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4732:1: rule__Term__TermAtomAssignment_0 : ( ruleAtom ) ;
     public final void rule__Term__TermAtomAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4491:1: ( ( ruleAtom ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4492:1: ( ruleAtom )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4492:1: ( ruleAtom )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4493:1: ruleAtom
-            {
-             before(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09109);
+        int rule__Term__TermAtomAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 288) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4736:1: ( ( ruleAtom ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4737:1: ( ruleAtom )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4737:1: ( ruleAtom )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4738:1: ruleAtom
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09611);
             ruleAtom();
 
             state._fsp--;
-
-             after(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermAccess().getTermAtomAtomParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 288, rule__Term__TermAtomAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12349,35 +14786,42 @@
 
     // $ANTLR start "rule__Term__TermGroupedSequenceAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4502:1: rule__Term__TermGroupedSequenceAssignment_1 : ( ruleGroupedSequence ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4747:1: rule__Term__TermGroupedSequenceAssignment_1 : ( ruleGroupedSequence ) ;
     public final void rule__Term__TermGroupedSequenceAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4506:1: ( ( ruleGroupedSequence ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4507:1: ( ruleGroupedSequence )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4507:1: ( ruleGroupedSequence )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4508:1: ruleGroupedSequence
-            {
-             before(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19140);
+        int rule__Term__TermGroupedSequenceAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 289) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4751:1: ( ( ruleGroupedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4752:1: ( ruleGroupedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4752:1: ( ruleGroupedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4753:1: ruleGroupedSequence
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19642);
             ruleGroupedSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermAccess().getTermGroupedSequenceGroupedSequenceParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 289, rule__Term__TermGroupedSequenceAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12390,35 +14834,42 @@
 
     // $ANTLR start "rule__Term__TermOptionalSequenceAssignment_2"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4517:1: rule__Term__TermOptionalSequenceAssignment_2 : ( ruleOptionalSequence ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4762:1: rule__Term__TermOptionalSequenceAssignment_2 : ( ruleOptionalSequence ) ;
     public final void rule__Term__TermOptionalSequenceAssignment_2() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4521:1: ( ( ruleOptionalSequence ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4522:1: ( ruleOptionalSequence )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4522:1: ( ruleOptionalSequence )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4523:1: ruleOptionalSequence
-            {
-             before(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
-            pushFollow(FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29171);
+        int rule__Term__TermOptionalSequenceAssignment_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 290) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4766:1: ( ( ruleOptionalSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4767:1: ( ruleOptionalSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4767:1: ( ruleOptionalSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4768:1: ruleOptionalSequence
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+            }
+            pushFollow(FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29673);
             ruleOptionalSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermAccess().getTermOptionalSequenceOptionalSequenceParserRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 290, rule__Term__TermOptionalSequenceAssignment_2_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12431,35 +14882,42 @@
 
     // $ANTLR start "rule__Term__TermRepeatedSequenceAssignment_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4532:1: rule__Term__TermRepeatedSequenceAssignment_3 : ( ruleRepeatedSequence ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4777:1: rule__Term__TermRepeatedSequenceAssignment_3 : ( ruleRepeatedSequence ) ;
     public final void rule__Term__TermRepeatedSequenceAssignment_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4536:1: ( ( ruleRepeatedSequence ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4537:1: ( ruleRepeatedSequence )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4537:1: ( ruleRepeatedSequence )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4538:1: ruleRepeatedSequence
-            {
-             before(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
-            pushFollow(FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39202);
+        int rule__Term__TermRepeatedSequenceAssignment_3_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 291) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4781:1: ( ( ruleRepeatedSequence ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4782:1: ( ruleRepeatedSequence )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4782:1: ( ruleRepeatedSequence )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4783:1: ruleRepeatedSequence
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+            }
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39704);
             ruleRepeatedSequence();
 
             state._fsp--;
-
-             after(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getTermAccess().getTermRepeatedSequenceRepeatedSequenceParserRuleCall_3_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 291, rule__Term__TermRepeatedSequenceAssignment_3_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12472,35 +14930,42 @@
 
     // $ANTLR start "rule__Atom__AtomStringRuleAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4547:1: rule__Atom__AtomStringRuleAssignment_0 : ( ruleStringRule ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4792:1: rule__Atom__AtomStringRuleAssignment_0 : ( ruleStringRule ) ;
     public final void rule__Atom__AtomStringRuleAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4551:1: ( ( ruleStringRule ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4552:1: ( ruleStringRule )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4552:1: ( ruleStringRule )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4553:1: ruleStringRule
-            {
-             before(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
-            pushFollow(FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09233);
+        int rule__Atom__AtomStringRuleAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 292) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4796:1: ( ( ruleStringRule ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4797:1: ( ruleStringRule )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4797:1: ( ruleStringRule )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4798:1: ruleStringRule
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+            }
+            pushFollow(FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09735);
             ruleStringRule();
 
             state._fsp--;
-
-             after(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAtomAccess().getAtomStringRuleStringRuleParserRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 292, rule__Atom__AtomStringRuleAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12513,35 +14978,42 @@
 
     // $ANTLR start "rule__Atom__AtomRuleReferenceAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4562:1: rule__Atom__AtomRuleReferenceAssignment_1 : ( ruleRuleReference ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4807:1: rule__Atom__AtomRuleReferenceAssignment_1 : ( ruleRuleReference ) ;
     public final void rule__Atom__AtomRuleReferenceAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4566:1: ( ( ruleRuleReference ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4567:1: ( ruleRuleReference )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4567:1: ( ruleRuleReference )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4568:1: ruleRuleReference
-            {
-             before(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19264);
+        int rule__Atom__AtomRuleReferenceAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 293) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4811:1: ( ( ruleRuleReference ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4812:1: ( ruleRuleReference )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4812:1: ( ruleRuleReference )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4813:1: ruleRuleReference
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19766);
             ruleRuleReference();
 
             state._fsp--;
-
-             after(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getAtomAccess().getAtomRuleReferenceRuleReferenceParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 293, rule__Atom__AtomRuleReferenceAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12554,39 +15026,50 @@
 
     // $ANTLR start "rule__RuleReference__RulerefAssignment"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4577:1: rule__RuleReference__RulerefAssignment : ( ( RULE_ID ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4822:1: rule__RuleReference__RulerefAssignment : ( ( RULE_ID ) ) ;
     public final void rule__RuleReference__RulerefAssignment() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4581:1: ( ( ( RULE_ID ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4582:1: ( ( RULE_ID ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4582:1: ( ( RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4583:1: ( RULE_ID )
-            {
-             before(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4584:1: ( RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4585:1: RULE_ID
-            {
-             before(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
-            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9299); 
-             after(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
-
-            }
-
-             after(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__RuleReference__RulerefAssignment_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 294) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4826:1: ( ( ( RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4827:1: ( ( RULE_ID ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4827:1: ( ( RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4828:1: ( RULE_ID )
+            {
+            if ( state.backtracking==0 ) {
+               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:4829:1: ( RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4830:1: RULE_ID
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
+            }
+            match(input,RULE_ID,FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9801); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleReferenceAccess().getRulerefRuleIDTerminalRuleCall_0_1()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRuleReferenceAccess().getRulerefRuleCrossReference_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 294, rule__RuleReference__RulerefAssignment_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12599,31 +15082,38 @@
 
     // $ANTLR start "rule__StringRule__LiteralAssignment_0"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4596:1: rule__StringRule__LiteralAssignment_0 : ( RULE_STRING ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4841:1: rule__StringRule__LiteralAssignment_0 : ( RULE_STRING ) ;
     public final void rule__StringRule__LiteralAssignment_0() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4600:1: ( ( RULE_STRING ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4601:1: ( RULE_STRING )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4601:1: ( RULE_STRING )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4602:1: RULE_STRING
-            {
-             before(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
-            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09334); 
-             after(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__StringRule__LiteralAssignment_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 295) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4845:1: ( ( RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4846:1: ( RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4846:1: ( RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4847:1: RULE_STRING
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+            }
+            match(input,RULE_STRING,FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09836); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getStringRuleAccess().getLiteralSTRINGTerminalRuleCall_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 295, rule__StringRule__LiteralAssignment_0_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12636,31 +15126,38 @@
 
     // $ANTLR start "rule__StringRule__ColonAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4611:1: rule__StringRule__ColonAssignment_1 : ( RULE_COLON ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4856:1: rule__StringRule__ColonAssignment_1 : ( RULE_COLON ) ;
     public final void rule__StringRule__ColonAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4615:1: ( ( RULE_COLON ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4616:1: ( RULE_COLON )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4616:1: ( RULE_COLON )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4617:1: RULE_COLON
-            {
-             before(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
-            match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19365); 
-             after(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+        int rule__StringRule__ColonAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 296) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4860:1: ( ( RULE_COLON ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4861:1: ( RULE_COLON )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4861:1: ( RULE_COLON )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4862:1: RULE_COLON
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+            }
+            match(input,RULE_COLON,FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19867); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getStringRuleAccess().getColonCOLONTerminalRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 296, rule__StringRule__ColonAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12673,35 +15170,42 @@
 
     // $ANTLR start "rule__GroupedSequence__DefinitionListAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4626:1: rule__GroupedSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4871:1: rule__GroupedSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
     public final void rule__GroupedSequence__DefinitionListAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4630:1: ( ( ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4631:1: ( ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4631:1: ( ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4632:1: ruleDefinitionList
-            {
-             before(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19396);
+        int rule__GroupedSequence__DefinitionListAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 297) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4875:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4876:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4876:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4877:1: ruleDefinitionList
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19898);
             ruleDefinitionList();
 
             state._fsp--;
-
-             after(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getGroupedSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 297, rule__GroupedSequence__DefinitionListAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12714,35 +15218,42 @@
 
     // $ANTLR start "rule__OptionalSequence__DefinitionListAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4641:1: rule__OptionalSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4886:1: rule__OptionalSequence__DefinitionListAssignment_1 : ( ruleDefinitionList ) ;
     public final void rule__OptionalSequence__DefinitionListAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4645:1: ( ( ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4646:1: ( ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4646:1: ( ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4647:1: ruleDefinitionList
-            {
-             before(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19427);
+        int rule__OptionalSequence__DefinitionListAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 298) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4890:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4891:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4891:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4892:1: ruleDefinitionList
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19929);
             ruleDefinitionList();
 
             state._fsp--;
-
-             after(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getOptionalSequenceAccess().getDefinitionListDefinitionListParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 298, rule__OptionalSequence__DefinitionListAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12755,35 +15266,42 @@
 
     // $ANTLR start "rule__RepeatedSequence__DefinitionsAssignment_1"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4656:1: rule__RepeatedSequence__DefinitionsAssignment_1 : ( ruleDefinitionList ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4901:1: rule__RepeatedSequence__DefinitionsAssignment_1 : ( ruleDefinitionList ) ;
     public final void rule__RepeatedSequence__DefinitionsAssignment_1() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4660:1: ( ( ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4661:1: ( ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4661:1: ( ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4662:1: ruleDefinitionList
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
-            pushFollow(FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19458);
+        int rule__RepeatedSequence__DefinitionsAssignment_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 299) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4905:1: ( ( ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4906:1: ( ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4906:1: ( ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4907:1: ruleDefinitionList
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19960);
             ruleDefinitionList();
 
             state._fsp--;
-
-             after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getDefinitionsDefinitionListParserRuleCall_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 299, rule__RepeatedSequence__DefinitionsAssignment_1_StartIndex); }
 
             	restoreStackSize(stackSize);
@@ -12795,449 +15313,967 @@
 
 
-    // $ANTLR start "rule__RepeatedSequence__MorethanonceAssignment_3"
-    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4671:1: rule__RepeatedSequence__MorethanonceAssignment_3 : ( ( '+' ) ) ;
-    public final void rule__RepeatedSequence__MorethanonceAssignment_3() throws RecognitionException {
-
-        		int stackSize = keepStackSize();
-            
-        try {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4675:1: ( ( ( '+' ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4676:1: ( ( '+' ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4676:1: ( ( '+' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4677:1: ( '+' )
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4678:1: ( '+' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4679:1: '+'
-            {
-             before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
-            match(input,21,FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39494); 
-             after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
-
-            }
-
-             after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0()); 
-
-            }
-
-
-            }
-
-        }
-        catch (RecognitionException re) {
-            reportError(re);
-            recover(input,re);
-        }
-        finally {
-
-            	restoreStackSize(stackSize);
-
-        }
-        return ;
-    }
-    // $ANTLR end "rule__RepeatedSequence__MorethanonceAssignment_3"
+    // $ANTLR start "rule__RepeatedSequence__MorethanonceAssignment_3_0"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4916:1: rule__RepeatedSequence__MorethanonceAssignment_3_0 : ( ( '+' ) ) ;
+    public final void rule__RepeatedSequence__MorethanonceAssignment_3_0() throws RecognitionException {
+        int rule__RepeatedSequence__MorethanonceAssignment_3_0_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 300) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4920:1: ( ( ( '+' ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4921:1: ( ( '+' ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4921:1: ( ( '+' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4922:1: ( '+' )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0_0()); 
+            }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4923:1: ( '+' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4924:1: '+'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0_0()); 
+            }
+            match(input,21,FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_3_09996); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0_0()); 
+            }
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getMorethanoncePlusSignKeyword_3_0_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 300, rule__RepeatedSequence__MorethanonceAssignment_3_0_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__MorethanonceAssignment_3_0"
+
+
+    // $ANTLR start "rule__RepeatedSequence__RangeAssignment_3_1"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4939:1: rule__RepeatedSequence__RangeAssignment_3_1 : ( ruleRepeatRange ) ;
+    public final void rule__RepeatedSequence__RangeAssignment_3_1() throws RecognitionException {
+        int rule__RepeatedSequence__RangeAssignment_3_1_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 301) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4943:1: ( ( ruleRepeatRange ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4944:1: ( ruleRepeatRange )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4944:1: ( ruleRepeatRange )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4945:1: ruleRepeatRange
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatedSequenceAccess().getRangeRepeatRangeParserRuleCall_3_1_0()); 
+            }
+            pushFollow(FOLLOW_ruleRepeatRange_in_rule__RepeatedSequence__RangeAssignment_3_110035);
+            ruleRepeatRange();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatedSequenceAccess().getRangeRepeatRangeParserRuleCall_3_1_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 301, rule__RepeatedSequence__RangeAssignment_3_1_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatedSequence__RangeAssignment_3_1"
+
+
+    // $ANTLR start "rule__RepeatRange__FromAssignment_2"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4954:1: rule__RepeatRange__FromAssignment_2 : ( RULE_INT ) ;
+    public final void rule__RepeatRange__FromAssignment_2() throws RecognitionException {
+        int rule__RepeatRange__FromAssignment_2_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 302) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4958:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4959:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4959:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4960:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getFromINTTerminalRuleCall_2_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__RepeatRange__FromAssignment_210066); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getFromINTTerminalRuleCall_2_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 302, rule__RepeatRange__FromAssignment_2_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__FromAssignment_2"
+
+
+    // $ANTLR start "rule__RepeatRange__ToAssignment_4"
+    // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4969:1: rule__RepeatRange__ToAssignment_4 : ( RULE_INT ) ;
+    public final void rule__RepeatRange__ToAssignment_4() throws RecognitionException {
+        int rule__RepeatRange__ToAssignment_4_StartIndex = input.index();
+
+        		int stackSize = keepStackSize();
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 303) ) { return ; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4973:1: ( ( RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4974:1: ( RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4974:1: ( RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:4975:1: RULE_INT
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getRepeatRangeAccess().getToINTTerminalRuleCall_4_0()); 
+            }
+            match(input,RULE_INT,FOLLOW_RULE_INT_in_rule__RepeatRange__ToAssignment_410097); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getRepeatRangeAccess().getToINTTerminalRuleCall_4_0()); 
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 303, rule__RepeatRange__ToAssignment_4_StartIndex); }
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__RepeatRange__ToAssignment_4"
+
+    // $ANTLR start synpred28_InternalEbnf
+    public final void synpred28_InternalEbnf_fragment() throws RecognitionException {   
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1047:1: ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? ) )
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1047:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? )
+        {
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1047:1: ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? )
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1048:1: ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )?
+        {
+        if ( state.backtracking==0 ) {
+           before(grammarAccess.getRepeatedSequenceAccess().getMorethanonceAssignment_3_0()); 
+        }
+        // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1049:1: ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )?
+        int alt40=2;
+        int LA40_0 = input.LA(1);
+
+        if ( (LA40_0==21) ) {
+            alt40=1;
+        }
+        switch (alt40) {
+            case 1 :
+                // ../de.ugoe.cs.swe.bnftools.ebnf.ui/src-gen/de/ugoe/cs/swe/bnftools/ui/contentassist/antlr/internal/InternalEbnf.g:1049:2: rule__RepeatedSequence__MorethanonceAssignment_3_0
+                {
+                pushFollow(FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_0_in_synpred28_InternalEbnf2274);
+                rule__RepeatedSequence__MorethanonceAssignment_3_0();
+
+                state._fsp--;
+                if (state.failed) return ;
+
+                }
+                break;
+
+        }
+
+
+        }
+
+
+        }
+    }
+    // $ANTLR end synpred28_InternalEbnf
 
     // Delegated rules
 
-
+    public final boolean synpred28_InternalEbnf() {
+        state.backtracking++;
+        int start = input.mark();
+        try {
+            synpred28_InternalEbnf_fragment(); // can never throw exception
+        } catch (RecognitionException re) {
+            System.err.println("impossible: "+re);
+        }
+        boolean success = !state.failed;
+        input.rewind(start);
+        state.backtracking--;
+        state.failed=false;
+        return success;
+    }
+
+
+    protected DFA15 dfa15 = new DFA15(this);
+    static final String DFA15_eotS =
+        "\21\uffff";
+    static final String DFA15_eofS =
+        "\1\2\20\uffff";
+    static final String DFA15_minS =
+        "\1\4\1\uffff\16\0\1\uffff";
+    static final String DFA15_maxS =
+        "\1\42\1\uffff\16\0\1\uffff";
+    static final String DFA15_acceptS =
+        "\1\uffff\1\1\16\uffff\1\2";
+    static final String DFA15_specialS =
+        "\2\uffff\1\0\1\1\1\2\1\3\1\4\1\5\1\6\1\7\1\10\1\11\1\12\1\13\1\14"+
+        "\1\15\1\uffff}>";
+    static final String[] DFA15_transitionS = {
+            "\1\5\1\13\1\3\1\14\1\uffff\1\4\3\uffff\1\15\1\16\1\17\1\11\1"+
+            "\6\1\7\1\10\1\uffff\1\1\1\uffff\1\12\12\uffff\1\20",
+            "",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            "\1\uffff",
+            ""
+    };
+
+    static final short[] DFA15_eot = DFA.unpackEncodedString(DFA15_eotS);
+    static final short[] DFA15_eof = DFA.unpackEncodedString(DFA15_eofS);
+    static final char[] DFA15_min = DFA.unpackEncodedStringToUnsignedChars(DFA15_minS);
+    static final char[] DFA15_max = DFA.unpackEncodedStringToUnsignedChars(DFA15_maxS);
+    static final short[] DFA15_accept = DFA.unpackEncodedString(DFA15_acceptS);
+    static final short[] DFA15_special = DFA.unpackEncodedString(DFA15_specialS);
+    static final short[][] DFA15_transition;
+
+    static {
+        int numStates = DFA15_transitionS.length;
+        DFA15_transition = new short[numStates][];
+        for (int i=0; i<numStates; i++) {
+            DFA15_transition[i] = DFA.unpackEncodedString(DFA15_transitionS[i]);
+        }
+    }
+
+    class DFA15 extends DFA {
+
+        public DFA15(BaseRecognizer recognizer) {
+            this.recognizer = recognizer;
+            this.decisionNumber = 15;
+            this.eot = DFA15_eot;
+            this.eof = DFA15_eof;
+            this.min = DFA15_min;
+            this.max = DFA15_max;
+            this.accept = DFA15_accept;
+            this.special = DFA15_special;
+            this.transition = DFA15_transition;
+        }
+        public String getDescription() {
+            return "1042:1: rule__RepeatedSequence__Alternatives_3 : ( ( ( rule__RepeatedSequence__MorethanonceAssignment_3_0 )? ) | ( ( rule__RepeatedSequence__RangeAssignment_3_1 )? ) );";
+        }
+        public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
+            TokenStream input = (TokenStream)_input;
+        	int _s = s;
+            switch ( s ) {
+                    case 0 : 
+                        int LA15_2 = input.LA(1);
+
+                         
+                        int index15_2 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_2);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA15_3 = input.LA(1);
+
+                         
+                        int index15_3 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_3);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA15_4 = input.LA(1);
+
+                         
+                        int index15_4 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_4);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 3 : 
+                        int LA15_5 = input.LA(1);
+
+                         
+                        int index15_5 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_5);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 4 : 
+                        int LA15_6 = input.LA(1);
+
+                         
+                        int index15_6 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_6);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 5 : 
+                        int LA15_7 = input.LA(1);
+
+                         
+                        int index15_7 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_7);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 6 : 
+                        int LA15_8 = input.LA(1);
+
+                         
+                        int index15_8 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_8);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 7 : 
+                        int LA15_9 = input.LA(1);
+
+                         
+                        int index15_9 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_9);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 8 : 
+                        int LA15_10 = input.LA(1);
+
+                         
+                        int index15_10 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_10);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 9 : 
+                        int LA15_11 = input.LA(1);
+
+                         
+                        int index15_11 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_11);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 10 : 
+                        int LA15_12 = input.LA(1);
+
+                         
+                        int index15_12 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_12);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 11 : 
+                        int LA15_13 = input.LA(1);
+
+                         
+                        int index15_13 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_13);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 12 : 
+                        int LA15_14 = input.LA(1);
+
+                         
+                        int index15_14 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_14);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 13 : 
+                        int LA15_15 = input.LA(1);
+
+                         
+                        int index15_15 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred28_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 16;}
+
+                         
+                        input.seek(index15_15);
+                        if ( s>=0 ) return s;
+                        break;
+            }
+            if (state.backtracking>0) {state.failed=true; return -1;}
+            NoViableAltException nvae =
+                new NoViableAltException(getDescription(), 15, _s, input);
+            error(nvae);
+            throw nvae;
+        }
+    }
  
 
-    public static final BitSet FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf61 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleEtsiBnf68 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf94 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImportSection_in_entryRuleImportSection121 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleImportSection128 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection156 = new BitSet(new long[]{0x0000000001000002L});
-    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection168 = new BitSet(new long[]{0x0000000001000002L});
-    public static final BitSet FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry198 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleBnfEntry205 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry231 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry258 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry265 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry291 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry318 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry325 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry351 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading378 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading385 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading411 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport438 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleImport445 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__0_in_ruleImport471 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule498 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRule505 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__0_in_ruleRule531 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule558 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule565 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule591 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule618 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule625 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule651 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator678 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator685 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator711 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator738 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator745 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator771 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator798 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator805 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator831 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList858 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList865 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList891 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition918 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition925 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition953 = new BitSet(new long[]{0x00000000000E0252L});
-    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition965 = new BitSet(new long[]{0x00000000000E0252L});
-    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm995 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTerm1002 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__Alternatives_in_ruleTerm1028 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom1055 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleAtom1062 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Atom__Alternatives_in_ruleAtom1088 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference1115 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference1122 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1148 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule1175 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule1182 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1208 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1235 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence1242 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1268 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1295 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence1302 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1328 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1355 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence1362 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1388 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1424 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1442 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1460 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1493 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1511 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1544 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1562 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1580 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1631 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11664 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11682 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11700 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41733 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__ExtRule__Alternatives_41752 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_14_in_rule__ExtRule__Alternatives_41772 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_15_in_rule__ExtRule__Alternatives_41792 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_16_in_rule__ExtRule__Alternatives_41812 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__ExtRule__Alternatives_41832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_rule__ExtRule__Alternatives_41852 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_19_in_rule__ExtRule__Alternatives_41872 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_20_in_rule__ExtRule__Alternatives_41892 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_21_in_rule__ExtRule__Alternatives_41912 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives1946 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives1963 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives1980 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2012 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2030 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2048 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2066 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2099 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2117 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2150 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2168 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__02199 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2230 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12261 = new BitSet(new long[]{0x0000000400800000L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12264 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2291 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22321 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2348 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02384 = new BitSet(new long[]{0x0000000400800000L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02387 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2414 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12445 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12448 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2476 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22507 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22510 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2537 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32568 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2597 = new BitSet(new long[]{0x00000000010000B2L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2609 = new BitSet(new long[]{0x00000000010000B2L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02650 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2680 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12710 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12713 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2741 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22772 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22775 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2802 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32833 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2860 = new BitSet(new long[]{0x00000000010000B2L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__02899 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__02902 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl2929 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__12959 = new BitSet(new long[]{0x0000000341000020L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__12962 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl2990 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__23021 = new BitSet(new long[]{0x0000000341000020L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23024 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3051 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33082 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3109 = new BitSet(new long[]{0x0000000340000022L});
-    public static final BitSet FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03148 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03151 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13209 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3236 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03270 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03273 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_24_in_rule__Import__Group__0__Impl3301 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13332 = new BitSet(new long[]{0x0000000006800000L});
-    public static final BitSet FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13335 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3362 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23392 = new BitSet(new long[]{0x0000000006800000L});
-    public static final BitSet FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23395 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33453 = new BitSet(new long[]{0x0000000006800000L});
-    public static final BitSet FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33456 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3483 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43514 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__Import__Group__4__Impl3542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03583 = new BitSet(new long[]{0x000000E000000000L});
-    public static final BitSet FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03586 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_25_in_rule__Import__Group_2__0__Impl3614 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13645 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3672 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03706 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03709 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_rule__Import__Group_3__0__Impl3737 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13768 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3795 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03829 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03832 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3859 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__13890 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__13893 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl3920 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__23950 = new BitSet(new long[]{0x00000000008E0250L});
-    public static final BitSet FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__23953 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_27_in_rule__Rule__Group__2__Impl3981 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34012 = new BitSet(new long[]{0x00000000008E0250L});
-    public static final BitSet FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34015 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4042 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44073 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__Rule__Group__4__Impl4102 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__04145 = new BitSet(new long[]{0x0000000010000010L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04148 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4175 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__14205 = new BitSet(new long[]{0x0000000010000010L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14208 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4235 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24266 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_rule__Rule__Group_0__2__Impl4294 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04331 = new BitSet(new long[]{0x00000000010000B0L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4361 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14392 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14395 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4422 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24452 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24455 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4482 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34512 = new BitSet(new long[]{0x0000000000BFE250L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34515 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_29_in_rule__ExtRule__Group__3__Impl4543 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44574 = new BitSet(new long[]{0x0000000000BFE250L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44577 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4604 = new BitSet(new long[]{0x00000000003FE252L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54635 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__ExtRule__Group__5__Impl4664 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04709 = new BitSet(new long[]{0x0000000010000010L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04712 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4739 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14769 = new BitSet(new long[]{0x0000000010000010L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14772 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24830 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4858 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__04895 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__04898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl4926 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__14957 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__14960 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl4987 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25017 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5045 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05082 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05085 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5112 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15142 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15145 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5172 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5231 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05270 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05273 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5301 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15332 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5360 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05395 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05398 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5425 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15455 = new BitSet(new long[]{0x0000000000820000L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15458 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5485 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25515 = new BitSet(new long[]{0x0000000000820000L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25518 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5545 = new BitSet(new long[]{0x0000000000020002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35576 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5605 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05646 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05649 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5677 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15708 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15711 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5739 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25770 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5797 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05833 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05836 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5864 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__15895 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__15898 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl5925 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__25955 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl5983 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06020 = new BitSet(new long[]{0x0000000080000000L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06023 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6051 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16082 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16085 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6113 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26144 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26147 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6174 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36204 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36207 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6235 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46266 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46269 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6296 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56326 = new BitSet(new long[]{0x0000000000020100L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56329 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6357 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66388 = new BitSet(new long[]{0x0000000000020100L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66391 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6418 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76449 = new BitSet(new long[]{0x0000000000800000L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76452 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6481 = new BitSet(new long[]{0x0000000000020102L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6493 = new BitSet(new long[]{0x0000000000020102L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86526 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6555 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06606 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06609 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6637 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16668 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16671 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6698 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26728 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6756 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06793 = new BitSet(new long[]{0x0000000000010000L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06796 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6823 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16853 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl6880 = new BitSet(new long[]{0x0000000000010002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__06915 = new BitSet(new long[]{0x00000000000E0250L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__06918 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl6946 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__16977 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7004 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07038 = new BitSet(new long[]{0x00000000000E0250L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07041 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7069 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17100 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17103 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7130 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27160 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7188 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07225 = new BitSet(new long[]{0x00000000000E0250L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07228 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7256 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17287 = new BitSet(new long[]{0x0000000000004000L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17290 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7317 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27347 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7375 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07412 = new BitSet(new long[]{0x00000000000E0250L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07415 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7443 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17474 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17477 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7504 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27534 = new BitSet(new long[]{0x0000000000200000L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27537 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7565 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37596 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_in_rule__RepeatedSequence__Group__3__Impl7623 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_17667 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_34_in_rule__EtsiBnf__TypeAssignment_0_2_07703 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_27742 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_37773 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_rule__EtsiBnf__TypeAssignment_1_07809 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_27848 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_37879 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_2_07915 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_27954 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_37985 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8016 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18078 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08109 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28171 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18233 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18264 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_37_in_rule__Import__GrammarTypeAssignment_2_1_08331 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_38_in_rule__Import__GrammarTypeAssignment_2_1_18375 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_28419 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18458 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08489 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_18520 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_18551 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_38582 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_08613 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_18644 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_18675 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_18706 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_08737 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_18768 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_28799 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_18830 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_18861 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_28892 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_48923 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_68954 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_18985 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09016 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9078 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09109 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19140 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29171 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39202 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09233 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19264 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9299 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09334 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19365 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19396 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19427 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19458 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_39494 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleEtsiBnf_in_entryRuleEtsiBnf74 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleEtsiBnf81 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Alternatives_in_ruleEtsiBnf107 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_entryRuleImportSection134 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImportSection141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection169 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_rule__ImportSection__ImportsAssignment_in_ruleImportSection181 = new BitSet(new long[]{0x0000000001000002L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_entryRuleBnfEntry211 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleBnfEntry218 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__Alternatives_in_ruleBnfEntry244 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry271 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry278 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__Alternatives_in_ruleDeltaEntry304 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry331 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry338 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__Alternatives_in_ruleMergeEntry364 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading391 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading398 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0_in_ruleSectionHeading424 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport451 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImport458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0_in_ruleImport484 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule511 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRule518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0_in_ruleRule544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule571 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule578 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0_in_ruleExtRule604 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule631 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule638 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeRule__Alternatives_in_ruleMergeRule664 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator691 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator698 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0_in_ruleGlobalCombinator724 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator751 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator758 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0_in_ruleRuleCombinator784 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator811 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0_in_ruleHookCombinator844 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList871 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList878 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0_in_ruleDefinitionList904 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition931 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition938 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition966 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_rule__SingleDefinition__TermsAssignment_in_ruleSingleDefinition978 = new BitSet(new long[]{0x00000000000E0252L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm1008 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm1015 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__Alternatives_in_ruleTerm1041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom1068 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom1075 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__Alternatives_in_ruleAtom1101 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference1128 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference1135 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleReference__RulerefAssignment_in_ruleRuleReference1161 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule1188 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule1195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__Alternatives_in_ruleStringRule1221 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence1248 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence1255 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0_in_ruleGroupedSequence1281 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence1308 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence1315 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0_in_ruleOptionalSequence1341 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence1368 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence1375 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0_in_ruleRepeatedSequence1401 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange1428 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatRange1435 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__0_in_ruleRepeatRange1461 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0_in_rule__EtsiBnf__Alternatives1497 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0_in_rule__EtsiBnf__Alternatives1515 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0_in_rule__EtsiBnf__Alternatives1533 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__SectionheaderAssignment_0_in_rule__BnfEntry__Alternatives1566 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__BnfEntry__RuleAssignment_1_in_rule__BnfEntry__Alternatives1584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__RuleAssignment_0_in_rule__DeltaEntry__Alternatives1617 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__SectionheaderAssignment_1_in_rule__DeltaEntry__Alternatives1635 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DeltaEntry__ExtRuleAssignment_2_in_rule__DeltaEntry__Alternatives1653 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__SectionheaderAssignment_0_in_rule__MergeEntry__Alternatives1686 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__MergeEntry__MergeRuleAssignment_1_in_rule__MergeEntry__Alternatives1704 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_0_in_rule__Import__Alternatives_2_11737 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_1_in_rule__Import__Alternatives_2_11755 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__GrammarTypeAssignment_2_1_2_in_rule__Import__Alternatives_2_11773 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__ElementsAssignment_4_0_in_rule__ExtRule__Alternatives_41806 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Alternatives_41825 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__ExtRule__Alternatives_41845 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__ExtRule__Alternatives_41865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__ExtRule__Alternatives_41885 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Alternatives_41905 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__ExtRule__Alternatives_41925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__ExtRule__Alternatives_41945 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_20_in_rule__ExtRule__Alternatives_41965 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__ExtRule__Alternatives_41985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_rule__MergeRule__Alternatives2019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_rule__MergeRule__Alternatives2036 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_rule__MergeRule__Alternatives2053 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermAtomAssignment_0_in_rule__Term__Alternatives2085 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermGroupedSequenceAssignment_1_in_rule__Term__Alternatives2103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermOptionalSequenceAssignment_2_in_rule__Term__Alternatives2121 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Term__TermRepeatedSequenceAssignment_3_in_rule__Term__Alternatives2139 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomStringRuleAssignment_0_in_rule__Atom__Alternatives2172 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Atom__AtomRuleReferenceAssignment_1_in_rule__Atom__Alternatives2190 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__LiteralAssignment_0_in_rule__StringRule__Alternatives2223 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__StringRule__ColonAssignment_1_in_rule__StringRule__Alternatives2241 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_0_in_rule__RepeatedSequence__Alternatives_32274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__RangeAssignment_3_1_in_rule__RepeatedSequence__Alternatives_32293 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__0__Impl_in_rule__EtsiBnf__Group_0__02325 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1_in_rule__EtsiBnf__Group_0__02328 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_22_in_rule__EtsiBnf__Group_0__0__Impl2356 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__1__Impl_in_rule__EtsiBnf__Group_0__12387 = new BitSet(new long[]{0x0000001000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2_in_rule__EtsiBnf__Group_0__12390 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__NameAssignment_0_1_in_rule__EtsiBnf__Group_0__1__Impl2417 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0__2__Impl_in_rule__EtsiBnf__Group_0__22447 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0_in_rule__EtsiBnf__Group_0__2__Impl2474 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__0__Impl_in_rule__EtsiBnf__Group_0_2__02510 = new BitSet(new long[]{0x0000001000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1_in_rule__EtsiBnf__Group_0_2__02513 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_0_2_0_in_rule__EtsiBnf__Group_0_2__0__Impl2540 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__1__Impl_in_rule__EtsiBnf__Group_0_2__12571 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2_in_rule__EtsiBnf__Group_0_2__12574 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_0_2__1__Impl2602 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__2__Impl_in_rule__EtsiBnf__Group_0_2__22633 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3_in_rule__EtsiBnf__Group_0_2__22636 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_0_2_2_in_rule__EtsiBnf__Group_0_2__2__Impl2663 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_0_2__3__Impl_in_rule__EtsiBnf__Group_0_2__32694 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2723 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__BnfEntryAssignment_0_2_3_in_rule__EtsiBnf__Group_0_2__3__Impl2735 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__0__Impl_in_rule__EtsiBnf__Group_1__02776 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1_in_rule__EtsiBnf__Group_1__02779 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_1_0_in_rule__EtsiBnf__Group_1__0__Impl2806 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__1__Impl_in_rule__EtsiBnf__Group_1__12836 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2_in_rule__EtsiBnf__Group_1__12839 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_1__1__Impl2867 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__2__Impl_in_rule__EtsiBnf__Group_1__22898 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3_in_rule__EtsiBnf__Group_1__22901 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_1_2_in_rule__EtsiBnf__Group_1__2__Impl2928 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_1__3__Impl_in_rule__EtsiBnf__Group_1__32959 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__DeltaEntryAssignment_1_3_in_rule__EtsiBnf__Group_1__3__Impl2986 = new BitSet(new long[]{0x00000000010000B2L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__0__Impl_in_rule__EtsiBnf__Group_2__03025 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1_in_rule__EtsiBnf__Group_2__03028 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__TypeAssignment_2_0_in_rule__EtsiBnf__Group_2__0__Impl3055 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__1__Impl_in_rule__EtsiBnf__Group_2__13085 = new BitSet(new long[]{0x0000000341000020L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2_in_rule__EtsiBnf__Group_2__13088 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__EtsiBnf__Group_2__1__Impl3116 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__2__Impl_in_rule__EtsiBnf__Group_2__23147 = new BitSet(new long[]{0x0000000341000020L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3_in_rule__EtsiBnf__Group_2__23150 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__ImportSectionAssignment_2_2_in_rule__EtsiBnf__Group_2__2__Impl3177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__Group_2__3__Impl_in_rule__EtsiBnf__Group_2__33208 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__EtsiBnf__MergeEntryAssignment_2_3_in_rule__EtsiBnf__Group_2__3__Impl3235 = new BitSet(new long[]{0x0000000340000022L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__0__Impl_in_rule__SectionHeading__Group__03274 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1_in_rule__SectionHeading__Group__03277 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__Group__1__Impl_in_rule__SectionHeading__Group__13335 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__SectionHeading__SectionHeaderAssignment_1_in_rule__SectionHeading__Group__1__Impl3362 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__0__Impl_in_rule__Import__Group__03396 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__Import__Group__1_in_rule__Import__Group__03399 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_24_in_rule__Import__Group__0__Impl3427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__1__Impl_in_rule__Import__Group__13458 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__2_in_rule__Import__Group__13461 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__ImportURIAssignment_1_in_rule__Import__Group__1__Impl3488 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__2__Impl_in_rule__Import__Group__23518 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__3_in_rule__Import__Group__23521 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0_in_rule__Import__Group__2__Impl3548 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__3__Impl_in_rule__Import__Group__33579 = new BitSet(new long[]{0x0000000006800000L});
+    public static final BitSet FOLLOW_rule__Import__Group__4_in_rule__Import__Group__33582 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0_in_rule__Import__Group__3__Impl3609 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group__4__Impl_in_rule__Import__Group__43640 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Import__Group__4__Impl3668 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__0__Impl_in_rule__Import__Group_2__03709 = new BitSet(new long[]{0x0000038000000000L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1_in_rule__Import__Group_2__03712 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_25_in_rule__Import__Group_2__0__Impl3740 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_2__1__Impl_in_rule__Import__Group_2__13771 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Alternatives_2_1_in_rule__Import__Group_2__1__Impl3798 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__0__Impl_in_rule__Import__Group_3__03832 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1_in_rule__Import__Group_3__03835 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_rule__Import__Group_3__0__Impl3863 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__Group_3__1__Impl_in_rule__Import__Group_3__13894 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Import__LabelAssignment_3_1_in_rule__Import__Group_3__1__Impl3921 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__0__Impl_in_rule__Rule__Group__03955 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1_in_rule__Rule__Group__03958 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0_in_rule__Rule__Group__0__Impl3985 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__1__Impl_in_rule__Rule__Group__14016 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2_in_rule__Rule__Group__14019 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__NameAssignment_1_in_rule__Rule__Group__1__Impl4046 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__2__Impl_in_rule__Rule__Group__24076 = new BitSet(new long[]{0x00000000008E0250L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3_in_rule__Rule__Group__24079 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_27_in_rule__Rule__Group__2__Impl4107 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__3__Impl_in_rule__Rule__Group__34138 = new BitSet(new long[]{0x00000000008E0250L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4_in_rule__Rule__Group__34141 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__DefinitionListAssignment_3_in_rule__Rule__Group__3__Impl4168 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group__4__Impl_in_rule__Rule__Group__44199 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__Rule__Group__4__Impl4228 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__0__Impl_in_rule__Rule__Group_0__04271 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1_in_rule__Rule__Group_0__04274 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulenumberAssignment_0_0_in_rule__Rule__Group_0__0__Impl4301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__1__Impl_in_rule__Rule__Group_0__14331 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2_in_rule__Rule__Group_0__14334 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__RulevariantAssignment_0_1_in_rule__Rule__Group_0__1__Impl4361 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__Rule__Group_0__2__Impl_in_rule__Rule__Group_0__24392 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__Rule__Group_0__2__Impl4420 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__0__Impl_in_rule__ExtRule__Group__04457 = new BitSet(new long[]{0x00000000010000B0L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1_in_rule__ExtRule__Group__04460 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0_in_rule__ExtRule__Group__0__Impl4487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__1__Impl_in_rule__ExtRule__Group__14518 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2_in_rule__ExtRule__Group__14521 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__NameAssignment_1_in_rule__ExtRule__Group__1__Impl4548 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__2__Impl_in_rule__ExtRule__Group__24578 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3_in_rule__ExtRule__Group__24581 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0_in_rule__ExtRule__Group__2__Impl4608 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__3__Impl_in_rule__ExtRule__Group__34638 = new BitSet(new long[]{0x0000000000BFE250L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4_in_rule__ExtRule__Group__34641 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_29_in_rule__ExtRule__Group__3__Impl4669 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__4__Impl_in_rule__ExtRule__Group__44700 = new BitSet(new long[]{0x0000000000BFE250L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5_in_rule__ExtRule__Group__44703 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Alternatives_4_in_rule__ExtRule__Group__4__Impl4730 = new BitSet(new long[]{0x00000000003FE252L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group__5__Impl_in_rule__ExtRule__Group__54761 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__ExtRule__Group__5__Impl4790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__0__Impl_in_rule__ExtRule__Group_0__04835 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1_in_rule__ExtRule__Group_0__04838 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulenumberAssignment_0_0_in_rule__ExtRule__Group_0__0__Impl4865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__1__Impl_in_rule__ExtRule__Group_0__14895 = new BitSet(new long[]{0x0000000010000010L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2_in_rule__ExtRule__Group_0__14898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RulevariantAssignment_0_1_in_rule__ExtRule__Group_0__1__Impl4925 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_0__2__Impl_in_rule__ExtRule__Group_0__24956 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_28_in_rule__ExtRule__Group_0__2__Impl4984 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__0__Impl_in_rule__ExtRule__Group_2__05021 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1_in_rule__ExtRule__Group_2__05024 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__ExtRule__Group_2__0__Impl5052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__1__Impl_in_rule__ExtRule__Group_2__15083 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2_in_rule__ExtRule__Group_2__15086 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__RuleextAssignment_2_1_in_rule__ExtRule__Group_2__1__Impl5113 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__ExtRule__Group_2__2__Impl_in_rule__ExtRule__Group_2__25143 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__ExtRule__Group_2__2__Impl5171 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__0__Impl_in_rule__GlobalCombinator__Group__05208 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1_in_rule__GlobalCombinator__Group__05211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0_in_rule__GlobalCombinator__Group__0__Impl5238 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__1__Impl_in_rule__GlobalCombinator__Group__15268 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2_in_rule__GlobalCombinator__Group__15271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__LogicAssignment_1_in_rule__GlobalCombinator__Group__1__Impl5298 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group__2__Impl_in_rule__GlobalCombinator__Group__25328 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__GlobalCombinator__Group__2__Impl5357 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__0__Impl_in_rule__GlobalCombinator__Group_0__05396 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1_in_rule__GlobalCombinator__Group_0__05399 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_30_in_rule__GlobalCombinator__Group_0__0__Impl5427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GlobalCombinator__Group_0__1__Impl_in_rule__GlobalCombinator__Group_0__15458 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__GlobalCombinator__Group_0__1__Impl5486 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__0__Impl_in_rule__RuleCombinator__Group__05521 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1_in_rule__RuleCombinator__Group__05524 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0_in_rule__RuleCombinator__Group__0__Impl5551 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__1__Impl_in_rule__RuleCombinator__Group__15581 = new BitSet(new long[]{0x0000000000820000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2_in_rule__RuleCombinator__Group__15584 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LogicAssignment_1_in_rule__RuleCombinator__Group__1__Impl5611 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__2__Impl_in_rule__RuleCombinator__Group__25641 = new BitSet(new long[]{0x0000000000820000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3_in_rule__RuleCombinator__Group__25644 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0_in_rule__RuleCombinator__Group__2__Impl5671 = new BitSet(new long[]{0x0000000000020002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group__3__Impl_in_rule__RuleCombinator__Group__35702 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__RuleCombinator__Group__3__Impl5731 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__0__Impl_in_rule__RuleCombinator__Group_0__05772 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1_in_rule__RuleCombinator__Group_0__05775 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_rule__RuleCombinator__Group_0__0__Impl5803 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__1__Impl_in_rule__RuleCombinator__Group_0__15834 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2_in_rule__RuleCombinator__Group_0__15837 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__RuleCombinator__Group_0__1__Impl5865 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_0__2__Impl_in_rule__RuleCombinator__Group_0__25896 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__NameAssignment_0_2_in_rule__RuleCombinator__Group_0__2__Impl5923 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__0__Impl_in_rule__RuleCombinator__Group_2__05959 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1_in_rule__RuleCombinator__Group_2__05962 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__RuleCombinator__Group_2__0__Impl5990 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__1__Impl_in_rule__RuleCombinator__Group_2__16021 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2_in_rule__RuleCombinator__Group_2__16024 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__LABELAssignment_2_1_in_rule__RuleCombinator__Group_2__1__Impl6051 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RuleCombinator__Group_2__2__Impl_in_rule__RuleCombinator__Group_2__26081 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__RuleCombinator__Group_2__2__Impl6109 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__0__Impl_in_rule__HookCombinator__Group__06146 = new BitSet(new long[]{0x0000000080000000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1_in_rule__HookCombinator__Group__06149 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_rule__HookCombinator__Group__0__Impl6177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__1__Impl_in_rule__HookCombinator__Group__16208 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2_in_rule__HookCombinator__Group__16211 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_31_in_rule__HookCombinator__Group__1__Impl6239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__2__Impl_in_rule__HookCombinator__Group__26270 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3_in_rule__HookCombinator__Group__26273 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__NameAssignment_2_in_rule__HookCombinator__Group__2__Impl6300 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__3__Impl_in_rule__HookCombinator__Group__36330 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4_in_rule__HookCombinator__Group__36333 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group__3__Impl6361 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__4__Impl_in_rule__HookCombinator__Group__46392 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5_in_rule__HookCombinator__Group__46395 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__RuleextAssignment_4_in_rule__HookCombinator__Group__4__Impl6422 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__5__Impl_in_rule__HookCombinator__Group__56452 = new BitSet(new long[]{0x0000000000020100L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6_in_rule__HookCombinator__Group__56455 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group__5__Impl6483 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__6__Impl_in_rule__HookCombinator__Group__66514 = new BitSet(new long[]{0x0000000000020100L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7_in_rule__HookCombinator__Group__66517 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LogicAssignment_6_in_rule__HookCombinator__Group__6__Impl6544 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__7__Impl_in_rule__HookCombinator__Group__76575 = new BitSet(new long[]{0x0000000000800000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8_in_rule__HookCombinator__Group__76578 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6607 = new BitSet(new long[]{0x0000000000020102L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0_in_rule__HookCombinator__Group__7__Impl6619 = new BitSet(new long[]{0x0000000000020102L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group__8__Impl_in_rule__HookCombinator__Group__86652 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_23_in_rule__HookCombinator__Group__8__Impl6681 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__0__Impl_in_rule__HookCombinator__Group_7__06732 = new BitSet(new long[]{0x0000000000000040L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1_in_rule__HookCombinator__Group_7__06735 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__HookCombinator__Group_7__0__Impl6763 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__1__Impl_in_rule__HookCombinator__Group_7__16794 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2_in_rule__HookCombinator__Group_7__16797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__LABELAssignment_7_1_in_rule__HookCombinator__Group_7__1__Impl6824 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__HookCombinator__Group_7__2__Impl_in_rule__HookCombinator__Group_7__26854 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__HookCombinator__Group_7__2__Impl6882 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__0__Impl_in_rule__DefinitionList__Group__06919 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1_in_rule__DefinitionList__Group__06922 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_0_in_rule__DefinitionList__Group__0__Impl6949 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group__1__Impl_in_rule__DefinitionList__Group__16979 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0_in_rule__DefinitionList__Group__1__Impl7006 = new BitSet(new long[]{0x0000000000010002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__0__Impl_in_rule__DefinitionList__Group_1__07041 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1_in_rule__DefinitionList__Group_1__07044 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_16_in_rule__DefinitionList__Group_1__0__Impl7072 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__Group_1__1__Impl_in_rule__DefinitionList__Group_1__17103 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__DefinitionList__SingleDefinitionAssignment_1_1_in_rule__DefinitionList__Group_1__1__Impl7130 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__0__Impl_in_rule__GroupedSequence__Group__07164 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1_in_rule__GroupedSequence__Group__07167 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__GroupedSequence__Group__0__Impl7195 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__1__Impl_in_rule__GroupedSequence__Group__17226 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2_in_rule__GroupedSequence__Group__17229 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__DefinitionListAssignment_1_in_rule__GroupedSequence__Group__1__Impl7256 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__GroupedSequence__Group__2__Impl_in_rule__GroupedSequence__Group__27286 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__GroupedSequence__Group__2__Impl7314 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__0__Impl_in_rule__OptionalSequence__Group__07351 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1_in_rule__OptionalSequence__Group__07354 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_rule__OptionalSequence__Group__0__Impl7382 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__1__Impl_in_rule__OptionalSequence__Group__17413 = new BitSet(new long[]{0x0000000000004000L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2_in_rule__OptionalSequence__Group__17416 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__DefinitionListAssignment_1_in_rule__OptionalSequence__Group__1__Impl7443 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__OptionalSequence__Group__2__Impl_in_rule__OptionalSequence__Group__27473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_14_in_rule__OptionalSequence__Group__2__Impl7501 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__0__Impl_in_rule__RepeatedSequence__Group__07538 = new BitSet(new long[]{0x00000000000E0250L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1_in_rule__RepeatedSequence__Group__07541 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_19_in_rule__RepeatedSequence__Group__0__Impl7569 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__1__Impl_in_rule__RepeatedSequence__Group__17600 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2_in_rule__RepeatedSequence__Group__17603 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__DefinitionsAssignment_1_in_rule__RepeatedSequence__Group__1__Impl7630 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__2__Impl_in_rule__RepeatedSequence__Group__27660 = new BitSet(new long[]{0x0000000400200000L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3_in_rule__RepeatedSequence__Group__27663 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_15_in_rule__RepeatedSequence__Group__2__Impl7691 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Group__3__Impl_in_rule__RepeatedSequence__Group__37722 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__Alternatives_3_in_rule__RepeatedSequence__Group__3__Impl7749 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__0__Impl_in_rule__RepeatRange__Group__07787 = new BitSet(new long[]{0x0000000000020000L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__1_in_rule__RepeatRange__Group__07790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_34_in_rule__RepeatRange__Group__0__Impl7818 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__1__Impl_in_rule__RepeatRange__Group__17849 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__2_in_rule__RepeatRange__Group__17852 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_17_in_rule__RepeatRange__Group__1__Impl7880 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__2__Impl_in_rule__RepeatRange__Group__27911 = new BitSet(new long[]{0x0000000800000000L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__3_in_rule__RepeatRange__Group__27914 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__FromAssignment_2_in_rule__RepeatRange__Group__2__Impl7941 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__3__Impl_in_rule__RepeatRange__Group__37971 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__4_in_rule__RepeatRange__Group__37974 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_rule__RepeatRange__Group__3__Impl8002 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__4__Impl_in_rule__RepeatRange__Group__48033 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__5_in_rule__RepeatRange__Group__48036 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__ToAssignment_4_in_rule__RepeatRange__Group__4__Impl8063 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatRange__Group__5__Impl_in_rule__RepeatRange__Group__58093 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_13_in_rule__RepeatRange__Group__5__Impl8121 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__EtsiBnf__NameAssignment_0_18169 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_rule__EtsiBnf__TypeAssignment_0_2_08205 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_0_2_28244 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_rule__EtsiBnf__BnfEntryAssignment_0_2_38275 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_37_in_rule__EtsiBnf__TypeAssignment_1_08311 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_1_28350 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_rule__EtsiBnf__DeltaEntryAssignment_1_38381 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_rule__EtsiBnf__TypeAssignment_2_08417 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImportSection_in_rule__EtsiBnf__ImportSectionAssignment_2_28456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_rule__EtsiBnf__MergeEntryAssignment_2_38487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_rule__ImportSection__ImportsAssignment8518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__BnfEntry__SectionheaderAssignment_08549 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__BnfEntry__RuleAssignment_18580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_rule__DeltaEntry__RuleAssignment_08611 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__DeltaEntry__SectionheaderAssignment_18642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_rule__DeltaEntry__ExtRuleAssignment_28673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_rule__MergeEntry__SectionheaderAssignment_08704 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_rule__MergeEntry__MergeRuleAssignment_18735 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_rule__SectionHeading__SectionHeaderAssignment_18766 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__Import__ImportURIAssignment_18797 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_rule__Import__GrammarTypeAssignment_2_1_08833 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_40_in_rule__Import__GrammarTypeAssignment_2_1_18877 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_41_in_rule__Import__GrammarTypeAssignment_2_1_28921 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Import__LabelAssignment_3_18960 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__Rule__RulenumberAssignment_0_08991 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__RulevariantAssignment_0_19022 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__Rule__NameAssignment_19053 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__Rule__DefinitionListAssignment_39084 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RulenumberAssignment_0_09115 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__RulevariantAssignment_0_19146 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__ExtRule__NameAssignment_19177 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__ExtRule__RuleextAssignment_2_19208 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__ExtRule__ElementsAssignment_4_09239 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__GlobalCombinator__LogicAssignment_19270 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleCombinator__NameAssignment_0_29301 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__RuleCombinator__LogicAssignment_19332 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__RuleCombinator__LABELAssignment_2_19363 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__HookCombinator__NameAssignment_29394 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__HookCombinator__RuleextAssignment_49425 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_rule__HookCombinator__LogicAssignment_69456 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__HookCombinator__LABELAssignment_7_19487 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_09518 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_rule__DefinitionList__SingleDefinitionAssignment_1_19549 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_rule__SingleDefinition__TermsAssignment9580 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_rule__Term__TermAtomAssignment_09611 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_rule__Term__TermGroupedSequenceAssignment_19642 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_rule__Term__TermOptionalSequenceAssignment_29673 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_rule__Term__TermRepeatedSequenceAssignment_39704 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_rule__Atom__AtomStringRuleAssignment_09735 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_rule__Atom__AtomRuleReferenceAssignment_19766 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_rule__RuleReference__RulerefAssignment9801 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_rule__StringRule__LiteralAssignment_09836 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_rule__StringRule__ColonAssignment_19867 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__GroupedSequence__DefinitionListAssignment_19898 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__OptionalSequence__DefinitionListAssignment_19929 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_rule__RepeatedSequence__DefinitionsAssignment_19960 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_21_in_rule__RepeatedSequence__MorethanonceAssignment_3_09996 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatRange_in_rule__RepeatedSequence__RangeAssignment_3_110035 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__RepeatRange__FromAssignment_210066 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_rule__RepeatRange__ToAssignment_410097 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_rule__RepeatedSequence__MorethanonceAssignment_3_0_in_synpred28_InternalEbnf2274 = new BitSet(new long[]{0x0000000000000002L});
 
 }
