Index: v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java
===================================================================
--- v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java	(revision 95)
+++ v2/trunk/de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnfParser.java	(revision 100)
@@ -23,5 +23,5 @@
 public class InternalEbnfParser extends AbstractInternalAntlrParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_SECTIONHEADER", "RULE_STRING", "RULE_INT", "RULE_LOGIC", "RULE_COLON", "RULE_WS", "RULE_SL_COMMENT", "RULE_ML_COMMENT", "'grammar'", "'/bnf'", "';'", "'/delta'", "'/merge'", "'import'", "'/'", "'core'", "'package'", "'update'", "'label:'", "'.'", "'::='", "'('", "')'", "'<-'", "']'", "'}'", "'|'", "'['", "'{'", "'*'", "'+'", "'global'", "'combinator:'", "'rule'", "'hook'", "'#'", "','"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_SECTIONHEADER", "RULE_ML_COMMENT", "RULE_STRING", "RULE_INT", "RULE_LOGIC", "RULE_COLON", "RULE_WS", "RULE_SL_COMMENT", "'grammar'", "'/bnf'", "';'", "'/delta'", "'/merge'", "'import'", "'/'", "'core'", "'package'", "'update'", "'label:'", "'.'", "'::='", "'('", "')'", "'<-'", "']'", "'}'", "'|'", "'['", "'{'", "'*'", "'+'", "'global'", "'combinator:'", "'rule'", "'hook'", "'#'", "','"
     };
     public static final int RULE_ID=4;
@@ -39,12 +39,12 @@
     public static final int T__21=21;
     public static final int T__20=20;
-    public static final int RULE_SL_COMMENT=11;
+    public static final int RULE_SL_COMMENT=12;
     public static final int EOF=-1;
-    public static final int RULE_ML_COMMENT=12;
+    public static final int RULE_ML_COMMENT=6;
     public static final int T__30=30;
     public static final int T__19=19;
-    public static final int RULE_COLON=9;
+    public static final int RULE_COLON=10;
     public static final int T__31=31;
-    public static final int RULE_STRING=6;
+    public static final int RULE_STRING=7;
     public static final int T__32=32;
     public static final int T__33=33;
@@ -56,5 +56,5 @@
     public static final int T__36=36;
     public static final int T__17=17;
-    public static final int RULE_LOGIC=8;
+    public static final int RULE_LOGIC=9;
     public static final int T__37=37;
     public static final int T__38=38;
@@ -62,6 +62,6 @@
     public static final int T__14=14;
     public static final int T__13=13;
-    public static final int RULE_INT=7;
-    public static final int RULE_WS=10;
+    public static final int RULE_INT=8;
+    public static final int RULE_WS=11;
 
     // delegates
@@ -74,5 +74,5 @@
         public InternalEbnfParser(TokenStream input, RecognizerSharedState state) {
             super(input, state);
-            this.state.ruleMemo = new HashMap[99+1];
+            this.state.ruleMemo = new HashMap[102+1];
              
              
@@ -353,5 +353,5 @@
                         int LA3_0 = input.LA(1);
 
-                        if ( ((LA3_0>=RULE_ID && LA3_0<=RULE_SECTIONHEADER)||LA3_0==RULE_INT) ) {
+                        if ( ((LA3_0>=RULE_ID && LA3_0<=RULE_ML_COMMENT)||LA3_0==RULE_INT) ) {
                             alt3=1;
                         }
@@ -902,5 +902,5 @@
 
     // $ANTLR start "ruleBnfEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:332:1: ruleBnfEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:332:1: ruleBnfEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) | ( (lv_comment_2_0= ruleComment ) ) ) ;
     public final EObject ruleBnfEntry() throws RecognitionException {
         EObject current = null;
@@ -910,4 +910,6 @@
         EObject lv_rule_1_0 = null;
 
+        EObject lv_comment_2_0 = null;
+
 
          enterRule(); 
@@ -915,18 +917,27 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 6) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:335:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:336:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:336:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) )
-            int alt10=2;
-            int LA10_0 = input.LA(1);
-
-            if ( (LA10_0==RULE_SECTIONHEADER) ) {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:335:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) | ( (lv_comment_2_0= ruleComment ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:336:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) | ( (lv_comment_2_0= ruleComment ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:336:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_rule_1_0= ruleRule ) ) | ( (lv_comment_2_0= ruleComment ) ) )
+            int alt10=3;
+            switch ( input.LA(1) ) {
+            case RULE_SECTIONHEADER:
+                {
                 alt10=1;
-            }
-            else if ( (LA10_0==RULE_ID||LA10_0==RULE_INT) ) {
+                }
+                break;
+            case RULE_ID:
+            case RULE_INT:
+                {
                 alt10=2;
-            }
-            else {
+                }
+                break;
+            case RULE_ML_COMMENT:
+                {
+                alt10=3;
+                }
+                break;
+            default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
@@ -935,4 +946,5 @@
                 throw nvae;
             }
+
             switch (alt10) {
                 case 1 :
@@ -1018,4 +1030,45 @@
                     }
                     break;
+                case 3 :
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:374:6: ( (lv_comment_2_0= ruleComment ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:374:6: ( (lv_comment_2_0= ruleComment ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:375:1: (lv_comment_2_0= ruleComment )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:375:1: (lv_comment_2_0= ruleComment )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:376:3: lv_comment_2_0= ruleComment
+                    {
+                    if ( state.backtracking==0 ) {
+                       
+                      	        newCompositeNode(grammarAccess.getBnfEntryAccess().getCommentCommentParserRuleCall_2_0()); 
+                      	    
+                    }
+                    pushFollow(FOLLOW_ruleComment_in_ruleBnfEntry676);
+                    lv_comment_2_0=ruleComment();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      	        if (current==null) {
+                      	            current = createModelElementForParent(grammarAccess.getBnfEntryRule());
+                      	        }
+                             		set(
+                             			current, 
+                             			"comment",
+                              		lv_comment_2_0, 
+                              		"Comment");
+                      	        afterParserOrEnumRuleCall();
+                      	    
+                    }
+
+                    }
+
+
+                    }
+
+
+                    }
+                    break;
 
             }
@@ -1042,5 +1095,5 @@
 
     // $ANTLR start "entryRuleDeltaEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:381:1: entryRuleDeltaEntry returns [EObject current=null] : iv_ruleDeltaEntry= ruleDeltaEntry EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:400:1: entryRuleDeltaEntry returns [EObject current=null] : iv_ruleDeltaEntry= ruleDeltaEntry EOF ;
     public final EObject entryRuleDeltaEntry() throws RecognitionException {
         EObject current = null;
@@ -1051,11 +1104,11 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 7) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:382:2: (iv_ruleDeltaEntry= ruleDeltaEntry EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:383:2: iv_ruleDeltaEntry= ruleDeltaEntry EOF
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:401:2: (iv_ruleDeltaEntry= ruleDeltaEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:402:2: iv_ruleDeltaEntry= ruleDeltaEntry EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getDeltaEntryRule()); 
             }
-            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry685);
+            pushFollow(FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry712);
             iv_ruleDeltaEntry=ruleDeltaEntry();
 
@@ -1065,5 +1118,5 @@
                current =iv_ruleDeltaEntry; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry695); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDeltaEntry722); if (state.failed) return current;
 
             }
@@ -1084,5 +1137,5 @@
 
     // $ANTLR start "ruleDeltaEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:390:1: ruleDeltaEntry returns [EObject current=null] : ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:409:1: ruleDeltaEntry returns [EObject current=null] : ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) ;
     public final EObject ruleDeltaEntry() throws RecognitionException {
         EObject current = null;
@@ -1099,8 +1152,8 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 8) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:393:28: ( ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:394:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:394:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:412:28: ( ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:1: ( ( (lv_rule_0_0= ruleRule ) ) | ( (lv_sectionheader_1_0= ruleSectionHeading ) ) | ( (lv_extRule_2_0= ruleExtRule ) ) )
             int alt11=3;
             switch ( input.LA(1) ) {
@@ -1118,9 +1171,9 @@
                             int LA11_2 = input.LA(5);
 
-                            if ( (LA11_2==25) ) {
+                            if ( (LA11_2==26) ) {
+                                alt11=3;
+                            }
+                            else if ( (LA11_2==25) ) {
                                 alt11=1;
-                            }
-                            else if ( (LA11_2==26) ) {
-                                alt11=3;
                             }
                             else {
@@ -1154,9 +1207,9 @@
                         int LA11_2 = input.LA(4);
 
-                        if ( (LA11_2==25) ) {
+                        if ( (LA11_2==26) ) {
+                            alt11=3;
+                        }
+                        else if ( (LA11_2==25) ) {
                             alt11=1;
-                        }
-                        else if ( (LA11_2==26) ) {
-                            alt11=3;
                         }
                         else {
@@ -1189,9 +1242,9 @@
                 int LA11_2 = input.LA(2);
 
-                if ( (LA11_2==25) ) {
+                if ( (LA11_2==26) ) {
+                    alt11=3;
+                }
+                else if ( (LA11_2==25) ) {
                     alt11=1;
-                }
-                else if ( (LA11_2==26) ) {
-                    alt11=3;
                 }
                 else {
@@ -1219,11 +1272,11 @@
             switch (alt11) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:394:2: ( (lv_rule_0_0= ruleRule ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:394:2: ( (lv_rule_0_0= ruleRule ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:395:1: (lv_rule_0_0= ruleRule )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:395:1: (lv_rule_0_0= ruleRule )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:396:3: lv_rule_0_0= ruleRule
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:2: ( (lv_rule_0_0= ruleRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:2: ( (lv_rule_0_0= ruleRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:414:1: (lv_rule_0_0= ruleRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:414:1: (lv_rule_0_0= ruleRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:415:3: lv_rule_0_0= ruleRule
                     {
                     if ( state.backtracking==0 ) {
@@ -1232,5 +1285,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleRule_in_ruleDeltaEntry741);
+                    pushFollow(FOLLOW_ruleRule_in_ruleDeltaEntry768);
                     lv_rule_0_0=ruleRule();
 
@@ -1260,11 +1313,11 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:413:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:414:1: (lv_sectionheader_1_0= ruleSectionHeading )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:414:1: (lv_sectionheader_1_0= ruleSectionHeading )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:415:3: lv_sectionheader_1_0= ruleSectionHeading
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:432:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:432:6: ( (lv_sectionheader_1_0= ruleSectionHeading ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:433:1: (lv_sectionheader_1_0= ruleSectionHeading )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:433:1: (lv_sectionheader_1_0= ruleSectionHeading )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:434:3: lv_sectionheader_1_0= ruleSectionHeading
                     {
                     if ( state.backtracking==0 ) {
@@ -1273,5 +1326,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleDeltaEntry768);
+                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleDeltaEntry795);
                     lv_sectionheader_1_0=ruleSectionHeading();
 
@@ -1301,11 +1354,11 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:432:6: ( (lv_extRule_2_0= ruleExtRule ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:432:6: ( (lv_extRule_2_0= ruleExtRule ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:433:1: (lv_extRule_2_0= ruleExtRule )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:433:1: (lv_extRule_2_0= ruleExtRule )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:434:3: lv_extRule_2_0= ruleExtRule
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:451:6: ( (lv_extRule_2_0= ruleExtRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:451:6: ( (lv_extRule_2_0= ruleExtRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:452:1: (lv_extRule_2_0= ruleExtRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:452:1: (lv_extRule_2_0= ruleExtRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:453:3: lv_extRule_2_0= ruleExtRule
                     {
                     if ( state.backtracking==0 ) {
@@ -1314,5 +1367,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleExtRule_in_ruleDeltaEntry795);
+                    pushFollow(FOLLOW_ruleExtRule_in_ruleDeltaEntry822);
                     lv_extRule_2_0=ruleExtRule();
 
@@ -1365,5 +1418,5 @@
 
     // $ANTLR start "entryRuleMergeEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:458:1: entryRuleMergeEntry returns [EObject current=null] : iv_ruleMergeEntry= ruleMergeEntry EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:477:1: entryRuleMergeEntry returns [EObject current=null] : iv_ruleMergeEntry= ruleMergeEntry EOF ;
     public final EObject entryRuleMergeEntry() throws RecognitionException {
         EObject current = null;
@@ -1374,11 +1427,11 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 9) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:459:2: (iv_ruleMergeEntry= ruleMergeEntry EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:460:2: iv_ruleMergeEntry= ruleMergeEntry EOF
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:478:2: (iv_ruleMergeEntry= ruleMergeEntry EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:479:2: iv_ruleMergeEntry= ruleMergeEntry EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getMergeEntryRule()); 
             }
-            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry831);
+            pushFollow(FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry858);
             iv_ruleMergeEntry=ruleMergeEntry();
 
@@ -1388,5 +1441,5 @@
                current =iv_ruleMergeEntry; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry841); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeEntry868); if (state.failed) return current;
 
             }
@@ -1407,5 +1460,5 @@
 
     // $ANTLR start "ruleMergeEntry"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:467:1: ruleMergeEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:486:1: ruleMergeEntry returns [EObject current=null] : ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) ;
     public final EObject ruleMergeEntry() throws RecognitionException {
         EObject current = null;
@@ -1420,8 +1473,8 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 10) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:470:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:471:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:471:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:489:28: ( ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:1: ( ( (lv_sectionheader_0_0= ruleSectionHeading ) ) | ( (lv_mergeRule_1_0= ruleMergeRule ) ) )
             int alt12=2;
             int LA12_0 = input.LA(1);
@@ -1442,11 +1495,11 @@
             switch (alt12) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:471:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:471:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:472:1: (lv_sectionheader_0_0= ruleSectionHeading )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:472:1: (lv_sectionheader_0_0= ruleSectionHeading )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:473:3: lv_sectionheader_0_0= ruleSectionHeading
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:2: ( (lv_sectionheader_0_0= ruleSectionHeading ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:491:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:491:1: (lv_sectionheader_0_0= ruleSectionHeading )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:492:3: lv_sectionheader_0_0= ruleSectionHeading
                     {
                     if ( state.backtracking==0 ) {
@@ -1455,5 +1508,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleMergeEntry887);
+                    pushFollow(FOLLOW_ruleSectionHeading_in_ruleMergeEntry914);
                     lv_sectionheader_0_0=ruleSectionHeading();
 
@@ -1483,11 +1536,11 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:490:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:491:1: (lv_mergeRule_1_0= ruleMergeRule )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:491:1: (lv_mergeRule_1_0= ruleMergeRule )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:492:3: lv_mergeRule_1_0= ruleMergeRule
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:509:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:509:6: ( (lv_mergeRule_1_0= ruleMergeRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:510:1: (lv_mergeRule_1_0= ruleMergeRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:510:1: (lv_mergeRule_1_0= ruleMergeRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:511:3: lv_mergeRule_1_0= ruleMergeRule
                     {
                     if ( state.backtracking==0 ) {
@@ -1496,5 +1549,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleMergeRule_in_ruleMergeEntry914);
+                    pushFollow(FOLLOW_ruleMergeRule_in_ruleMergeEntry941);
                     lv_mergeRule_1_0=ruleMergeRule();
 
@@ -1547,5 +1600,5 @@
 
     // $ANTLR start "entryRuleSectionHeading"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:516:1: entryRuleSectionHeading returns [EObject current=null] : iv_ruleSectionHeading= ruleSectionHeading EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:535:1: entryRuleSectionHeading returns [EObject current=null] : iv_ruleSectionHeading= ruleSectionHeading EOF ;
     public final EObject entryRuleSectionHeading() throws RecognitionException {
         EObject current = null;
@@ -1556,11 +1609,11 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 11) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:517:2: (iv_ruleSectionHeading= ruleSectionHeading EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:518:2: iv_ruleSectionHeading= ruleSectionHeading EOF
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:536:2: (iv_ruleSectionHeading= ruleSectionHeading EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:537:2: iv_ruleSectionHeading= ruleSectionHeading EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSectionHeadingRule()); 
             }
-            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading950);
+            pushFollow(FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading977);
             iv_ruleSectionHeading=ruleSectionHeading();
 
@@ -1570,5 +1623,5 @@
                current =iv_ruleSectionHeading; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading960); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSectionHeading987); if (state.failed) return current;
 
             }
@@ -1589,5 +1642,5 @@
 
     // $ANTLR start "ruleSectionHeading"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:525:1: ruleSectionHeading returns [EObject current=null] : ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:544:1: ruleSectionHeading returns [EObject current=null] : ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) ;
     public final EObject ruleSectionHeading() throws RecognitionException {
         EObject current = null;
@@ -1599,12 +1652,12 @@
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 12) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:528:28: ( ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:2: () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:529:2: ()
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:530:2: 
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:547:28: ( ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:548:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:548:1: ( () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:548:2: () ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:548:2: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:549:2: 
             {
             if ( state.backtracking==0 ) {
@@ -1623,11 +1676,11 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:538:2: ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:539:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:539:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:540:3: lv_sectionHeader_1_0= RULE_SECTIONHEADER
-            {
-            lv_sectionHeader_1_0=(Token)match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading1014); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:557:2: ( (lv_sectionHeader_1_0= RULE_SECTIONHEADER ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:558:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:558:1: (lv_sectionHeader_1_0= RULE_SECTIONHEADER )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:559:3: lv_sectionHeader_1_0= RULE_SECTIONHEADER
+            {
+            lv_sectionHeader_1_0=(Token)match(input,RULE_SECTIONHEADER,FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading1041); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -1676,29 +1729,29 @@
 
 
-    // $ANTLR start "entryRuleImport"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:564:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
-    public final EObject entryRuleImport() throws RecognitionException {
+    // $ANTLR start "entryRuleComment"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:583:1: entryRuleComment returns [EObject current=null] : iv_ruleComment= ruleComment EOF ;
+    public final EObject entryRuleComment() throws RecognitionException {
         EObject current = null;
-        int entryRuleImport_StartIndex = input.index();
-        EObject iv_ruleImport = null;
+        int entryRuleComment_StartIndex = input.index();
+        EObject iv_ruleComment = null;
 
 
         try {
             if ( state.backtracking>0 && alreadyParsedRule(input, 13) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:565:2: (iv_ruleImport= ruleImport EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:566:2: iv_ruleImport= ruleImport EOF
-            {
-            if ( state.backtracking==0 ) {
-               newCompositeNode(grammarAccess.getImportRule()); 
-            }
-            pushFollow(FOLLOW_ruleImport_in_entryRuleImport1055);
-            iv_ruleImport=ruleImport();
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:584:2: (iv_ruleComment= ruleComment EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:585:2: iv_ruleComment= ruleComment EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getCommentRule()); 
+            }
+            pushFollow(FOLLOW_ruleComment_in_entryRuleComment1082);
+            iv_ruleComment=ruleComment();
 
             state._fsp--;
             if (state.failed) return current;
             if ( state.backtracking==0 ) {
-               current =iv_ruleImport; 
-            }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleImport1065); if (state.failed) return current;
+               current =iv_ruleComment; 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleComment1092); if (state.failed) return current;
 
             }
@@ -1711,5 +1764,135 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 13, entryRuleImport_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 13, entryRuleComment_StartIndex); }
+        }
+        return current;
+    }
+    // $ANTLR end "entryRuleComment"
+
+
+    // $ANTLR start "ruleComment"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:592:1: ruleComment returns [EObject current=null] : ( () ( (lv_content_1_0= RULE_ML_COMMENT ) ) ) ;
+    public final EObject ruleComment() throws RecognitionException {
+        EObject current = null;
+        int ruleComment_StartIndex = input.index();
+        Token lv_content_1_0=null;
+
+         enterRule(); 
+            
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:595:28: ( ( () ( (lv_content_1_0= RULE_ML_COMMENT ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:596:1: ( () ( (lv_content_1_0= RULE_ML_COMMENT ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:596:1: ( () ( (lv_content_1_0= RULE_ML_COMMENT ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:596:2: () ( (lv_content_1_0= RULE_ML_COMMENT ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:596:2: ()
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:597:2: 
+            {
+            if ( state.backtracking==0 ) {
+               
+              	  /* */ 
+              	
+            }
+            if ( state.backtracking==0 ) {
+
+                      current = forceCreateModelElement(
+                          grammarAccess.getCommentAccess().getCommentAction_0(),
+                          current);
+                  
+            }
+
+            }
+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:605:2: ( (lv_content_1_0= RULE_ML_COMMENT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:606:1: (lv_content_1_0= RULE_ML_COMMENT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:606:1: (lv_content_1_0= RULE_ML_COMMENT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:607:3: lv_content_1_0= RULE_ML_COMMENT
+            {
+            lv_content_1_0=(Token)match(input,RULE_ML_COMMENT,FOLLOW_RULE_ML_COMMENT_in_ruleComment1146); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(lv_content_1_0, grammarAccess.getCommentAccess().getContentML_COMMENTTerminalRuleCall_1_0()); 
+              		
+            }
+            if ( state.backtracking==0 ) {
+
+              	        if (current==null) {
+              	            current = createModelElement(grammarAccess.getCommentRule());
+              	        }
+                     		setWithLastConsumed(
+                     			current, 
+                     			"content",
+                      		lv_content_1_0, 
+                      		"ML_COMMENT");
+              	    
+            }
+
+            }
+
+
+            }
+
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+               leaveRule(); 
+            }
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 14, ruleComment_StartIndex); }
+        }
+        return current;
+    }
+    // $ANTLR end "ruleComment"
+
+
+    // $ANTLR start "entryRuleImport"
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:631:1: entryRuleImport returns [EObject current=null] : iv_ruleImport= ruleImport EOF ;
+    public final EObject entryRuleImport() throws RecognitionException {
+        EObject current = null;
+        int entryRuleImport_StartIndex = input.index();
+        EObject iv_ruleImport = null;
+
+
+        try {
+            if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:632:2: (iv_ruleImport= ruleImport EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:633:2: iv_ruleImport= ruleImport EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getImportRule()); 
+            }
+            pushFollow(FOLLOW_ruleImport_in_entryRuleImport1187);
+            iv_ruleImport=ruleImport();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_ruleImport; 
+            }
+            match(input,EOF,FOLLOW_EOF_in_entryRuleImport1197); if (state.failed) return current;
+
+            }
+
+        }
+         
+            catch (RecognitionException re) { 
+                recover(input,re); 
+                appendSkippedTokens();
+            } 
+        finally {
+            if ( state.backtracking>0 ) { memoize(input, 15, entryRuleImport_StartIndex); }
         }
         return current;
@@ -1719,5 +1902,5 @@
 
     // $ANTLR start "ruleImport"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:573:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:640:1: ruleImport returns [EObject current=null] : (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) ;
     public final EObject ruleImport() throws RecognitionException {
         EObject current = null;
@@ -1736,12 +1919,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 14) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:576:28: ( (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:577:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:577:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:577:3: otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';'
-            {
-            otherlv_0=(Token)match(input,18,FOLLOW_18_in_ruleImport1102); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:643:28: ( (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:644:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:644:1: (otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:644:3: otherlv_0= 'import' ( (lv_importURI_1_0= RULE_STRING ) ) (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )? (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )? otherlv_8= ';'
+            {
+            otherlv_0=(Token)match(input,18,FOLLOW_18_in_ruleImport1234); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -1749,11 +1932,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:581:1: ( (lv_importURI_1_0= RULE_STRING ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:582:1: (lv_importURI_1_0= RULE_STRING )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:582:1: (lv_importURI_1_0= RULE_STRING )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:583:3: lv_importURI_1_0= RULE_STRING
-            {
-            lv_importURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleImport1119); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:648:1: ( (lv_importURI_1_0= RULE_STRING ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:649:1: (lv_importURI_1_0= RULE_STRING )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:649:1: (lv_importURI_1_0= RULE_STRING )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:650:3: lv_importURI_1_0= RULE_STRING
+            {
+            lv_importURI_1_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleImport1251); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -1779,5 +1962,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:599:2: (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:666:2: (otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) ) )?
             int alt14=2;
             int LA14_0 = input.LA(1);
@@ -1788,7 +1971,7 @@
             switch (alt14) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:599:4: otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
-                    {
-                    otherlv_2=(Token)match(input,19,FOLLOW_19_in_ruleImport1137); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:666:4: otherlv_2= '/' ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
+                    {
+                    otherlv_2=(Token)match(input,19,FOLLOW_19_in_ruleImport1269); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -1796,5 +1979,5 @@
                           
                     }
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:603:1: ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:670:1: ( ( (lv_grammarType_3_0= 'core' ) ) | ( (lv_grammarType_4_0= 'package' ) ) | ( (lv_grammarType_5_0= 'update' ) ) )
                     int alt13=3;
                     switch ( input.LA(1) ) {
@@ -1824,13 +2007,13 @@
                     switch (alt13) {
                         case 1 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:603:2: ( (lv_grammarType_3_0= 'core' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:670:2: ( (lv_grammarType_3_0= 'core' ) )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:603:2: ( (lv_grammarType_3_0= 'core' ) )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:604:1: (lv_grammarType_3_0= 'core' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:670:2: ( (lv_grammarType_3_0= 'core' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:671:1: (lv_grammarType_3_0= 'core' )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:604:1: (lv_grammarType_3_0= 'core' )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:605:3: lv_grammarType_3_0= 'core'
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:671:1: (lv_grammarType_3_0= 'core' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:672:3: lv_grammarType_3_0= 'core'
                             {
-                            lv_grammarType_3_0=(Token)match(input,20,FOLLOW_20_in_ruleImport1156); if (state.failed) return current;
+                            lv_grammarType_3_0=(Token)match(input,20,FOLLOW_20_in_ruleImport1288); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -1856,13 +2039,13 @@
                             break;
                         case 2 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:619:6: ( (lv_grammarType_4_0= 'package' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:686:6: ( (lv_grammarType_4_0= 'package' ) )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:619:6: ( (lv_grammarType_4_0= 'package' ) )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:620:1: (lv_grammarType_4_0= 'package' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:686:6: ( (lv_grammarType_4_0= 'package' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:1: (lv_grammarType_4_0= 'package' )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:620:1: (lv_grammarType_4_0= 'package' )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:621:3: lv_grammarType_4_0= 'package'
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:687:1: (lv_grammarType_4_0= 'package' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:688:3: lv_grammarType_4_0= 'package'
                             {
-                            lv_grammarType_4_0=(Token)match(input,21,FOLLOW_21_in_ruleImport1193); if (state.failed) return current;
+                            lv_grammarType_4_0=(Token)match(input,21,FOLLOW_21_in_ruleImport1325); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -1888,13 +2071,13 @@
                             break;
                         case 3 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:635:6: ( (lv_grammarType_5_0= 'update' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:702:6: ( (lv_grammarType_5_0= 'update' ) )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:635:6: ( (lv_grammarType_5_0= 'update' ) )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:636:1: (lv_grammarType_5_0= 'update' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:702:6: ( (lv_grammarType_5_0= 'update' ) )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:703:1: (lv_grammarType_5_0= 'update' )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:636:1: (lv_grammarType_5_0= 'update' )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:637:3: lv_grammarType_5_0= 'update'
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:703:1: (lv_grammarType_5_0= 'update' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:704:3: lv_grammarType_5_0= 'update'
                             {
-                            lv_grammarType_5_0=(Token)match(input,22,FOLLOW_22_in_ruleImport1230); if (state.failed) return current;
+                            lv_grammarType_5_0=(Token)match(input,22,FOLLOW_22_in_ruleImport1362); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -1928,5 +2111,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:650:5: (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:717:5: (otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) ) )?
             int alt15=2;
             int LA15_0 = input.LA(1);
@@ -1937,7 +2120,7 @@
             switch (alt15) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:650:7: otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) )
-                    {
-                    otherlv_6=(Token)match(input,23,FOLLOW_23_in_ruleImport1259); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:717:7: otherlv_6= 'label:' ( (lv_label_7_0= RULE_ID ) )
+                    {
+                    otherlv_6=(Token)match(input,23,FOLLOW_23_in_ruleImport1391); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -1945,11 +2128,11 @@
                           
                     }
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:654:1: ( (lv_label_7_0= RULE_ID ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:655:1: (lv_label_7_0= RULE_ID )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:655:1: (lv_label_7_0= RULE_ID )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:656:3: lv_label_7_0= RULE_ID
-                    {
-                    lv_label_7_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleImport1276); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:721:1: ( (lv_label_7_0= RULE_ID ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:722:1: (lv_label_7_0= RULE_ID )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:722:1: (lv_label_7_0= RULE_ID )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:723:3: lv_label_7_0= RULE_ID
+                    {
+                    lv_label_7_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleImport1408); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -1981,5 +2164,5 @@
             }
 
-            otherlv_8=(Token)match(input,15,FOLLOW_15_in_ruleImport1295); if (state.failed) return current;
+            otherlv_8=(Token)match(input,15,FOLLOW_15_in_ruleImport1427); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2003,5 +2186,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 14, ruleImport_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 16, ruleImport_StartIndex); }
         }
         return current;
@@ -2011,5 +2194,5 @@
 
     // $ANTLR start "entryRuleRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:684:1: entryRuleRule returns [EObject current=null] : iv_ruleRule= ruleRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:751:1: entryRuleRule returns [EObject current=null] : iv_ruleRule= ruleRule EOF ;
     public final EObject entryRuleRule() throws RecognitionException {
         EObject current = null;
@@ -2019,12 +2202,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 15) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:685:2: (iv_ruleRule= ruleRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:686:2: iv_ruleRule= ruleRule EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:752:2: (iv_ruleRule= ruleRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:753:2: iv_ruleRule= ruleRule EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRuleRule()); 
             }
-            pushFollow(FOLLOW_ruleRule_in_entryRuleRule1331);
+            pushFollow(FOLLOW_ruleRule_in_entryRuleRule1463);
             iv_ruleRule=ruleRule();
 
@@ -2034,5 +2217,5 @@
                current =iv_ruleRule; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRule1341); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRule1473); if (state.failed) return current;
 
             }
@@ -2045,5 +2228,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 15, entryRuleRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 17, entryRuleRule_StartIndex); }
         }
         return current;
@@ -2053,5 +2236,5 @@
 
     // $ANTLR start "ruleRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:693:1: ruleRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:760:1: ruleRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) ;
     public final EObject ruleRule() throws RecognitionException {
         EObject current = null;
@@ -2069,12 +2252,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 16) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:696:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )?
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
+            if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:763:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) otherlv_4= '::=' ( (lv_definitionList_5_0= ruleDefinitionList ) )? (otherlv_6= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
             int alt17=2;
             int LA17_0 = input.LA(1);
@@ -2085,13 +2268,13 @@
             switch (alt17) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:697:3: ( (lv_rulenumber_0_0= RULE_INT ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:698:1: (lv_rulenumber_0_0= RULE_INT )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:698:1: (lv_rulenumber_0_0= RULE_INT )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:699:3: lv_rulenumber_0_0= RULE_INT
-                    {
-                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRule1384); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:764:3: ( (lv_rulenumber_0_0= RULE_INT ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:765:1: (lv_rulenumber_0_0= RULE_INT )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:765:1: (lv_rulenumber_0_0= RULE_INT )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:766:3: lv_rulenumber_0_0= RULE_INT
+                    {
+                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRule1516); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2117,5 +2300,5 @@
                     }
 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:715:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:782:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
                     int alt16=2;
                     int LA16_0 = input.LA(1);
@@ -2126,10 +2309,10 @@
                     switch (alt16) {
                         case 1 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:716:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:783:1: (lv_rulevariant_1_0= RULE_ID )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:716:1: (lv_rulevariant_1_0= RULE_ID )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:717:3: lv_rulevariant_1_0= RULE_ID
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:783:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:784:3: lv_rulevariant_1_0= RULE_ID
                             {
-                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1406); if (state.failed) return current;
+                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1538); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -2158,5 +2341,5 @@
                     }
 
-                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleRule1424); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleRule1556); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2170,11 +2353,11 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:737:3: ( (lv_name_3_0= RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:738:1: (lv_name_3_0= RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:738:1: (lv_name_3_0= RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:739:3: lv_name_3_0= RULE_ID
-            {
-            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1443); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:804:3: ( (lv_name_3_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:805:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:805:1: (lv_name_3_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:806:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRule1575); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2200,5 +2383,5 @@
             }
 
-            otherlv_4=(Token)match(input,25,FOLLOW_25_in_ruleRule1460); if (state.failed) return current;
+            otherlv_4=(Token)match(input,25,FOLLOW_25_in_ruleRule1592); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2206,5 +2389,5 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:759:1: ( (lv_definitionList_5_0= ruleDefinitionList ) )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:826:1: ( (lv_definitionList_5_0= ruleDefinitionList ) )?
             int alt18=2;
             int LA18_0 = input.LA(1);
@@ -2229,8 +2412,8 @@
             switch (alt18) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:760:1: (lv_definitionList_5_0= ruleDefinitionList )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:760:1: (lv_definitionList_5_0= ruleDefinitionList )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:761:3: lv_definitionList_5_0= ruleDefinitionList
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:827:1: (lv_definitionList_5_0= ruleDefinitionList )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:827:1: (lv_definitionList_5_0= ruleDefinitionList )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:828:3: lv_definitionList_5_0= ruleDefinitionList
                     {
                     if ( state.backtracking==0 ) {
@@ -2239,5 +2422,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleDefinitionList_in_ruleRule1481);
+                    pushFollow(FOLLOW_ruleDefinitionList_in_ruleRule1613);
                     lv_definitionList_5_0=ruleDefinitionList();
 
@@ -2266,5 +2449,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:777:3: (otherlv_6= ';' )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:844:3: (otherlv_6= ';' )?
             int alt19=2;
             int LA19_0 = input.LA(1);
@@ -2275,7 +2458,7 @@
             switch (alt19) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:777:5: otherlv_6= ';'
-                    {
-                    otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleRule1495); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:844:5: otherlv_6= ';'
+                    {
+                    otherlv_6=(Token)match(input,15,FOLLOW_15_in_ruleRule1627); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2305,5 +2488,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 16, ruleRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 18, ruleRule_StartIndex); }
         }
         return current;
@@ -2313,5 +2496,5 @@
 
     // $ANTLR start "entryRuleExtRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:789:1: entryRuleExtRule returns [EObject current=null] : iv_ruleExtRule= ruleExtRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:856:1: entryRuleExtRule returns [EObject current=null] : iv_ruleExtRule= ruleExtRule EOF ;
     public final EObject entryRuleExtRule() throws RecognitionException {
         EObject current = null;
@@ -2321,12 +2504,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 17) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:790:2: (iv_ruleExtRule= ruleExtRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:791:2: iv_ruleExtRule= ruleExtRule EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:857:2: (iv_ruleExtRule= ruleExtRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:858:2: iv_ruleExtRule= ruleExtRule EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getExtRuleRule()); 
             }
-            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule1533);
+            pushFollow(FOLLOW_ruleExtRule_in_entryRuleExtRule1665);
             iv_ruleExtRule=ruleExtRule();
 
@@ -2336,5 +2519,5 @@
                current =iv_ruleExtRule; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule1543); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleExtRule1675); if (state.failed) return current;
 
             }
@@ -2347,5 +2530,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 17, entryRuleExtRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 19, entryRuleExtRule_StartIndex); }
         }
         return current;
@@ -2355,5 +2538,5 @@
 
     // $ANTLR start "ruleExtRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:798:1: ruleExtRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:865:1: ruleExtRule returns [EObject current=null] : ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) ;
     public final EObject ruleExtRule() throws RecognitionException {
         EObject current = null;
@@ -2383,12 +2566,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 18) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:801:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )?
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
+            if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:868:28: ( ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:1: ( ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )? ( (lv_name_3_0= RULE_ID ) ) (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' ) otherlv_7= '<-' ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )* (otherlv_18= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:2: ( ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.' )?
             int alt21=2;
             int LA21_0 = input.LA(1);
@@ -2399,13 +2582,13 @@
             switch (alt21) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:802:3: ( (lv_rulenumber_0_0= RULE_INT ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:803:1: (lv_rulenumber_0_0= RULE_INT )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:803:1: (lv_rulenumber_0_0= RULE_INT )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:804:3: lv_rulenumber_0_0= RULE_INT
-                    {
-                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1586); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:3: ( (lv_rulenumber_0_0= RULE_INT ) ) ( (lv_rulevariant_1_0= RULE_ID ) )? otherlv_2= '.'
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:869:3: ( (lv_rulenumber_0_0= RULE_INT ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:870:1: (lv_rulenumber_0_0= RULE_INT )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:870:1: (lv_rulenumber_0_0= RULE_INT )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:871:3: lv_rulenumber_0_0= RULE_INT
+                    {
+                    lv_rulenumber_0_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1718); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2431,5 +2614,5 @@
                     }
 
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:820:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:887:2: ( (lv_rulevariant_1_0= RULE_ID ) )?
                     int alt20=2;
                     int LA20_0 = input.LA(1);
@@ -2440,10 +2623,10 @@
                     switch (alt20) {
                         case 1 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:821:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:888:1: (lv_rulevariant_1_0= RULE_ID )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:821:1: (lv_rulevariant_1_0= RULE_ID )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:822:3: lv_rulevariant_1_0= RULE_ID
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:888:1: (lv_rulevariant_1_0= RULE_ID )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:889:3: lv_rulevariant_1_0= RULE_ID
                             {
-                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1608); if (state.failed) return current;
+                            lv_rulevariant_1_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1740); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -2472,5 +2655,5 @@
                     }
 
-                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleExtRule1626); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,24,FOLLOW_24_in_ruleExtRule1758); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2484,11 +2667,11 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:842:3: ( (lv_name_3_0= RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:843:1: (lv_name_3_0= RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:843:1: (lv_name_3_0= RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:844:3: lv_name_3_0= RULE_ID
-            {
-            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1645); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:909:3: ( (lv_name_3_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:910:1: (lv_name_3_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:910:1: (lv_name_3_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:911:3: lv_name_3_0= RULE_ID
+            {
+            lv_name_3_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleExtRule1777); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2514,8 +2697,8 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:860:2: (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:860:4: otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')'
-            {
-            otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1663); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:927:2: (otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:927:4: otherlv_4= '(' ( (lv_ruleext_5_0= RULE_INT ) ) otherlv_6= ')'
+            {
+            otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1795); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2523,11 +2706,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:864:1: ( (lv_ruleext_5_0= RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:865:1: (lv_ruleext_5_0= RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:865:1: (lv_ruleext_5_0= RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:866:3: lv_ruleext_5_0= RULE_INT
-            {
-            lv_ruleext_5_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1680); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:931:1: ( (lv_ruleext_5_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:932:1: (lv_ruleext_5_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:932:1: (lv_ruleext_5_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:933:3: lv_ruleext_5_0= RULE_INT
+            {
+            lv_ruleext_5_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleExtRule1812); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2553,5 +2736,5 @@
             }
 
-            otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1697); if (state.failed) return current;
+            otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1829); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2562,5 +2745,5 @@
             }
 
-            otherlv_7=(Token)match(input,28,FOLLOW_28_in_ruleExtRule1710); if (state.failed) return current;
+            otherlv_7=(Token)match(input,28,FOLLOW_28_in_ruleExtRule1842); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -2568,5 +2751,5 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:890:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:957:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*
             loop22:
             do {
@@ -2575,11 +2758,11 @@
                 switch (alt22) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:890:2: ( (lv_elements_8_0= ruleAtom ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:957:2: ( (lv_elements_8_0= ruleAtom ) )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:890:2: ( (lv_elements_8_0= ruleAtom ) )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:891:1: (lv_elements_8_0= ruleAtom )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:957:2: ( (lv_elements_8_0= ruleAtom ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:958:1: (lv_elements_8_0= ruleAtom )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:891:1: (lv_elements_8_0= ruleAtom )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:892:3: lv_elements_8_0= ruleAtom
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:958:1: (lv_elements_8_0= ruleAtom )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:959:3: lv_elements_8_0= ruleAtom
             	    {
             	    if ( state.backtracking==0 ) {
@@ -2588,5 +2771,5 @@
             	      	    
             	    }
-            	    pushFollow(FOLLOW_ruleAtom_in_ruleExtRule1732);
+            	    pushFollow(FOLLOW_ruleAtom_in_ruleExtRule1864);
             	    lv_elements_8_0=ruleAtom();
 
@@ -2616,7 +2799,7 @@
             	    break;
             	case 2 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:909:7: otherlv_9= ')'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:976:7: otherlv_9= ')'
             	    {
-            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1750); if (state.failed) return current;
+            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleExtRule1882); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2628,7 +2811,7 @@
             	    break;
             	case 3 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:914:7: otherlv_10= ']'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:981:7: otherlv_10= ']'
             	    {
-            	    otherlv_10=(Token)match(input,29,FOLLOW_29_in_ruleExtRule1768); if (state.failed) return current;
+            	    otherlv_10=(Token)match(input,29,FOLLOW_29_in_ruleExtRule1900); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2640,7 +2823,7 @@
             	    break;
             	case 4 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:919:7: otherlv_11= '}'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:986:7: otherlv_11= '}'
             	    {
-            	    otherlv_11=(Token)match(input,30,FOLLOW_30_in_ruleExtRule1786); if (state.failed) return current;
+            	    otherlv_11=(Token)match(input,30,FOLLOW_30_in_ruleExtRule1918); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2652,7 +2835,7 @@
             	    break;
             	case 5 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:924:7: otherlv_12= '|'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:991:7: otherlv_12= '|'
             	    {
-            	    otherlv_12=(Token)match(input,31,FOLLOW_31_in_ruleExtRule1804); if (state.failed) return current;
+            	    otherlv_12=(Token)match(input,31,FOLLOW_31_in_ruleExtRule1936); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2664,7 +2847,7 @@
             	    break;
             	case 6 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:929:7: otherlv_13= '('
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:996:7: otherlv_13= '('
             	    {
-            	    otherlv_13=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1822); if (state.failed) return current;
+            	    otherlv_13=(Token)match(input,26,FOLLOW_26_in_ruleExtRule1954); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2676,7 +2859,7 @@
             	    break;
             	case 7 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:934:7: otherlv_14= '['
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1001:7: otherlv_14= '['
             	    {
-            	    otherlv_14=(Token)match(input,32,FOLLOW_32_in_ruleExtRule1840); if (state.failed) return current;
+            	    otherlv_14=(Token)match(input,32,FOLLOW_32_in_ruleExtRule1972); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2688,7 +2871,7 @@
             	    break;
             	case 8 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:939:7: otherlv_15= '{'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1006:7: otherlv_15= '{'
             	    {
-            	    otherlv_15=(Token)match(input,33,FOLLOW_33_in_ruleExtRule1858); if (state.failed) return current;
+            	    otherlv_15=(Token)match(input,33,FOLLOW_33_in_ruleExtRule1990); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2700,7 +2883,7 @@
             	    break;
             	case 9 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:944:7: otherlv_16= '*'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1011:7: otherlv_16= '*'
             	    {
-            	    otherlv_16=(Token)match(input,34,FOLLOW_34_in_ruleExtRule1876); if (state.failed) return current;
+            	    otherlv_16=(Token)match(input,34,FOLLOW_34_in_ruleExtRule2008); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2712,7 +2895,7 @@
             	    break;
             	case 10 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:949:7: otherlv_17= '+'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1016:7: otherlv_17= '+'
             	    {
-            	    otherlv_17=(Token)match(input,35,FOLLOW_35_in_ruleExtRule1894); if (state.failed) return current;
+            	    otherlv_17=(Token)match(input,35,FOLLOW_35_in_ruleExtRule2026); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -2729,5 +2912,5 @@
             } while (true);
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:953:3: (otherlv_18= ';' )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1020:3: (otherlv_18= ';' )?
             int alt23=2;
             int LA23_0 = input.LA(1);
@@ -2738,7 +2921,7 @@
             switch (alt23) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:953:5: otherlv_18= ';'
-                    {
-                    otherlv_18=(Token)match(input,15,FOLLOW_15_in_ruleExtRule1909); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1020:5: otherlv_18= ';'
+                    {
+                    otherlv_18=(Token)match(input,15,FOLLOW_15_in_ruleExtRule2041); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -2768,5 +2951,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 18, ruleExtRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 20, ruleExtRule_StartIndex); }
         }
         return current;
@@ -2776,5 +2959,5 @@
 
     // $ANTLR start "entryRuleMergeRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:965:1: entryRuleMergeRule returns [EObject current=null] : iv_ruleMergeRule= ruleMergeRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1032:1: entryRuleMergeRule returns [EObject current=null] : iv_ruleMergeRule= ruleMergeRule EOF ;
     public final EObject entryRuleMergeRule() throws RecognitionException {
         EObject current = null;
@@ -2784,12 +2967,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 19) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:966:2: (iv_ruleMergeRule= ruleMergeRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:967:2: iv_ruleMergeRule= ruleMergeRule EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1033:2: (iv_ruleMergeRule= ruleMergeRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1034:2: iv_ruleMergeRule= ruleMergeRule EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getMergeRuleRule()); 
             }
-            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule1947);
+            pushFollow(FOLLOW_ruleMergeRule_in_entryRuleMergeRule2079);
             iv_ruleMergeRule=ruleMergeRule();
 
@@ -2799,5 +2982,5 @@
                current =iv_ruleMergeRule; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule1957); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleMergeRule2089); if (state.failed) return current;
 
             }
@@ -2810,5 +2993,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 19, entryRuleMergeRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 21, entryRuleMergeRule_StartIndex); }
         }
         return current;
@@ -2818,5 +3001,5 @@
 
     // $ANTLR start "ruleMergeRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:974:1: ruleMergeRule returns [EObject current=null] : (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1041:1: ruleMergeRule returns [EObject current=null] : (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) ;
     public final EObject ruleMergeRule() throws RecognitionException {
         EObject current = null;
@@ -2832,9 +3015,9 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 20) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:977:28: ( (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:978:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:978:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
+            if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1044:28: ( (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1045:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1045:1: (this_GlobalCombinator_0= ruleGlobalCombinator | this_RuleCombinator_1= ruleRuleCombinator | this_HookCombinator_2= ruleHookCombinator )
             int alt24=3;
             switch ( input.LA(1) ) {
@@ -2864,5 +3047,5 @@
             switch (alt24) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:979:2: this_GlobalCombinator_0= ruleGlobalCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1046:2: this_GlobalCombinator_0= ruleGlobalCombinator
                     {
                     if ( state.backtracking==0 ) {
@@ -2876,5 +3059,5 @@
                           
                     }
-                    pushFollow(FOLLOW_ruleGlobalCombinator_in_ruleMergeRule2007);
+                    pushFollow(FOLLOW_ruleGlobalCombinator_in_ruleMergeRule2139);
                     this_GlobalCombinator_0=ruleGlobalCombinator();
 
@@ -2891,5 +3074,5 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:992:2: this_RuleCombinator_1= ruleRuleCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1059:2: this_RuleCombinator_1= ruleRuleCombinator
                     {
                     if ( state.backtracking==0 ) {
@@ -2903,5 +3086,5 @@
                           
                     }
-                    pushFollow(FOLLOW_ruleRuleCombinator_in_ruleMergeRule2037);
+                    pushFollow(FOLLOW_ruleRuleCombinator_in_ruleMergeRule2169);
                     this_RuleCombinator_1=ruleRuleCombinator();
 
@@ -2918,5 +3101,5 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1005:2: this_HookCombinator_2= ruleHookCombinator
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1072:2: this_HookCombinator_2= ruleHookCombinator
                     {
                     if ( state.backtracking==0 ) {
@@ -2930,5 +3113,5 @@
                           
                     }
-                    pushFollow(FOLLOW_ruleHookCombinator_in_ruleMergeRule2067);
+                    pushFollow(FOLLOW_ruleHookCombinator_in_ruleMergeRule2199);
                     this_HookCombinator_2=ruleHookCombinator();
 
@@ -2960,5 +3143,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 20, ruleMergeRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 22, ruleMergeRule_StartIndex); }
         }
         return current;
@@ -2968,5 +3151,5 @@
 
     // $ANTLR start "entryRuleGlobalCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1024:1: entryRuleGlobalCombinator returns [EObject current=null] : iv_ruleGlobalCombinator= ruleGlobalCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1091:1: entryRuleGlobalCombinator returns [EObject current=null] : iv_ruleGlobalCombinator= ruleGlobalCombinator EOF ;
     public final EObject entryRuleGlobalCombinator() throws RecognitionException {
         EObject current = null;
@@ -2976,12 +3159,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 21) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1025:2: (iv_ruleGlobalCombinator= ruleGlobalCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1026:2: iv_ruleGlobalCombinator= ruleGlobalCombinator EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1092:2: (iv_ruleGlobalCombinator= ruleGlobalCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1093:2: iv_ruleGlobalCombinator= ruleGlobalCombinator EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getGlobalCombinatorRule()); 
             }
-            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2102);
+            pushFollow(FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2234);
             iv_ruleGlobalCombinator=ruleGlobalCombinator();
 
@@ -2991,5 +3174,5 @@
                current =iv_ruleGlobalCombinator; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator2112); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGlobalCombinator2244); if (state.failed) return current;
 
             }
@@ -3002,5 +3185,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 21, entryRuleGlobalCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 23, entryRuleGlobalCombinator_StartIndex); }
         }
         return current;
@@ -3010,5 +3193,5 @@
 
     // $ANTLR start "ruleGlobalCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1033:1: ruleGlobalCombinator returns [EObject current=null] : ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1100:1: ruleGlobalCombinator returns [EObject current=null] : ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) ;
     public final EObject ruleGlobalCombinator() throws RecognitionException {
         EObject current = null;
@@ -3022,15 +3205,15 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 22) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1036:28: ( ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1037:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1037:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1037:2: (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )?
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1037:2: (otherlv_0= 'global' otherlv_1= 'combinator:' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1037:4: otherlv_0= 'global' otherlv_1= 'combinator:'
-            {
-            otherlv_0=(Token)match(input,36,FOLLOW_36_in_ruleGlobalCombinator2150); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1103:28: ( ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1104:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1104:1: ( (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1104:2: (otherlv_0= 'global' otherlv_1= 'combinator:' ) ( (lv_logic_2_0= RULE_LOGIC ) ) (otherlv_3= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1104:2: (otherlv_0= 'global' otherlv_1= 'combinator:' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1104:4: otherlv_0= 'global' otherlv_1= 'combinator:'
+            {
+            otherlv_0=(Token)match(input,36,FOLLOW_36_in_ruleGlobalCombinator2282); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3038,5 +3221,5 @@
                   
             }
-            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleGlobalCombinator2162); if (state.failed) return current;
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleGlobalCombinator2294); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3047,11 +3230,11 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1045:2: ( (lv_logic_2_0= RULE_LOGIC ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1046:1: (lv_logic_2_0= RULE_LOGIC )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1046:1: (lv_logic_2_0= RULE_LOGIC )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1047:3: lv_logic_2_0= RULE_LOGIC
-            {
-            lv_logic_2_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2180); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1112:2: ( (lv_logic_2_0= RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1113:1: (lv_logic_2_0= RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1113:1: (lv_logic_2_0= RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1114:3: lv_logic_2_0= RULE_LOGIC
+            {
+            lv_logic_2_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2312); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3077,5 +3260,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1063:2: (otherlv_3= ';' )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1130:2: (otherlv_3= ';' )?
             int alt25=2;
             int LA25_0 = input.LA(1);
@@ -3086,7 +3269,7 @@
             switch (alt25) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1063:4: otherlv_3= ';'
-                    {
-                    otherlv_3=(Token)match(input,15,FOLLOW_15_in_ruleGlobalCombinator2198); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1130:4: otherlv_3= ';'
+                    {
+                    otherlv_3=(Token)match(input,15,FOLLOW_15_in_ruleGlobalCombinator2330); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -3116,5 +3299,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 22, ruleGlobalCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 24, ruleGlobalCombinator_StartIndex); }
         }
         return current;
@@ -3124,5 +3307,5 @@
 
     // $ANTLR start "entryRuleRuleCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1075:1: entryRuleRuleCombinator returns [EObject current=null] : iv_ruleRuleCombinator= ruleRuleCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1142:1: entryRuleRuleCombinator returns [EObject current=null] : iv_ruleRuleCombinator= ruleRuleCombinator EOF ;
     public final EObject entryRuleRuleCombinator() throws RecognitionException {
         EObject current = null;
@@ -3132,12 +3315,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 23) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1076:2: (iv_ruleRuleCombinator= ruleRuleCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1077:2: iv_ruleRuleCombinator= ruleRuleCombinator EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1143:2: (iv_ruleRuleCombinator= ruleRuleCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1144:2: iv_ruleRuleCombinator= ruleRuleCombinator EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRuleCombinatorRule()); 
             }
-            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2236);
+            pushFollow(FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2368);
             iv_ruleRuleCombinator=ruleRuleCombinator();
 
@@ -3147,5 +3330,5 @@
                current =iv_ruleRuleCombinator; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator2246); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleCombinator2378); if (state.failed) return current;
 
             }
@@ -3158,5 +3341,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 23, entryRuleRuleCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 25, entryRuleRuleCombinator_StartIndex); }
         }
         return current;
@@ -3166,5 +3349,5 @@
 
     // $ANTLR start "ruleRuleCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1084:1: ruleRuleCombinator returns [EObject current=null] : ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1151:1: ruleRuleCombinator returns [EObject current=null] : ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) ;
     public final EObject ruleRuleCombinator() throws RecognitionException {
         EObject current = null;
@@ -3182,15 +3365,15 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 24) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1087:28: ( ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1088:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1088:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1088:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )?
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1088:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1088:4: otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) )
-            {
-            otherlv_0=(Token)match(input,38,FOLLOW_38_in_ruleRuleCombinator2284); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1154:28: ( ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1155:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1155:1: ( (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1155:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) ) ( (lv_logic_3_0= RULE_LOGIC ) ) (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )* (otherlv_7= ';' )?
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1155:2: (otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1155:4: otherlv_0= 'rule' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) )
+            {
+            otherlv_0=(Token)match(input,38,FOLLOW_38_in_ruleRuleCombinator2416); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3198,5 +3381,5 @@
                   
             }
-            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleRuleCombinator2296); if (state.failed) return current;
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleRuleCombinator2428); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3204,11 +3387,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1096:1: ( (lv_name_2_0= RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1097:1: (lv_name_2_0= RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1097:1: (lv_name_2_0= RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1098:3: lv_name_2_0= RULE_ID
-            {
-            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleCombinator2313); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1163:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1164:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1164:1: (lv_name_2_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1165:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleCombinator2445); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3237,11 +3420,11 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1114:3: ( (lv_logic_3_0= RULE_LOGIC ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1115:1: (lv_logic_3_0= RULE_LOGIC )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1115:1: (lv_logic_3_0= RULE_LOGIC )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1116:3: lv_logic_3_0= RULE_LOGIC
-            {
-            lv_logic_3_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2336); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1181:3: ( (lv_logic_3_0= RULE_LOGIC ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1182:1: (lv_logic_3_0= RULE_LOGIC )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1182:1: (lv_logic_3_0= RULE_LOGIC )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1183:3: lv_logic_3_0= RULE_LOGIC
+            {
+            lv_logic_3_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2468); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3267,5 +3450,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1132:2: (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )*
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1199:2: (otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')' )*
             loop26:
             do {
@@ -3280,7 +3463,7 @@
                 switch (alt26) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1132:4: otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1199:4: otherlv_4= '(' ( (lv_LABEL_5_0= RULE_STRING ) ) otherlv_6= ')'
             	    {
-            	    otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleRuleCombinator2354); if (state.failed) return current;
+            	    otherlv_4=(Token)match(input,26,FOLLOW_26_in_ruleRuleCombinator2486); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3288,11 +3471,11 @@
             	          
             	    }
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1136:1: ( (lv_LABEL_5_0= RULE_STRING ) )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1137:1: (lv_LABEL_5_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1203:1: ( (lv_LABEL_5_0= RULE_STRING ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1204:1: (lv_LABEL_5_0= RULE_STRING )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1137:1: (lv_LABEL_5_0= RULE_STRING )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1138:3: lv_LABEL_5_0= RULE_STRING
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1204:1: (lv_LABEL_5_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1205:3: lv_LABEL_5_0= RULE_STRING
             	    {
-            	    lv_LABEL_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleRuleCombinator2371); if (state.failed) return current;
+            	    lv_LABEL_5_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleRuleCombinator2503); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3318,5 +3501,5 @@
             	    }
 
-            	    otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleRuleCombinator2388); if (state.failed) return current;
+            	    otherlv_6=(Token)match(input,27,FOLLOW_27_in_ruleRuleCombinator2520); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3333,5 +3516,5 @@
             } while (true);
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1158:3: (otherlv_7= ';' )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1225:3: (otherlv_7= ';' )?
             int alt27=2;
             int LA27_0 = input.LA(1);
@@ -3342,7 +3525,7 @@
             switch (alt27) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1158:5: otherlv_7= ';'
-                    {
-                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleRuleCombinator2403); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1225:5: otherlv_7= ';'
+                    {
+                    otherlv_7=(Token)match(input,15,FOLLOW_15_in_ruleRuleCombinator2535); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -3372,5 +3555,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 24, ruleRuleCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 26, ruleRuleCombinator_StartIndex); }
         }
         return current;
@@ -3380,5 +3563,5 @@
 
     // $ANTLR start "entryRuleHookCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1170:1: entryRuleHookCombinator returns [EObject current=null] : iv_ruleHookCombinator= ruleHookCombinator EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1237:1: entryRuleHookCombinator returns [EObject current=null] : iv_ruleHookCombinator= ruleHookCombinator EOF ;
     public final EObject entryRuleHookCombinator() throws RecognitionException {
         EObject current = null;
@@ -3388,12 +3571,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 25) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1171:2: (iv_ruleHookCombinator= ruleHookCombinator EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1172:2: iv_ruleHookCombinator= ruleHookCombinator EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1238:2: (iv_ruleHookCombinator= ruleHookCombinator EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1239:2: iv_ruleHookCombinator= ruleHookCombinator EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getHookCombinatorRule()); 
             }
-            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2441);
+            pushFollow(FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2573);
             iv_ruleHookCombinator=ruleHookCombinator();
 
@@ -3403,5 +3586,5 @@
                current =iv_ruleHookCombinator; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator2451); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleHookCombinator2583); if (state.failed) return current;
 
             }
@@ -3414,5 +3597,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 25, entryRuleHookCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 27, entryRuleHookCombinator_StartIndex); }
         }
         return current;
@@ -3422,5 +3605,5 @@
 
     // $ANTLR start "ruleHookCombinator"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1179:1: ruleHookCombinator returns [EObject current=null] : (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1246:1: ruleHookCombinator returns [EObject current=null] : (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) ;
     public final EObject ruleHookCombinator() throws RecognitionException {
         EObject current = null;
@@ -3441,12 +3624,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 26) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1182:28: ( (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1183:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1183:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1183:3: otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )?
-            {
-            otherlv_0=(Token)match(input,39,FOLLOW_39_in_ruleHookCombinator2488); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1249:28: ( (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1250:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1250:1: (otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1250:3: otherlv_0= 'hook' otherlv_1= 'combinator:' ( (lv_name_2_0= RULE_ID ) ) otherlv_3= '(' ( (lv_ruleext_4_0= RULE_INT ) ) otherlv_5= ')' ( (lv_logic_6_0= RULE_LOGIC ) )? (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+ (otherlv_10= ';' )?
+            {
+            otherlv_0=(Token)match(input,39,FOLLOW_39_in_ruleHookCombinator2620); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3454,5 +3637,5 @@
                   
             }
-            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleHookCombinator2500); if (state.failed) return current;
+            otherlv_1=(Token)match(input,37,FOLLOW_37_in_ruleHookCombinator2632); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3460,11 +3643,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1191:1: ( (lv_name_2_0= RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1192:1: (lv_name_2_0= RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1192:1: (lv_name_2_0= RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1193:3: lv_name_2_0= RULE_ID
-            {
-            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleHookCombinator2517); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1258:1: ( (lv_name_2_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1259:1: (lv_name_2_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1259:1: (lv_name_2_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1260:3: lv_name_2_0= RULE_ID
+            {
+            lv_name_2_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleHookCombinator2649); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3490,5 +3673,5 @@
             }
 
-            otherlv_3=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2534); if (state.failed) return current;
+            otherlv_3=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2666); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3496,11 +3679,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1213:1: ( (lv_ruleext_4_0= RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1214:1: (lv_ruleext_4_0= RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1214:1: (lv_ruleext_4_0= RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1215:3: lv_ruleext_4_0= RULE_INT
-            {
-            lv_ruleext_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleHookCombinator2551); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1280:1: ( (lv_ruleext_4_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1281:1: (lv_ruleext_4_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1281:1: (lv_ruleext_4_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1282:3: lv_ruleext_4_0= RULE_INT
+            {
+            lv_ruleext_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleHookCombinator2683); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3526,5 +3709,5 @@
             }
 
-            otherlv_5=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2568); if (state.failed) return current;
+            otherlv_5=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2700); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -3532,5 +3715,5 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1235:1: ( (lv_logic_6_0= RULE_LOGIC ) )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1302:1: ( (lv_logic_6_0= RULE_LOGIC ) )?
             int alt28=2;
             int LA28_0 = input.LA(1);
@@ -3541,10 +3724,10 @@
             switch (alt28) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1236:1: (lv_logic_6_0= RULE_LOGIC )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1236:1: (lv_logic_6_0= RULE_LOGIC )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1237:3: lv_logic_6_0= RULE_LOGIC
-                    {
-                    lv_logic_6_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleHookCombinator2585); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1303:1: (lv_logic_6_0= RULE_LOGIC )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1303:1: (lv_logic_6_0= RULE_LOGIC )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1304:3: lv_logic_6_0= RULE_LOGIC
+                    {
+                    lv_logic_6_0=(Token)match(input,RULE_LOGIC,FOLLOW_RULE_LOGIC_in_ruleHookCombinator2717); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -3573,5 +3756,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1253:3: (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1320:3: (otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')' )+
             int cnt29=0;
             loop29:
@@ -3587,7 +3770,7 @@
                 switch (alt29) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1253:5: otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')'
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1320:5: otherlv_7= '(' ( (lv_LABEL_8_0= RULE_STRING ) ) otherlv_9= ')'
             	    {
-            	    otherlv_7=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2604); if (state.failed) return current;
+            	    otherlv_7=(Token)match(input,26,FOLLOW_26_in_ruleHookCombinator2736); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3595,11 +3778,11 @@
             	          
             	    }
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1257:1: ( (lv_LABEL_8_0= RULE_STRING ) )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1258:1: (lv_LABEL_8_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1324:1: ( (lv_LABEL_8_0= RULE_STRING ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1325:1: (lv_LABEL_8_0= RULE_STRING )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1258:1: (lv_LABEL_8_0= RULE_STRING )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1259:3: lv_LABEL_8_0= RULE_STRING
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1325:1: (lv_LABEL_8_0= RULE_STRING )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1326:3: lv_LABEL_8_0= RULE_STRING
             	    {
-            	    lv_LABEL_8_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleHookCombinator2621); if (state.failed) return current;
+            	    lv_LABEL_8_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleHookCombinator2753); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3625,5 +3808,5 @@
             	    }
 
-            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2638); if (state.failed) return current;
+            	    otherlv_9=(Token)match(input,27,FOLLOW_27_in_ruleHookCombinator2770); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3645,5 +3828,5 @@
             } while (true);
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1279:3: (otherlv_10= ';' )?
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1346:3: (otherlv_10= ';' )?
             int alt30=2;
             int LA30_0 = input.LA(1);
@@ -3654,7 +3837,7 @@
             switch (alt30) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1279:5: otherlv_10= ';'
-                    {
-                    otherlv_10=(Token)match(input,15,FOLLOW_15_in_ruleHookCombinator2653); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1346:5: otherlv_10= ';'
+                    {
+                    otherlv_10=(Token)match(input,15,FOLLOW_15_in_ruleHookCombinator2785); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -3684,5 +3867,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 26, ruleHookCombinator_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 28, ruleHookCombinator_StartIndex); }
         }
         return current;
@@ -3692,5 +3875,5 @@
 
     // $ANTLR start "entryRuleDefinitionList"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1291:1: entryRuleDefinitionList returns [EObject current=null] : iv_ruleDefinitionList= ruleDefinitionList EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1358:1: entryRuleDefinitionList returns [EObject current=null] : iv_ruleDefinitionList= ruleDefinitionList EOF ;
     public final EObject entryRuleDefinitionList() throws RecognitionException {
         EObject current = null;
@@ -3700,12 +3883,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 27) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1292:2: (iv_ruleDefinitionList= ruleDefinitionList EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1293:2: iv_ruleDefinitionList= ruleDefinitionList EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1359:2: (iv_ruleDefinitionList= ruleDefinitionList EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1360:2: iv_ruleDefinitionList= ruleDefinitionList EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getDefinitionListRule()); 
             }
-            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2691);
+            pushFollow(FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2823);
             iv_ruleDefinitionList=ruleDefinitionList();
 
@@ -3715,5 +3898,5 @@
                current =iv_ruleDefinitionList; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList2701); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleDefinitionList2833); if (state.failed) return current;
 
             }
@@ -3726,5 +3909,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 27, entryRuleDefinitionList_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 29, entryRuleDefinitionList_StartIndex); }
         }
         return current;
@@ -3734,5 +3917,5 @@
 
     // $ANTLR start "ruleDefinitionList"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1300:1: ruleDefinitionList returns [EObject current=null] : ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1367:1: ruleDefinitionList returns [EObject current=null] : ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) ;
     public final EObject ruleDefinitionList() throws RecognitionException {
         EObject current = null;
@@ -3747,16 +3930,16 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 28) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1303:28: ( ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1304:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1304:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1304:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1304:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1305:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1305:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1306:3: lv_singleDefinition_0_0= ruleSingleDefinition
+            if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1370:28: ( ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1371:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1371:1: ( ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )* )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1371:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) ) (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1371:2: ( (lv_singleDefinition_0_0= ruleSingleDefinition ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1372:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1372:1: (lv_singleDefinition_0_0= ruleSingleDefinition )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1373:3: lv_singleDefinition_0_0= ruleSingleDefinition
             {
             if ( state.backtracking==0 ) {
@@ -3765,5 +3948,5 @@
               	    
             }
-            pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2747);
+            pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2879);
             lv_singleDefinition_0_0=ruleSingleDefinition();
 
@@ -3789,5 +3972,5 @@
             }
 
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1322:2: (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1389:2: (otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) ) )*
             loop31:
             do {
@@ -3802,7 +3985,7 @@
                 switch (alt31) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1322:4: otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1389:4: otherlv_1= '|' ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
             	    {
-            	    otherlv_1=(Token)match(input,31,FOLLOW_31_in_ruleDefinitionList2760); if (state.failed) return current;
+            	    otherlv_1=(Token)match(input,31,FOLLOW_31_in_ruleDefinitionList2892); if (state.failed) return current;
             	    if ( state.backtracking==0 ) {
 
@@ -3810,9 +3993,9 @@
             	          
             	    }
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1326:1: ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1327:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1393:1: ( (lv_singleDefinition_2_0= ruleSingleDefinition ) )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1394:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1327:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1328:3: lv_singleDefinition_2_0= ruleSingleDefinition
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1394:1: (lv_singleDefinition_2_0= ruleSingleDefinition )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1395:3: lv_singleDefinition_2_0= ruleSingleDefinition
             	    {
             	    if ( state.backtracking==0 ) {
@@ -3821,5 +4004,5 @@
             	      	    
             	    }
-            	    pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2781);
+            	    pushFollow(FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2913);
             	    lv_singleDefinition_2_0=ruleSingleDefinition();
 
@@ -3870,5 +4053,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 28, ruleDefinitionList_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 30, ruleDefinitionList_StartIndex); }
         }
         return current;
@@ -3878,5 +4061,5 @@
 
     // $ANTLR start "entryRuleSingleDefinition"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1352:1: entryRuleSingleDefinition returns [EObject current=null] : iv_ruleSingleDefinition= ruleSingleDefinition EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1419:1: entryRuleSingleDefinition returns [EObject current=null] : iv_ruleSingleDefinition= ruleSingleDefinition EOF ;
     public final EObject entryRuleSingleDefinition() throws RecognitionException {
         EObject current = null;
@@ -3886,12 +4069,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 29) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1353:2: (iv_ruleSingleDefinition= ruleSingleDefinition EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1354:2: iv_ruleSingleDefinition= ruleSingleDefinition EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1420:2: (iv_ruleSingleDefinition= ruleSingleDefinition EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1421:2: iv_ruleSingleDefinition= ruleSingleDefinition EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSingleDefinitionRule()); 
             }
-            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2819);
+            pushFollow(FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2951);
             iv_ruleSingleDefinition=ruleSingleDefinition();
 
@@ -3901,5 +4084,5 @@
                current =iv_ruleSingleDefinition; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition2829); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleSingleDefinition2961); if (state.failed) return current;
 
             }
@@ -3912,5 +4095,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 29, entryRuleSingleDefinition_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 31, entryRuleSingleDefinition_StartIndex); }
         }
         return current;
@@ -3920,5 +4103,5 @@
 
     // $ANTLR start "ruleSingleDefinition"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1361:1: ruleSingleDefinition returns [EObject current=null] : ( (lv_terms_0_0= ruleTerm ) )+ ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1428:1: ruleSingleDefinition returns [EObject current=null] : ( (lv_terms_0_0= ruleTerm ) )+ ;
     public final EObject ruleSingleDefinition() throws RecognitionException {
         EObject current = null;
@@ -3930,9 +4113,9 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 30) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1364:28: ( ( (lv_terms_0_0= ruleTerm ) )+ )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1365:1: ( (lv_terms_0_0= ruleTerm ) )+
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1365:1: ( (lv_terms_0_0= ruleTerm ) )+
+            if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1431:28: ( ( (lv_terms_0_0= ruleTerm ) )+ )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1432:1: ( (lv_terms_0_0= ruleTerm ) )+
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1432:1: ( (lv_terms_0_0= ruleTerm ) )+
             int cnt32=0;
             loop32:
@@ -3966,8 +4149,8 @@
                 switch (alt32) {
             	case 1 :
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1366:1: (lv_terms_0_0= ruleTerm )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1433:1: (lv_terms_0_0= ruleTerm )
             	    {
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1366:1: (lv_terms_0_0= ruleTerm )
-            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1367:3: lv_terms_0_0= ruleTerm
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1433:1: (lv_terms_0_0= ruleTerm )
+            	    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1434:3: lv_terms_0_0= ruleTerm
             	    {
             	    if ( state.backtracking==0 ) {
@@ -3976,5 +4159,5 @@
             	      	    
             	    }
-            	    pushFollow(FOLLOW_ruleTerm_in_ruleSingleDefinition2874);
+            	    pushFollow(FOLLOW_ruleTerm_in_ruleSingleDefinition3006);
             	    lv_terms_0_0=ruleTerm();
 
@@ -4024,5 +4207,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 30, ruleSingleDefinition_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 32, ruleSingleDefinition_StartIndex); }
         }
         return current;
@@ -4032,5 +4215,5 @@
 
     // $ANTLR start "entryRuleTerm"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1391:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1458:1: entryRuleTerm returns [EObject current=null] : iv_ruleTerm= ruleTerm EOF ;
     public final EObject entryRuleTerm() throws RecognitionException {
         EObject current = null;
@@ -4040,12 +4223,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 31) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1392:2: (iv_ruleTerm= ruleTerm EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1393:2: iv_ruleTerm= ruleTerm EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1459:2: (iv_ruleTerm= ruleTerm EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1460:2: iv_ruleTerm= ruleTerm EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getTermRule()); 
             }
-            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm2910);
+            pushFollow(FOLLOW_ruleTerm_in_entryRuleTerm3042);
             iv_ruleTerm=ruleTerm();
 
@@ -4055,5 +4238,5 @@
                current =iv_ruleTerm; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm2920); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleTerm3052); if (state.failed) return current;
 
             }
@@ -4066,5 +4249,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 31, entryRuleTerm_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 33, entryRuleTerm_StartIndex); }
         }
         return current;
@@ -4074,5 +4257,5 @@
 
     // $ANTLR start "ruleTerm"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1400:1: ruleTerm returns [EObject current=null] : ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1467:1: ruleTerm returns [EObject current=null] : ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) ;
     public final EObject ruleTerm() throws RecognitionException {
         EObject current = null;
@@ -4090,9 +4273,9 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 32) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1403:28: ( ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
+            if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1470:28: ( ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1471:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1471:1: ( ( (lv_termAtom_0_0= ruleAtom ) ) | ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) ) | ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) ) | ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) ) )
             int alt33=4;
             switch ( input.LA(1) ) {
@@ -4129,11 +4312,11 @@
             switch (alt33) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:2: ( (lv_termAtom_0_0= ruleAtom ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1404:2: ( (lv_termAtom_0_0= ruleAtom ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1405:1: (lv_termAtom_0_0= ruleAtom )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1405:1: (lv_termAtom_0_0= ruleAtom )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1406:3: lv_termAtom_0_0= ruleAtom
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1471:2: ( (lv_termAtom_0_0= ruleAtom ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1471:2: ( (lv_termAtom_0_0= ruleAtom ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1472:1: (lv_termAtom_0_0= ruleAtom )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1472:1: (lv_termAtom_0_0= ruleAtom )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1473:3: lv_termAtom_0_0= ruleAtom
                     {
                     if ( state.backtracking==0 ) {
@@ -4142,5 +4325,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleAtom_in_ruleTerm2966);
+                    pushFollow(FOLLOW_ruleAtom_in_ruleTerm3098);
                     lv_termAtom_0_0=ruleAtom();
 
@@ -4170,11 +4353,11 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1423:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1423:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1424:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1424:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1425:3: lv_termGroupedSequence_1_0= ruleGroupedSequence
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1490:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1490:6: ( (lv_termGroupedSequence_1_0= ruleGroupedSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1491:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1491:1: (lv_termGroupedSequence_1_0= ruleGroupedSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1492:3: lv_termGroupedSequence_1_0= ruleGroupedSequence
                     {
                     if ( state.backtracking==0 ) {
@@ -4183,5 +4366,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleGroupedSequence_in_ruleTerm2993);
+                    pushFollow(FOLLOW_ruleGroupedSequence_in_ruleTerm3125);
                     lv_termGroupedSequence_1_0=ruleGroupedSequence();
 
@@ -4211,11 +4394,11 @@
                     break;
                 case 3 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1442:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1442:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1443:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1443:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1444:3: lv_termOptionalSequence_2_0= ruleOptionalSequence
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1509:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1509:6: ( (lv_termOptionalSequence_2_0= ruleOptionalSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1510:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1510:1: (lv_termOptionalSequence_2_0= ruleOptionalSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1511:3: lv_termOptionalSequence_2_0= ruleOptionalSequence
                     {
                     if ( state.backtracking==0 ) {
@@ -4224,5 +4407,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleOptionalSequence_in_ruleTerm3020);
+                    pushFollow(FOLLOW_ruleOptionalSequence_in_ruleTerm3152);
                     lv_termOptionalSequence_2_0=ruleOptionalSequence();
 
@@ -4252,11 +4435,11 @@
                     break;
                 case 4 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1461:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1461:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1462:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1462:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1463:3: lv_termRepeatedSequence_3_0= ruleRepeatedSequence
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1528:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1528:6: ( (lv_termRepeatedSequence_3_0= ruleRepeatedSequence ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1529:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1529:1: (lv_termRepeatedSequence_3_0= ruleRepeatedSequence )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1530:3: lv_termRepeatedSequence_3_0= ruleRepeatedSequence
                     {
                     if ( state.backtracking==0 ) {
@@ -4265,5 +4448,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleRepeatedSequence_in_ruleTerm3047);
+                    pushFollow(FOLLOW_ruleRepeatedSequence_in_ruleTerm3179);
                     lv_termRepeatedSequence_3_0=ruleRepeatedSequence();
 
@@ -4308,5 +4491,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 32, ruleTerm_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 34, ruleTerm_StartIndex); }
         }
         return current;
@@ -4316,5 +4499,5 @@
 
     // $ANTLR start "entryRuleAtom"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1487:1: entryRuleAtom returns [EObject current=null] : iv_ruleAtom= ruleAtom EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1554:1: entryRuleAtom returns [EObject current=null] : iv_ruleAtom= ruleAtom EOF ;
     public final EObject entryRuleAtom() throws RecognitionException {
         EObject current = null;
@@ -4324,12 +4507,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 33) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1488:2: (iv_ruleAtom= ruleAtom EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1489:2: iv_ruleAtom= ruleAtom EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1555:2: (iv_ruleAtom= ruleAtom EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1556:2: iv_ruleAtom= ruleAtom EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getAtomRule()); 
             }
-            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom3083);
+            pushFollow(FOLLOW_ruleAtom_in_entryRuleAtom3215);
             iv_ruleAtom=ruleAtom();
 
@@ -4339,5 +4522,5 @@
                current =iv_ruleAtom; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom3093); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleAtom3225); if (state.failed) return current;
 
             }
@@ -4350,5 +4533,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 33, entryRuleAtom_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 35, entryRuleAtom_StartIndex); }
         }
         return current;
@@ -4358,5 +4541,5 @@
 
     // $ANTLR start "ruleAtom"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1496:1: ruleAtom returns [EObject current=null] : ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1563:1: ruleAtom returns [EObject current=null] : ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) ;
     public final EObject ruleAtom() throws RecognitionException {
         EObject current = null;
@@ -4370,9 +4553,9 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 34) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1499:28: ( ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
+            if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1566:28: ( ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1567:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1567:1: ( ( (lv_atomStringRule_0_0= ruleStringRule ) ) | ( (lv_atomRuleReference_1_0= ruleRuleReference ) ) )
             int alt34=2;
             int LA34_0 = input.LA(1);
@@ -4393,11 +4576,11 @@
             switch (alt34) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1500:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1501:1: (lv_atomStringRule_0_0= ruleStringRule )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1501:1: (lv_atomStringRule_0_0= ruleStringRule )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1502:3: lv_atomStringRule_0_0= ruleStringRule
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1567:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1567:2: ( (lv_atomStringRule_0_0= ruleStringRule ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1568:1: (lv_atomStringRule_0_0= ruleStringRule )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1568:1: (lv_atomStringRule_0_0= ruleStringRule )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1569:3: lv_atomStringRule_0_0= ruleStringRule
                     {
                     if ( state.backtracking==0 ) {
@@ -4406,5 +4589,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleStringRule_in_ruleAtom3139);
+                    pushFollow(FOLLOW_ruleStringRule_in_ruleAtom3271);
                     lv_atomStringRule_0_0=ruleStringRule();
 
@@ -4434,11 +4617,11 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1519:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1519:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1520:1: (lv_atomRuleReference_1_0= ruleRuleReference )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1520:1: (lv_atomRuleReference_1_0= ruleRuleReference )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1521:3: lv_atomRuleReference_1_0= ruleRuleReference
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1586:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1586:6: ( (lv_atomRuleReference_1_0= ruleRuleReference ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1587:1: (lv_atomRuleReference_1_0= ruleRuleReference )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1587:1: (lv_atomRuleReference_1_0= ruleRuleReference )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1588:3: lv_atomRuleReference_1_0= ruleRuleReference
                     {
                     if ( state.backtracking==0 ) {
@@ -4447,5 +4630,5 @@
                       	    
                     }
-                    pushFollow(FOLLOW_ruleRuleReference_in_ruleAtom3166);
+                    pushFollow(FOLLOW_ruleRuleReference_in_ruleAtom3298);
                     lv_atomRuleReference_1_0=ruleRuleReference();
 
@@ -4490,5 +4673,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 34, ruleAtom_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 36, ruleAtom_StartIndex); }
         }
         return current;
@@ -4498,5 +4681,5 @@
 
     // $ANTLR start "entryRuleRuleReference"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1545:1: entryRuleRuleReference returns [EObject current=null] : iv_ruleRuleReference= ruleRuleReference EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1612:1: entryRuleRuleReference returns [EObject current=null] : iv_ruleRuleReference= ruleRuleReference EOF ;
     public final EObject entryRuleRuleReference() throws RecognitionException {
         EObject current = null;
@@ -4506,12 +4689,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 35) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1546:2: (iv_ruleRuleReference= ruleRuleReference EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1547:2: iv_ruleRuleReference= ruleRuleReference EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1613:2: (iv_ruleRuleReference= ruleRuleReference EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1614:2: iv_ruleRuleReference= ruleRuleReference EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRuleReferenceRule()); 
             }
-            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference3202);
+            pushFollow(FOLLOW_ruleRuleReference_in_entryRuleRuleReference3334);
             iv_ruleRuleReference=ruleRuleReference();
 
@@ -4521,5 +4704,5 @@
                current =iv_ruleRuleReference; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference3212); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRuleReference3344); if (state.failed) return current;
 
             }
@@ -4532,5 +4715,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 35, entryRuleRuleReference_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 37, entryRuleRuleReference_StartIndex); }
         }
         return current;
@@ -4540,5 +4723,5 @@
 
     // $ANTLR start "ruleRuleReference"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1554:1: ruleRuleReference returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1621:1: ruleRuleReference returns [EObject current=null] : ( (otherlv_0= RULE_ID ) ) ;
     public final EObject ruleRuleReference() throws RecognitionException {
         EObject current = null;
@@ -4549,13 +4732,13 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 36) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1557:28: ( ( (otherlv_0= RULE_ID ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1558:1: ( (otherlv_0= RULE_ID ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1558:1: ( (otherlv_0= RULE_ID ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1559:1: (otherlv_0= RULE_ID )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1559:1: (otherlv_0= RULE_ID )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1560:3: otherlv_0= RULE_ID
+            if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1624:28: ( ( (otherlv_0= RULE_ID ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1625:1: ( (otherlv_0= RULE_ID ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1625:1: ( (otherlv_0= RULE_ID ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1626:1: (otherlv_0= RULE_ID )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1626:1: (otherlv_0= RULE_ID )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1627:3: otherlv_0= RULE_ID
             {
             if ( state.backtracking==0 ) {
@@ -4571,5 +4754,5 @@
                       
             }
-            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleReference3260); if (state.failed) return current;
+            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleRuleReference3392); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -4596,5 +4779,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 36, ruleRuleReference_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 38, ruleRuleReference_StartIndex); }
         }
         return current;
@@ -4604,5 +4787,5 @@
 
     // $ANTLR start "entryRuleStringRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1582:1: entryRuleStringRule returns [EObject current=null] : iv_ruleStringRule= ruleStringRule EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1649:1: entryRuleStringRule returns [EObject current=null] : iv_ruleStringRule= ruleStringRule EOF ;
     public final EObject entryRuleStringRule() throws RecognitionException {
         EObject current = null;
@@ -4612,12 +4795,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 37) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1583:2: (iv_ruleStringRule= ruleStringRule EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1584:2: iv_ruleStringRule= ruleStringRule EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1650:2: (iv_ruleStringRule= ruleStringRule EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1651:2: iv_ruleStringRule= ruleStringRule EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStringRuleRule()); 
             }
-            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule3295);
+            pushFollow(FOLLOW_ruleStringRule_in_entryRuleStringRule3427);
             iv_ruleStringRule=ruleStringRule();
 
@@ -4627,5 +4810,5 @@
                current =iv_ruleStringRule; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule3305); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleStringRule3437); if (state.failed) return current;
 
             }
@@ -4638,5 +4821,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 37, entryRuleStringRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 39, entryRuleStringRule_StartIndex); }
         }
         return current;
@@ -4646,5 +4829,5 @@
 
     // $ANTLR start "ruleStringRule"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1591:1: ruleStringRule returns [EObject current=null] : ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1658:1: ruleStringRule returns [EObject current=null] : ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) ;
     public final EObject ruleStringRule() throws RecognitionException {
         EObject current = null;
@@ -4656,9 +4839,9 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 38) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1594:28: ( ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1595:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1595:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
+            if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1661:28: ( ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1662:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1662:1: ( ( (lv_literal_0_0= RULE_STRING ) ) | ( (lv_colon_1_0= RULE_COLON ) ) )
             int alt35=2;
             int LA35_0 = input.LA(1);
@@ -4679,13 +4862,13 @@
             switch (alt35) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1595:2: ( (lv_literal_0_0= RULE_STRING ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1595:2: ( (lv_literal_0_0= RULE_STRING ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1596:1: (lv_literal_0_0= RULE_STRING )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1596:1: (lv_literal_0_0= RULE_STRING )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1597:3: lv_literal_0_0= RULE_STRING
-                    {
-                    lv_literal_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleStringRule3347); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1662:2: ( (lv_literal_0_0= RULE_STRING ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1662:2: ( (lv_literal_0_0= RULE_STRING ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1663:1: (lv_literal_0_0= RULE_STRING )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1663:1: (lv_literal_0_0= RULE_STRING )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1664:3: lv_literal_0_0= RULE_STRING
+                    {
+                    lv_literal_0_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleStringRule3479); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -4715,13 +4898,13 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1614:6: ( (lv_colon_1_0= RULE_COLON ) )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1614:6: ( (lv_colon_1_0= RULE_COLON ) )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1615:1: (lv_colon_1_0= RULE_COLON )
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1615:1: (lv_colon_1_0= RULE_COLON )
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1616:3: lv_colon_1_0= RULE_COLON
-                    {
-                    lv_colon_1_0=(Token)match(input,RULE_COLON,FOLLOW_RULE_COLON_in_ruleStringRule3375); if (state.failed) return current;
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1681:6: ( (lv_colon_1_0= RULE_COLON ) )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1681:6: ( (lv_colon_1_0= RULE_COLON ) )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1682:1: (lv_colon_1_0= RULE_COLON )
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1682:1: (lv_colon_1_0= RULE_COLON )
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1683:3: lv_colon_1_0= RULE_COLON
+                    {
+                    lv_colon_1_0=(Token)match(input,RULE_COLON,FOLLOW_RULE_COLON_in_ruleStringRule3507); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
@@ -4766,5 +4949,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 38, ruleStringRule_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 40, ruleStringRule_StartIndex); }
         }
         return current;
@@ -4774,5 +4957,5 @@
 
     // $ANTLR start "entryRuleGroupedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1640:1: entryRuleGroupedSequence returns [EObject current=null] : iv_ruleGroupedSequence= ruleGroupedSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1707:1: entryRuleGroupedSequence returns [EObject current=null] : iv_ruleGroupedSequence= ruleGroupedSequence EOF ;
     public final EObject entryRuleGroupedSequence() throws RecognitionException {
         EObject current = null;
@@ -4782,12 +4965,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 39) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1641:2: (iv_ruleGroupedSequence= ruleGroupedSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1642:2: iv_ruleGroupedSequence= ruleGroupedSequence EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1708:2: (iv_ruleGroupedSequence= ruleGroupedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1709:2: iv_ruleGroupedSequence= ruleGroupedSequence EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getGroupedSequenceRule()); 
             }
-            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3416);
+            pushFollow(FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3548);
             iv_ruleGroupedSequence=ruleGroupedSequence();
 
@@ -4797,5 +4980,5 @@
                current =iv_ruleGroupedSequence; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence3426); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleGroupedSequence3558); if (state.failed) return current;
 
             }
@@ -4808,5 +4991,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 39, entryRuleGroupedSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 41, entryRuleGroupedSequence_StartIndex); }
         }
         return current;
@@ -4816,5 +4999,5 @@
 
     // $ANTLR start "ruleGroupedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1649:1: ruleGroupedSequence returns [EObject current=null] : (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1716:1: ruleGroupedSequence returns [EObject current=null] : (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) ;
     public final EObject ruleGroupedSequence() throws RecognitionException {
         EObject current = null;
@@ -4828,12 +5011,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 40) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1652:28: ( (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1653:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1653:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1653:3: otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')'
-            {
-            otherlv_0=(Token)match(input,26,FOLLOW_26_in_ruleGroupedSequence3463); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1719:28: ( (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1720:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1720:1: (otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1720:3: otherlv_0= '(' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ')'
+            {
+            otherlv_0=(Token)match(input,26,FOLLOW_26_in_ruleGroupedSequence3595); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -4841,9 +5024,9 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1657:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1658:1: (lv_definitionList_1_0= ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1658:1: (lv_definitionList_1_0= ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1659:3: lv_definitionList_1_0= ruleDefinitionList
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1724:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1725:1: (lv_definitionList_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1725:1: (lv_definitionList_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1726:3: lv_definitionList_1_0= ruleDefinitionList
             {
             if ( state.backtracking==0 ) {
@@ -4852,5 +5035,5 @@
               	    
             }
-            pushFollow(FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3484);
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3616);
             lv_definitionList_1_0=ruleDefinitionList();
 
@@ -4876,5 +5059,5 @@
             }
 
-            otherlv_2=(Token)match(input,27,FOLLOW_27_in_ruleGroupedSequence3496); if (state.failed) return current;
+            otherlv_2=(Token)match(input,27,FOLLOW_27_in_ruleGroupedSequence3628); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -4898,5 +5081,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 40, ruleGroupedSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 42, ruleGroupedSequence_StartIndex); }
         }
         return current;
@@ -4906,5 +5089,5 @@
 
     // $ANTLR start "entryRuleOptionalSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1687:1: entryRuleOptionalSequence returns [EObject current=null] : iv_ruleOptionalSequence= ruleOptionalSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1754:1: entryRuleOptionalSequence returns [EObject current=null] : iv_ruleOptionalSequence= ruleOptionalSequence EOF ;
     public final EObject entryRuleOptionalSequence() throws RecognitionException {
         EObject current = null;
@@ -4914,12 +5097,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 41) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1688:2: (iv_ruleOptionalSequence= ruleOptionalSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1689:2: iv_ruleOptionalSequence= ruleOptionalSequence EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1755:2: (iv_ruleOptionalSequence= ruleOptionalSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1756:2: iv_ruleOptionalSequence= ruleOptionalSequence EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getOptionalSequenceRule()); 
             }
-            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3532);
+            pushFollow(FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3664);
             iv_ruleOptionalSequence=ruleOptionalSequence();
 
@@ -4929,5 +5112,5 @@
                current =iv_ruleOptionalSequence; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence3542); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleOptionalSequence3674); if (state.failed) return current;
 
             }
@@ -4940,5 +5123,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 41, entryRuleOptionalSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 43, entryRuleOptionalSequence_StartIndex); }
         }
         return current;
@@ -4948,5 +5131,5 @@
 
     // $ANTLR start "ruleOptionalSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1696:1: ruleOptionalSequence returns [EObject current=null] : (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1763:1: ruleOptionalSequence returns [EObject current=null] : (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) ;
     public final EObject ruleOptionalSequence() throws RecognitionException {
         EObject current = null;
@@ -4960,12 +5143,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 42) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1699:28: ( (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1700:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1700:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1700:3: otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']'
-            {
-            otherlv_0=(Token)match(input,32,FOLLOW_32_in_ruleOptionalSequence3579); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1766:28: ( (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1767:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1767:1: (otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1767:3: otherlv_0= '[' ( (lv_definitionList_1_0= ruleDefinitionList ) ) otherlv_2= ']'
+            {
+            otherlv_0=(Token)match(input,32,FOLLOW_32_in_ruleOptionalSequence3711); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -4973,9 +5156,9 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1704:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1705:1: (lv_definitionList_1_0= ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1705:1: (lv_definitionList_1_0= ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1706:3: lv_definitionList_1_0= ruleDefinitionList
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1771:1: ( (lv_definitionList_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1772:1: (lv_definitionList_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1772:1: (lv_definitionList_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:3: lv_definitionList_1_0= ruleDefinitionList
             {
             if ( state.backtracking==0 ) {
@@ -4984,5 +5167,5 @@
               	    
             }
-            pushFollow(FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3600);
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3732);
             lv_definitionList_1_0=ruleDefinitionList();
 
@@ -5008,5 +5191,5 @@
             }
 
-            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleOptionalSequence3612); if (state.failed) return current;
+            otherlv_2=(Token)match(input,29,FOLLOW_29_in_ruleOptionalSequence3744); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5030,5 +5213,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 42, ruleOptionalSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 44, ruleOptionalSequence_StartIndex); }
         }
         return current;
@@ -5038,5 +5221,5 @@
 
     // $ANTLR start "entryRuleRepeatedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1734:1: entryRuleRepeatedSequence returns [EObject current=null] : iv_ruleRepeatedSequence= ruleRepeatedSequence EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1801:1: entryRuleRepeatedSequence returns [EObject current=null] : iv_ruleRepeatedSequence= ruleRepeatedSequence EOF ;
     public final EObject entryRuleRepeatedSequence() throws RecognitionException {
         EObject current = null;
@@ -5046,12 +5229,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 43) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1735:2: (iv_ruleRepeatedSequence= ruleRepeatedSequence EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1736:2: iv_ruleRepeatedSequence= ruleRepeatedSequence EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1802:2: (iv_ruleRepeatedSequence= ruleRepeatedSequence EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1803:2: iv_ruleRepeatedSequence= ruleRepeatedSequence EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRepeatedSequenceRule()); 
             }
-            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3648);
+            pushFollow(FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3780);
             iv_ruleRepeatedSequence=ruleRepeatedSequence();
 
@@ -5061,5 +5244,5 @@
                current =iv_ruleRepeatedSequence; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence3658); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatedSequence3790); if (state.failed) return current;
 
             }
@@ -5072,5 +5255,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 43, entryRuleRepeatedSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 45, entryRuleRepeatedSequence_StartIndex); }
         }
         return current;
@@ -5080,5 +5263,5 @@
 
     // $ANTLR start "ruleRepeatedSequence"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1743:1: ruleRepeatedSequence returns [EObject current=null] : (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1810:1: ruleRepeatedSequence returns [EObject current=null] : (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) ) ;
     public final EObject ruleRepeatedSequence() throws RecognitionException {
         EObject current = null;
@@ -5095,12 +5278,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 44) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1746:28: ( (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1747:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1747:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1747:3: otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )
-            {
-            otherlv_0=(Token)match(input,33,FOLLOW_33_in_ruleRepeatedSequence3695); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1813:28: ( (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1814:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1814:1: (otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1814:3: otherlv_0= '{' ( (lv_definitions_1_0= ruleDefinitionList ) ) otherlv_2= '}' ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )
+            {
+            otherlv_0=(Token)match(input,33,FOLLOW_33_in_ruleRepeatedSequence3827); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5108,9 +5291,9 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1751:1: ( (lv_definitions_1_0= ruleDefinitionList ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1752:1: (lv_definitions_1_0= ruleDefinitionList )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1752:1: (lv_definitions_1_0= ruleDefinitionList )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1753:3: lv_definitions_1_0= ruleDefinitionList
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1818:1: ( (lv_definitions_1_0= ruleDefinitionList ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1819:1: (lv_definitions_1_0= ruleDefinitionList )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1819:1: (lv_definitions_1_0= ruleDefinitionList )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1820:3: lv_definitions_1_0= ruleDefinitionList
             {
             if ( state.backtracking==0 ) {
@@ -5119,5 +5302,5 @@
               	    
             }
-            pushFollow(FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3716);
+            pushFollow(FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3848);
             lv_definitions_1_0=ruleDefinitionList();
 
@@ -5143,5 +5326,5 @@
             }
 
-            otherlv_2=(Token)match(input,30,FOLLOW_30_in_ruleRepeatedSequence3728); if (state.failed) return current;
+            otherlv_2=(Token)match(input,30,FOLLOW_30_in_ruleRepeatedSequence3860); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5149,12 +5332,12 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:1: ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:1: ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )
             int alt38=2;
             alt38 = dfa38.predict(input);
             switch (alt38) {
                 case 1 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:2: ( (lv_morethanonce_3_0= '+' ) )?
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:2: ( (lv_morethanonce_3_0= '+' ) )?
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:2: ( (lv_morethanonce_3_0= '+' ) )?
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:2: ( (lv_morethanonce_3_0= '+' ) )?
                     int alt36=2;
                     int LA36_0 = input.LA(1);
@@ -5165,10 +5348,10 @@
                     switch (alt36) {
                         case 1 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1774:1: (lv_morethanonce_3_0= '+' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1841:1: (lv_morethanonce_3_0= '+' )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1774:1: (lv_morethanonce_3_0= '+' )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:3: lv_morethanonce_3_0= '+'
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1841:1: (lv_morethanonce_3_0= '+' )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1842:3: lv_morethanonce_3_0= '+'
                             {
-                            lv_morethanonce_3_0=(Token)match(input,35,FOLLOW_35_in_ruleRepeatedSequence3747); if (state.failed) return current;
+                            lv_morethanonce_3_0=(Token)match(input,35,FOLLOW_35_in_ruleRepeatedSequence3879); if (state.failed) return current;
                             if ( state.backtracking==0 ) {
 
@@ -5197,7 +5380,7 @@
                     break;
                 case 2 :
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:6: ( (lv_range_4_0= ruleRepeatRange ) )?
-                    {
-                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1789:6: ( (lv_range_4_0= ruleRepeatRange ) )?
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1856:6: ( (lv_range_4_0= ruleRepeatRange ) )?
+                    {
+                    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1856:6: ( (lv_range_4_0= ruleRepeatRange ) )?
                     int alt37=2;
                     int LA37_0 = input.LA(1);
@@ -5208,8 +5391,8 @@
                     switch (alt37) {
                         case 1 :
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1790:1: (lv_range_4_0= ruleRepeatRange )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1857:1: (lv_range_4_0= ruleRepeatRange )
                             {
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1790:1: (lv_range_4_0= ruleRepeatRange )
-                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1791:3: lv_range_4_0= ruleRepeatRange
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1857:1: (lv_range_4_0= ruleRepeatRange )
+                            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1858:3: lv_range_4_0= ruleRepeatRange
                             {
                             if ( state.backtracking==0 ) {
@@ -5218,5 +5401,5 @@
                               	    
                             }
-                            pushFollow(FOLLOW_ruleRepeatRange_in_ruleRepeatedSequence3788);
+                            pushFollow(FOLLOW_ruleRepeatRange_in_ruleRepeatedSequence3920);
                             lv_range_4_0=ruleRepeatRange();
 
@@ -5267,5 +5450,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 44, ruleRepeatedSequence_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 46, ruleRepeatedSequence_StartIndex); }
         }
         return current;
@@ -5275,5 +5458,5 @@
 
     // $ANTLR start "entryRuleRepeatRange"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1815:1: entryRuleRepeatRange returns [EObject current=null] : iv_ruleRepeatRange= ruleRepeatRange EOF ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1882:1: entryRuleRepeatRange returns [EObject current=null] : iv_ruleRepeatRange= ruleRepeatRange EOF ;
     public final EObject entryRuleRepeatRange() throws RecognitionException {
         EObject current = null;
@@ -5283,12 +5466,12 @@
 
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 45) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1816:2: (iv_ruleRepeatRange= ruleRepeatRange EOF )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1817:2: iv_ruleRepeatRange= ruleRepeatRange EOF
+            if ( state.backtracking>0 && alreadyParsedRule(input, 47) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1883:2: (iv_ruleRepeatRange= ruleRepeatRange EOF )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1884:2: iv_ruleRepeatRange= ruleRepeatRange EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getRepeatRangeRule()); 
             }
-            pushFollow(FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange3826);
+            pushFollow(FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange3958);
             iv_ruleRepeatRange=ruleRepeatRange();
 
@@ -5298,5 +5481,5 @@
                current =iv_ruleRepeatRange; 
             }
-            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatRange3836); if (state.failed) return current;
+            match(input,EOF,FOLLOW_EOF_in_entryRuleRepeatRange3968); if (state.failed) return current;
 
             }
@@ -5309,5 +5492,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 45, entryRuleRepeatRange_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 47, entryRuleRepeatRange_StartIndex); }
         }
         return current;
@@ -5317,5 +5500,5 @@
 
     // $ANTLR start "ruleRepeatRange"
-    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1824:1: ruleRepeatRange returns [EObject current=null] : (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' ) ;
+    // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1891:1: ruleRepeatRange returns [EObject current=null] : (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' ) ;
     public final EObject ruleRepeatRange() throws RecognitionException {
         EObject current = null;
@@ -5331,12 +5514,12 @@
             
         try {
-            if ( state.backtracking>0 && alreadyParsedRule(input, 46) ) { return current; }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1827:28: ( (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1828:1: (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1828:1: (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1828:3: otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')'
-            {
-            otherlv_0=(Token)match(input,40,FOLLOW_40_in_ruleRepeatRange3873); if (state.failed) return current;
+            if ( state.backtracking>0 && alreadyParsedRule(input, 48) ) { return current; }
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1894:28: ( (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1895:1: (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1895:1: (otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')' )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1895:3: otherlv_0= '#' otherlv_1= '(' ( (lv_from_2_0= RULE_INT ) ) otherlv_3= ',' ( (lv_to_4_0= RULE_INT ) ) otherlv_5= ')'
+            {
+            otherlv_0=(Token)match(input,40,FOLLOW_40_in_ruleRepeatRange4005); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5344,5 +5527,5 @@
                   
             }
-            otherlv_1=(Token)match(input,26,FOLLOW_26_in_ruleRepeatRange3885); if (state.failed) return current;
+            otherlv_1=(Token)match(input,26,FOLLOW_26_in_ruleRepeatRange4017); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5350,11 +5533,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1836:1: ( (lv_from_2_0= RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1837:1: (lv_from_2_0= RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1837:1: (lv_from_2_0= RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1838:3: lv_from_2_0= RULE_INT
-            {
-            lv_from_2_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRepeatRange3902); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1903:1: ( (lv_from_2_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1904:1: (lv_from_2_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1904:1: (lv_from_2_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1905:3: lv_from_2_0= RULE_INT
+            {
+            lv_from_2_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRepeatRange4034); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5380,5 +5563,5 @@
             }
 
-            otherlv_3=(Token)match(input,41,FOLLOW_41_in_ruleRepeatRange3919); if (state.failed) return current;
+            otherlv_3=(Token)match(input,41,FOLLOW_41_in_ruleRepeatRange4051); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5386,11 +5569,11 @@
                   
             }
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1858:1: ( (lv_to_4_0= RULE_INT ) )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1859:1: (lv_to_4_0= RULE_INT )
-            {
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1859:1: (lv_to_4_0= RULE_INT )
-            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1860:3: lv_to_4_0= RULE_INT
-            {
-            lv_to_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRepeatRange3936); if (state.failed) return current;
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1925:1: ( (lv_to_4_0= RULE_INT ) )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1926:1: (lv_to_4_0= RULE_INT )
+            {
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1926:1: (lv_to_4_0= RULE_INT )
+            // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1927:3: lv_to_4_0= RULE_INT
+            {
+            lv_to_4_0=(Token)match(input,RULE_INT,FOLLOW_RULE_INT_in_ruleRepeatRange4068); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5416,5 +5599,5 @@
             }
 
-            otherlv_5=(Token)match(input,27,FOLLOW_27_in_ruleRepeatRange3953); if (state.failed) return current;
+            otherlv_5=(Token)match(input,27,FOLLOW_27_in_ruleRepeatRange4085); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
@@ -5438,5 +5621,5 @@
             } 
         finally {
-            if ( state.backtracking>0 ) { memoize(input, 46, ruleRepeatRange_StartIndex); }
+            if ( state.backtracking>0 ) { memoize(input, 48, ruleRepeatRange_StartIndex); }
         }
         return current;
@@ -5444,12 +5627,12 @@
     // $ANTLR end "ruleRepeatRange"
 
-    // $ANTLR start synpred52_InternalEbnf
-    public final void synpred52_InternalEbnf_fragment() throws RecognitionException {   
+    // $ANTLR start synpred53_InternalEbnf
+    public final void synpred53_InternalEbnf_fragment() throws RecognitionException {   
         Token lv_morethanonce_3_0=null;
 
-        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:2: ( ( (lv_morethanonce_3_0= '+' ) )? )
-        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:2: ( (lv_morethanonce_3_0= '+' ) )?
+        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:2: ( ( (lv_morethanonce_3_0= '+' ) )? )
+        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:2: ( (lv_morethanonce_3_0= '+' ) )?
         {
-        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1773:2: ( (lv_morethanonce_3_0= '+' ) )?
+        // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1840:2: ( (lv_morethanonce_3_0= '+' ) )?
         int alt47=2;
         int LA47_0 = input.LA(1);
@@ -5460,10 +5643,10 @@
         switch (alt47) {
             case 1 :
-                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1774:1: (lv_morethanonce_3_0= '+' )
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1841:1: (lv_morethanonce_3_0= '+' )
                 {
-                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1774:1: (lv_morethanonce_3_0= '+' )
-                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1775:3: lv_morethanonce_3_0= '+'
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1841:1: (lv_morethanonce_3_0= '+' )
+                // ../de.ugoe.cs.swe.bnftools.ebnf/src-gen/de/ugoe/cs/swe/bnftools/parser/antlr/internal/InternalEbnf.g:1842:3: lv_morethanonce_3_0= '+'
                 {
-                lv_morethanonce_3_0=(Token)match(input,35,FOLLOW_35_in_synpred52_InternalEbnf3747); if (state.failed) return ;
+                lv_morethanonce_3_0=(Token)match(input,35,FOLLOW_35_in_synpred53_InternalEbnf3879); if (state.failed) return ;
 
                 }
@@ -5478,13 +5661,13 @@
         }
     }
-    // $ANTLR end synpred52_InternalEbnf
+    // $ANTLR end synpred53_InternalEbnf
 
     // Delegated rules
 
-    public final boolean synpred52_InternalEbnf() {
+    public final boolean synpred53_InternalEbnf() {
         state.backtracking++;
         int start = input.mark();
         try {
-            synpred52_InternalEbnf_fragment(); // can never throw exception
+            synpred53_InternalEbnf_fragment(); // can never throw exception
         } catch (RecognitionException re) {
             System.err.println("impossible: "+re);
@@ -5514,9 +5697,9 @@
         "\17\uffff}>";
     static final String[] DFA22_transitionS = {
-            "\1\2\1\1\1\3\1\1\1\uffff\1\3\5\uffff\1\1\12\uffff\1\10\1\4\1"+
-            "\uffff\1\5\1\6\1\7\1\11\1\12\1\13\1\14",
+            "\1\2\1\1\1\uffff\1\3\1\1\1\uffff\1\3\4\uffff\1\1\12\uffff\1"+
+            "\10\1\4\1\uffff\1\5\1\6\1\7\1\11\1\12\1\13\1\14",
             "",
-            "\4\3\1\uffff\1\3\5\uffff\1\3\11\uffff\1\1\1\15\1\3\1\uffff"+
-            "\7\3",
+            "\2\3\1\uffff\2\3\1\uffff\1\3\4\uffff\1\3\11\uffff\1\1\1\15"+
+            "\1\3\1\uffff\7\3",
             "",
             "",
@@ -5529,5 +5712,6 @@
             "",
             "",
-            "\3\3\1\16\1\uffff\1\3\5\uffff\1\3\12\uffff\2\3\1\uffff\7\3",
+            "\2\3\1\uffff\1\3\1\16\1\uffff\1\3\4\uffff\1\3\12\uffff\2\3"+
+            "\1\uffff\7\3",
             "\1\3\23\uffff\1\3\2\uffff\1\1"
     };
@@ -5563,24 +5747,26 @@
         }
         public String getDescription() {
-            return "()* loopback of 890:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*";
+            return "()* loopback of 957:1: ( ( (lv_elements_8_0= ruleAtom ) ) | otherlv_9= ')' | otherlv_10= ']' | otherlv_11= '}' | otherlv_12= '|' | otherlv_13= '(' | otherlv_14= '[' | otherlv_15= '{' | otherlv_16= '*' | otherlv_17= '+' )*";
         }
     }
     static final String DFA38_eotS =
-        "\21\uffff";
+        "\22\uffff";
     static final String DFA38_eofS =
-        "\1\4\20\uffff";
+        "\1\4\21\uffff";
     static final String DFA38_minS =
-        "\1\4\1\uffff\16\0\1\uffff";
+        "\1\4\1\uffff\17\0\1\uffff";
     static final String DFA38_maxS =
-        "\1\50\1\uffff\16\0\1\uffff";
+        "\1\50\1\uffff\17\0\1\uffff";
     static final String DFA38_acceptS =
-        "\1\uffff\1\1\16\uffff\1\2";
+        "\1\uffff\1\1\17\uffff\1\2";
     static final String DFA38_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}>";
+        "\1\15\1\16\1\uffff}>";
     static final String[] DFA38_transitionS = {
-            "\1\7\1\5\1\13\1\6\1\uffff\1\14\5\uffff\1\3\12\uffff\1\15\1\10"+
-            "\1\uffff\1\11\1\12\1\2\1\16\1\17\1\uffff\1\1\4\uffff\1\20",
+            "\1\7\1\5\1\10\1\14\1\6\1\uffff\1\15\4\uffff\1\3\12\uffff\1\16"+
+            "\1\11\1\uffff\1\12\1\13\1\2\1\17\1\20\1\uffff\1\1\4\uffff\1"+
+            "\21",
             "",
+            "\1\uffff",
             "\1\uffff",
             "\1\uffff",
@@ -5630,5 +5816,5 @@
         }
         public String getDescription() {
-            return "1773:1: ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )";
+            return "1840:1: ( ( (lv_morethanonce_3_0= '+' ) )? | ( (lv_range_4_0= ruleRepeatRange ) )? )";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
@@ -5643,7 +5829,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5658,7 +5844,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5673,7 +5859,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5688,7 +5874,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5703,7 +5889,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5718,7 +5904,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5733,7 +5919,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5748,7 +5934,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5763,7 +5949,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5778,7 +5964,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5793,7 +5979,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5808,7 +5994,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5823,7 +6009,7 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
@@ -5838,10 +6024,25 @@
                         input.rewind();
                         s = -1;
-                        if ( (synpred52_InternalEbnf()) ) {s = 1;}
-
-                        else if ( (true) ) {s = 16;}
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
 
                          
                         input.seek(index38_15);
+                        if ( s>=0 ) return s;
+                        break;
+                    case 14 : 
+                        int LA38_16 = input.LA(1);
+
+                         
+                        int index38_16 = input.index();
+                        input.rewind();
+                        s = -1;
+                        if ( (synpred53_InternalEbnf()) ) {s = 1;}
+
+                        else if ( (true) ) {s = 17;}
+
+                         
+                        input.seek(index38_16);
                         if ( s>=0 ) return s;
                         break;
@@ -5861,11 +6062,11 @@
     public static final BitSet FOLLOW_RULE_ID_in_ruleEtsiBnf153 = new BitSet(new long[]{0x000000000000C000L});
     public static final BitSet FOLLOW_14_in_ruleEtsiBnf177 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_15_in_ruleEtsiBnf203 = new BitSet(new long[]{0x00000000000400B0L});
-    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf224 = new BitSet(new long[]{0x00000000000400B0L});
-    public static final BitSet FOLLOW_ruleBnfEntry_in_ruleEtsiBnf246 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_15_in_ruleEtsiBnf203 = new BitSet(new long[]{0x0000000000040170L});
+    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf224 = new BitSet(new long[]{0x0000000000040170L});
+    public static final BitSet FOLLOW_ruleBnfEntry_in_ruleEtsiBnf246 = new BitSet(new long[]{0x0000000000040172L});
     public static final BitSet FOLLOW_16_in_ruleEtsiBnf274 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_15_in_ruleEtsiBnf299 = new BitSet(new long[]{0x00000000000400B2L});
-    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf320 = new BitSet(new long[]{0x00000000000400B2L});
-    public static final BitSet FOLLOW_ruleDeltaEntry_in_ruleEtsiBnf342 = new BitSet(new long[]{0x00000000000400B2L});
+    public static final BitSet FOLLOW_15_in_ruleEtsiBnf299 = new BitSet(new long[]{0x0000000000040132L});
+    public static final BitSet FOLLOW_ruleImportSection_in_ruleEtsiBnf320 = new BitSet(new long[]{0x0000000000000132L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_ruleEtsiBnf342 = new BitSet(new long[]{0x0000000000000132L});
     public static final BitSet FOLLOW_17_in_ruleEtsiBnf369 = new BitSet(new long[]{0x0000000000008000L});
     public static final BitSet FOLLOW_15_in_ruleEtsiBnf394 = new BitSet(new long[]{0x000000D000040022L});
@@ -5879,142 +6080,146 @@
     public static final BitSet FOLLOW_ruleSectionHeading_in_ruleBnfEntry622 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_ruleRule_in_ruleBnfEntry649 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry685 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry695 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRule_in_ruleDeltaEntry741 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleDeltaEntry768 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleExtRule_in_ruleDeltaEntry795 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry831 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry841 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleMergeEntry887 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeRule_in_ruleMergeEntry914 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading950 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading960 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading1014 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport1055 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleImport1065 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_18_in_ruleImport1102 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleImport1119 = new BitSet(new long[]{0x0000000000888000L});
-    public static final BitSet FOLLOW_19_in_ruleImport1137 = new BitSet(new long[]{0x0000000000700000L});
-    public static final BitSet FOLLOW_20_in_ruleImport1156 = new BitSet(new long[]{0x0000000000808000L});
-    public static final BitSet FOLLOW_21_in_ruleImport1193 = new BitSet(new long[]{0x0000000000808000L});
-    public static final BitSet FOLLOW_22_in_ruleImport1230 = new BitSet(new long[]{0x0000000000808000L});
-    public static final BitSet FOLLOW_23_in_ruleImport1259 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleImport1276 = new BitSet(new long[]{0x0000000000008000L});
-    public static final BitSet FOLLOW_15_in_ruleImport1295 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule1331 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRule1341 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleRule1384 = new BitSet(new long[]{0x0000000001000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1406 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_ruleRule1424 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1443 = new BitSet(new long[]{0x0000000002000000L});
-    public static final BitSet FOLLOW_25_in_ruleRule1460 = new BitSet(new long[]{0x0000000304008252L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRule1481 = new BitSet(new long[]{0x0000000000008002L});
-    public static final BitSet FOLLOW_15_in_ruleRule1495 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule1533 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule1543 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1586 = new BitSet(new long[]{0x0000000001000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1608 = new BitSet(new long[]{0x0000000001000000L});
-    public static final BitSet FOLLOW_24_in_ruleExtRule1626 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1645 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_ruleExtRule1663 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1680 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleExtRule1697 = new BitSet(new long[]{0x0000000010000000L});
-    public static final BitSet FOLLOW_28_in_ruleExtRule1710 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_ruleAtom_in_ruleExtRule1732 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_27_in_ruleExtRule1750 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_29_in_ruleExtRule1768 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_30_in_ruleExtRule1786 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_31_in_ruleExtRule1804 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_26_in_ruleExtRule1822 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_32_in_ruleExtRule1840 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_33_in_ruleExtRule1858 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_34_in_ruleExtRule1876 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_35_in_ruleExtRule1894 = new BitSet(new long[]{0x0000000FEC008252L});
-    public static final BitSet FOLLOW_15_in_ruleExtRule1909 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule1947 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule1957 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGlobalCombinator_in_ruleMergeRule2007 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleCombinator_in_ruleMergeRule2037 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleHookCombinator_in_ruleMergeRule2067 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2102 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator2112 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_36_in_ruleGlobalCombinator2150 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_37_in_ruleGlobalCombinator2162 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2180 = new BitSet(new long[]{0x0000000000008002L});
-    public static final BitSet FOLLOW_15_in_ruleGlobalCombinator2198 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2236 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator2246 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_38_in_ruleRuleCombinator2284 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_37_in_ruleRuleCombinator2296 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleCombinator2313 = new BitSet(new long[]{0x0000000000000100L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2336 = new BitSet(new long[]{0x0000000004008002L});
-    public static final BitSet FOLLOW_26_in_ruleRuleCombinator2354 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleRuleCombinator2371 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleRuleCombinator2388 = new BitSet(new long[]{0x0000000004008002L});
-    public static final BitSet FOLLOW_15_in_ruleRuleCombinator2403 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2441 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator2451 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_39_in_ruleHookCombinator2488 = new BitSet(new long[]{0x0000002000000000L});
-    public static final BitSet FOLLOW_37_in_ruleHookCombinator2500 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleHookCombinator2517 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_ruleHookCombinator2534 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleHookCombinator2551 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleHookCombinator2568 = new BitSet(new long[]{0x0000000004000100L});
-    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleHookCombinator2585 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_ruleHookCombinator2604 = new BitSet(new long[]{0x0000000000000040L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleHookCombinator2621 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleHookCombinator2638 = new BitSet(new long[]{0x0000000004008002L});
-    public static final BitSet FOLLOW_15_in_ruleHookCombinator2653 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2691 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList2701 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2747 = new BitSet(new long[]{0x0000000080000002L});
-    public static final BitSet FOLLOW_31_in_ruleDefinitionList2760 = new BitSet(new long[]{0x0000000304000250L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2781 = new BitSet(new long[]{0x0000000080000002L});
-    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2819 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition2829 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleTerm_in_ruleSingleDefinition2874 = new BitSet(new long[]{0x0000000304000252L});
-    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm2910 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleTerm2920 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleAtom_in_ruleTerm2966 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGroupedSequence_in_ruleTerm2993 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOptionalSequence_in_ruleTerm3020 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatedSequence_in_ruleTerm3047 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom3083 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleAtom3093 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStringRule_in_ruleAtom3139 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleReference_in_ruleAtom3166 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference3202 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference3212 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleReference3260 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule3295 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule3305 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleStringRule3347 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_COLON_in_ruleStringRule3375 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3416 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence3426 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_26_in_ruleGroupedSequence3463 = new BitSet(new long[]{0x0000000304000250L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3484 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleGroupedSequence3496 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3532 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence3542 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_32_in_ruleOptionalSequence3579 = new BitSet(new long[]{0x0000000304000250L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3600 = new BitSet(new long[]{0x0000000020000000L});
-    public static final BitSet FOLLOW_29_in_ruleOptionalSequence3612 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3648 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence3658 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_33_in_ruleRepeatedSequence3695 = new BitSet(new long[]{0x0000000304000250L});
-    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3716 = new BitSet(new long[]{0x0000000040000000L});
-    public static final BitSet FOLLOW_30_in_ruleRepeatedSequence3728 = new BitSet(new long[]{0x0000010800000002L});
-    public static final BitSet FOLLOW_35_in_ruleRepeatedSequence3747 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatRange_in_ruleRepeatedSequence3788 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange3826 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatRange3836 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_40_in_ruleRepeatRange3873 = new BitSet(new long[]{0x0000000004000000L});
-    public static final BitSet FOLLOW_26_in_ruleRepeatRange3885 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleRepeatRange3902 = new BitSet(new long[]{0x0000020000000000L});
-    public static final BitSet FOLLOW_41_in_ruleRepeatRange3919 = new BitSet(new long[]{0x0000000000000080L});
-    public static final BitSet FOLLOW_RULE_INT_in_ruleRepeatRange3936 = new BitSet(new long[]{0x0000000008000000L});
-    public static final BitSet FOLLOW_27_in_ruleRepeatRange3953 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_35_in_synpred52_InternalEbnf3747 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComment_in_ruleBnfEntry676 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDeltaEntry_in_entryRuleDeltaEntry712 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDeltaEntry722 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_ruleDeltaEntry768 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleDeltaEntry795 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_ruleDeltaEntry822 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeEntry_in_entryRuleMergeEntry858 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeEntry868 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_ruleMergeEntry914 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_ruleMergeEntry941 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSectionHeading_in_entryRuleSectionHeading977 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSectionHeading987 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_SECTIONHEADER_in_ruleSectionHeading1041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleComment_in_entryRuleComment1082 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleComment1092 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ML_COMMENT_in_ruleComment1146 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleImport_in_entryRuleImport1187 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleImport1197 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_18_in_ruleImport1234 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleImport1251 = new BitSet(new long[]{0x0000000000888000L});
+    public static final BitSet FOLLOW_19_in_ruleImport1269 = new BitSet(new long[]{0x0000000000700000L});
+    public static final BitSet FOLLOW_20_in_ruleImport1288 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_21_in_ruleImport1325 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_22_in_ruleImport1362 = new BitSet(new long[]{0x0000000000808000L});
+    public static final BitSet FOLLOW_23_in_ruleImport1391 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleImport1408 = new BitSet(new long[]{0x0000000000008000L});
+    public static final BitSet FOLLOW_15_in_ruleImport1427 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRule_in_entryRuleRule1463 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRule1473 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleRule1516 = new BitSet(new long[]{0x0000000001000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1538 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_ruleRule1556 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRule1575 = new BitSet(new long[]{0x0000000002000000L});
+    public static final BitSet FOLLOW_25_in_ruleRule1592 = new BitSet(new long[]{0x0000000304008492L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRule1613 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_15_in_ruleRule1627 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleExtRule_in_entryRuleExtRule1665 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleExtRule1675 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1718 = new BitSet(new long[]{0x0000000001000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1740 = new BitSet(new long[]{0x0000000001000000L});
+    public static final BitSet FOLLOW_24_in_ruleExtRule1758 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleExtRule1777 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleExtRule1795 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleExtRule1812 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleExtRule1829 = new BitSet(new long[]{0x0000000010000000L});
+    public static final BitSet FOLLOW_28_in_ruleExtRule1842 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_ruleAtom_in_ruleExtRule1864 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_27_in_ruleExtRule1882 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_29_in_ruleExtRule1900 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_30_in_ruleExtRule1918 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_31_in_ruleExtRule1936 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_26_in_ruleExtRule1954 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_32_in_ruleExtRule1972 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_33_in_ruleExtRule1990 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_34_in_ruleExtRule2008 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_35_in_ruleExtRule2026 = new BitSet(new long[]{0x0000000FEC008492L});
+    public static final BitSet FOLLOW_15_in_ruleExtRule2041 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleMergeRule_in_entryRuleMergeRule2079 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleMergeRule2089 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_ruleMergeRule2139 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_ruleMergeRule2169 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_ruleMergeRule2199 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGlobalCombinator_in_entryRuleGlobalCombinator2234 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGlobalCombinator2244 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_36_in_ruleGlobalCombinator2282 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleGlobalCombinator2294 = new BitSet(new long[]{0x0000000000000200L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleGlobalCombinator2312 = new BitSet(new long[]{0x0000000000008002L});
+    public static final BitSet FOLLOW_15_in_ruleGlobalCombinator2330 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleCombinator_in_entryRuleRuleCombinator2368 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleCombinator2378 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_38_in_ruleRuleCombinator2416 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleRuleCombinator2428 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleCombinator2445 = new BitSet(new long[]{0x0000000000000200L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleRuleCombinator2468 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_26_in_ruleRuleCombinator2486 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleRuleCombinator2503 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleRuleCombinator2520 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_15_in_ruleRuleCombinator2535 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleHookCombinator_in_entryRuleHookCombinator2573 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleHookCombinator2583 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_39_in_ruleHookCombinator2620 = new BitSet(new long[]{0x0000002000000000L});
+    public static final BitSet FOLLOW_37_in_ruleHookCombinator2632 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleHookCombinator2649 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleHookCombinator2666 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleHookCombinator2683 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleHookCombinator2700 = new BitSet(new long[]{0x0000000004000200L});
+    public static final BitSet FOLLOW_RULE_LOGIC_in_ruleHookCombinator2717 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleHookCombinator2736 = new BitSet(new long[]{0x0000000000000080L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleHookCombinator2753 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleHookCombinator2770 = new BitSet(new long[]{0x0000000004008002L});
+    public static final BitSet FOLLOW_15_in_ruleHookCombinator2785 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_entryRuleDefinitionList2823 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleDefinitionList2833 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2879 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_31_in_ruleDefinitionList2892 = new BitSet(new long[]{0x0000000304000490L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_ruleDefinitionList2913 = new BitSet(new long[]{0x0000000080000002L});
+    public static final BitSet FOLLOW_ruleSingleDefinition_in_entryRuleSingleDefinition2951 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleSingleDefinition2961 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleTerm_in_ruleSingleDefinition3006 = new BitSet(new long[]{0x0000000304000492L});
+    public static final BitSet FOLLOW_ruleTerm_in_entryRuleTerm3042 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleTerm3052 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_ruleTerm3098 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_ruleTerm3125 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_ruleTerm3152 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_ruleTerm3179 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleAtom_in_entryRuleAtom3215 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleAtom3225 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_ruleAtom3271 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_ruleAtom3298 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRuleReference_in_entryRuleRuleReference3334 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRuleReference3344 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleRuleReference3392 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleStringRule_in_entryRuleStringRule3427 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleStringRule3437 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleStringRule3479 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_COLON_in_ruleStringRule3507 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleGroupedSequence_in_entryRuleGroupedSequence3548 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleGroupedSequence3558 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_26_in_ruleGroupedSequence3595 = new BitSet(new long[]{0x0000000304000490L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleGroupedSequence3616 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleGroupedSequence3628 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleOptionalSequence_in_entryRuleOptionalSequence3664 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleOptionalSequence3674 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_32_in_ruleOptionalSequence3711 = new BitSet(new long[]{0x0000000304000490L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleOptionalSequence3732 = new BitSet(new long[]{0x0000000020000000L});
+    public static final BitSet FOLLOW_29_in_ruleOptionalSequence3744 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatedSequence_in_entryRuleRepeatedSequence3780 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatedSequence3790 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_33_in_ruleRepeatedSequence3827 = new BitSet(new long[]{0x0000000304000490L});
+    public static final BitSet FOLLOW_ruleDefinitionList_in_ruleRepeatedSequence3848 = new BitSet(new long[]{0x0000000040000000L});
+    public static final BitSet FOLLOW_30_in_ruleRepeatedSequence3860 = new BitSet(new long[]{0x0000010800000002L});
+    public static final BitSet FOLLOW_35_in_ruleRepeatedSequence3879 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatRange_in_ruleRepeatedSequence3920 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleRepeatRange_in_entryRuleRepeatRange3958 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleRepeatRange3968 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_40_in_ruleRepeatRange4005 = new BitSet(new long[]{0x0000000004000000L});
+    public static final BitSet FOLLOW_26_in_ruleRepeatRange4017 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleRepeatRange4034 = new BitSet(new long[]{0x0000020000000000L});
+    public static final BitSet FOLLOW_41_in_ruleRepeatRange4051 = new BitSet(new long[]{0x0000000000000100L});
+    public static final BitSet FOLLOW_RULE_INT_in_ruleRepeatRange4068 = new BitSet(new long[]{0x0000000008000000L});
+    public static final BitSet FOLLOW_27_in_ruleRepeatRange4085 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_35_in_synpred53_InternalEbnf3879 = new BitSet(new long[]{0x0000000000000002L});
 
 }
