Adding pre/post-comment
diff --git a/examples/org.eclipse.ocl.examples.xtext.build/src/org/eclipse/ocl/examples/xtext/build/analysis/GrammarAnalysis.java b/examples/org.eclipse.ocl.examples.xtext.build/src/org/eclipse/ocl/examples/xtext/build/analysis/GrammarAnalysis.java
index bf00a7e..4d9037f 100644
--- a/examples/org.eclipse.ocl.examples.xtext.build/src/org/eclipse/ocl/examples/xtext/build/analysis/GrammarAnalysis.java
+++ b/examples/org.eclipse.ocl.examples.xtext.build/src/org/eclipse/ocl/examples/xtext/build/analysis/GrammarAnalysis.java
@@ -44,6 +44,8 @@
 import org.eclipse.ocl.examples.xtext.idioms.NewLineSegment;
 import org.eclipse.ocl.examples.xtext.idioms.NoSpaceSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PopSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PushSegment;
 import org.eclipse.ocl.examples.xtext.idioms.ReferredSegment;
 import org.eclipse.ocl.examples.xtext.idioms.Segment;
@@ -51,6 +53,8 @@
 import org.eclipse.ocl.examples.xtext.idioms.SoftSpaceSegment;
 import org.eclipse.ocl.examples.xtext.idioms.SubIdiom;
 import org.eclipse.ocl.examples.xtext.idioms.ValueSegment;
+import org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport;
+import org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport;
 import org.eclipse.ocl.examples.xtext.serializer.EClassValue;
 import org.eclipse.ocl.examples.xtext.serializer.EnumerationValue;
 import org.eclipse.ocl.examples.xtext.serializer.EnumerationValue.EnumerationValueMultiple;
@@ -136,6 +140,9 @@
 
 	private @NonNull Map<@NonNull Integer, @NonNull Object> semanticHash2serializationAnalysisOrAnalyses = new HashMap<>();
 
+	private final @NonNull SerializationSegment POST_COMMENT = new CustomSerializationSegment(XtextPostCommentSegmentSupport.class);
+	private final @NonNull SerializationSegment PRE_COMMENT = new CustomSerializationSegment(XtextPreCommentSegmentSupport.class);
+
 	public GrammarAnalysis() {
 		this.grammar = null;
 	}
@@ -721,6 +728,12 @@
 			else if (segment instanceof PopSegment) {
 				serializationSegment = SerializationSegment.POP;
 			}
+			else if (segment instanceof PostCommentSegment) {
+				serializationSegment = POST_COMMENT;
+			}
+			else if (segment instanceof PreCommentSegment) {
+				serializationSegment = PRE_COMMENT;
+			}
 			else if (segment instanceof PushSegment) {
 				serializationSegment = SerializationSegment.PUSH;
 			}
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/IdiomsParser.java b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/IdiomsParser.java
index 7a6802b..7a7d69f 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/IdiomsParser.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/IdiomsParser.java
@@ -68,6 +68,8 @@
 			builder.put(grammarAccess.getNewLineSegmentAccess().getGroup(), "rule__NewLineSegment__Group__0");
 			builder.put(grammarAccess.getNoSpaceSegmentAccess().getGroup(), "rule__NoSpaceSegment__Group__0");
 			builder.put(grammarAccess.getPopSegmentAccess().getGroup(), "rule__PopSegment__Group__0");
+			builder.put(grammarAccess.getPostCommentSegmentAccess().getGroup(), "rule__PostCommentSegment__Group__0");
+			builder.put(grammarAccess.getPreCommentSegmentAccess().getGroup(), "rule__PreCommentSegment__Group__0");
 			builder.put(grammarAccess.getPushSegmentAccess().getGroup(), "rule__PushSegment__Group__0");
 			builder.put(grammarAccess.getSoftNewLineSegmentAccess().getGroup(), "rule__SoftNewLineSegment__Group__0");
 			builder.put(grammarAccess.getSoftSpaceSegmentAccess().getGroup(), "rule__SoftSpaceSegment__Group__0");
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.g b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.g
index 3d4b90a..b2396fa 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.g
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.g
@@ -534,6 +534,56 @@
 	restoreStackSize(stackSize);
 }
 
+// Entry rule entryRulePostCommentSegment
+entryRulePostCommentSegment
+:
+{ before(grammarAccess.getPostCommentSegmentRule()); }
+	 rulePostCommentSegment
+{ after(grammarAccess.getPostCommentSegmentRule()); }
+	 EOF
+;
+
+// Rule PostCommentSegment
+rulePostCommentSegment
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getPostCommentSegmentAccess().getGroup()); }
+		(rule__PostCommentSegment__Group__0)
+		{ after(grammarAccess.getPostCommentSegmentAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+// Entry rule entryRulePreCommentSegment
+entryRulePreCommentSegment
+:
+{ before(grammarAccess.getPreCommentSegmentRule()); }
+	 rulePreCommentSegment
+{ after(grammarAccess.getPreCommentSegmentRule()); }
+	 EOF
+;
+
+// Rule PreCommentSegment
+rulePreCommentSegment
+	@init {
+		int stackSize = keepStackSize();
+	}
+	:
+	(
+		{ before(grammarAccess.getPreCommentSegmentAccess().getGroup()); }
+		(rule__PreCommentSegment__Group__0)
+		{ after(grammarAccess.getPreCommentSegmentAccess().getGroup()); }
+	)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
 // Entry rule entryRulePushSegment
 entryRulePushSegment
 :
@@ -967,63 +1017,75 @@
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5()); }
+		{ before(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5()); }
+		rulePostCommentSegment
+		{ after(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6()); }
+		rulePreCommentSegment
+		{ after(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6()); }
+	)
+	|
+	(
+		{ before(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7()); }
 		rulePushSegment
-		{ after(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5()); }
+		{ after(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6()); }
+		{ before(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8()); }
 		ruleSoftNewLineSegment
-		{ after(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6()); }
+		{ after(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7()); }
+		{ before(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9()); }
 		ruleSoftSpaceSegment
-		{ after(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7()); }
+		{ after(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8()); }
+		{ before(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10()); }
 		ruleStringSegment
-		{ after(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8()); }
+		{ after(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9()); }
+		{ before(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11()); }
 		ruleValueSegment
-		{ after(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9()); }
+		{ after(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10()); }
+		{ before(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12()); }
 		ruleWrapAnchorSegment
-		{ after(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10()); }
+		{ after(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11()); }
+		{ before(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13()); }
 		ruleWrapBeginAllSegment
-		{ after(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11()); }
+		{ after(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12()); }
+		{ before(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14()); }
 		ruleWrapBeginSomeSegment
-		{ after(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12()); }
+		{ after(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13()); }
+		{ before(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15()); }
 		ruleWrapEndSegment
-		{ after(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13()); }
+		{ after(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15()); }
 	)
 	|
 	(
-		{ before(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14()); }
+		{ before(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16()); }
 		ruleWrapHereSegment
-		{ after(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14()); }
+		{ after(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16()); }
 	)
 ;
 finally {
@@ -2659,6 +2721,114 @@
 }
 
 
+rule__PostCommentSegment__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__PostCommentSegment__Group__0__Impl
+	rule__PostCommentSegment__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PostCommentSegment__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0()); }
+	()
+	{ after(grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PostCommentSegment__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__PostCommentSegment__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PostCommentSegment__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1()); }
+	'post-comment'
+	{ after(grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
+rule__PreCommentSegment__Group__0
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__PreCommentSegment__Group__0__Impl
+	rule__PreCommentSegment__Group__1
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PreCommentSegment__Group__0__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0()); }
+	()
+	{ after(grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PreCommentSegment__Group__1
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+	rule__PreCommentSegment__Group__1__Impl
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+rule__PreCommentSegment__Group__1__Impl
+	@init {
+		int stackSize = keepStackSize();
+	}
+:
+(
+	{ before(grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1()); }
+	'pre-comment'
+	{ after(grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1()); }
+)
+;
+finally {
+	restoreStackSize(stackSize);
+}
+
+
 rule__PushSegment__Group__0
 	@init {
 		int stackSize = keepStackSize();
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.tokens b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.tokens
index 344d092..08b4199 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.tokens
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdioms.tokens
@@ -4,37 +4,39 @@
 'any-element'=18
 'as'=14
 'assignment'=19
-'at'=44
+'at'=46
 'custom'=24
-'do'=45
+'do'=47
 'final'=21
-'for'=40
+'for'=42
 'half-new-line'=25
-'idiom'=39
+'idiom'=41
 'import'=12
-'in'=41
+'in'=43
 'locator'=16
-'mixin'=47
+'mixin'=49
 'model'=11
 'new-line'=26
 'no-space'=27
 'pop'=28
-'printable'=46
-'push'=29
+'post-comment'=29
+'pre-comment'=30
+'printable'=48
+'push'=31
 'returns'=22
 'segment'=23
-'soft-new-line'=30
-'soft-space'=31
-'string'=32
-'value'=33
+'soft-new-line'=32
+'soft-space'=33
+'string'=34
+'value'=35
 'with'=15
-'wrap-anchor'=34
-'wrap-begin-all'=35
-'wrap-begin-some'=36
-'wrap-end'=37
-'wrap-here'=38
-'{'=42
-'}'=43
+'wrap-anchor'=36
+'wrap-begin-all'=37
+'wrap-begin-some'=38
+'wrap-end'=39
+'wrap-here'=40
+'{'=44
+'}'=45
 RULE_ANY_OTHER=10
 RULE_ID=4
 RULE_INT=6
@@ -79,3 +81,5 @@
 T__45=45
 T__46=46
 T__47=47
+T__48=48
+T__49=49
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsLexer.java b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsLexer.java
index 2d81c27..834b7a9 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsLexer.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsLexer.java
@@ -49,6 +49,8 @@
     public static final int T__32=32;
     public static final int RULE_WS=9;
     public static final int RULE_ANY_OTHER=10;
+    public static final int T__48=48;
+    public static final int T__49=49;
     public static final int T__44=44;
     public static final int T__45=45;
     public static final int T__46=46;
@@ -453,10 +455,10 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:29:7: ( 'push' )
-            // InternalIdioms.g:29:9: 'push'
+            // InternalIdioms.g:29:7: ( 'post-comment' )
+            // InternalIdioms.g:29:9: 'post-comment'
             {
-            match("push");
+            match("post-comment");
 
 
             }
@@ -474,10 +476,10 @@
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:30:7: ( 'soft-new-line' )
-            // InternalIdioms.g:30:9: 'soft-new-line'
+            // InternalIdioms.g:30:7: ( 'pre-comment' )
+            // InternalIdioms.g:30:9: 'pre-comment'
             {
-            match("soft-new-line");
+            match("pre-comment");
 
 
             }
@@ -495,10 +497,10 @@
         try {
             int _type = T__31;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:31:7: ( 'soft-space' )
-            // InternalIdioms.g:31:9: 'soft-space'
+            // InternalIdioms.g:31:7: ( 'push' )
+            // InternalIdioms.g:31:9: 'push'
             {
-            match("soft-space");
+            match("push");
 
 
             }
@@ -516,10 +518,10 @@
         try {
             int _type = T__32;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:32:7: ( 'string' )
-            // InternalIdioms.g:32:9: 'string'
+            // InternalIdioms.g:32:7: ( 'soft-new-line' )
+            // InternalIdioms.g:32:9: 'soft-new-line'
             {
-            match("string");
+            match("soft-new-line");
 
 
             }
@@ -537,10 +539,10 @@
         try {
             int _type = T__33;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:33:7: ( 'value' )
-            // InternalIdioms.g:33:9: 'value'
+            // InternalIdioms.g:33:7: ( 'soft-space' )
+            // InternalIdioms.g:33:9: 'soft-space'
             {
-            match("value");
+            match("soft-space");
 
 
             }
@@ -558,10 +560,10 @@
         try {
             int _type = T__34;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:34:7: ( 'wrap-anchor' )
-            // InternalIdioms.g:34:9: 'wrap-anchor'
+            // InternalIdioms.g:34:7: ( 'string' )
+            // InternalIdioms.g:34:9: 'string'
             {
-            match("wrap-anchor");
+            match("string");
 
 
             }
@@ -579,10 +581,10 @@
         try {
             int _type = T__35;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:35:7: ( 'wrap-begin-all' )
-            // InternalIdioms.g:35:9: 'wrap-begin-all'
+            // InternalIdioms.g:35:7: ( 'value' )
+            // InternalIdioms.g:35:9: 'value'
             {
-            match("wrap-begin-all");
+            match("value");
 
 
             }
@@ -600,10 +602,10 @@
         try {
             int _type = T__36;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:36:7: ( 'wrap-begin-some' )
-            // InternalIdioms.g:36:9: 'wrap-begin-some'
+            // InternalIdioms.g:36:7: ( 'wrap-anchor' )
+            // InternalIdioms.g:36:9: 'wrap-anchor'
             {
-            match("wrap-begin-some");
+            match("wrap-anchor");
 
 
             }
@@ -621,10 +623,10 @@
         try {
             int _type = T__37;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:37:7: ( 'wrap-end' )
-            // InternalIdioms.g:37:9: 'wrap-end'
+            // InternalIdioms.g:37:7: ( 'wrap-begin-all' )
+            // InternalIdioms.g:37:9: 'wrap-begin-all'
             {
-            match("wrap-end");
+            match("wrap-begin-all");
 
 
             }
@@ -642,10 +644,10 @@
         try {
             int _type = T__38;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:38:7: ( 'wrap-here' )
-            // InternalIdioms.g:38:9: 'wrap-here'
+            // InternalIdioms.g:38:7: ( 'wrap-begin-some' )
+            // InternalIdioms.g:38:9: 'wrap-begin-some'
             {
-            match("wrap-here");
+            match("wrap-begin-some");
 
 
             }
@@ -663,10 +665,10 @@
         try {
             int _type = T__39;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:39:7: ( 'idiom' )
-            // InternalIdioms.g:39:9: 'idiom'
+            // InternalIdioms.g:39:7: ( 'wrap-end' )
+            // InternalIdioms.g:39:9: 'wrap-end'
             {
-            match("idiom");
+            match("wrap-end");
 
 
             }
@@ -684,10 +686,10 @@
         try {
             int _type = T__40;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:40:7: ( 'for' )
-            // InternalIdioms.g:40:9: 'for'
+            // InternalIdioms.g:40:7: ( 'wrap-here' )
+            // InternalIdioms.g:40:9: 'wrap-here'
             {
-            match("for");
+            match("wrap-here");
 
 
             }
@@ -705,10 +707,10 @@
         try {
             int _type = T__41;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:41:7: ( 'in' )
-            // InternalIdioms.g:41:9: 'in'
+            // InternalIdioms.g:41:7: ( 'idiom' )
+            // InternalIdioms.g:41:9: 'idiom'
             {
-            match("in");
+            match("idiom");
 
 
             }
@@ -726,10 +728,11 @@
         try {
             int _type = T__42;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:42:7: ( '{' )
-            // InternalIdioms.g:42:9: '{'
+            // InternalIdioms.g:42:7: ( 'for' )
+            // InternalIdioms.g:42:9: 'for'
             {
-            match('{');
+            match("for");
+
 
             }
 
@@ -746,10 +749,11 @@
         try {
             int _type = T__43;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:43:7: ( '}' )
-            // InternalIdioms.g:43:9: '}'
+            // InternalIdioms.g:43:7: ( 'in' )
+            // InternalIdioms.g:43:9: 'in'
             {
-            match('}');
+            match("in");
+
 
             }
 
@@ -766,11 +770,10 @@
         try {
             int _type = T__44;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:44:7: ( 'at' )
-            // InternalIdioms.g:44:9: 'at'
+            // InternalIdioms.g:44:7: ( '{' )
+            // InternalIdioms.g:44:9: '{'
             {
-            match("at");
-
+            match('{');
 
             }
 
@@ -787,11 +790,10 @@
         try {
             int _type = T__45;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:45:7: ( 'do' )
-            // InternalIdioms.g:45:9: 'do'
+            // InternalIdioms.g:45:7: ( '}' )
+            // InternalIdioms.g:45:9: '}'
             {
-            match("do");
-
+            match('}');
 
             }
 
@@ -808,10 +810,10 @@
         try {
             int _type = T__46;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:46:7: ( 'printable' )
-            // InternalIdioms.g:46:9: 'printable'
+            // InternalIdioms.g:46:7: ( 'at' )
+            // InternalIdioms.g:46:9: 'at'
             {
-            match("printable");
+            match("at");
 
 
             }
@@ -829,10 +831,10 @@
         try {
             int _type = T__47;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:47:7: ( 'mixin' )
-            // InternalIdioms.g:47:9: 'mixin'
+            // InternalIdioms.g:47:7: ( 'do' )
+            // InternalIdioms.g:47:9: 'do'
             {
-            match("mixin");
+            match("do");
 
 
             }
@@ -845,15 +847,57 @@
     }
     // $ANTLR end "T__47"
 
+    // $ANTLR start "T__48"
+    public final void mT__48() throws RecognitionException {
+        try {
+            int _type = T__48;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalIdioms.g:48:7: ( 'printable' )
+            // InternalIdioms.g:48:9: 'printable'
+            {
+            match("printable");
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__48"
+
+    // $ANTLR start "T__49"
+    public final void mT__49() throws RecognitionException {
+        try {
+            int _type = T__49;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalIdioms.g:49:7: ( 'mixin' )
+            // InternalIdioms.g:49:9: 'mixin'
+            {
+            match("mixin");
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__49"
+
     // $ANTLR start "RULE_ID"
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4531:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // InternalIdioms.g:4531:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalIdioms.g:4701:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalIdioms.g:4701:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // InternalIdioms.g:4531:11: ( '^' )?
+            // InternalIdioms.g:4701:11: ( '^' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -862,7 +906,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // InternalIdioms.g:4531:11: '^'
+                    // InternalIdioms.g:4701:11: '^'
                     {
                     match('^');
 
@@ -880,7 +924,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalIdioms.g:4531:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalIdioms.g:4701:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop2:
             do {
                 int alt2=2;
@@ -929,10 +973,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4533:10: ( ( '0' .. '9' )+ )
-            // InternalIdioms.g:4533:12: ( '0' .. '9' )+
+            // InternalIdioms.g:4703:10: ( ( '0' .. '9' )+ )
+            // InternalIdioms.g:4703:12: ( '0' .. '9' )+
             {
-            // InternalIdioms.g:4533:12: ( '0' .. '9' )+
+            // InternalIdioms.g:4703:12: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -946,7 +990,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // InternalIdioms.g:4533:13: '0' .. '9'
+            	    // InternalIdioms.g:4703:13: '0' .. '9'
             	    {
             	    matchRange('0','9');
 
@@ -978,10 +1022,10 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4535:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // InternalIdioms.g:4535:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalIdioms.g:4705:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalIdioms.g:4705:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // InternalIdioms.g:4535:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalIdioms.g:4705:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -999,10 +1043,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalIdioms.g:4535:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // InternalIdioms.g:4705:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"');
-                    // InternalIdioms.g:4535:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // InternalIdioms.g:4705:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop4:
                     do {
                         int alt4=3;
@@ -1018,7 +1062,7 @@
 
                         switch (alt4) {
                     	case 1 :
-                    	    // InternalIdioms.g:4535:21: '\\\\' .
+                    	    // InternalIdioms.g:4705:21: '\\\\' .
                     	    {
                     	    match('\\');
                     	    matchAny();
@@ -1026,7 +1070,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalIdioms.g:4535:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    // InternalIdioms.g:4705:28: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -1051,10 +1095,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:4535:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // InternalIdioms.g:4705:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\'');
-                    // InternalIdioms.g:4535:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // InternalIdioms.g:4705:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -1070,7 +1114,7 @@
 
                         switch (alt5) {
                     	case 1 :
-                    	    // InternalIdioms.g:4535:54: '\\\\' .
+                    	    // InternalIdioms.g:4705:54: '\\\\' .
                     	    {
                     	    match('\\');
                     	    matchAny();
@@ -1078,7 +1122,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalIdioms.g:4535:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // InternalIdioms.g:4705:61: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -1121,12 +1165,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4537:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // InternalIdioms.g:4537:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // InternalIdioms.g:4707:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalIdioms.g:4707:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*");
 
-            // InternalIdioms.g:4537:24: ( options {greedy=false; } : . )*
+            // InternalIdioms.g:4707:24: ( options {greedy=false; } : . )*
             loop7:
             do {
                 int alt7=2;
@@ -1151,7 +1195,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // InternalIdioms.g:4537:52: .
+            	    // InternalIdioms.g:4707:52: .
             	    {
             	    matchAny();
 
@@ -1181,12 +1225,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4539:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalIdioms.g:4539:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalIdioms.g:4709:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalIdioms.g:4709:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//");
 
-            // InternalIdioms.g:4539:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalIdioms.g:4709:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop8:
             do {
                 int alt8=2;
@@ -1199,7 +1243,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalIdioms.g:4539:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalIdioms.g:4709:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -1219,7 +1263,7 @@
                 }
             } while (true);
 
-            // InternalIdioms.g:4539:40: ( ( '\\r' )? '\\n' )?
+            // InternalIdioms.g:4709:40: ( ( '\\r' )? '\\n' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1228,9 +1272,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalIdioms.g:4539:41: ( '\\r' )? '\\n'
+                    // InternalIdioms.g:4709:41: ( '\\r' )? '\\n'
                     {
-                    // InternalIdioms.g:4539:41: ( '\\r' )?
+                    // InternalIdioms.g:4709:41: ( '\\r' )?
                     int alt9=2;
                     int LA9_0 = input.LA(1);
 
@@ -1239,7 +1283,7 @@
                     }
                     switch (alt9) {
                         case 1 :
-                            // InternalIdioms.g:4539:41: '\\r'
+                            // InternalIdioms.g:4709:41: '\\r'
                             {
                             match('\r');
 
@@ -1271,10 +1315,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4541:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalIdioms.g:4541:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalIdioms.g:4711:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalIdioms.g:4711:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalIdioms.g:4541:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalIdioms.g:4711:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt11=0;
             loop11:
             do {
@@ -1328,8 +1372,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:4543:16: ( . )
-            // InternalIdioms.g:4543:18: .
+            // InternalIdioms.g:4713:16: ( . )
+            // InternalIdioms.g:4713:18: .
             {
             matchAny();
 
@@ -1344,8 +1388,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalIdioms.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=44;
+        // InternalIdioms.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=46;
         alt12 = dfa12.predict(input);
         switch (alt12) {
             case 1 :
@@ -1608,49 +1652,63 @@
                 }
                 break;
             case 38 :
-                // InternalIdioms.g:1:232: RULE_ID
+                // InternalIdioms.g:1:232: T__48
+                {
+                mT__48();
+
+                }
+                break;
+            case 39 :
+                // InternalIdioms.g:1:238: T__49
+                {
+                mT__49();
+
+                }
+                break;
+            case 40 :
+                // InternalIdioms.g:1:244: RULE_ID
                 {
                 mRULE_ID();
 
                 }
                 break;
-            case 39 :
-                // InternalIdioms.g:1:240: RULE_INT
+            case 41 :
+                // InternalIdioms.g:1:252: RULE_INT
                 {
                 mRULE_INT();
 
                 }
                 break;
-            case 40 :
-                // InternalIdioms.g:1:249: RULE_STRING
+            case 42 :
+                // InternalIdioms.g:1:261: RULE_STRING
                 {
                 mRULE_STRING();
 
                 }
                 break;
-            case 41 :
-                // InternalIdioms.g:1:261: RULE_ML_COMMENT
+            case 43 :
+                // InternalIdioms.g:1:273: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT();
 
                 }
                 break;
-            case 42 :
-                // InternalIdioms.g:1:277: RULE_SL_COMMENT
+            case 44 :
+                // InternalIdioms.g:1:289: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT();
 
                 }
                 break;
-            case 43 :
-                // InternalIdioms.g:1:293: RULE_WS
+            case 45 :
+                // InternalIdioms.g:1:305: RULE_WS
                 {
                 mRULE_WS();
 
                 }
                 break;
-            case 44 :
-                // InternalIdioms.g:1:301: RULE_ANY_OTHER
+            case 46 :
+                // InternalIdioms.g:1:313: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER();
 
@@ -1664,17 +1722,17 @@
 
     protected DFA12 dfa12 = new DFA12(this);
     static final String DFA12_eotS =
-        "\1\uffff\2\35\1\uffff\3\35\1\32\10\35\2\uffff\1\35\1\32\2\uffff\3\32\2\uffff\2\35\1\uffff\2\35\1\103\1\uffff\1\105\1\35\1\107\3\35\1\uffff\16\35\2\uffff\1\131\5\uffff\4\35\1\uffff\1\35\1\uffff\1\35\1\uffff\4\35\1\144\7\35\1\uffff\1\154\3\35\1\uffff\5\35\1\uffff\1\167\3\35\1\uffff\6\35\2\uffff\1\u0081\2\35\1\u0084\1\u0085\1\35\1\u0087\1\35\4\uffff\1\35\1\u008e\2\35\1\uffff\2\35\2\uffff\1\35\1\u0096\2\uffff\1\u0097\1\uffff\1\35\4\uffff\1\35\1\uffff\2\35\2\uffff\1\u009d\1\u009e\1\35\2\uffff\1\35\1\uffff\1\u00a2\1\u00a3\1\u00a4\2\uffff\2\35\4\uffff\2\35\1\uffff\1\u00ab\1\u00ac\6\uffff";
+        "\1\uffff\2\35\1\uffff\3\35\1\32\10\35\2\uffff\1\35\1\32\2\uffff\3\32\2\uffff\2\35\1\uffff\2\35\1\103\1\uffff\1\105\1\35\1\107\3\35\1\uffff\16\35\2\uffff\1\133\5\uffff\4\35\1\uffff\1\35\1\uffff\1\35\1\uffff\4\35\1\146\7\35\1\uffff\1\156\5\35\1\uffff\5\35\1\uffff\1\173\3\35\1\uffff\6\35\2\uffff\1\35\1\uffff\1\35\1\u0087\1\35\1\u0089\1\u008a\1\35\1\u008c\1\35\4\uffff\1\35\1\u0093\2\35\1\uffff\2\35\2\uffff\1\35\1\uffff\1\u009b\2\uffff\1\u009c\1\uffff\1\35\4\uffff\1\35\1\uffff\2\35\2\uffff\1\u00a2\1\u00a3\1\35\2\uffff\1\35\1\uffff\1\u00a7\1\u00a8\1\u00a9\2\uffff\2\35\4\uffff\2\35\1\uffff\1\u00b0\1\u00b1\6\uffff";
     static final String DFA12_eofS =
-        "\u00b0\uffff";
+        "\u00b5\uffff";
     static final String DFA12_minS =
-        "\1\0\1\151\1\144\1\uffff\1\156\1\151\1\157\1\72\1\151\2\145\1\165\1\141\1\145\1\157\1\141\2\uffff\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\144\1\170\1\uffff\1\160\1\151\1\60\1\uffff\1\60\1\171\1\60\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\163\1\151\1\154\2\uffff\1\60\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\60\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\60\1\150\1\156\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\141\1\60\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\60\1\164\1\145\2\60\1\164\1\60\1\156\3\uffff\1\141\1\157\1\60\3\156\1\147\1\155\2\uffff\1\141\1\60\2\uffff\1\60\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\60\1\142\2\uffff\1\145\1\147\3\60\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\60\1\55\2\uffff\1\141\2\uffff";
+        "\1\0\1\151\1\144\1\uffff\1\156\1\151\1\157\1\72\1\151\2\145\1\165\1\141\1\145\1\157\1\141\2\uffff\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\144\1\170\1\uffff\1\160\1\151\1\60\1\uffff\1\60\1\171\1\60\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\145\1\163\1\154\2\uffff\1\60\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\60\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\60\1\164\1\55\1\156\1\150\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\141\1\60\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\55\1\uffff\1\164\1\60\1\145\2\60\1\164\1\60\1\156\3\uffff\1\141\1\157\1\60\3\156\1\147\1\155\2\uffff\1\141\1\uffff\1\60\2\uffff\1\60\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\60\1\142\2\uffff\1\145\1\147\3\60\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\60\1\55\2\uffff\1\141\2\uffff";
     static final String DFA12_maxS =
-        "\1\uffff\1\157\1\156\1\uffff\1\164\1\162\1\157\1\72\1\157\1\145\1\164\1\165\1\141\1\157\1\165\1\141\2\uffff\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\170\1\uffff\1\160\1\151\1\172\1\uffff\1\172\1\171\1\172\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\163\1\151\1\154\2\uffff\1\172\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\172\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\172\1\150\1\156\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\145\1\172\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\172\1\164\1\145\2\172\1\164\1\172\1\156\3\uffff\1\150\1\157\1\172\2\156\1\163\1\147\1\155\2\uffff\1\141\1\172\2\uffff\1\172\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\172\1\142\2\uffff\1\145\1\147\3\172\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\172\1\55\2\uffff\1\163\2\uffff";
+        "\1\uffff\1\157\1\156\1\uffff\1\164\1\162\1\157\1\72\1\157\1\145\1\164\1\165\1\141\1\157\1\165\1\141\2\uffff\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\170\1\uffff\1\160\1\151\1\172\1\uffff\1\172\1\171\1\172\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\163\1\151\1\163\1\154\2\uffff\1\172\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\172\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\172\1\164\1\55\1\156\1\150\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\145\1\172\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\55\1\uffff\1\164\1\172\1\145\2\172\1\164\1\172\1\156\3\uffff\1\150\1\157\1\172\2\156\1\163\1\147\1\155\2\uffff\1\141\1\uffff\1\172\2\uffff\1\172\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\172\1\142\2\uffff\1\145\1\147\3\172\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\172\1\55\2\uffff\1\163\2\uffff";
     static final String DFA12_acceptS =
-        "\3\uffff\1\3\14\uffff\1\40\1\41\2\uffff\1\46\1\47\3\uffff\1\53\1\54\2\uffff\1\46\3\uffff\1\3\6\uffff\1\12\16\uffff\1\40\1\41\1\uffff\1\47\1\50\1\51\1\52\1\53\4\uffff\1\37\1\uffff\1\4\1\uffff\1\42\14\uffff\1\21\4\uffff\1\43\12\uffff\1\36\6\uffff\1\20\1\22\10\uffff\1\7\1\10\1\5\10\uffff\1\17\1\23\2\uffff\1\1\1\45\1\uffff\1\35\1\uffff\1\30\1\uffff\1\33\1\34\1\uffff\1\13\2\uffff\1\24\1\25\3\uffff\1\27\1\2\5\uffff\1\26\1\16\3\uffff\1\6\1\14\1\15\6\uffff\1\44\1\11\1\uffff\1\31\1\32";
+        "\3\uffff\1\3\14\uffff\1\42\1\43\2\uffff\1\50\1\51\3\uffff\1\55\1\56\2\uffff\1\50\3\uffff\1\3\6\uffff\1\12\16\uffff\1\42\1\43\1\uffff\1\51\1\52\1\53\1\54\1\55\4\uffff\1\41\1\uffff\1\4\1\uffff\1\44\14\uffff\1\21\6\uffff\1\45\12\uffff\1\40\6\uffff\1\20\1\22\1\uffff\1\24\10\uffff\1\7\1\10\1\5\10\uffff\1\17\1\23\1\uffff\1\25\1\uffff\1\1\1\47\1\uffff\1\37\1\uffff\1\32\1\uffff\1\35\1\36\1\uffff\1\13\2\uffff\1\26\1\27\3\uffff\1\31\1\2\5\uffff\1\30\1\16\3\uffff\1\6\1\14\1\15\6\uffff\1\46\1\11\1\uffff\1\33\1\34";
     static final String DFA12_specialS =
-        "\1\0\25\uffff\1\1\1\2\u0098\uffff}>";
+        "\1\1\25\uffff\1\2\1\0\u009d\uffff}>";
     static final String[] DFA12_transitionS = DFA12_transitionS_.DFA12_transitionS;
     private static final class DFA12_transitionS_ {
         static final String[] DFA12_transitionS = {
@@ -1692,7 +1750,7 @@
                 "\1\57",
                 "\1\60",
                 "\1\61\11\uffff\1\62",
-                "\1\63\2\uffff\1\65\2\uffff\1\64",
+                "\1\63\2\uffff\1\64\2\uffff\1\65",
                 "\1\66",
                 "",
                 "",
@@ -1729,10 +1787,10 @@
                 "\1\122",
                 "\1\123",
                 "\1\124",
-                "\1\125",
-                "\1\126",
-                "\1\127",
-                "\1\130",
+                "\1\125\2\uffff\1\126",
+                "\1\127\3\uffff\1\130",
+                "\1\131",
+                "\1\132",
                 "",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
@@ -1741,117 +1799,122 @@
                 "",
                 "",
                 "",
-                "\1\132",
-                "\1\133",
                 "\1\134",
                 "\1\135",
-                "",
                 "\1\136",
-                "",
                 "\1\137",
                 "",
                 "\1\140",
+                "",
                 "\1\141",
+                "",
                 "\1\142",
                 "\1\143",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\144",
                 "\1\145",
-                "\1\146",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\147",
                 "\1\150",
                 "\1\151",
                 "\1\152",
                 "\1\153",
+                "\1\154",
+                "\1\155",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\155",
-                "\1\156",
                 "\1\157",
-                "",
                 "\1\160",
                 "\1\161",
                 "\1\162",
                 "\1\163",
-                "\1\164",
-                "\1\165\3\uffff\1\166",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\170",
-                "\1\171",
-                "\1\172",
                 "",
-                "\1\173",
+                "\1\164",
+                "\1\165",
+                "\1\166",
+                "\1\167",
+                "\1\170",
+                "\1\171\3\uffff\1\172",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\174",
                 "\1\175",
                 "\1\176",
+                "",
                 "\1\177",
                 "\1\u0080",
-                "",
-                "",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u0081",
                 "\1\u0082",
                 "\1\u0083",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u0084",
+                "",
+                "",
+                "\1\u0085",
+                "",
                 "\1\u0086",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\u0088",
-                "",
-                "",
-                "",
-                "\1\u0089\1\u008a\2\uffff\1\u008b\2\uffff\1\u008c",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u008b",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\u008d",
+                "",
+                "",
+                "",
+                "\1\u008e\1\u008f\2\uffff\1\u0090\2\uffff\1\u0091",
+                "\1\u0092",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\u008f",
-                "\1\u0090",
-                "\1\u0091\4\uffff\1\u0092",
-                "\1\u0093",
                 "\1\u0094",
-                "",
-                "",
                 "\1\u0095",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "",
-                "",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "",
+                "\1\u0096\4\uffff\1\u0097",
                 "\1\u0098",
-                "",
                 "\1\u0099",
                 "",
                 "",
                 "\1\u009a",
                 "",
-                "\1\u009b",
-                "\1\u009c",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "",
+                "\1\u009d",
+                "",
+                "\1\u009e",
+                "",
+                "",
                 "\1\u009f",
                 "",
-                "",
                 "\1\u00a0",
                 "\1\u00a1",
+                "",
+                "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00a4",
                 "",
                 "",
                 "\1\u00a5",
                 "\1\u00a6",
-                "\1\u00a7",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "",
                 "",
-                "",
-                "\1\u00a8",
-                "\1\u00a9",
                 "\1\u00aa",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00ab",
+                "\1\u00ac",
+                "",
+                "",
+                "",
                 "\1\u00ad",
+                "\1\u00ae",
+                "\1\u00af",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00b2",
                 "",
                 "",
-                "\1\u00ae\21\uffff\1\u00af",
+                "\1\u00b3\21\uffff\1\u00b4",
                 "",
                 ""
         };
@@ -1887,13 +1950,23 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 :
+                        int LA12_23 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_23>='\u0000' && LA12_23<='\uFFFF')) ) {s = 59;}
+
+                        else s = 26;
+
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 :
                         int LA12_0 = input.LA(1);
 
                         s = -1;
@@ -1951,7 +2024,7 @@
 
                         if ( s>=0 ) return s;
                         break;
-                    case 1 :
+                    case 2 :
                         int LA12_22 = input.LA(1);
 
                         s = -1;
@@ -1961,16 +2034,6 @@
 
                         if ( s>=0 ) return s;
                         break;
-                    case 2 :
-                        int LA12_23 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_23>='\u0000' && LA12_23<='\uFFFF')) ) {s = 59;}
-
-                        else s = 26;
-
-                        if ( s>=0 ) return s;
-                        break;
             }
             NoViableAltException nvae =
                 new NoViableAltException(getDescription(), 12, _s, input);
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsParser.java b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsParser.java
index 423f0f4..8870d43 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsParser.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ide/contentassist/antlr/internal/InternalIdiomsParser.java
@@ -35,7 +35,7 @@
 @SuppressWarnings("all")
 public class InternalIdiomsParser extends AbstractInternalContentAssistParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'model'", "'import'", "';'", "'as'", "'with'", "'locator'", "'any-assignment'", "'any-element'", "'assignment'", "'::'", "'final'", "'returns'", "'segment'", "'custom'", "'half-new-line'", "'new-line'", "'no-space'", "'pop'", "'push'", "'soft-new-line'", "'soft-space'", "'string'", "'value'", "'wrap-anchor'", "'wrap-begin-all'", "'wrap-begin-some'", "'wrap-end'", "'wrap-here'", "'idiom'", "'for'", "'in'", "'{'", "'}'", "'at'", "'do'", "'printable'", "'mixin'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'model'", "'import'", "';'", "'as'", "'with'", "'locator'", "'any-assignment'", "'any-element'", "'assignment'", "'::'", "'final'", "'returns'", "'segment'", "'custom'", "'half-new-line'", "'new-line'", "'no-space'", "'pop'", "'post-comment'", "'pre-comment'", "'push'", "'soft-new-line'", "'soft-space'", "'string'", "'value'", "'wrap-anchor'", "'wrap-begin-all'", "'wrap-begin-some'", "'wrap-end'", "'wrap-here'", "'idiom'", "'for'", "'in'", "'{'", "'}'", "'at'", "'do'", "'printable'", "'mixin'"
     };
     public static final int T__19=19;
     public static final int T__15=15;
@@ -74,6 +74,8 @@
     public static final int T__32=32;
     public static final int RULE_WS=9;
     public static final int RULE_ANY_OTHER=10;
+    public static final int T__48=48;
+    public static final int T__49=49;
     public static final int T__44=44;
     public static final int T__45=45;
     public static final int T__46=46;
@@ -1733,12 +1735,182 @@
     // $ANTLR end "rulePopSegment"
 
 
+    // $ANTLR start "entryRulePostCommentSegment"
+    // InternalIdioms.g:538:1: entryRulePostCommentSegment : rulePostCommentSegment EOF ;
+    public final void entryRulePostCommentSegment() throws RecognitionException {
+        try {
+            // InternalIdioms.g:539:1: ( rulePostCommentSegment EOF )
+            // InternalIdioms.g:540:1: rulePostCommentSegment EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPostCommentSegmentRule());
+            }
+            pushFollow(FollowSets000.FOLLOW_1);
+            rulePostCommentSegment();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPostCommentSegmentRule());
+            }
+            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRulePostCommentSegment"
+
+
+    // $ANTLR start "rulePostCommentSegment"
+    // InternalIdioms.g:547:1: rulePostCommentSegment : ( ( rule__PostCommentSegment__Group__0 ) ) ;
+    public final void rulePostCommentSegment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:551:2: ( ( ( rule__PostCommentSegment__Group__0 ) ) )
+            // InternalIdioms.g:552:2: ( ( rule__PostCommentSegment__Group__0 ) )
+            {
+            // InternalIdioms.g:552:2: ( ( rule__PostCommentSegment__Group__0 ) )
+            // InternalIdioms.g:553:3: ( rule__PostCommentSegment__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPostCommentSegmentAccess().getGroup());
+            }
+            // InternalIdioms.g:554:3: ( rule__PostCommentSegment__Group__0 )
+            // InternalIdioms.g:554:4: rule__PostCommentSegment__Group__0
+            {
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PostCommentSegment__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPostCommentSegmentAccess().getGroup());
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rulePostCommentSegment"
+
+
+    // $ANTLR start "entryRulePreCommentSegment"
+    // InternalIdioms.g:563:1: entryRulePreCommentSegment : rulePreCommentSegment EOF ;
+    public final void entryRulePreCommentSegment() throws RecognitionException {
+        try {
+            // InternalIdioms.g:564:1: ( rulePreCommentSegment EOF )
+            // InternalIdioms.g:565:1: rulePreCommentSegment EOF
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPreCommentSegmentRule());
+            }
+            pushFollow(FollowSets000.FOLLOW_1);
+            rulePreCommentSegment();
+
+            state._fsp--;
+            if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPreCommentSegmentRule());
+            }
+            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+        }
+        return ;
+    }
+    // $ANTLR end "entryRulePreCommentSegment"
+
+
+    // $ANTLR start "rulePreCommentSegment"
+    // InternalIdioms.g:572:1: rulePreCommentSegment : ( ( rule__PreCommentSegment__Group__0 ) ) ;
+    public final void rulePreCommentSegment() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:576:2: ( ( ( rule__PreCommentSegment__Group__0 ) ) )
+            // InternalIdioms.g:577:2: ( ( rule__PreCommentSegment__Group__0 ) )
+            {
+            // InternalIdioms.g:577:2: ( ( rule__PreCommentSegment__Group__0 ) )
+            // InternalIdioms.g:578:3: ( rule__PreCommentSegment__Group__0 )
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPreCommentSegmentAccess().getGroup());
+            }
+            // InternalIdioms.g:579:3: ( rule__PreCommentSegment__Group__0 )
+            // InternalIdioms.g:579:4: rule__PreCommentSegment__Group__0
+            {
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PreCommentSegment__Group__0();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPreCommentSegmentAccess().getGroup());
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rulePreCommentSegment"
+
+
     // $ANTLR start "entryRulePushSegment"
-    // InternalIdioms.g:538:1: entryRulePushSegment : rulePushSegment EOF ;
+    // InternalIdioms.g:588:1: entryRulePushSegment : rulePushSegment EOF ;
     public final void entryRulePushSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:539:1: ( rulePushSegment EOF )
-            // InternalIdioms.g:540:1: rulePushSegment EOF
+            // InternalIdioms.g:589:1: ( rulePushSegment EOF )
+            // InternalIdioms.g:590:1: rulePushSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPushSegmentRule());
@@ -1768,23 +1940,23 @@
 
 
     // $ANTLR start "rulePushSegment"
-    // InternalIdioms.g:547:1: rulePushSegment : ( ( rule__PushSegment__Group__0 ) ) ;
+    // InternalIdioms.g:597:1: rulePushSegment : ( ( rule__PushSegment__Group__0 ) ) ;
     public final void rulePushSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:551:2: ( ( ( rule__PushSegment__Group__0 ) ) )
-            // InternalIdioms.g:552:2: ( ( rule__PushSegment__Group__0 ) )
+            // InternalIdioms.g:601:2: ( ( ( rule__PushSegment__Group__0 ) ) )
+            // InternalIdioms.g:602:2: ( ( rule__PushSegment__Group__0 ) )
             {
-            // InternalIdioms.g:552:2: ( ( rule__PushSegment__Group__0 ) )
-            // InternalIdioms.g:553:3: ( rule__PushSegment__Group__0 )
+            // InternalIdioms.g:602:2: ( ( rule__PushSegment__Group__0 ) )
+            // InternalIdioms.g:603:3: ( rule__PushSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPushSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:554:3: ( rule__PushSegment__Group__0 )
-            // InternalIdioms.g:554:4: rule__PushSegment__Group__0
+            // InternalIdioms.g:604:3: ( rule__PushSegment__Group__0 )
+            // InternalIdioms.g:604:4: rule__PushSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__PushSegment__Group__0();
@@ -1819,11 +1991,11 @@
 
 
     // $ANTLR start "entryRuleSoftNewLineSegment"
-    // InternalIdioms.g:563:1: entryRuleSoftNewLineSegment : ruleSoftNewLineSegment EOF ;
+    // InternalIdioms.g:613:1: entryRuleSoftNewLineSegment : ruleSoftNewLineSegment EOF ;
     public final void entryRuleSoftNewLineSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:564:1: ( ruleSoftNewLineSegment EOF )
-            // InternalIdioms.g:565:1: ruleSoftNewLineSegment EOF
+            // InternalIdioms.g:614:1: ( ruleSoftNewLineSegment EOF )
+            // InternalIdioms.g:615:1: ruleSoftNewLineSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftNewLineSegmentRule());
@@ -1853,23 +2025,23 @@
 
 
     // $ANTLR start "ruleSoftNewLineSegment"
-    // InternalIdioms.g:572:1: ruleSoftNewLineSegment : ( ( rule__SoftNewLineSegment__Group__0 ) ) ;
+    // InternalIdioms.g:622:1: ruleSoftNewLineSegment : ( ( rule__SoftNewLineSegment__Group__0 ) ) ;
     public final void ruleSoftNewLineSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:576:2: ( ( ( rule__SoftNewLineSegment__Group__0 ) ) )
-            // InternalIdioms.g:577:2: ( ( rule__SoftNewLineSegment__Group__0 ) )
+            // InternalIdioms.g:626:2: ( ( ( rule__SoftNewLineSegment__Group__0 ) ) )
+            // InternalIdioms.g:627:2: ( ( rule__SoftNewLineSegment__Group__0 ) )
             {
-            // InternalIdioms.g:577:2: ( ( rule__SoftNewLineSegment__Group__0 ) )
-            // InternalIdioms.g:578:3: ( rule__SoftNewLineSegment__Group__0 )
+            // InternalIdioms.g:627:2: ( ( rule__SoftNewLineSegment__Group__0 ) )
+            // InternalIdioms.g:628:3: ( rule__SoftNewLineSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftNewLineSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:579:3: ( rule__SoftNewLineSegment__Group__0 )
-            // InternalIdioms.g:579:4: rule__SoftNewLineSegment__Group__0
+            // InternalIdioms.g:629:3: ( rule__SoftNewLineSegment__Group__0 )
+            // InternalIdioms.g:629:4: rule__SoftNewLineSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SoftNewLineSegment__Group__0();
@@ -1904,11 +2076,11 @@
 
 
     // $ANTLR start "entryRuleSoftSpaceSegment"
-    // InternalIdioms.g:588:1: entryRuleSoftSpaceSegment : ruleSoftSpaceSegment EOF ;
+    // InternalIdioms.g:638:1: entryRuleSoftSpaceSegment : ruleSoftSpaceSegment EOF ;
     public final void entryRuleSoftSpaceSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:589:1: ( ruleSoftSpaceSegment EOF )
-            // InternalIdioms.g:590:1: ruleSoftSpaceSegment EOF
+            // InternalIdioms.g:639:1: ( ruleSoftSpaceSegment EOF )
+            // InternalIdioms.g:640:1: ruleSoftSpaceSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftSpaceSegmentRule());
@@ -1938,23 +2110,23 @@
 
 
     // $ANTLR start "ruleSoftSpaceSegment"
-    // InternalIdioms.g:597:1: ruleSoftSpaceSegment : ( ( rule__SoftSpaceSegment__Group__0 ) ) ;
+    // InternalIdioms.g:647:1: ruleSoftSpaceSegment : ( ( rule__SoftSpaceSegment__Group__0 ) ) ;
     public final void ruleSoftSpaceSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:601:2: ( ( ( rule__SoftSpaceSegment__Group__0 ) ) )
-            // InternalIdioms.g:602:2: ( ( rule__SoftSpaceSegment__Group__0 ) )
+            // InternalIdioms.g:651:2: ( ( ( rule__SoftSpaceSegment__Group__0 ) ) )
+            // InternalIdioms.g:652:2: ( ( rule__SoftSpaceSegment__Group__0 ) )
             {
-            // InternalIdioms.g:602:2: ( ( rule__SoftSpaceSegment__Group__0 ) )
-            // InternalIdioms.g:603:3: ( rule__SoftSpaceSegment__Group__0 )
+            // InternalIdioms.g:652:2: ( ( rule__SoftSpaceSegment__Group__0 ) )
+            // InternalIdioms.g:653:3: ( rule__SoftSpaceSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftSpaceSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:604:3: ( rule__SoftSpaceSegment__Group__0 )
-            // InternalIdioms.g:604:4: rule__SoftSpaceSegment__Group__0
+            // InternalIdioms.g:654:3: ( rule__SoftSpaceSegment__Group__0 )
+            // InternalIdioms.g:654:4: rule__SoftSpaceSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SoftSpaceSegment__Group__0();
@@ -1989,11 +2161,11 @@
 
 
     // $ANTLR start "entryRuleStringSegment"
-    // InternalIdioms.g:613:1: entryRuleStringSegment : ruleStringSegment EOF ;
+    // InternalIdioms.g:663:1: entryRuleStringSegment : ruleStringSegment EOF ;
     public final void entryRuleStringSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:614:1: ( ruleStringSegment EOF )
-            // InternalIdioms.g:615:1: ruleStringSegment EOF
+            // InternalIdioms.g:664:1: ( ruleStringSegment EOF )
+            // InternalIdioms.g:665:1: ruleStringSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentRule());
@@ -2023,23 +2195,23 @@
 
 
     // $ANTLR start "ruleStringSegment"
-    // InternalIdioms.g:622:1: ruleStringSegment : ( ( rule__StringSegment__Group__0 ) ) ;
+    // InternalIdioms.g:672:1: ruleStringSegment : ( ( rule__StringSegment__Group__0 ) ) ;
     public final void ruleStringSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:626:2: ( ( ( rule__StringSegment__Group__0 ) ) )
-            // InternalIdioms.g:627:2: ( ( rule__StringSegment__Group__0 ) )
+            // InternalIdioms.g:676:2: ( ( ( rule__StringSegment__Group__0 ) ) )
+            // InternalIdioms.g:677:2: ( ( rule__StringSegment__Group__0 ) )
             {
-            // InternalIdioms.g:627:2: ( ( rule__StringSegment__Group__0 ) )
-            // InternalIdioms.g:628:3: ( rule__StringSegment__Group__0 )
+            // InternalIdioms.g:677:2: ( ( rule__StringSegment__Group__0 ) )
+            // InternalIdioms.g:678:3: ( rule__StringSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:629:3: ( rule__StringSegment__Group__0 )
-            // InternalIdioms.g:629:4: rule__StringSegment__Group__0
+            // InternalIdioms.g:679:3: ( rule__StringSegment__Group__0 )
+            // InternalIdioms.g:679:4: rule__StringSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__StringSegment__Group__0();
@@ -2074,11 +2246,11 @@
 
 
     // $ANTLR start "entryRuleValueSegment"
-    // InternalIdioms.g:638:1: entryRuleValueSegment : ruleValueSegment EOF ;
+    // InternalIdioms.g:688:1: entryRuleValueSegment : ruleValueSegment EOF ;
     public final void entryRuleValueSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:639:1: ( ruleValueSegment EOF )
-            // InternalIdioms.g:640:1: ruleValueSegment EOF
+            // InternalIdioms.g:689:1: ( ruleValueSegment EOF )
+            // InternalIdioms.g:690:1: ruleValueSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getValueSegmentRule());
@@ -2108,23 +2280,23 @@
 
 
     // $ANTLR start "ruleValueSegment"
-    // InternalIdioms.g:647:1: ruleValueSegment : ( ( rule__ValueSegment__Group__0 ) ) ;
+    // InternalIdioms.g:697:1: ruleValueSegment : ( ( rule__ValueSegment__Group__0 ) ) ;
     public final void ruleValueSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:651:2: ( ( ( rule__ValueSegment__Group__0 ) ) )
-            // InternalIdioms.g:652:2: ( ( rule__ValueSegment__Group__0 ) )
+            // InternalIdioms.g:701:2: ( ( ( rule__ValueSegment__Group__0 ) ) )
+            // InternalIdioms.g:702:2: ( ( rule__ValueSegment__Group__0 ) )
             {
-            // InternalIdioms.g:652:2: ( ( rule__ValueSegment__Group__0 ) )
-            // InternalIdioms.g:653:3: ( rule__ValueSegment__Group__0 )
+            // InternalIdioms.g:702:2: ( ( rule__ValueSegment__Group__0 ) )
+            // InternalIdioms.g:703:3: ( rule__ValueSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getValueSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:654:3: ( rule__ValueSegment__Group__0 )
-            // InternalIdioms.g:654:4: rule__ValueSegment__Group__0
+            // InternalIdioms.g:704:3: ( rule__ValueSegment__Group__0 )
+            // InternalIdioms.g:704:4: rule__ValueSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ValueSegment__Group__0();
@@ -2159,11 +2331,11 @@
 
 
     // $ANTLR start "entryRuleWrapAnchorSegment"
-    // InternalIdioms.g:663:1: entryRuleWrapAnchorSegment : ruleWrapAnchorSegment EOF ;
+    // InternalIdioms.g:713:1: entryRuleWrapAnchorSegment : ruleWrapAnchorSegment EOF ;
     public final void entryRuleWrapAnchorSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:664:1: ( ruleWrapAnchorSegment EOF )
-            // InternalIdioms.g:665:1: ruleWrapAnchorSegment EOF
+            // InternalIdioms.g:714:1: ( ruleWrapAnchorSegment EOF )
+            // InternalIdioms.g:715:1: ruleWrapAnchorSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapAnchorSegmentRule());
@@ -2193,23 +2365,23 @@
 
 
     // $ANTLR start "ruleWrapAnchorSegment"
-    // InternalIdioms.g:672:1: ruleWrapAnchorSegment : ( ( rule__WrapAnchorSegment__Group__0 ) ) ;
+    // InternalIdioms.g:722:1: ruleWrapAnchorSegment : ( ( rule__WrapAnchorSegment__Group__0 ) ) ;
     public final void ruleWrapAnchorSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:676:2: ( ( ( rule__WrapAnchorSegment__Group__0 ) ) )
-            // InternalIdioms.g:677:2: ( ( rule__WrapAnchorSegment__Group__0 ) )
+            // InternalIdioms.g:726:2: ( ( ( rule__WrapAnchorSegment__Group__0 ) ) )
+            // InternalIdioms.g:727:2: ( ( rule__WrapAnchorSegment__Group__0 ) )
             {
-            // InternalIdioms.g:677:2: ( ( rule__WrapAnchorSegment__Group__0 ) )
-            // InternalIdioms.g:678:3: ( rule__WrapAnchorSegment__Group__0 )
+            // InternalIdioms.g:727:2: ( ( rule__WrapAnchorSegment__Group__0 ) )
+            // InternalIdioms.g:728:3: ( rule__WrapAnchorSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapAnchorSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:679:3: ( rule__WrapAnchorSegment__Group__0 )
-            // InternalIdioms.g:679:4: rule__WrapAnchorSegment__Group__0
+            // InternalIdioms.g:729:3: ( rule__WrapAnchorSegment__Group__0 )
+            // InternalIdioms.g:729:4: rule__WrapAnchorSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapAnchorSegment__Group__0();
@@ -2244,11 +2416,11 @@
 
 
     // $ANTLR start "entryRuleWrapBeginAllSegment"
-    // InternalIdioms.g:688:1: entryRuleWrapBeginAllSegment : ruleWrapBeginAllSegment EOF ;
+    // InternalIdioms.g:738:1: entryRuleWrapBeginAllSegment : ruleWrapBeginAllSegment EOF ;
     public final void entryRuleWrapBeginAllSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:689:1: ( ruleWrapBeginAllSegment EOF )
-            // InternalIdioms.g:690:1: ruleWrapBeginAllSegment EOF
+            // InternalIdioms.g:739:1: ( ruleWrapBeginAllSegment EOF )
+            // InternalIdioms.g:740:1: ruleWrapBeginAllSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginAllSegmentRule());
@@ -2278,23 +2450,23 @@
 
 
     // $ANTLR start "ruleWrapBeginAllSegment"
-    // InternalIdioms.g:697:1: ruleWrapBeginAllSegment : ( ( rule__WrapBeginAllSegment__Group__0 ) ) ;
+    // InternalIdioms.g:747:1: ruleWrapBeginAllSegment : ( ( rule__WrapBeginAllSegment__Group__0 ) ) ;
     public final void ruleWrapBeginAllSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:701:2: ( ( ( rule__WrapBeginAllSegment__Group__0 ) ) )
-            // InternalIdioms.g:702:2: ( ( rule__WrapBeginAllSegment__Group__0 ) )
+            // InternalIdioms.g:751:2: ( ( ( rule__WrapBeginAllSegment__Group__0 ) ) )
+            // InternalIdioms.g:752:2: ( ( rule__WrapBeginAllSegment__Group__0 ) )
             {
-            // InternalIdioms.g:702:2: ( ( rule__WrapBeginAllSegment__Group__0 ) )
-            // InternalIdioms.g:703:3: ( rule__WrapBeginAllSegment__Group__0 )
+            // InternalIdioms.g:752:2: ( ( rule__WrapBeginAllSegment__Group__0 ) )
+            // InternalIdioms.g:753:3: ( rule__WrapBeginAllSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginAllSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:704:3: ( rule__WrapBeginAllSegment__Group__0 )
-            // InternalIdioms.g:704:4: rule__WrapBeginAllSegment__Group__0
+            // InternalIdioms.g:754:3: ( rule__WrapBeginAllSegment__Group__0 )
+            // InternalIdioms.g:754:4: rule__WrapBeginAllSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapBeginAllSegment__Group__0();
@@ -2329,11 +2501,11 @@
 
 
     // $ANTLR start "entryRuleWrapBeginSomeSegment"
-    // InternalIdioms.g:713:1: entryRuleWrapBeginSomeSegment : ruleWrapBeginSomeSegment EOF ;
+    // InternalIdioms.g:763:1: entryRuleWrapBeginSomeSegment : ruleWrapBeginSomeSegment EOF ;
     public final void entryRuleWrapBeginSomeSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:714:1: ( ruleWrapBeginSomeSegment EOF )
-            // InternalIdioms.g:715:1: ruleWrapBeginSomeSegment EOF
+            // InternalIdioms.g:764:1: ( ruleWrapBeginSomeSegment EOF )
+            // InternalIdioms.g:765:1: ruleWrapBeginSomeSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginSomeSegmentRule());
@@ -2363,23 +2535,23 @@
 
 
     // $ANTLR start "ruleWrapBeginSomeSegment"
-    // InternalIdioms.g:722:1: ruleWrapBeginSomeSegment : ( ( rule__WrapBeginSomeSegment__Group__0 ) ) ;
+    // InternalIdioms.g:772:1: ruleWrapBeginSomeSegment : ( ( rule__WrapBeginSomeSegment__Group__0 ) ) ;
     public final void ruleWrapBeginSomeSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:726:2: ( ( ( rule__WrapBeginSomeSegment__Group__0 ) ) )
-            // InternalIdioms.g:727:2: ( ( rule__WrapBeginSomeSegment__Group__0 ) )
+            // InternalIdioms.g:776:2: ( ( ( rule__WrapBeginSomeSegment__Group__0 ) ) )
+            // InternalIdioms.g:777:2: ( ( rule__WrapBeginSomeSegment__Group__0 ) )
             {
-            // InternalIdioms.g:727:2: ( ( rule__WrapBeginSomeSegment__Group__0 ) )
-            // InternalIdioms.g:728:3: ( rule__WrapBeginSomeSegment__Group__0 )
+            // InternalIdioms.g:777:2: ( ( rule__WrapBeginSomeSegment__Group__0 ) )
+            // InternalIdioms.g:778:3: ( rule__WrapBeginSomeSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginSomeSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:729:3: ( rule__WrapBeginSomeSegment__Group__0 )
-            // InternalIdioms.g:729:4: rule__WrapBeginSomeSegment__Group__0
+            // InternalIdioms.g:779:3: ( rule__WrapBeginSomeSegment__Group__0 )
+            // InternalIdioms.g:779:4: rule__WrapBeginSomeSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapBeginSomeSegment__Group__0();
@@ -2414,11 +2586,11 @@
 
 
     // $ANTLR start "entryRuleWrapEndSegment"
-    // InternalIdioms.g:738:1: entryRuleWrapEndSegment : ruleWrapEndSegment EOF ;
+    // InternalIdioms.g:788:1: entryRuleWrapEndSegment : ruleWrapEndSegment EOF ;
     public final void entryRuleWrapEndSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:739:1: ( ruleWrapEndSegment EOF )
-            // InternalIdioms.g:740:1: ruleWrapEndSegment EOF
+            // InternalIdioms.g:789:1: ( ruleWrapEndSegment EOF )
+            // InternalIdioms.g:790:1: ruleWrapEndSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapEndSegmentRule());
@@ -2448,23 +2620,23 @@
 
 
     // $ANTLR start "ruleWrapEndSegment"
-    // InternalIdioms.g:747:1: ruleWrapEndSegment : ( ( rule__WrapEndSegment__Group__0 ) ) ;
+    // InternalIdioms.g:797:1: ruleWrapEndSegment : ( ( rule__WrapEndSegment__Group__0 ) ) ;
     public final void ruleWrapEndSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:751:2: ( ( ( rule__WrapEndSegment__Group__0 ) ) )
-            // InternalIdioms.g:752:2: ( ( rule__WrapEndSegment__Group__0 ) )
+            // InternalIdioms.g:801:2: ( ( ( rule__WrapEndSegment__Group__0 ) ) )
+            // InternalIdioms.g:802:2: ( ( rule__WrapEndSegment__Group__0 ) )
             {
-            // InternalIdioms.g:752:2: ( ( rule__WrapEndSegment__Group__0 ) )
-            // InternalIdioms.g:753:3: ( rule__WrapEndSegment__Group__0 )
+            // InternalIdioms.g:802:2: ( ( rule__WrapEndSegment__Group__0 ) )
+            // InternalIdioms.g:803:3: ( rule__WrapEndSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapEndSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:754:3: ( rule__WrapEndSegment__Group__0 )
-            // InternalIdioms.g:754:4: rule__WrapEndSegment__Group__0
+            // InternalIdioms.g:804:3: ( rule__WrapEndSegment__Group__0 )
+            // InternalIdioms.g:804:4: rule__WrapEndSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapEndSegment__Group__0();
@@ -2499,11 +2671,11 @@
 
 
     // $ANTLR start "entryRuleWrapHereSegment"
-    // InternalIdioms.g:763:1: entryRuleWrapHereSegment : ruleWrapHereSegment EOF ;
+    // InternalIdioms.g:813:1: entryRuleWrapHereSegment : ruleWrapHereSegment EOF ;
     public final void entryRuleWrapHereSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:764:1: ( ruleWrapHereSegment EOF )
-            // InternalIdioms.g:765:1: ruleWrapHereSegment EOF
+            // InternalIdioms.g:814:1: ( ruleWrapHereSegment EOF )
+            // InternalIdioms.g:815:1: ruleWrapHereSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapHereSegmentRule());
@@ -2533,23 +2705,23 @@
 
 
     // $ANTLR start "ruleWrapHereSegment"
-    // InternalIdioms.g:772:1: ruleWrapHereSegment : ( ( rule__WrapHereSegment__Group__0 ) ) ;
+    // InternalIdioms.g:822:1: ruleWrapHereSegment : ( ( rule__WrapHereSegment__Group__0 ) ) ;
     public final void ruleWrapHereSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:776:2: ( ( ( rule__WrapHereSegment__Group__0 ) ) )
-            // InternalIdioms.g:777:2: ( ( rule__WrapHereSegment__Group__0 ) )
+            // InternalIdioms.g:826:2: ( ( ( rule__WrapHereSegment__Group__0 ) ) )
+            // InternalIdioms.g:827:2: ( ( rule__WrapHereSegment__Group__0 ) )
             {
-            // InternalIdioms.g:777:2: ( ( rule__WrapHereSegment__Group__0 ) )
-            // InternalIdioms.g:778:3: ( rule__WrapHereSegment__Group__0 )
+            // InternalIdioms.g:827:2: ( ( rule__WrapHereSegment__Group__0 ) )
+            // InternalIdioms.g:828:3: ( rule__WrapHereSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapHereSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:779:3: ( rule__WrapHereSegment__Group__0 )
-            // InternalIdioms.g:779:4: rule__WrapHereSegment__Group__0
+            // InternalIdioms.g:829:3: ( rule__WrapHereSegment__Group__0 )
+            // InternalIdioms.g:829:4: rule__WrapHereSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapHereSegment__Group__0();
@@ -2584,11 +2756,11 @@
 
 
     // $ANTLR start "entryRuleReferredSegment"
-    // InternalIdioms.g:788:1: entryRuleReferredSegment : ruleReferredSegment EOF ;
+    // InternalIdioms.g:838:1: entryRuleReferredSegment : ruleReferredSegment EOF ;
     public final void entryRuleReferredSegment() throws RecognitionException {
         try {
-            // InternalIdioms.g:789:1: ( ruleReferredSegment EOF )
-            // InternalIdioms.g:790:1: ruleReferredSegment EOF
+            // InternalIdioms.g:839:1: ( ruleReferredSegment EOF )
+            // InternalIdioms.g:840:1: ruleReferredSegment EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentRule());
@@ -2618,23 +2790,23 @@
 
 
     // $ANTLR start "ruleReferredSegment"
-    // InternalIdioms.g:797:1: ruleReferredSegment : ( ( rule__ReferredSegment__Group__0 ) ) ;
+    // InternalIdioms.g:847:1: ruleReferredSegment : ( ( rule__ReferredSegment__Group__0 ) ) ;
     public final void ruleReferredSegment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:801:2: ( ( ( rule__ReferredSegment__Group__0 ) ) )
-            // InternalIdioms.g:802:2: ( ( rule__ReferredSegment__Group__0 ) )
+            // InternalIdioms.g:851:2: ( ( ( rule__ReferredSegment__Group__0 ) ) )
+            // InternalIdioms.g:852:2: ( ( rule__ReferredSegment__Group__0 ) )
             {
-            // InternalIdioms.g:802:2: ( ( rule__ReferredSegment__Group__0 ) )
-            // InternalIdioms.g:803:3: ( rule__ReferredSegment__Group__0 )
+            // InternalIdioms.g:852:2: ( ( rule__ReferredSegment__Group__0 ) )
+            // InternalIdioms.g:853:3: ( rule__ReferredSegment__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getGroup());
             }
-            // InternalIdioms.g:804:3: ( rule__ReferredSegment__Group__0 )
-            // InternalIdioms.g:804:4: rule__ReferredSegment__Group__0
+            // InternalIdioms.g:854:3: ( rule__ReferredSegment__Group__0 )
+            // InternalIdioms.g:854:4: rule__ReferredSegment__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredSegment__Group__0();
@@ -2669,11 +2841,11 @@
 
 
     // $ANTLR start "entryRuleIdiom"
-    // InternalIdioms.g:813:1: entryRuleIdiom : ruleIdiom EOF ;
+    // InternalIdioms.g:863:1: entryRuleIdiom : ruleIdiom EOF ;
     public final void entryRuleIdiom() throws RecognitionException {
         try {
-            // InternalIdioms.g:814:1: ( ruleIdiom EOF )
-            // InternalIdioms.g:815:1: ruleIdiom EOF
+            // InternalIdioms.g:864:1: ( ruleIdiom EOF )
+            // InternalIdioms.g:865:1: ruleIdiom EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomRule());
@@ -2703,23 +2875,23 @@
 
 
     // $ANTLR start "ruleIdiom"
-    // InternalIdioms.g:822:1: ruleIdiom : ( ( rule__Idiom__Group__0 ) ) ;
+    // InternalIdioms.g:872:1: ruleIdiom : ( ( rule__Idiom__Group__0 ) ) ;
     public final void ruleIdiom() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:826:2: ( ( ( rule__Idiom__Group__0 ) ) )
-            // InternalIdioms.g:827:2: ( ( rule__Idiom__Group__0 ) )
+            // InternalIdioms.g:876:2: ( ( ( rule__Idiom__Group__0 ) ) )
+            // InternalIdioms.g:877:2: ( ( rule__Idiom__Group__0 ) )
             {
-            // InternalIdioms.g:827:2: ( ( rule__Idiom__Group__0 ) )
-            // InternalIdioms.g:828:3: ( rule__Idiom__Group__0 )
+            // InternalIdioms.g:877:2: ( ( rule__Idiom__Group__0 ) )
+            // InternalIdioms.g:878:3: ( rule__Idiom__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getGroup());
             }
-            // InternalIdioms.g:829:3: ( rule__Idiom__Group__0 )
-            // InternalIdioms.g:829:4: rule__Idiom__Group__0
+            // InternalIdioms.g:879:3: ( rule__Idiom__Group__0 )
+            // InternalIdioms.g:879:4: rule__Idiom__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group__0();
@@ -2754,11 +2926,11 @@
 
 
     // $ANTLR start "entryRuleSubIdiom"
-    // InternalIdioms.g:838:1: entryRuleSubIdiom : ruleSubIdiom EOF ;
+    // InternalIdioms.g:888:1: entryRuleSubIdiom : ruleSubIdiom EOF ;
     public final void entryRuleSubIdiom() throws RecognitionException {
         try {
-            // InternalIdioms.g:839:1: ( ruleSubIdiom EOF )
-            // InternalIdioms.g:840:1: ruleSubIdiom EOF
+            // InternalIdioms.g:889:1: ( ruleSubIdiom EOF )
+            // InternalIdioms.g:890:1: ruleSubIdiom EOF
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomRule());
@@ -2788,23 +2960,23 @@
 
 
     // $ANTLR start "ruleSubIdiom"
-    // InternalIdioms.g:847:1: ruleSubIdiom : ( ( rule__SubIdiom__Group__0 ) ) ;
+    // InternalIdioms.g:897:1: ruleSubIdiom : ( ( rule__SubIdiom__Group__0 ) ) ;
     public final void ruleSubIdiom() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:851:2: ( ( ( rule__SubIdiom__Group__0 ) ) )
-            // InternalIdioms.g:852:2: ( ( rule__SubIdiom__Group__0 ) )
+            // InternalIdioms.g:901:2: ( ( ( rule__SubIdiom__Group__0 ) ) )
+            // InternalIdioms.g:902:2: ( ( rule__SubIdiom__Group__0 ) )
             {
-            // InternalIdioms.g:852:2: ( ( rule__SubIdiom__Group__0 ) )
-            // InternalIdioms.g:853:3: ( rule__SubIdiom__Group__0 )
+            // InternalIdioms.g:902:2: ( ( rule__SubIdiom__Group__0 ) )
+            // InternalIdioms.g:903:3: ( rule__SubIdiom__Group__0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getGroup());
             }
-            // InternalIdioms.g:854:3: ( rule__SubIdiom__Group__0 )
-            // InternalIdioms.g:854:4: rule__SubIdiom__Group__0
+            // InternalIdioms.g:904:3: ( rule__SubIdiom__Group__0 )
+            // InternalIdioms.g:904:4: rule__SubIdiom__Group__0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__Group__0();
@@ -2839,13 +3011,13 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Alternatives_4"
-    // InternalIdioms.g:862:1: rule__IdiomsModel__Alternatives_4 : ( ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) ) | ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) ) | ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) ) );
+    // InternalIdioms.g:912:1: rule__IdiomsModel__Alternatives_4 : ( ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) ) | ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) ) | ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) ) );
     public final void rule__IdiomsModel__Alternatives_4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:866:1: ( ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) ) | ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) ) | ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) ) )
+            // InternalIdioms.g:916:1: ( ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) ) | ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) ) | ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) ) )
             int alt1=3;
             switch ( input.LA(1) ) {
             case 16:
@@ -2858,8 +3030,8 @@
                 alt1=2;
                 }
                 break;
-            case 39:
-            case 47:
+            case 41:
+            case 49:
                 {
                 alt1=3;
                 }
@@ -2874,16 +3046,16 @@
 
             switch (alt1) {
                 case 1 :
-                    // InternalIdioms.g:867:2: ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) )
+                    // InternalIdioms.g:917:2: ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) )
                     {
-                    // InternalIdioms.g:867:2: ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) )
-                    // InternalIdioms.g:868:3: ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 )
+                    // InternalIdioms.g:917:2: ( ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 ) )
+                    // InternalIdioms.g:918:3: ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIdiomsModelAccess().getOwnedLocatorDeclarationsAssignment_4_0());
                     }
-                    // InternalIdioms.g:869:3: ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 )
-                    // InternalIdioms.g:869:4: rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0
+                    // InternalIdioms.g:919:3: ( rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 )
+                    // InternalIdioms.g:919:4: rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0();
@@ -2903,16 +3075,16 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:873:2: ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) )
+                    // InternalIdioms.g:923:2: ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) )
                     {
-                    // InternalIdioms.g:873:2: ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) )
-                    // InternalIdioms.g:874:3: ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 )
+                    // InternalIdioms.g:923:2: ( ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 ) )
+                    // InternalIdioms.g:924:3: ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIdiomsModelAccess().getOwnedSegmentDeclarationsAssignment_4_1());
                     }
-                    // InternalIdioms.g:875:3: ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 )
-                    // InternalIdioms.g:875:4: rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1
+                    // InternalIdioms.g:925:3: ( rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 )
+                    // InternalIdioms.g:925:4: rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1();
@@ -2932,16 +3104,16 @@
                     }
                     break;
                 case 3 :
-                    // InternalIdioms.g:879:2: ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) )
+                    // InternalIdioms.g:929:2: ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) )
                     {
-                    // InternalIdioms.g:879:2: ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) )
-                    // InternalIdioms.g:880:3: ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 )
+                    // InternalIdioms.g:929:2: ( ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 ) )
+                    // InternalIdioms.g:930:3: ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIdiomsModelAccess().getOwnedIdiomsAssignment_4_2());
                     }
-                    // InternalIdioms.g:881:3: ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 )
-                    // InternalIdioms.g:881:4: rule__IdiomsModel__OwnedIdiomsAssignment_4_2
+                    // InternalIdioms.g:931:3: ( rule__IdiomsModel__OwnedIdiomsAssignment_4_2 )
+                    // InternalIdioms.g:931:4: rule__IdiomsModel__OwnedIdiomsAssignment_4_2
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__IdiomsModel__OwnedIdiomsAssignment_4_2();
@@ -2978,13 +3150,13 @@
 
 
     // $ANTLR start "rule__Locator__Alternatives"
-    // InternalIdioms.g:889:1: rule__Locator__Alternatives : ( ( ruleAnyAssignmentLocator ) | ( ruleAnyElementLocator ) | ( ruleAssignmentLocator ) | ( ruleFinalLocator ) | ( ruleKeywordLocator ) | ( ruleReturnsLocator ) );
+    // InternalIdioms.g:939:1: rule__Locator__Alternatives : ( ( ruleAnyAssignmentLocator ) | ( ruleAnyElementLocator ) | ( ruleAssignmentLocator ) | ( ruleFinalLocator ) | ( ruleKeywordLocator ) | ( ruleReturnsLocator ) );
     public final void rule__Locator__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:893:1: ( ( ruleAnyAssignmentLocator ) | ( ruleAnyElementLocator ) | ( ruleAssignmentLocator ) | ( ruleFinalLocator ) | ( ruleKeywordLocator ) | ( ruleReturnsLocator ) )
+            // InternalIdioms.g:943:1: ( ( ruleAnyAssignmentLocator ) | ( ruleAnyElementLocator ) | ( ruleAssignmentLocator ) | ( ruleFinalLocator ) | ( ruleKeywordLocator ) | ( ruleReturnsLocator ) )
             int alt2=6;
             switch ( input.LA(1) ) {
             case 17:
@@ -3027,10 +3199,10 @@
 
             switch (alt2) {
                 case 1 :
-                    // InternalIdioms.g:894:2: ( ruleAnyAssignmentLocator )
+                    // InternalIdioms.g:944:2: ( ruleAnyAssignmentLocator )
                     {
-                    // InternalIdioms.g:894:2: ( ruleAnyAssignmentLocator )
-                    // InternalIdioms.g:895:3: ruleAnyAssignmentLocator
+                    // InternalIdioms.g:944:2: ( ruleAnyAssignmentLocator )
+                    // InternalIdioms.g:945:3: ruleAnyAssignmentLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getAnyAssignmentLocatorParserRuleCall_0());
@@ -3050,10 +3222,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:900:2: ( ruleAnyElementLocator )
+                    // InternalIdioms.g:950:2: ( ruleAnyElementLocator )
                     {
-                    // InternalIdioms.g:900:2: ( ruleAnyElementLocator )
-                    // InternalIdioms.g:901:3: ruleAnyElementLocator
+                    // InternalIdioms.g:950:2: ( ruleAnyElementLocator )
+                    // InternalIdioms.g:951:3: ruleAnyElementLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getAnyElementLocatorParserRuleCall_1());
@@ -3073,10 +3245,10 @@
                     }
                     break;
                 case 3 :
-                    // InternalIdioms.g:906:2: ( ruleAssignmentLocator )
+                    // InternalIdioms.g:956:2: ( ruleAssignmentLocator )
                     {
-                    // InternalIdioms.g:906:2: ( ruleAssignmentLocator )
-                    // InternalIdioms.g:907:3: ruleAssignmentLocator
+                    // InternalIdioms.g:956:2: ( ruleAssignmentLocator )
+                    // InternalIdioms.g:957:3: ruleAssignmentLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getAssignmentLocatorParserRuleCall_2());
@@ -3096,10 +3268,10 @@
                     }
                     break;
                 case 4 :
-                    // InternalIdioms.g:912:2: ( ruleFinalLocator )
+                    // InternalIdioms.g:962:2: ( ruleFinalLocator )
                     {
-                    // InternalIdioms.g:912:2: ( ruleFinalLocator )
-                    // InternalIdioms.g:913:3: ruleFinalLocator
+                    // InternalIdioms.g:962:2: ( ruleFinalLocator )
+                    // InternalIdioms.g:963:3: ruleFinalLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getFinalLocatorParserRuleCall_3());
@@ -3119,10 +3291,10 @@
                     }
                     break;
                 case 5 :
-                    // InternalIdioms.g:918:2: ( ruleKeywordLocator )
+                    // InternalIdioms.g:968:2: ( ruleKeywordLocator )
                     {
-                    // InternalIdioms.g:918:2: ( ruleKeywordLocator )
-                    // InternalIdioms.g:919:3: ruleKeywordLocator
+                    // InternalIdioms.g:968:2: ( ruleKeywordLocator )
+                    // InternalIdioms.g:969:3: ruleKeywordLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getKeywordLocatorParserRuleCall_4());
@@ -3142,10 +3314,10 @@
                     }
                     break;
                 case 6 :
-                    // InternalIdioms.g:924:2: ( ruleReturnsLocator )
+                    // InternalIdioms.g:974:2: ( ruleReturnsLocator )
                     {
-                    // InternalIdioms.g:924:2: ( ruleReturnsLocator )
-                    // InternalIdioms.g:925:3: ruleReturnsLocator
+                    // InternalIdioms.g:974:2: ( ruleReturnsLocator )
+                    // InternalIdioms.g:975:3: ruleReturnsLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getLocatorAccess().getReturnsLocatorParserRuleCall_5());
@@ -3182,14 +3354,14 @@
 
 
     // $ANTLR start "rule__Segment__Alternatives"
-    // InternalIdioms.g:934:1: rule__Segment__Alternatives : ( ( ruleCustomSegment ) | ( ruleHalfNewLineSegment ) | ( ruleNewLineSegment ) | ( ruleNoSpaceSegment ) | ( rulePopSegment ) | ( rulePushSegment ) | ( ruleSoftNewLineSegment ) | ( ruleSoftSpaceSegment ) | ( ruleStringSegment ) | ( ruleValueSegment ) | ( ruleWrapAnchorSegment ) | ( ruleWrapBeginAllSegment ) | ( ruleWrapBeginSomeSegment ) | ( ruleWrapEndSegment ) | ( ruleWrapHereSegment ) );
+    // InternalIdioms.g:984:1: rule__Segment__Alternatives : ( ( ruleCustomSegment ) | ( ruleHalfNewLineSegment ) | ( ruleNewLineSegment ) | ( ruleNoSpaceSegment ) | ( rulePopSegment ) | ( rulePostCommentSegment ) | ( rulePreCommentSegment ) | ( rulePushSegment ) | ( ruleSoftNewLineSegment ) | ( ruleSoftSpaceSegment ) | ( ruleStringSegment ) | ( ruleValueSegment ) | ( ruleWrapAnchorSegment ) | ( ruleWrapBeginAllSegment ) | ( ruleWrapBeginSomeSegment ) | ( ruleWrapEndSegment ) | ( ruleWrapHereSegment ) );
     public final void rule__Segment__Alternatives() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:938:1: ( ( ruleCustomSegment ) | ( ruleHalfNewLineSegment ) | ( ruleNewLineSegment ) | ( ruleNoSpaceSegment ) | ( rulePopSegment ) | ( rulePushSegment ) | ( ruleSoftNewLineSegment ) | ( ruleSoftSpaceSegment ) | ( ruleStringSegment ) | ( ruleValueSegment ) | ( ruleWrapAnchorSegment ) | ( ruleWrapBeginAllSegment ) | ( ruleWrapBeginSomeSegment ) | ( ruleWrapEndSegment ) | ( ruleWrapHereSegment ) )
-            int alt3=15;
+            // InternalIdioms.g:988:1: ( ( ruleCustomSegment ) | ( ruleHalfNewLineSegment ) | ( ruleNewLineSegment ) | ( ruleNoSpaceSegment ) | ( rulePopSegment ) | ( rulePostCommentSegment ) | ( rulePreCommentSegment ) | ( rulePushSegment ) | ( ruleSoftNewLineSegment ) | ( ruleSoftSpaceSegment ) | ( ruleStringSegment ) | ( ruleValueSegment ) | ( ruleWrapAnchorSegment ) | ( ruleWrapBeginAllSegment ) | ( ruleWrapBeginSomeSegment ) | ( ruleWrapEndSegment ) | ( ruleWrapHereSegment ) )
+            int alt3=17;
             switch ( input.LA(1) ) {
             case 24:
                 {
@@ -3266,6 +3438,16 @@
                 alt3=15;
                 }
                 break;
+            case 39:
+                {
+                alt3=16;
+                }
+                break;
+            case 40:
+                {
+                alt3=17;
+                }
+                break;
             default:
                 if (state.backtracking>0) {state.failed=true; return ;}
                 NoViableAltException nvae =
@@ -3276,10 +3458,10 @@
 
             switch (alt3) {
                 case 1 :
-                    // InternalIdioms.g:939:2: ( ruleCustomSegment )
+                    // InternalIdioms.g:989:2: ( ruleCustomSegment )
                     {
-                    // InternalIdioms.g:939:2: ( ruleCustomSegment )
-                    // InternalIdioms.g:940:3: ruleCustomSegment
+                    // InternalIdioms.g:989:2: ( ruleCustomSegment )
+                    // InternalIdioms.g:990:3: ruleCustomSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSegmentAccess().getCustomSegmentParserRuleCall_0());
@@ -3299,10 +3481,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:945:2: ( ruleHalfNewLineSegment )
+                    // InternalIdioms.g:995:2: ( ruleHalfNewLineSegment )
                     {
-                    // InternalIdioms.g:945:2: ( ruleHalfNewLineSegment )
-                    // InternalIdioms.g:946:3: ruleHalfNewLineSegment
+                    // InternalIdioms.g:995:2: ( ruleHalfNewLineSegment )
+                    // InternalIdioms.g:996:3: ruleHalfNewLineSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSegmentAccess().getHalfNewLineSegmentParserRuleCall_1());
@@ -3322,10 +3504,10 @@
                     }
                     break;
                 case 3 :
-                    // InternalIdioms.g:951:2: ( ruleNewLineSegment )
+                    // InternalIdioms.g:1001:2: ( ruleNewLineSegment )
                     {
-                    // InternalIdioms.g:951:2: ( ruleNewLineSegment )
-                    // InternalIdioms.g:952:3: ruleNewLineSegment
+                    // InternalIdioms.g:1001:2: ( ruleNewLineSegment )
+                    // InternalIdioms.g:1002:3: ruleNewLineSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSegmentAccess().getNewLineSegmentParserRuleCall_2());
@@ -3345,10 +3527,10 @@
                     }
                     break;
                 case 4 :
-                    // InternalIdioms.g:957:2: ( ruleNoSpaceSegment )
+                    // InternalIdioms.g:1007:2: ( ruleNoSpaceSegment )
                     {
-                    // InternalIdioms.g:957:2: ( ruleNoSpaceSegment )
-                    // InternalIdioms.g:958:3: ruleNoSpaceSegment
+                    // InternalIdioms.g:1007:2: ( ruleNoSpaceSegment )
+                    // InternalIdioms.g:1008:3: ruleNoSpaceSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSegmentAccess().getNoSpaceSegmentParserRuleCall_3());
@@ -3368,10 +3550,10 @@
                     }
                     break;
                 case 5 :
-                    // InternalIdioms.g:963:2: ( rulePopSegment )
+                    // InternalIdioms.g:1013:2: ( rulePopSegment )
                     {
-                    // InternalIdioms.g:963:2: ( rulePopSegment )
-                    // InternalIdioms.g:964:3: rulePopSegment
+                    // InternalIdioms.g:1013:2: ( rulePopSegment )
+                    // InternalIdioms.g:1014:3: rulePopSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSegmentAccess().getPopSegmentParserRuleCall_4());
@@ -3391,21 +3573,21 @@
                     }
                     break;
                 case 6 :
-                    // InternalIdioms.g:969:2: ( rulePushSegment )
+                    // InternalIdioms.g:1019:2: ( rulePostCommentSegment )
                     {
-                    // InternalIdioms.g:969:2: ( rulePushSegment )
-                    // InternalIdioms.g:970:3: rulePushSegment
+                    // InternalIdioms.g:1019:2: ( rulePostCommentSegment )
+                    // InternalIdioms.g:1020:3: rulePostCommentSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5());
+                       before(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    rulePushSegment();
+                    rulePostCommentSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5());
+                       after(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5());
                     }
 
                     }
@@ -3414,21 +3596,21 @@
                     }
                     break;
                 case 7 :
-                    // InternalIdioms.g:975:2: ( ruleSoftNewLineSegment )
+                    // InternalIdioms.g:1025:2: ( rulePreCommentSegment )
                     {
-                    // InternalIdioms.g:975:2: ( ruleSoftNewLineSegment )
-                    // InternalIdioms.g:976:3: ruleSoftNewLineSegment
+                    // InternalIdioms.g:1025:2: ( rulePreCommentSegment )
+                    // InternalIdioms.g:1026:3: rulePreCommentSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6());
+                       before(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleSoftNewLineSegment();
+                    rulePreCommentSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6());
+                       after(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6());
                     }
 
                     }
@@ -3437,21 +3619,21 @@
                     }
                     break;
                 case 8 :
-                    // InternalIdioms.g:981:2: ( ruleSoftSpaceSegment )
+                    // InternalIdioms.g:1031:2: ( rulePushSegment )
                     {
-                    // InternalIdioms.g:981:2: ( ruleSoftSpaceSegment )
-                    // InternalIdioms.g:982:3: ruleSoftSpaceSegment
+                    // InternalIdioms.g:1031:2: ( rulePushSegment )
+                    // InternalIdioms.g:1032:3: rulePushSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7());
+                       before(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleSoftSpaceSegment();
+                    rulePushSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7());
+                       after(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7());
                     }
 
                     }
@@ -3460,21 +3642,21 @@
                     }
                     break;
                 case 9 :
-                    // InternalIdioms.g:987:2: ( ruleStringSegment )
+                    // InternalIdioms.g:1037:2: ( ruleSoftNewLineSegment )
                     {
-                    // InternalIdioms.g:987:2: ( ruleStringSegment )
-                    // InternalIdioms.g:988:3: ruleStringSegment
+                    // InternalIdioms.g:1037:2: ( ruleSoftNewLineSegment )
+                    // InternalIdioms.g:1038:3: ruleSoftNewLineSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8());
+                       before(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleStringSegment();
+                    ruleSoftNewLineSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8());
+                       after(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8());
                     }
 
                     }
@@ -3483,21 +3665,21 @@
                     }
                     break;
                 case 10 :
-                    // InternalIdioms.g:993:2: ( ruleValueSegment )
+                    // InternalIdioms.g:1043:2: ( ruleSoftSpaceSegment )
                     {
-                    // InternalIdioms.g:993:2: ( ruleValueSegment )
-                    // InternalIdioms.g:994:3: ruleValueSegment
+                    // InternalIdioms.g:1043:2: ( ruleSoftSpaceSegment )
+                    // InternalIdioms.g:1044:3: ruleSoftSpaceSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9());
+                       before(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleValueSegment();
+                    ruleSoftSpaceSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9());
+                       after(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9());
                     }
 
                     }
@@ -3506,21 +3688,21 @@
                     }
                     break;
                 case 11 :
-                    // InternalIdioms.g:999:2: ( ruleWrapAnchorSegment )
+                    // InternalIdioms.g:1049:2: ( ruleStringSegment )
                     {
-                    // InternalIdioms.g:999:2: ( ruleWrapAnchorSegment )
-                    // InternalIdioms.g:1000:3: ruleWrapAnchorSegment
+                    // InternalIdioms.g:1049:2: ( ruleStringSegment )
+                    // InternalIdioms.g:1050:3: ruleStringSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10());
+                       before(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleWrapAnchorSegment();
+                    ruleStringSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10());
+                       after(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10());
                     }
 
                     }
@@ -3529,21 +3711,21 @@
                     }
                     break;
                 case 12 :
-                    // InternalIdioms.g:1005:2: ( ruleWrapBeginAllSegment )
+                    // InternalIdioms.g:1055:2: ( ruleValueSegment )
                     {
-                    // InternalIdioms.g:1005:2: ( ruleWrapBeginAllSegment )
-                    // InternalIdioms.g:1006:3: ruleWrapBeginAllSegment
+                    // InternalIdioms.g:1055:2: ( ruleValueSegment )
+                    // InternalIdioms.g:1056:3: ruleValueSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11());
+                       before(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleWrapBeginAllSegment();
+                    ruleValueSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11());
+                       after(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11());
                     }
 
                     }
@@ -3552,21 +3734,21 @@
                     }
                     break;
                 case 13 :
-                    // InternalIdioms.g:1011:2: ( ruleWrapBeginSomeSegment )
+                    // InternalIdioms.g:1061:2: ( ruleWrapAnchorSegment )
                     {
-                    // InternalIdioms.g:1011:2: ( ruleWrapBeginSomeSegment )
-                    // InternalIdioms.g:1012:3: ruleWrapBeginSomeSegment
+                    // InternalIdioms.g:1061:2: ( ruleWrapAnchorSegment )
+                    // InternalIdioms.g:1062:3: ruleWrapAnchorSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12());
+                       before(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleWrapBeginSomeSegment();
+                    ruleWrapAnchorSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12());
+                       after(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12());
                     }
 
                     }
@@ -3575,21 +3757,21 @@
                     }
                     break;
                 case 14 :
-                    // InternalIdioms.g:1017:2: ( ruleWrapEndSegment )
+                    // InternalIdioms.g:1067:2: ( ruleWrapBeginAllSegment )
                     {
-                    // InternalIdioms.g:1017:2: ( ruleWrapEndSegment )
-                    // InternalIdioms.g:1018:3: ruleWrapEndSegment
+                    // InternalIdioms.g:1067:2: ( ruleWrapBeginAllSegment )
+                    // InternalIdioms.g:1068:3: ruleWrapBeginAllSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13());
+                       before(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    ruleWrapEndSegment();
+                    ruleWrapBeginAllSegment();
 
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13());
+                       after(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13());
                     }
 
                     }
@@ -3598,13 +3780,59 @@
                     }
                     break;
                 case 15 :
-                    // InternalIdioms.g:1023:2: ( ruleWrapHereSegment )
+                    // InternalIdioms.g:1073:2: ( ruleWrapBeginSomeSegment )
                     {
-                    // InternalIdioms.g:1023:2: ( ruleWrapHereSegment )
-                    // InternalIdioms.g:1024:3: ruleWrapHereSegment
+                    // InternalIdioms.g:1073:2: ( ruleWrapBeginSomeSegment )
+                    // InternalIdioms.g:1074:3: ruleWrapBeginSomeSegment
                     {
                     if ( state.backtracking==0 ) {
-                       before(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14());
+                       before(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14());
+                    }
+                    pushFollow(FollowSets000.FOLLOW_2);
+                    ruleWrapBeginSomeSegment();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14());
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 16 :
+                    // InternalIdioms.g:1079:2: ( ruleWrapEndSegment )
+                    {
+                    // InternalIdioms.g:1079:2: ( ruleWrapEndSegment )
+                    // InternalIdioms.g:1080:3: ruleWrapEndSegment
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15());
+                    }
+                    pushFollow(FollowSets000.FOLLOW_2);
+                    ruleWrapEndSegment();
+
+                    state._fsp--;
+                    if (state.failed) return ;
+                    if ( state.backtracking==0 ) {
+                       after(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15());
+                    }
+
+                    }
+
+
+                    }
+                    break;
+                case 17 :
+                    // InternalIdioms.g:1085:2: ( ruleWrapHereSegment )
+                    {
+                    // InternalIdioms.g:1085:2: ( ruleWrapHereSegment )
+                    // InternalIdioms.g:1086:3: ruleWrapHereSegment
+                    {
+                    if ( state.backtracking==0 ) {
+                       before(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16());
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
                     ruleWrapHereSegment();
@@ -3612,7 +3840,7 @@
                     state._fsp--;
                     if (state.failed) return ;
                     if ( state.backtracking==0 ) {
-                       after(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14());
+                       after(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16());
                     }
 
                     }
@@ -3638,20 +3866,20 @@
 
 
     // $ANTLR start "rule__Idiom__Alternatives_5"
-    // InternalIdioms.g:1033:1: rule__Idiom__Alternatives_5 : ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) ) | ( ( rule__Idiom__Group_5_1__0 ) ) );
+    // InternalIdioms.g:1095:1: rule__Idiom__Alternatives_5 : ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) ) | ( ( rule__Idiom__Group_5_1__0 ) ) );
     public final void rule__Idiom__Alternatives_5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1037:1: ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) ) | ( ( rule__Idiom__Group_5_1__0 ) ) )
+            // InternalIdioms.g:1099:1: ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) ) | ( ( rule__Idiom__Group_5_1__0 ) ) )
             int alt4=2;
             int LA4_0 = input.LA(1);
 
-            if ( (LA4_0==44) ) {
+            if ( (LA4_0==46) ) {
                 alt4=1;
             }
-            else if ( (LA4_0==42) ) {
+            else if ( (LA4_0==44) ) {
                 alt4=2;
             }
             else {
@@ -3663,16 +3891,16 @@
             }
             switch (alt4) {
                 case 1 :
-                    // InternalIdioms.g:1038:2: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) )
+                    // InternalIdioms.g:1100:2: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) )
                     {
-                    // InternalIdioms.g:1038:2: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) )
-                    // InternalIdioms.g:1039:3: ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 )
+                    // InternalIdioms.g:1100:2: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 ) )
+                    // InternalIdioms.g:1101:3: ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIdiomAccess().getOwnedSubIdiomsAssignment_5_0());
                     }
-                    // InternalIdioms.g:1040:3: ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 )
-                    // InternalIdioms.g:1040:4: rule__Idiom__OwnedSubIdiomsAssignment_5_0
+                    // InternalIdioms.g:1102:3: ( rule__Idiom__OwnedSubIdiomsAssignment_5_0 )
+                    // InternalIdioms.g:1102:4: rule__Idiom__OwnedSubIdiomsAssignment_5_0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__OwnedSubIdiomsAssignment_5_0();
@@ -3692,16 +3920,16 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1044:2: ( ( rule__Idiom__Group_5_1__0 ) )
+                    // InternalIdioms.g:1106:2: ( ( rule__Idiom__Group_5_1__0 ) )
                     {
-                    // InternalIdioms.g:1044:2: ( ( rule__Idiom__Group_5_1__0 ) )
-                    // InternalIdioms.g:1045:3: ( rule__Idiom__Group_5_1__0 )
+                    // InternalIdioms.g:1106:2: ( ( rule__Idiom__Group_5_1__0 ) )
+                    // InternalIdioms.g:1107:3: ( rule__Idiom__Group_5_1__0 )
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getIdiomAccess().getGroup_5_1());
                     }
-                    // InternalIdioms.g:1046:3: ( rule__Idiom__Group_5_1__0 )
-                    // InternalIdioms.g:1046:4: rule__Idiom__Group_5_1__0
+                    // InternalIdioms.g:1108:3: ( rule__Idiom__Group_5_1__0 )
+                    // InternalIdioms.g:1108:4: rule__Idiom__Group_5_1__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__Group_5_1__0();
@@ -3738,13 +3966,13 @@
 
 
     // $ANTLR start "rule__SubIdiom__OwnedLocatorAlternatives_1_0"
-    // InternalIdioms.g:1054:1: rule__SubIdiom__OwnedLocatorAlternatives_1_0 : ( ( ruleLocator ) | ( ruleReferredLocator ) );
+    // InternalIdioms.g:1116:1: rule__SubIdiom__OwnedLocatorAlternatives_1_0 : ( ( ruleLocator ) | ( ruleReferredLocator ) );
     public final void rule__SubIdiom__OwnedLocatorAlternatives_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1058:1: ( ( ruleLocator ) | ( ruleReferredLocator ) )
+            // InternalIdioms.g:1120:1: ( ( ruleLocator ) | ( ruleReferredLocator ) )
             int alt5=2;
             int LA5_0 = input.LA(1);
 
@@ -3763,10 +3991,10 @@
             }
             switch (alt5) {
                 case 1 :
-                    // InternalIdioms.g:1059:2: ( ruleLocator )
+                    // InternalIdioms.g:1121:2: ( ruleLocator )
                     {
-                    // InternalIdioms.g:1059:2: ( ruleLocator )
-                    // InternalIdioms.g:1060:3: ruleLocator
+                    // InternalIdioms.g:1121:2: ( ruleLocator )
+                    // InternalIdioms.g:1122:3: ruleLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSubIdiomAccess().getOwnedLocatorLocatorParserRuleCall_1_0_0());
@@ -3786,10 +4014,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1065:2: ( ruleReferredLocator )
+                    // InternalIdioms.g:1127:2: ( ruleReferredLocator )
                     {
-                    // InternalIdioms.g:1065:2: ( ruleReferredLocator )
-                    // InternalIdioms.g:1066:3: ruleReferredLocator
+                    // InternalIdioms.g:1127:2: ( ruleReferredLocator )
+                    // InternalIdioms.g:1128:3: ruleReferredLocator
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSubIdiomAccess().getOwnedLocatorReferredLocatorParserRuleCall_1_0_1());
@@ -3826,17 +4054,17 @@
 
 
     // $ANTLR start "rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0"
-    // InternalIdioms.g:1075:1: rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 : ( ( ruleSegment ) | ( ruleReferredSegment ) );
+    // InternalIdioms.g:1137:1: rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 : ( ( ruleSegment ) | ( ruleReferredSegment ) );
     public final void rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1079:1: ( ( ruleSegment ) | ( ruleReferredSegment ) )
+            // InternalIdioms.g:1141:1: ( ( ruleSegment ) | ( ruleReferredSegment ) )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
-            if ( ((LA6_0>=24 && LA6_0<=38)) ) {
+            if ( ((LA6_0>=24 && LA6_0<=40)) ) {
                 alt6=1;
             }
             else if ( (LA6_0==RULE_ID) ) {
@@ -3851,10 +4079,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalIdioms.g:1080:2: ( ruleSegment )
+                    // InternalIdioms.g:1142:2: ( ruleSegment )
                     {
-                    // InternalIdioms.g:1080:2: ( ruleSegment )
-                    // InternalIdioms.g:1081:3: ruleSegment
+                    // InternalIdioms.g:1142:2: ( ruleSegment )
+                    // InternalIdioms.g:1143:3: ruleSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSubIdiomAccess().getOwnedSegmentsSegmentParserRuleCall_2_1_0_0());
@@ -3874,10 +4102,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1086:2: ( ruleReferredSegment )
+                    // InternalIdioms.g:1148:2: ( ruleReferredSegment )
                     {
-                    // InternalIdioms.g:1086:2: ( ruleReferredSegment )
-                    // InternalIdioms.g:1087:3: ruleReferredSegment
+                    // InternalIdioms.g:1148:2: ( ruleReferredSegment )
+                    // InternalIdioms.g:1149:3: ruleReferredSegment
                     {
                     if ( state.backtracking==0 ) {
                        before(grammarAccess.getSubIdiomAccess().getOwnedSegmentsReferredSegmentParserRuleCall_2_1_0_1());
@@ -3914,14 +4142,14 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__0"
-    // InternalIdioms.g:1096:1: rule__IdiomsModel__Group__0 : rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1 ;
+    // InternalIdioms.g:1158:1: rule__IdiomsModel__Group__0 : rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1 ;
     public final void rule__IdiomsModel__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1100:1: ( rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1 )
-            // InternalIdioms.g:1101:2: rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1
+            // InternalIdioms.g:1162:1: ( rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1 )
+            // InternalIdioms.g:1163:2: rule__IdiomsModel__Group__0__Impl rule__IdiomsModel__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__IdiomsModel__Group__0__Impl();
@@ -3952,17 +4180,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__0__Impl"
-    // InternalIdioms.g:1108:1: rule__IdiomsModel__Group__0__Impl : ( 'model' ) ;
+    // InternalIdioms.g:1170:1: rule__IdiomsModel__Group__0__Impl : ( 'model' ) ;
     public final void rule__IdiomsModel__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1112:1: ( ( 'model' ) )
-            // InternalIdioms.g:1113:1: ( 'model' )
+            // InternalIdioms.g:1174:1: ( ( 'model' ) )
+            // InternalIdioms.g:1175:1: ( 'model' )
             {
-            // InternalIdioms.g:1113:1: ( 'model' )
-            // InternalIdioms.g:1114:2: 'model'
+            // InternalIdioms.g:1175:1: ( 'model' )
+            // InternalIdioms.g:1176:2: 'model'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getModelKeyword_0());
@@ -3993,14 +4221,14 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__1"
-    // InternalIdioms.g:1123:1: rule__IdiomsModel__Group__1 : rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2 ;
+    // InternalIdioms.g:1185:1: rule__IdiomsModel__Group__1 : rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2 ;
     public final void rule__IdiomsModel__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1127:1: ( rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2 )
-            // InternalIdioms.g:1128:2: rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2
+            // InternalIdioms.g:1189:1: ( rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2 )
+            // InternalIdioms.g:1190:2: rule__IdiomsModel__Group__1__Impl rule__IdiomsModel__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_4);
             rule__IdiomsModel__Group__1__Impl();
@@ -4031,23 +4259,23 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__1__Impl"
-    // InternalIdioms.g:1135:1: rule__IdiomsModel__Group__1__Impl : ( ( rule__IdiomsModel__NameAssignment_1 ) ) ;
+    // InternalIdioms.g:1197:1: rule__IdiomsModel__Group__1__Impl : ( ( rule__IdiomsModel__NameAssignment_1 ) ) ;
     public final void rule__IdiomsModel__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1139:1: ( ( ( rule__IdiomsModel__NameAssignment_1 ) ) )
-            // InternalIdioms.g:1140:1: ( ( rule__IdiomsModel__NameAssignment_1 ) )
+            // InternalIdioms.g:1201:1: ( ( ( rule__IdiomsModel__NameAssignment_1 ) ) )
+            // InternalIdioms.g:1202:1: ( ( rule__IdiomsModel__NameAssignment_1 ) )
             {
-            // InternalIdioms.g:1140:1: ( ( rule__IdiomsModel__NameAssignment_1 ) )
-            // InternalIdioms.g:1141:2: ( rule__IdiomsModel__NameAssignment_1 )
+            // InternalIdioms.g:1202:1: ( ( rule__IdiomsModel__NameAssignment_1 ) )
+            // InternalIdioms.g:1203:2: ( rule__IdiomsModel__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getNameAssignment_1());
             }
-            // InternalIdioms.g:1142:2: ( rule__IdiomsModel__NameAssignment_1 )
-            // InternalIdioms.g:1142:3: rule__IdiomsModel__NameAssignment_1
+            // InternalIdioms.g:1204:2: ( rule__IdiomsModel__NameAssignment_1 )
+            // InternalIdioms.g:1204:3: rule__IdiomsModel__NameAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsModel__NameAssignment_1();
@@ -4082,14 +4310,14 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__2"
-    // InternalIdioms.g:1150:1: rule__IdiomsModel__Group__2 : rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3 ;
+    // InternalIdioms.g:1212:1: rule__IdiomsModel__Group__2 : rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3 ;
     public final void rule__IdiomsModel__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1154:1: ( rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3 )
-            // InternalIdioms.g:1155:2: rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3
+            // InternalIdioms.g:1216:1: ( rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3 )
+            // InternalIdioms.g:1217:2: rule__IdiomsModel__Group__2__Impl rule__IdiomsModel__Group__3
             {
             pushFollow(FollowSets000.FOLLOW_4);
             rule__IdiomsModel__Group__2__Impl();
@@ -4120,22 +4348,22 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__2__Impl"
-    // InternalIdioms.g:1162:1: rule__IdiomsModel__Group__2__Impl : ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* ) ;
+    // InternalIdioms.g:1224:1: rule__IdiomsModel__Group__2__Impl : ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* ) ;
     public final void rule__IdiomsModel__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1166:1: ( ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* ) )
-            // InternalIdioms.g:1167:1: ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* )
+            // InternalIdioms.g:1228:1: ( ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* ) )
+            // InternalIdioms.g:1229:1: ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* )
             {
-            // InternalIdioms.g:1167:1: ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* )
-            // InternalIdioms.g:1168:2: ( rule__IdiomsModel__OwnedWithsAssignment_2 )*
+            // InternalIdioms.g:1229:1: ( ( rule__IdiomsModel__OwnedWithsAssignment_2 )* )
+            // InternalIdioms.g:1230:2: ( rule__IdiomsModel__OwnedWithsAssignment_2 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedWithsAssignment_2());
             }
-            // InternalIdioms.g:1169:2: ( rule__IdiomsModel__OwnedWithsAssignment_2 )*
+            // InternalIdioms.g:1231:2: ( rule__IdiomsModel__OwnedWithsAssignment_2 )*
             loop7:
             do {
                 int alt7=2;
@@ -4148,7 +4376,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // InternalIdioms.g:1169:3: rule__IdiomsModel__OwnedWithsAssignment_2
+            	    // InternalIdioms.g:1231:3: rule__IdiomsModel__OwnedWithsAssignment_2
             	    {
             	    pushFollow(FollowSets000.FOLLOW_5);
             	    rule__IdiomsModel__OwnedWithsAssignment_2();
@@ -4189,14 +4417,14 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__3"
-    // InternalIdioms.g:1177:1: rule__IdiomsModel__Group__3 : rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4 ;
+    // InternalIdioms.g:1239:1: rule__IdiomsModel__Group__3 : rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4 ;
     public final void rule__IdiomsModel__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1181:1: ( rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4 )
-            // InternalIdioms.g:1182:2: rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4
+            // InternalIdioms.g:1243:1: ( rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4 )
+            // InternalIdioms.g:1244:2: rule__IdiomsModel__Group__3__Impl rule__IdiomsModel__Group__4
             {
             pushFollow(FollowSets000.FOLLOW_4);
             rule__IdiomsModel__Group__3__Impl();
@@ -4227,22 +4455,22 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__3__Impl"
-    // InternalIdioms.g:1189:1: rule__IdiomsModel__Group__3__Impl : ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* ) ;
+    // InternalIdioms.g:1251:1: rule__IdiomsModel__Group__3__Impl : ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* ) ;
     public final void rule__IdiomsModel__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1193:1: ( ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* ) )
-            // InternalIdioms.g:1194:1: ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* )
+            // InternalIdioms.g:1255:1: ( ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* ) )
+            // InternalIdioms.g:1256:1: ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* )
             {
-            // InternalIdioms.g:1194:1: ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* )
-            // InternalIdioms.g:1195:2: ( rule__IdiomsModel__OwnedImportsAssignment_3 )*
+            // InternalIdioms.g:1256:1: ( ( rule__IdiomsModel__OwnedImportsAssignment_3 )* )
+            // InternalIdioms.g:1257:2: ( rule__IdiomsModel__OwnedImportsAssignment_3 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedImportsAssignment_3());
             }
-            // InternalIdioms.g:1196:2: ( rule__IdiomsModel__OwnedImportsAssignment_3 )*
+            // InternalIdioms.g:1258:2: ( rule__IdiomsModel__OwnedImportsAssignment_3 )*
             loop8:
             do {
                 int alt8=2;
@@ -4255,7 +4483,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalIdioms.g:1196:3: rule__IdiomsModel__OwnedImportsAssignment_3
+            	    // InternalIdioms.g:1258:3: rule__IdiomsModel__OwnedImportsAssignment_3
             	    {
             	    pushFollow(FollowSets000.FOLLOW_6);
             	    rule__IdiomsModel__OwnedImportsAssignment_3();
@@ -4296,14 +4524,14 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__4"
-    // InternalIdioms.g:1204:1: rule__IdiomsModel__Group__4 : rule__IdiomsModel__Group__4__Impl ;
+    // InternalIdioms.g:1266:1: rule__IdiomsModel__Group__4 : rule__IdiomsModel__Group__4__Impl ;
     public final void rule__IdiomsModel__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1208:1: ( rule__IdiomsModel__Group__4__Impl )
-            // InternalIdioms.g:1209:2: rule__IdiomsModel__Group__4__Impl
+            // InternalIdioms.g:1270:1: ( rule__IdiomsModel__Group__4__Impl )
+            // InternalIdioms.g:1271:2: rule__IdiomsModel__Group__4__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsModel__Group__4__Impl();
@@ -4329,35 +4557,35 @@
 
 
     // $ANTLR start "rule__IdiomsModel__Group__4__Impl"
-    // InternalIdioms.g:1215:1: rule__IdiomsModel__Group__4__Impl : ( ( rule__IdiomsModel__Alternatives_4 )* ) ;
+    // InternalIdioms.g:1277:1: rule__IdiomsModel__Group__4__Impl : ( ( rule__IdiomsModel__Alternatives_4 )* ) ;
     public final void rule__IdiomsModel__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1219:1: ( ( ( rule__IdiomsModel__Alternatives_4 )* ) )
-            // InternalIdioms.g:1220:1: ( ( rule__IdiomsModel__Alternatives_4 )* )
+            // InternalIdioms.g:1281:1: ( ( ( rule__IdiomsModel__Alternatives_4 )* ) )
+            // InternalIdioms.g:1282:1: ( ( rule__IdiomsModel__Alternatives_4 )* )
             {
-            // InternalIdioms.g:1220:1: ( ( rule__IdiomsModel__Alternatives_4 )* )
-            // InternalIdioms.g:1221:2: ( rule__IdiomsModel__Alternatives_4 )*
+            // InternalIdioms.g:1282:1: ( ( rule__IdiomsModel__Alternatives_4 )* )
+            // InternalIdioms.g:1283:2: ( rule__IdiomsModel__Alternatives_4 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getAlternatives_4());
             }
-            // InternalIdioms.g:1222:2: ( rule__IdiomsModel__Alternatives_4 )*
+            // InternalIdioms.g:1284:2: ( rule__IdiomsModel__Alternatives_4 )*
             loop9:
             do {
                 int alt9=2;
                 int LA9_0 = input.LA(1);
 
-                if ( (LA9_0==16||LA9_0==23||LA9_0==39||LA9_0==47) ) {
+                if ( (LA9_0==16||LA9_0==23||LA9_0==41||LA9_0==49) ) {
                     alt9=1;
                 }
 
 
                 switch (alt9) {
             	case 1 :
-            	    // InternalIdioms.g:1222:3: rule__IdiomsModel__Alternatives_4
+            	    // InternalIdioms.g:1284:3: rule__IdiomsModel__Alternatives_4
             	    {
             	    pushFollow(FollowSets000.FOLLOW_7);
             	    rule__IdiomsModel__Alternatives_4();
@@ -4398,14 +4626,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__0"
-    // InternalIdioms.g:1231:1: rule__EPackageImport__Group__0 : rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1 ;
+    // InternalIdioms.g:1293:1: rule__EPackageImport__Group__0 : rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1 ;
     public final void rule__EPackageImport__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1235:1: ( rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1 )
-            // InternalIdioms.g:1236:2: rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1
+            // InternalIdioms.g:1297:1: ( rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1 )
+            // InternalIdioms.g:1298:2: rule__EPackageImport__Group__0__Impl rule__EPackageImport__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_8);
             rule__EPackageImport__Group__0__Impl();
@@ -4436,17 +4664,17 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__0__Impl"
-    // InternalIdioms.g:1243:1: rule__EPackageImport__Group__0__Impl : ( 'import' ) ;
+    // InternalIdioms.g:1305:1: rule__EPackageImport__Group__0__Impl : ( 'import' ) ;
     public final void rule__EPackageImport__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1247:1: ( ( 'import' ) )
-            // InternalIdioms.g:1248:1: ( 'import' )
+            // InternalIdioms.g:1309:1: ( ( 'import' ) )
+            // InternalIdioms.g:1310:1: ( 'import' )
             {
-            // InternalIdioms.g:1248:1: ( 'import' )
-            // InternalIdioms.g:1249:2: 'import'
+            // InternalIdioms.g:1310:1: ( 'import' )
+            // InternalIdioms.g:1311:2: 'import'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getImportKeyword_0());
@@ -4477,14 +4705,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__1"
-    // InternalIdioms.g:1258:1: rule__EPackageImport__Group__1 : rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2 ;
+    // InternalIdioms.g:1320:1: rule__EPackageImport__Group__1 : rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2 ;
     public final void rule__EPackageImport__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1262:1: ( rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2 )
-            // InternalIdioms.g:1263:2: rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2
+            // InternalIdioms.g:1324:1: ( rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2 )
+            // InternalIdioms.g:1325:2: rule__EPackageImport__Group__1__Impl rule__EPackageImport__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_9);
             rule__EPackageImport__Group__1__Impl();
@@ -4515,23 +4743,23 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__1__Impl"
-    // InternalIdioms.g:1270:1: rule__EPackageImport__Group__1__Impl : ( ( rule__EPackageImport__EPackageAssignment_1 ) ) ;
+    // InternalIdioms.g:1332:1: rule__EPackageImport__Group__1__Impl : ( ( rule__EPackageImport__EPackageAssignment_1 ) ) ;
     public final void rule__EPackageImport__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1274:1: ( ( ( rule__EPackageImport__EPackageAssignment_1 ) ) )
-            // InternalIdioms.g:1275:1: ( ( rule__EPackageImport__EPackageAssignment_1 ) )
+            // InternalIdioms.g:1336:1: ( ( ( rule__EPackageImport__EPackageAssignment_1 ) ) )
+            // InternalIdioms.g:1337:1: ( ( rule__EPackageImport__EPackageAssignment_1 ) )
             {
-            // InternalIdioms.g:1275:1: ( ( rule__EPackageImport__EPackageAssignment_1 ) )
-            // InternalIdioms.g:1276:2: ( rule__EPackageImport__EPackageAssignment_1 )
+            // InternalIdioms.g:1337:1: ( ( rule__EPackageImport__EPackageAssignment_1 ) )
+            // InternalIdioms.g:1338:2: ( rule__EPackageImport__EPackageAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getEPackageAssignment_1());
             }
-            // InternalIdioms.g:1277:2: ( rule__EPackageImport__EPackageAssignment_1 )
-            // InternalIdioms.g:1277:3: rule__EPackageImport__EPackageAssignment_1
+            // InternalIdioms.g:1339:2: ( rule__EPackageImport__EPackageAssignment_1 )
+            // InternalIdioms.g:1339:3: rule__EPackageImport__EPackageAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__EPackageImport__EPackageAssignment_1();
@@ -4566,14 +4794,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__2"
-    // InternalIdioms.g:1285:1: rule__EPackageImport__Group__2 : rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3 ;
+    // InternalIdioms.g:1347:1: rule__EPackageImport__Group__2 : rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3 ;
     public final void rule__EPackageImport__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1289:1: ( rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3 )
-            // InternalIdioms.g:1290:2: rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3
+            // InternalIdioms.g:1351:1: ( rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3 )
+            // InternalIdioms.g:1352:2: rule__EPackageImport__Group__2__Impl rule__EPackageImport__Group__3
             {
             pushFollow(FollowSets000.FOLLOW_9);
             rule__EPackageImport__Group__2__Impl();
@@ -4604,22 +4832,22 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__2__Impl"
-    // InternalIdioms.g:1297:1: rule__EPackageImport__Group__2__Impl : ( ( rule__EPackageImport__Group_2__0 )? ) ;
+    // InternalIdioms.g:1359:1: rule__EPackageImport__Group__2__Impl : ( ( rule__EPackageImport__Group_2__0 )? ) ;
     public final void rule__EPackageImport__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1301:1: ( ( ( rule__EPackageImport__Group_2__0 )? ) )
-            // InternalIdioms.g:1302:1: ( ( rule__EPackageImport__Group_2__0 )? )
+            // InternalIdioms.g:1363:1: ( ( ( rule__EPackageImport__Group_2__0 )? ) )
+            // InternalIdioms.g:1364:1: ( ( rule__EPackageImport__Group_2__0 )? )
             {
-            // InternalIdioms.g:1302:1: ( ( rule__EPackageImport__Group_2__0 )? )
-            // InternalIdioms.g:1303:2: ( rule__EPackageImport__Group_2__0 )?
+            // InternalIdioms.g:1364:1: ( ( rule__EPackageImport__Group_2__0 )? )
+            // InternalIdioms.g:1365:2: ( rule__EPackageImport__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getGroup_2());
             }
-            // InternalIdioms.g:1304:2: ( rule__EPackageImport__Group_2__0 )?
+            // InternalIdioms.g:1366:2: ( rule__EPackageImport__Group_2__0 )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -4628,7 +4856,7 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalIdioms.g:1304:3: rule__EPackageImport__Group_2__0
+                    // InternalIdioms.g:1366:3: rule__EPackageImport__Group_2__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__EPackageImport__Group_2__0();
@@ -4666,14 +4894,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__3"
-    // InternalIdioms.g:1312:1: rule__EPackageImport__Group__3 : rule__EPackageImport__Group__3__Impl ;
+    // InternalIdioms.g:1374:1: rule__EPackageImport__Group__3 : rule__EPackageImport__Group__3__Impl ;
     public final void rule__EPackageImport__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1316:1: ( rule__EPackageImport__Group__3__Impl )
-            // InternalIdioms.g:1317:2: rule__EPackageImport__Group__3__Impl
+            // InternalIdioms.g:1378:1: ( rule__EPackageImport__Group__3__Impl )
+            // InternalIdioms.g:1379:2: rule__EPackageImport__Group__3__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__EPackageImport__Group__3__Impl();
@@ -4699,22 +4927,22 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group__3__Impl"
-    // InternalIdioms.g:1323:1: rule__EPackageImport__Group__3__Impl : ( ( ';' )? ) ;
+    // InternalIdioms.g:1385:1: rule__EPackageImport__Group__3__Impl : ( ( ';' )? ) ;
     public final void rule__EPackageImport__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1327:1: ( ( ( ';' )? ) )
-            // InternalIdioms.g:1328:1: ( ( ';' )? )
+            // InternalIdioms.g:1389:1: ( ( ( ';' )? ) )
+            // InternalIdioms.g:1390:1: ( ( ';' )? )
             {
-            // InternalIdioms.g:1328:1: ( ( ';' )? )
-            // InternalIdioms.g:1329:2: ( ';' )?
+            // InternalIdioms.g:1390:1: ( ( ';' )? )
+            // InternalIdioms.g:1391:2: ( ';' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getSemicolonKeyword_3());
             }
-            // InternalIdioms.g:1330:2: ( ';' )?
+            // InternalIdioms.g:1392:2: ( ';' )?
             int alt11=2;
             int LA11_0 = input.LA(1);
 
@@ -4723,7 +4951,7 @@
             }
             switch (alt11) {
                 case 1 :
-                    // InternalIdioms.g:1330:3: ';'
+                    // InternalIdioms.g:1392:3: ';'
                     {
                     match(input,13,FollowSets000.FOLLOW_2); if (state.failed) return ;
 
@@ -4757,14 +4985,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group_2__0"
-    // InternalIdioms.g:1339:1: rule__EPackageImport__Group_2__0 : rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1 ;
+    // InternalIdioms.g:1401:1: rule__EPackageImport__Group_2__0 : rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1 ;
     public final void rule__EPackageImport__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1343:1: ( rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1 )
-            // InternalIdioms.g:1344:2: rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1
+            // InternalIdioms.g:1405:1: ( rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1 )
+            // InternalIdioms.g:1406:2: rule__EPackageImport__Group_2__0__Impl rule__EPackageImport__Group_2__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__EPackageImport__Group_2__0__Impl();
@@ -4795,17 +5023,17 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group_2__0__Impl"
-    // InternalIdioms.g:1351:1: rule__EPackageImport__Group_2__0__Impl : ( 'as' ) ;
+    // InternalIdioms.g:1413:1: rule__EPackageImport__Group_2__0__Impl : ( 'as' ) ;
     public final void rule__EPackageImport__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1355:1: ( ( 'as' ) )
-            // InternalIdioms.g:1356:1: ( 'as' )
+            // InternalIdioms.g:1417:1: ( ( 'as' ) )
+            // InternalIdioms.g:1418:1: ( 'as' )
             {
-            // InternalIdioms.g:1356:1: ( 'as' )
-            // InternalIdioms.g:1357:2: 'as'
+            // InternalIdioms.g:1418:1: ( 'as' )
+            // InternalIdioms.g:1419:2: 'as'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getAsKeyword_2_0());
@@ -4836,14 +5064,14 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group_2__1"
-    // InternalIdioms.g:1366:1: rule__EPackageImport__Group_2__1 : rule__EPackageImport__Group_2__1__Impl ;
+    // InternalIdioms.g:1428:1: rule__EPackageImport__Group_2__1 : rule__EPackageImport__Group_2__1__Impl ;
     public final void rule__EPackageImport__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1370:1: ( rule__EPackageImport__Group_2__1__Impl )
-            // InternalIdioms.g:1371:2: rule__EPackageImport__Group_2__1__Impl
+            // InternalIdioms.g:1432:1: ( rule__EPackageImport__Group_2__1__Impl )
+            // InternalIdioms.g:1433:2: rule__EPackageImport__Group_2__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__EPackageImport__Group_2__1__Impl();
@@ -4869,23 +5097,23 @@
 
 
     // $ANTLR start "rule__EPackageImport__Group_2__1__Impl"
-    // InternalIdioms.g:1377:1: rule__EPackageImport__Group_2__1__Impl : ( ( rule__EPackageImport__AsAssignment_2_1 ) ) ;
+    // InternalIdioms.g:1439:1: rule__EPackageImport__Group_2__1__Impl : ( ( rule__EPackageImport__AsAssignment_2_1 ) ) ;
     public final void rule__EPackageImport__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1381:1: ( ( ( rule__EPackageImport__AsAssignment_2_1 ) ) )
-            // InternalIdioms.g:1382:1: ( ( rule__EPackageImport__AsAssignment_2_1 ) )
+            // InternalIdioms.g:1443:1: ( ( ( rule__EPackageImport__AsAssignment_2_1 ) ) )
+            // InternalIdioms.g:1444:1: ( ( rule__EPackageImport__AsAssignment_2_1 ) )
             {
-            // InternalIdioms.g:1382:1: ( ( rule__EPackageImport__AsAssignment_2_1 ) )
-            // InternalIdioms.g:1383:2: ( rule__EPackageImport__AsAssignment_2_1 )
+            // InternalIdioms.g:1444:1: ( ( rule__EPackageImport__AsAssignment_2_1 ) )
+            // InternalIdioms.g:1445:2: ( rule__EPackageImport__AsAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getAsAssignment_2_1());
             }
-            // InternalIdioms.g:1384:2: ( rule__EPackageImport__AsAssignment_2_1 )
-            // InternalIdioms.g:1384:3: rule__EPackageImport__AsAssignment_2_1
+            // InternalIdioms.g:1446:2: ( rule__EPackageImport__AsAssignment_2_1 )
+            // InternalIdioms.g:1446:3: rule__EPackageImport__AsAssignment_2_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__EPackageImport__AsAssignment_2_1();
@@ -4920,14 +5148,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__0"
-    // InternalIdioms.g:1393:1: rule__IdiomsImport__Group__0 : rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1 ;
+    // InternalIdioms.g:1455:1: rule__IdiomsImport__Group__0 : rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1 ;
     public final void rule__IdiomsImport__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1397:1: ( rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1 )
-            // InternalIdioms.g:1398:2: rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1
+            // InternalIdioms.g:1459:1: ( rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1 )
+            // InternalIdioms.g:1460:2: rule__IdiomsImport__Group__0__Impl rule__IdiomsImport__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_8);
             rule__IdiomsImport__Group__0__Impl();
@@ -4958,17 +5186,17 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__0__Impl"
-    // InternalIdioms.g:1405:1: rule__IdiomsImport__Group__0__Impl : ( 'with' ) ;
+    // InternalIdioms.g:1467:1: rule__IdiomsImport__Group__0__Impl : ( 'with' ) ;
     public final void rule__IdiomsImport__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1409:1: ( ( 'with' ) )
-            // InternalIdioms.g:1410:1: ( 'with' )
+            // InternalIdioms.g:1471:1: ( ( 'with' ) )
+            // InternalIdioms.g:1472:1: ( 'with' )
             {
-            // InternalIdioms.g:1410:1: ( 'with' )
-            // InternalIdioms.g:1411:2: 'with'
+            // InternalIdioms.g:1472:1: ( 'with' )
+            // InternalIdioms.g:1473:2: 'with'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getWithKeyword_0());
@@ -4999,14 +5227,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__1"
-    // InternalIdioms.g:1420:1: rule__IdiomsImport__Group__1 : rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2 ;
+    // InternalIdioms.g:1482:1: rule__IdiomsImport__Group__1 : rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2 ;
     public final void rule__IdiomsImport__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1424:1: ( rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2 )
-            // InternalIdioms.g:1425:2: rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2
+            // InternalIdioms.g:1486:1: ( rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2 )
+            // InternalIdioms.g:1487:2: rule__IdiomsImport__Group__1__Impl rule__IdiomsImport__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_9);
             rule__IdiomsImport__Group__1__Impl();
@@ -5037,23 +5265,23 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__1__Impl"
-    // InternalIdioms.g:1432:1: rule__IdiomsImport__Group__1__Impl : ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) ) ;
+    // InternalIdioms.g:1494:1: rule__IdiomsImport__Group__1__Impl : ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) ) ;
     public final void rule__IdiomsImport__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1436:1: ( ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) ) )
-            // InternalIdioms.g:1437:1: ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) )
+            // InternalIdioms.g:1498:1: ( ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) ) )
+            // InternalIdioms.g:1499:1: ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) )
             {
-            // InternalIdioms.g:1437:1: ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) )
-            // InternalIdioms.g:1438:2: ( rule__IdiomsImport__IdiomsModelAssignment_1 )
+            // InternalIdioms.g:1499:1: ( ( rule__IdiomsImport__IdiomsModelAssignment_1 ) )
+            // InternalIdioms.g:1500:2: ( rule__IdiomsImport__IdiomsModelAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getIdiomsModelAssignment_1());
             }
-            // InternalIdioms.g:1439:2: ( rule__IdiomsImport__IdiomsModelAssignment_1 )
-            // InternalIdioms.g:1439:3: rule__IdiomsImport__IdiomsModelAssignment_1
+            // InternalIdioms.g:1501:2: ( rule__IdiomsImport__IdiomsModelAssignment_1 )
+            // InternalIdioms.g:1501:3: rule__IdiomsImport__IdiomsModelAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsImport__IdiomsModelAssignment_1();
@@ -5088,14 +5316,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__2"
-    // InternalIdioms.g:1447:1: rule__IdiomsImport__Group__2 : rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3 ;
+    // InternalIdioms.g:1509:1: rule__IdiomsImport__Group__2 : rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3 ;
     public final void rule__IdiomsImport__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1451:1: ( rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3 )
-            // InternalIdioms.g:1452:2: rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3
+            // InternalIdioms.g:1513:1: ( rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3 )
+            // InternalIdioms.g:1514:2: rule__IdiomsImport__Group__2__Impl rule__IdiomsImport__Group__3
             {
             pushFollow(FollowSets000.FOLLOW_9);
             rule__IdiomsImport__Group__2__Impl();
@@ -5126,22 +5354,22 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__2__Impl"
-    // InternalIdioms.g:1459:1: rule__IdiomsImport__Group__2__Impl : ( ( rule__IdiomsImport__Group_2__0 )? ) ;
+    // InternalIdioms.g:1521:1: rule__IdiomsImport__Group__2__Impl : ( ( rule__IdiomsImport__Group_2__0 )? ) ;
     public final void rule__IdiomsImport__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1463:1: ( ( ( rule__IdiomsImport__Group_2__0 )? ) )
-            // InternalIdioms.g:1464:1: ( ( rule__IdiomsImport__Group_2__0 )? )
+            // InternalIdioms.g:1525:1: ( ( ( rule__IdiomsImport__Group_2__0 )? ) )
+            // InternalIdioms.g:1526:1: ( ( rule__IdiomsImport__Group_2__0 )? )
             {
-            // InternalIdioms.g:1464:1: ( ( rule__IdiomsImport__Group_2__0 )? )
-            // InternalIdioms.g:1465:2: ( rule__IdiomsImport__Group_2__0 )?
+            // InternalIdioms.g:1526:1: ( ( rule__IdiomsImport__Group_2__0 )? )
+            // InternalIdioms.g:1527:2: ( rule__IdiomsImport__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getGroup_2());
             }
-            // InternalIdioms.g:1466:2: ( rule__IdiomsImport__Group_2__0 )?
+            // InternalIdioms.g:1528:2: ( rule__IdiomsImport__Group_2__0 )?
             int alt12=2;
             int LA12_0 = input.LA(1);
 
@@ -5150,7 +5378,7 @@
             }
             switch (alt12) {
                 case 1 :
-                    // InternalIdioms.g:1466:3: rule__IdiomsImport__Group_2__0
+                    // InternalIdioms.g:1528:3: rule__IdiomsImport__Group_2__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__IdiomsImport__Group_2__0();
@@ -5188,14 +5416,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__3"
-    // InternalIdioms.g:1474:1: rule__IdiomsImport__Group__3 : rule__IdiomsImport__Group__3__Impl ;
+    // InternalIdioms.g:1536:1: rule__IdiomsImport__Group__3 : rule__IdiomsImport__Group__3__Impl ;
     public final void rule__IdiomsImport__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1478:1: ( rule__IdiomsImport__Group__3__Impl )
-            // InternalIdioms.g:1479:2: rule__IdiomsImport__Group__3__Impl
+            // InternalIdioms.g:1540:1: ( rule__IdiomsImport__Group__3__Impl )
+            // InternalIdioms.g:1541:2: rule__IdiomsImport__Group__3__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsImport__Group__3__Impl();
@@ -5221,22 +5449,22 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group__3__Impl"
-    // InternalIdioms.g:1485:1: rule__IdiomsImport__Group__3__Impl : ( ( ';' )? ) ;
+    // InternalIdioms.g:1547:1: rule__IdiomsImport__Group__3__Impl : ( ( ';' )? ) ;
     public final void rule__IdiomsImport__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1489:1: ( ( ( ';' )? ) )
-            // InternalIdioms.g:1490:1: ( ( ';' )? )
+            // InternalIdioms.g:1551:1: ( ( ( ';' )? ) )
+            // InternalIdioms.g:1552:1: ( ( ';' )? )
             {
-            // InternalIdioms.g:1490:1: ( ( ';' )? )
-            // InternalIdioms.g:1491:2: ( ';' )?
+            // InternalIdioms.g:1552:1: ( ( ';' )? )
+            // InternalIdioms.g:1553:2: ( ';' )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getSemicolonKeyword_3());
             }
-            // InternalIdioms.g:1492:2: ( ';' )?
+            // InternalIdioms.g:1554:2: ( ';' )?
             int alt13=2;
             int LA13_0 = input.LA(1);
 
@@ -5245,7 +5473,7 @@
             }
             switch (alt13) {
                 case 1 :
-                    // InternalIdioms.g:1492:3: ';'
+                    // InternalIdioms.g:1554:3: ';'
                     {
                     match(input,13,FollowSets000.FOLLOW_2); if (state.failed) return ;
 
@@ -5279,14 +5507,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group_2__0"
-    // InternalIdioms.g:1501:1: rule__IdiomsImport__Group_2__0 : rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1 ;
+    // InternalIdioms.g:1563:1: rule__IdiomsImport__Group_2__0 : rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1 ;
     public final void rule__IdiomsImport__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1505:1: ( rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1 )
-            // InternalIdioms.g:1506:2: rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1
+            // InternalIdioms.g:1567:1: ( rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1 )
+            // InternalIdioms.g:1568:2: rule__IdiomsImport__Group_2__0__Impl rule__IdiomsImport__Group_2__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__IdiomsImport__Group_2__0__Impl();
@@ -5317,17 +5545,17 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group_2__0__Impl"
-    // InternalIdioms.g:1513:1: rule__IdiomsImport__Group_2__0__Impl : ( 'as' ) ;
+    // InternalIdioms.g:1575:1: rule__IdiomsImport__Group_2__0__Impl : ( 'as' ) ;
     public final void rule__IdiomsImport__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1517:1: ( ( 'as' ) )
-            // InternalIdioms.g:1518:1: ( 'as' )
+            // InternalIdioms.g:1579:1: ( ( 'as' ) )
+            // InternalIdioms.g:1580:1: ( 'as' )
             {
-            // InternalIdioms.g:1518:1: ( 'as' )
-            // InternalIdioms.g:1519:2: 'as'
+            // InternalIdioms.g:1580:1: ( 'as' )
+            // InternalIdioms.g:1581:2: 'as'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getAsKeyword_2_0());
@@ -5358,14 +5586,14 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group_2__1"
-    // InternalIdioms.g:1528:1: rule__IdiomsImport__Group_2__1 : rule__IdiomsImport__Group_2__1__Impl ;
+    // InternalIdioms.g:1590:1: rule__IdiomsImport__Group_2__1 : rule__IdiomsImport__Group_2__1__Impl ;
     public final void rule__IdiomsImport__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1532:1: ( rule__IdiomsImport__Group_2__1__Impl )
-            // InternalIdioms.g:1533:2: rule__IdiomsImport__Group_2__1__Impl
+            // InternalIdioms.g:1594:1: ( rule__IdiomsImport__Group_2__1__Impl )
+            // InternalIdioms.g:1595:2: rule__IdiomsImport__Group_2__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsImport__Group_2__1__Impl();
@@ -5391,23 +5619,23 @@
 
 
     // $ANTLR start "rule__IdiomsImport__Group_2__1__Impl"
-    // InternalIdioms.g:1539:1: rule__IdiomsImport__Group_2__1__Impl : ( ( rule__IdiomsImport__AsAssignment_2_1 ) ) ;
+    // InternalIdioms.g:1601:1: rule__IdiomsImport__Group_2__1__Impl : ( ( rule__IdiomsImport__AsAssignment_2_1 ) ) ;
     public final void rule__IdiomsImport__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1543:1: ( ( ( rule__IdiomsImport__AsAssignment_2_1 ) ) )
-            // InternalIdioms.g:1544:1: ( ( rule__IdiomsImport__AsAssignment_2_1 ) )
+            // InternalIdioms.g:1605:1: ( ( ( rule__IdiomsImport__AsAssignment_2_1 ) ) )
+            // InternalIdioms.g:1606:1: ( ( rule__IdiomsImport__AsAssignment_2_1 ) )
             {
-            // InternalIdioms.g:1544:1: ( ( rule__IdiomsImport__AsAssignment_2_1 ) )
-            // InternalIdioms.g:1545:2: ( rule__IdiomsImport__AsAssignment_2_1 )
+            // InternalIdioms.g:1606:1: ( ( rule__IdiomsImport__AsAssignment_2_1 ) )
+            // InternalIdioms.g:1607:2: ( rule__IdiomsImport__AsAssignment_2_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getAsAssignment_2_1());
             }
-            // InternalIdioms.g:1546:2: ( rule__IdiomsImport__AsAssignment_2_1 )
-            // InternalIdioms.g:1546:3: rule__IdiomsImport__AsAssignment_2_1
+            // InternalIdioms.g:1608:2: ( rule__IdiomsImport__AsAssignment_2_1 )
+            // InternalIdioms.g:1608:3: rule__IdiomsImport__AsAssignment_2_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__IdiomsImport__AsAssignment_2_1();
@@ -5442,14 +5670,14 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__0"
-    // InternalIdioms.g:1555:1: rule__LocatorDeclaration__Group__0 : rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1 ;
+    // InternalIdioms.g:1617:1: rule__LocatorDeclaration__Group__0 : rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1 ;
     public final void rule__LocatorDeclaration__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1559:1: ( rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1 )
-            // InternalIdioms.g:1560:2: rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1
+            // InternalIdioms.g:1621:1: ( rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1 )
+            // InternalIdioms.g:1622:2: rule__LocatorDeclaration__Group__0__Impl rule__LocatorDeclaration__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__LocatorDeclaration__Group__0__Impl();
@@ -5480,17 +5708,17 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__0__Impl"
-    // InternalIdioms.g:1567:1: rule__LocatorDeclaration__Group__0__Impl : ( 'locator' ) ;
+    // InternalIdioms.g:1629:1: rule__LocatorDeclaration__Group__0__Impl : ( 'locator' ) ;
     public final void rule__LocatorDeclaration__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1571:1: ( ( 'locator' ) )
-            // InternalIdioms.g:1572:1: ( 'locator' )
+            // InternalIdioms.g:1633:1: ( ( 'locator' ) )
+            // InternalIdioms.g:1634:1: ( 'locator' )
             {
-            // InternalIdioms.g:1572:1: ( 'locator' )
-            // InternalIdioms.g:1573:2: 'locator'
+            // InternalIdioms.g:1634:1: ( 'locator' )
+            // InternalIdioms.g:1635:2: 'locator'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getLocatorKeyword_0());
@@ -5521,14 +5749,14 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__1"
-    // InternalIdioms.g:1582:1: rule__LocatorDeclaration__Group__1 : rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2 ;
+    // InternalIdioms.g:1644:1: rule__LocatorDeclaration__Group__1 : rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2 ;
     public final void rule__LocatorDeclaration__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1586:1: ( rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2 )
-            // InternalIdioms.g:1587:2: rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2
+            // InternalIdioms.g:1648:1: ( rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2 )
+            // InternalIdioms.g:1649:2: rule__LocatorDeclaration__Group__1__Impl rule__LocatorDeclaration__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_10);
             rule__LocatorDeclaration__Group__1__Impl();
@@ -5559,23 +5787,23 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__1__Impl"
-    // InternalIdioms.g:1594:1: rule__LocatorDeclaration__Group__1__Impl : ( ( rule__LocatorDeclaration__NameAssignment_1 ) ) ;
+    // InternalIdioms.g:1656:1: rule__LocatorDeclaration__Group__1__Impl : ( ( rule__LocatorDeclaration__NameAssignment_1 ) ) ;
     public final void rule__LocatorDeclaration__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1598:1: ( ( ( rule__LocatorDeclaration__NameAssignment_1 ) ) )
-            // InternalIdioms.g:1599:1: ( ( rule__LocatorDeclaration__NameAssignment_1 ) )
+            // InternalIdioms.g:1660:1: ( ( ( rule__LocatorDeclaration__NameAssignment_1 ) ) )
+            // InternalIdioms.g:1661:1: ( ( rule__LocatorDeclaration__NameAssignment_1 ) )
             {
-            // InternalIdioms.g:1599:1: ( ( rule__LocatorDeclaration__NameAssignment_1 ) )
-            // InternalIdioms.g:1600:2: ( rule__LocatorDeclaration__NameAssignment_1 )
+            // InternalIdioms.g:1661:1: ( ( rule__LocatorDeclaration__NameAssignment_1 ) )
+            // InternalIdioms.g:1662:2: ( rule__LocatorDeclaration__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getNameAssignment_1());
             }
-            // InternalIdioms.g:1601:2: ( rule__LocatorDeclaration__NameAssignment_1 )
-            // InternalIdioms.g:1601:3: rule__LocatorDeclaration__NameAssignment_1
+            // InternalIdioms.g:1663:2: ( rule__LocatorDeclaration__NameAssignment_1 )
+            // InternalIdioms.g:1663:3: rule__LocatorDeclaration__NameAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__LocatorDeclaration__NameAssignment_1();
@@ -5610,14 +5838,14 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__2"
-    // InternalIdioms.g:1609:1: rule__LocatorDeclaration__Group__2 : rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3 ;
+    // InternalIdioms.g:1671:1: rule__LocatorDeclaration__Group__2 : rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3 ;
     public final void rule__LocatorDeclaration__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1613:1: ( rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3 )
-            // InternalIdioms.g:1614:2: rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3
+            // InternalIdioms.g:1675:1: ( rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3 )
+            // InternalIdioms.g:1676:2: rule__LocatorDeclaration__Group__2__Impl rule__LocatorDeclaration__Group__3
             {
             pushFollow(FollowSets000.FOLLOW_11);
             rule__LocatorDeclaration__Group__2__Impl();
@@ -5648,23 +5876,23 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__2__Impl"
-    // InternalIdioms.g:1621:1: rule__LocatorDeclaration__Group__2__Impl : ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) ) ;
+    // InternalIdioms.g:1683:1: rule__LocatorDeclaration__Group__2__Impl : ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) ) ;
     public final void rule__LocatorDeclaration__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1625:1: ( ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) ) )
-            // InternalIdioms.g:1626:1: ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) )
+            // InternalIdioms.g:1687:1: ( ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) ) )
+            // InternalIdioms.g:1688:1: ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) )
             {
-            // InternalIdioms.g:1626:1: ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) )
-            // InternalIdioms.g:1627:2: ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 )
+            // InternalIdioms.g:1688:1: ( ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 ) )
+            // InternalIdioms.g:1689:2: ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getOwnedLocatorAssignment_2());
             }
-            // InternalIdioms.g:1628:2: ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 )
-            // InternalIdioms.g:1628:3: rule__LocatorDeclaration__OwnedLocatorAssignment_2
+            // InternalIdioms.g:1690:2: ( rule__LocatorDeclaration__OwnedLocatorAssignment_2 )
+            // InternalIdioms.g:1690:3: rule__LocatorDeclaration__OwnedLocatorAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__LocatorDeclaration__OwnedLocatorAssignment_2();
@@ -5699,14 +5927,14 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__3"
-    // InternalIdioms.g:1636:1: rule__LocatorDeclaration__Group__3 : rule__LocatorDeclaration__Group__3__Impl ;
+    // InternalIdioms.g:1698:1: rule__LocatorDeclaration__Group__3 : rule__LocatorDeclaration__Group__3__Impl ;
     public final void rule__LocatorDeclaration__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1640:1: ( rule__LocatorDeclaration__Group__3__Impl )
-            // InternalIdioms.g:1641:2: rule__LocatorDeclaration__Group__3__Impl
+            // InternalIdioms.g:1702:1: ( rule__LocatorDeclaration__Group__3__Impl )
+            // InternalIdioms.g:1703:2: rule__LocatorDeclaration__Group__3__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__LocatorDeclaration__Group__3__Impl();
@@ -5732,17 +5960,17 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__Group__3__Impl"
-    // InternalIdioms.g:1647:1: rule__LocatorDeclaration__Group__3__Impl : ( ';' ) ;
+    // InternalIdioms.g:1709:1: rule__LocatorDeclaration__Group__3__Impl : ( ';' ) ;
     public final void rule__LocatorDeclaration__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1651:1: ( ( ';' ) )
-            // InternalIdioms.g:1652:1: ( ';' )
+            // InternalIdioms.g:1713:1: ( ( ';' ) )
+            // InternalIdioms.g:1714:1: ( ';' )
             {
-            // InternalIdioms.g:1652:1: ( ';' )
-            // InternalIdioms.g:1653:2: ';'
+            // InternalIdioms.g:1714:1: ( ';' )
+            // InternalIdioms.g:1715:2: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getSemicolonKeyword_3());
@@ -5773,14 +6001,14 @@
 
 
     // $ANTLR start "rule__AnyAssignmentLocator__Group__0"
-    // InternalIdioms.g:1663:1: rule__AnyAssignmentLocator__Group__0 : rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1 ;
+    // InternalIdioms.g:1725:1: rule__AnyAssignmentLocator__Group__0 : rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1 ;
     public final void rule__AnyAssignmentLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1667:1: ( rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1 )
-            // InternalIdioms.g:1668:2: rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1
+            // InternalIdioms.g:1729:1: ( rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1 )
+            // InternalIdioms.g:1730:2: rule__AnyAssignmentLocator__Group__0__Impl rule__AnyAssignmentLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_12);
             rule__AnyAssignmentLocator__Group__0__Impl();
@@ -5811,23 +6039,23 @@
 
 
     // $ANTLR start "rule__AnyAssignmentLocator__Group__0__Impl"
-    // InternalIdioms.g:1675:1: rule__AnyAssignmentLocator__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:1737:1: rule__AnyAssignmentLocator__Group__0__Impl : ( () ) ;
     public final void rule__AnyAssignmentLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1679:1: ( ( () ) )
-            // InternalIdioms.g:1680:1: ( () )
+            // InternalIdioms.g:1741:1: ( ( () ) )
+            // InternalIdioms.g:1742:1: ( () )
             {
-            // InternalIdioms.g:1680:1: ( () )
-            // InternalIdioms.g:1681:2: ()
+            // InternalIdioms.g:1742:1: ( () )
+            // InternalIdioms.g:1743:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnyAssignmentLocatorAccess().getAnyAssignmentLocatorAction_0());
             }
-            // InternalIdioms.g:1682:2: ()
-            // InternalIdioms.g:1682:3:
+            // InternalIdioms.g:1744:2: ()
+            // InternalIdioms.g:1744:3:
             {
             }
 
@@ -5852,14 +6080,14 @@
 
 
     // $ANTLR start "rule__AnyAssignmentLocator__Group__1"
-    // InternalIdioms.g:1690:1: rule__AnyAssignmentLocator__Group__1 : rule__AnyAssignmentLocator__Group__1__Impl ;
+    // InternalIdioms.g:1752:1: rule__AnyAssignmentLocator__Group__1 : rule__AnyAssignmentLocator__Group__1__Impl ;
     public final void rule__AnyAssignmentLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1694:1: ( rule__AnyAssignmentLocator__Group__1__Impl )
-            // InternalIdioms.g:1695:2: rule__AnyAssignmentLocator__Group__1__Impl
+            // InternalIdioms.g:1756:1: ( rule__AnyAssignmentLocator__Group__1__Impl )
+            // InternalIdioms.g:1757:2: rule__AnyAssignmentLocator__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AnyAssignmentLocator__Group__1__Impl();
@@ -5885,17 +6113,17 @@
 
 
     // $ANTLR start "rule__AnyAssignmentLocator__Group__1__Impl"
-    // InternalIdioms.g:1701:1: rule__AnyAssignmentLocator__Group__1__Impl : ( 'any-assignment' ) ;
+    // InternalIdioms.g:1763:1: rule__AnyAssignmentLocator__Group__1__Impl : ( 'any-assignment' ) ;
     public final void rule__AnyAssignmentLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1705:1: ( ( 'any-assignment' ) )
-            // InternalIdioms.g:1706:1: ( 'any-assignment' )
+            // InternalIdioms.g:1767:1: ( ( 'any-assignment' ) )
+            // InternalIdioms.g:1768:1: ( 'any-assignment' )
             {
-            // InternalIdioms.g:1706:1: ( 'any-assignment' )
-            // InternalIdioms.g:1707:2: 'any-assignment'
+            // InternalIdioms.g:1768:1: ( 'any-assignment' )
+            // InternalIdioms.g:1769:2: 'any-assignment'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnyAssignmentLocatorAccess().getAnyAssignmentKeyword_1());
@@ -5926,14 +6154,14 @@
 
 
     // $ANTLR start "rule__AnyElementLocator__Group__0"
-    // InternalIdioms.g:1717:1: rule__AnyElementLocator__Group__0 : rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1 ;
+    // InternalIdioms.g:1779:1: rule__AnyElementLocator__Group__0 : rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1 ;
     public final void rule__AnyElementLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1721:1: ( rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1 )
-            // InternalIdioms.g:1722:2: rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1
+            // InternalIdioms.g:1783:1: ( rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1 )
+            // InternalIdioms.g:1784:2: rule__AnyElementLocator__Group__0__Impl rule__AnyElementLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_13);
             rule__AnyElementLocator__Group__0__Impl();
@@ -5964,23 +6192,23 @@
 
 
     // $ANTLR start "rule__AnyElementLocator__Group__0__Impl"
-    // InternalIdioms.g:1729:1: rule__AnyElementLocator__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:1791:1: rule__AnyElementLocator__Group__0__Impl : ( () ) ;
     public final void rule__AnyElementLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1733:1: ( ( () ) )
-            // InternalIdioms.g:1734:1: ( () )
+            // InternalIdioms.g:1795:1: ( ( () ) )
+            // InternalIdioms.g:1796:1: ( () )
             {
-            // InternalIdioms.g:1734:1: ( () )
-            // InternalIdioms.g:1735:2: ()
+            // InternalIdioms.g:1796:1: ( () )
+            // InternalIdioms.g:1797:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnyElementLocatorAccess().getAnyElementLocatorAction_0());
             }
-            // InternalIdioms.g:1736:2: ()
-            // InternalIdioms.g:1736:3:
+            // InternalIdioms.g:1798:2: ()
+            // InternalIdioms.g:1798:3:
             {
             }
 
@@ -6005,14 +6233,14 @@
 
 
     // $ANTLR start "rule__AnyElementLocator__Group__1"
-    // InternalIdioms.g:1744:1: rule__AnyElementLocator__Group__1 : rule__AnyElementLocator__Group__1__Impl ;
+    // InternalIdioms.g:1806:1: rule__AnyElementLocator__Group__1 : rule__AnyElementLocator__Group__1__Impl ;
     public final void rule__AnyElementLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1748:1: ( rule__AnyElementLocator__Group__1__Impl )
-            // InternalIdioms.g:1749:2: rule__AnyElementLocator__Group__1__Impl
+            // InternalIdioms.g:1810:1: ( rule__AnyElementLocator__Group__1__Impl )
+            // InternalIdioms.g:1811:2: rule__AnyElementLocator__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AnyElementLocator__Group__1__Impl();
@@ -6038,17 +6266,17 @@
 
 
     // $ANTLR start "rule__AnyElementLocator__Group__1__Impl"
-    // InternalIdioms.g:1755:1: rule__AnyElementLocator__Group__1__Impl : ( 'any-element' ) ;
+    // InternalIdioms.g:1817:1: rule__AnyElementLocator__Group__1__Impl : ( 'any-element' ) ;
     public final void rule__AnyElementLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1759:1: ( ( 'any-element' ) )
-            // InternalIdioms.g:1760:1: ( 'any-element' )
+            // InternalIdioms.g:1821:1: ( ( 'any-element' ) )
+            // InternalIdioms.g:1822:1: ( 'any-element' )
             {
-            // InternalIdioms.g:1760:1: ( 'any-element' )
-            // InternalIdioms.g:1761:2: 'any-element'
+            // InternalIdioms.g:1822:1: ( 'any-element' )
+            // InternalIdioms.g:1823:2: 'any-element'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAnyElementLocatorAccess().getAnyElementKeyword_1());
@@ -6079,14 +6307,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__0"
-    // InternalIdioms.g:1771:1: rule__AssignmentLocator__Group__0 : rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1 ;
+    // InternalIdioms.g:1833:1: rule__AssignmentLocator__Group__0 : rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1 ;
     public final void rule__AssignmentLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1775:1: ( rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1 )
-            // InternalIdioms.g:1776:2: rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1
+            // InternalIdioms.g:1837:1: ( rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1 )
+            // InternalIdioms.g:1838:2: rule__AssignmentLocator__Group__0__Impl rule__AssignmentLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__AssignmentLocator__Group__0__Impl();
@@ -6117,17 +6345,17 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__0__Impl"
-    // InternalIdioms.g:1783:1: rule__AssignmentLocator__Group__0__Impl : ( 'assignment' ) ;
+    // InternalIdioms.g:1845:1: rule__AssignmentLocator__Group__0__Impl : ( 'assignment' ) ;
     public final void rule__AssignmentLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1787:1: ( ( 'assignment' ) )
-            // InternalIdioms.g:1788:1: ( 'assignment' )
+            // InternalIdioms.g:1849:1: ( ( 'assignment' ) )
+            // InternalIdioms.g:1850:1: ( 'assignment' )
             {
-            // InternalIdioms.g:1788:1: ( 'assignment' )
-            // InternalIdioms.g:1789:2: 'assignment'
+            // InternalIdioms.g:1850:1: ( 'assignment' )
+            // InternalIdioms.g:1851:2: 'assignment'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getAssignmentKeyword_0());
@@ -6158,14 +6386,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__1"
-    // InternalIdioms.g:1798:1: rule__AssignmentLocator__Group__1 : rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2 ;
+    // InternalIdioms.g:1860:1: rule__AssignmentLocator__Group__1 : rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2 ;
     public final void rule__AssignmentLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1802:1: ( rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2 )
-            // InternalIdioms.g:1803:2: rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2
+            // InternalIdioms.g:1864:1: ( rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2 )
+            // InternalIdioms.g:1865:2: rule__AssignmentLocator__Group__1__Impl rule__AssignmentLocator__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__AssignmentLocator__Group__1__Impl();
@@ -6196,22 +6424,22 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__1__Impl"
-    // InternalIdioms.g:1810:1: rule__AssignmentLocator__Group__1__Impl : ( ( rule__AssignmentLocator__Group_1__0 )? ) ;
+    // InternalIdioms.g:1872:1: rule__AssignmentLocator__Group__1__Impl : ( ( rule__AssignmentLocator__Group_1__0 )? ) ;
     public final void rule__AssignmentLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1814:1: ( ( ( rule__AssignmentLocator__Group_1__0 )? ) )
-            // InternalIdioms.g:1815:1: ( ( rule__AssignmentLocator__Group_1__0 )? )
+            // InternalIdioms.g:1876:1: ( ( ( rule__AssignmentLocator__Group_1__0 )? ) )
+            // InternalIdioms.g:1877:1: ( ( rule__AssignmentLocator__Group_1__0 )? )
             {
-            // InternalIdioms.g:1815:1: ( ( rule__AssignmentLocator__Group_1__0 )? )
-            // InternalIdioms.g:1816:2: ( rule__AssignmentLocator__Group_1__0 )?
+            // InternalIdioms.g:1877:1: ( ( rule__AssignmentLocator__Group_1__0 )? )
+            // InternalIdioms.g:1878:2: ( rule__AssignmentLocator__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getGroup_1());
             }
-            // InternalIdioms.g:1817:2: ( rule__AssignmentLocator__Group_1__0 )?
+            // InternalIdioms.g:1879:2: ( rule__AssignmentLocator__Group_1__0 )?
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -6224,7 +6452,7 @@
             }
             switch (alt14) {
                 case 1 :
-                    // InternalIdioms.g:1817:3: rule__AssignmentLocator__Group_1__0
+                    // InternalIdioms.g:1879:3: rule__AssignmentLocator__Group_1__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__AssignmentLocator__Group_1__0();
@@ -6262,14 +6490,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__2"
-    // InternalIdioms.g:1825:1: rule__AssignmentLocator__Group__2 : rule__AssignmentLocator__Group__2__Impl ;
+    // InternalIdioms.g:1887:1: rule__AssignmentLocator__Group__2 : rule__AssignmentLocator__Group__2__Impl ;
     public final void rule__AssignmentLocator__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1829:1: ( rule__AssignmentLocator__Group__2__Impl )
-            // InternalIdioms.g:1830:2: rule__AssignmentLocator__Group__2__Impl
+            // InternalIdioms.g:1891:1: ( rule__AssignmentLocator__Group__2__Impl )
+            // InternalIdioms.g:1892:2: rule__AssignmentLocator__Group__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__Group__2__Impl();
@@ -6295,23 +6523,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group__2__Impl"
-    // InternalIdioms.g:1836:1: rule__AssignmentLocator__Group__2__Impl : ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) ) ;
+    // InternalIdioms.g:1898:1: rule__AssignmentLocator__Group__2__Impl : ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) ) ;
     public final void rule__AssignmentLocator__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1840:1: ( ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) ) )
-            // InternalIdioms.g:1841:1: ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) )
+            // InternalIdioms.g:1902:1: ( ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) ) )
+            // InternalIdioms.g:1903:1: ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) )
             {
-            // InternalIdioms.g:1841:1: ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) )
-            // InternalIdioms.g:1842:2: ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 )
+            // InternalIdioms.g:1903:1: ( ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 ) )
+            // InternalIdioms.g:1904:2: ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEStructuralFeatureAssignment_2());
             }
-            // InternalIdioms.g:1843:2: ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 )
-            // InternalIdioms.g:1843:3: rule__AssignmentLocator__EStructuralFeatureAssignment_2
+            // InternalIdioms.g:1905:2: ( rule__AssignmentLocator__EStructuralFeatureAssignment_2 )
+            // InternalIdioms.g:1905:3: rule__AssignmentLocator__EStructuralFeatureAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__EStructuralFeatureAssignment_2();
@@ -6346,14 +6574,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__0"
-    // InternalIdioms.g:1852:1: rule__AssignmentLocator__Group_1__0 : rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1 ;
+    // InternalIdioms.g:1914:1: rule__AssignmentLocator__Group_1__0 : rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1 ;
     public final void rule__AssignmentLocator__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1856:1: ( rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1 )
-            // InternalIdioms.g:1857:2: rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1
+            // InternalIdioms.g:1918:1: ( rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1 )
+            // InternalIdioms.g:1919:2: rule__AssignmentLocator__Group_1__0__Impl rule__AssignmentLocator__Group_1__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__AssignmentLocator__Group_1__0__Impl();
@@ -6384,22 +6612,22 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__0__Impl"
-    // InternalIdioms.g:1864:1: rule__AssignmentLocator__Group_1__0__Impl : ( ( rule__AssignmentLocator__Group_1_0__0 )? ) ;
+    // InternalIdioms.g:1926:1: rule__AssignmentLocator__Group_1__0__Impl : ( ( rule__AssignmentLocator__Group_1_0__0 )? ) ;
     public final void rule__AssignmentLocator__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1868:1: ( ( ( rule__AssignmentLocator__Group_1_0__0 )? ) )
-            // InternalIdioms.g:1869:1: ( ( rule__AssignmentLocator__Group_1_0__0 )? )
+            // InternalIdioms.g:1930:1: ( ( ( rule__AssignmentLocator__Group_1_0__0 )? ) )
+            // InternalIdioms.g:1931:1: ( ( rule__AssignmentLocator__Group_1_0__0 )? )
             {
-            // InternalIdioms.g:1869:1: ( ( rule__AssignmentLocator__Group_1_0__0 )? )
-            // InternalIdioms.g:1870:2: ( rule__AssignmentLocator__Group_1_0__0 )?
+            // InternalIdioms.g:1931:1: ( ( rule__AssignmentLocator__Group_1_0__0 )? )
+            // InternalIdioms.g:1932:2: ( rule__AssignmentLocator__Group_1_0__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getGroup_1_0());
             }
-            // InternalIdioms.g:1871:2: ( rule__AssignmentLocator__Group_1_0__0 )?
+            // InternalIdioms.g:1933:2: ( rule__AssignmentLocator__Group_1_0__0 )?
             int alt15=2;
             int LA15_0 = input.LA(1);
 
@@ -6420,7 +6648,7 @@
             }
             switch (alt15) {
                 case 1 :
-                    // InternalIdioms.g:1871:3: rule__AssignmentLocator__Group_1_0__0
+                    // InternalIdioms.g:1933:3: rule__AssignmentLocator__Group_1_0__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__AssignmentLocator__Group_1_0__0();
@@ -6458,14 +6686,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__1"
-    // InternalIdioms.g:1879:1: rule__AssignmentLocator__Group_1__1 : rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2 ;
+    // InternalIdioms.g:1941:1: rule__AssignmentLocator__Group_1__1 : rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2 ;
     public final void rule__AssignmentLocator__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1883:1: ( rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2 )
-            // InternalIdioms.g:1884:2: rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2
+            // InternalIdioms.g:1945:1: ( rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2 )
+            // InternalIdioms.g:1946:2: rule__AssignmentLocator__Group_1__1__Impl rule__AssignmentLocator__Group_1__2
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__AssignmentLocator__Group_1__1__Impl();
@@ -6496,23 +6724,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__1__Impl"
-    // InternalIdioms.g:1891:1: rule__AssignmentLocator__Group_1__1__Impl : ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) ) ;
+    // InternalIdioms.g:1953:1: rule__AssignmentLocator__Group_1__1__Impl : ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) ) ;
     public final void rule__AssignmentLocator__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1895:1: ( ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) ) )
-            // InternalIdioms.g:1896:1: ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) )
+            // InternalIdioms.g:1957:1: ( ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) ) )
+            // InternalIdioms.g:1958:1: ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) )
             {
-            // InternalIdioms.g:1896:1: ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) )
-            // InternalIdioms.g:1897:2: ( rule__AssignmentLocator__EClassAssignment_1_1 )
+            // InternalIdioms.g:1958:1: ( ( rule__AssignmentLocator__EClassAssignment_1_1 ) )
+            // InternalIdioms.g:1959:2: ( rule__AssignmentLocator__EClassAssignment_1_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEClassAssignment_1_1());
             }
-            // InternalIdioms.g:1898:2: ( rule__AssignmentLocator__EClassAssignment_1_1 )
-            // InternalIdioms.g:1898:3: rule__AssignmentLocator__EClassAssignment_1_1
+            // InternalIdioms.g:1960:2: ( rule__AssignmentLocator__EClassAssignment_1_1 )
+            // InternalIdioms.g:1960:3: rule__AssignmentLocator__EClassAssignment_1_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__EClassAssignment_1_1();
@@ -6547,14 +6775,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__2"
-    // InternalIdioms.g:1906:1: rule__AssignmentLocator__Group_1__2 : rule__AssignmentLocator__Group_1__2__Impl ;
+    // InternalIdioms.g:1968:1: rule__AssignmentLocator__Group_1__2 : rule__AssignmentLocator__Group_1__2__Impl ;
     public final void rule__AssignmentLocator__Group_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1910:1: ( rule__AssignmentLocator__Group_1__2__Impl )
-            // InternalIdioms.g:1911:2: rule__AssignmentLocator__Group_1__2__Impl
+            // InternalIdioms.g:1972:1: ( rule__AssignmentLocator__Group_1__2__Impl )
+            // InternalIdioms.g:1973:2: rule__AssignmentLocator__Group_1__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__Group_1__2__Impl();
@@ -6580,17 +6808,17 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1__2__Impl"
-    // InternalIdioms.g:1917:1: rule__AssignmentLocator__Group_1__2__Impl : ( '::' ) ;
+    // InternalIdioms.g:1979:1: rule__AssignmentLocator__Group_1__2__Impl : ( '::' ) ;
     public final void rule__AssignmentLocator__Group_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1921:1: ( ( '::' ) )
-            // InternalIdioms.g:1922:1: ( '::' )
+            // InternalIdioms.g:1983:1: ( ( '::' ) )
+            // InternalIdioms.g:1984:1: ( '::' )
             {
-            // InternalIdioms.g:1922:1: ( '::' )
-            // InternalIdioms.g:1923:2: '::'
+            // InternalIdioms.g:1984:1: ( '::' )
+            // InternalIdioms.g:1985:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getColonColonKeyword_1_2());
@@ -6621,14 +6849,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1_0__0"
-    // InternalIdioms.g:1933:1: rule__AssignmentLocator__Group_1_0__0 : rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1 ;
+    // InternalIdioms.g:1995:1: rule__AssignmentLocator__Group_1_0__0 : rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1 ;
     public final void rule__AssignmentLocator__Group_1_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1937:1: ( rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1 )
-            // InternalIdioms.g:1938:2: rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1
+            // InternalIdioms.g:1999:1: ( rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1 )
+            // InternalIdioms.g:2000:2: rule__AssignmentLocator__Group_1_0__0__Impl rule__AssignmentLocator__Group_1_0__1
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__AssignmentLocator__Group_1_0__0__Impl();
@@ -6659,23 +6887,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1_0__0__Impl"
-    // InternalIdioms.g:1945:1: rule__AssignmentLocator__Group_1_0__0__Impl : ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) ) ;
+    // InternalIdioms.g:2007:1: rule__AssignmentLocator__Group_1_0__0__Impl : ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) ) ;
     public final void rule__AssignmentLocator__Group_1_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1949:1: ( ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) ) )
-            // InternalIdioms.g:1950:1: ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) )
+            // InternalIdioms.g:2011:1: ( ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) ) )
+            // InternalIdioms.g:2012:1: ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) )
             {
-            // InternalIdioms.g:1950:1: ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) )
-            // InternalIdioms.g:1951:2: ( rule__AssignmentLocator__EPackageAssignment_1_0_0 )
+            // InternalIdioms.g:2012:1: ( ( rule__AssignmentLocator__EPackageAssignment_1_0_0 ) )
+            // InternalIdioms.g:2013:2: ( rule__AssignmentLocator__EPackageAssignment_1_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEPackageAssignment_1_0_0());
             }
-            // InternalIdioms.g:1952:2: ( rule__AssignmentLocator__EPackageAssignment_1_0_0 )
-            // InternalIdioms.g:1952:3: rule__AssignmentLocator__EPackageAssignment_1_0_0
+            // InternalIdioms.g:2014:2: ( rule__AssignmentLocator__EPackageAssignment_1_0_0 )
+            // InternalIdioms.g:2014:3: rule__AssignmentLocator__EPackageAssignment_1_0_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__EPackageAssignment_1_0_0();
@@ -6710,14 +6938,14 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1_0__1"
-    // InternalIdioms.g:1960:1: rule__AssignmentLocator__Group_1_0__1 : rule__AssignmentLocator__Group_1_0__1__Impl ;
+    // InternalIdioms.g:2022:1: rule__AssignmentLocator__Group_1_0__1 : rule__AssignmentLocator__Group_1_0__1__Impl ;
     public final void rule__AssignmentLocator__Group_1_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1964:1: ( rule__AssignmentLocator__Group_1_0__1__Impl )
-            // InternalIdioms.g:1965:2: rule__AssignmentLocator__Group_1_0__1__Impl
+            // InternalIdioms.g:2026:1: ( rule__AssignmentLocator__Group_1_0__1__Impl )
+            // InternalIdioms.g:2027:2: rule__AssignmentLocator__Group_1_0__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__AssignmentLocator__Group_1_0__1__Impl();
@@ -6743,17 +6971,17 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__Group_1_0__1__Impl"
-    // InternalIdioms.g:1971:1: rule__AssignmentLocator__Group_1_0__1__Impl : ( '::' ) ;
+    // InternalIdioms.g:2033:1: rule__AssignmentLocator__Group_1_0__1__Impl : ( '::' ) ;
     public final void rule__AssignmentLocator__Group_1_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1975:1: ( ( '::' ) )
-            // InternalIdioms.g:1976:1: ( '::' )
+            // InternalIdioms.g:2037:1: ( ( '::' ) )
+            // InternalIdioms.g:2038:1: ( '::' )
             {
-            // InternalIdioms.g:1976:1: ( '::' )
-            // InternalIdioms.g:1977:2: '::'
+            // InternalIdioms.g:2038:1: ( '::' )
+            // InternalIdioms.g:2039:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getColonColonKeyword_1_0_1());
@@ -6784,14 +7012,14 @@
 
 
     // $ANTLR start "rule__FinalLocator__Group__0"
-    // InternalIdioms.g:1987:1: rule__FinalLocator__Group__0 : rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1 ;
+    // InternalIdioms.g:2049:1: rule__FinalLocator__Group__0 : rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1 ;
     public final void rule__FinalLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:1991:1: ( rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1 )
-            // InternalIdioms.g:1992:2: rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1
+            // InternalIdioms.g:2053:1: ( rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1 )
+            // InternalIdioms.g:2054:2: rule__FinalLocator__Group__0__Impl rule__FinalLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_15);
             rule__FinalLocator__Group__0__Impl();
@@ -6822,23 +7050,23 @@
 
 
     // $ANTLR start "rule__FinalLocator__Group__0__Impl"
-    // InternalIdioms.g:1999:1: rule__FinalLocator__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2061:1: rule__FinalLocator__Group__0__Impl : ( () ) ;
     public final void rule__FinalLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2003:1: ( ( () ) )
-            // InternalIdioms.g:2004:1: ( () )
+            // InternalIdioms.g:2065:1: ( ( () ) )
+            // InternalIdioms.g:2066:1: ( () )
             {
-            // InternalIdioms.g:2004:1: ( () )
-            // InternalIdioms.g:2005:2: ()
+            // InternalIdioms.g:2066:1: ( () )
+            // InternalIdioms.g:2067:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getFinalLocatorAccess().getFinalLocatorAction_0());
             }
-            // InternalIdioms.g:2006:2: ()
-            // InternalIdioms.g:2006:3:
+            // InternalIdioms.g:2068:2: ()
+            // InternalIdioms.g:2068:3:
             {
             }
 
@@ -6863,14 +7091,14 @@
 
 
     // $ANTLR start "rule__FinalLocator__Group__1"
-    // InternalIdioms.g:2014:1: rule__FinalLocator__Group__1 : rule__FinalLocator__Group__1__Impl ;
+    // InternalIdioms.g:2076:1: rule__FinalLocator__Group__1 : rule__FinalLocator__Group__1__Impl ;
     public final void rule__FinalLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2018:1: ( rule__FinalLocator__Group__1__Impl )
-            // InternalIdioms.g:2019:2: rule__FinalLocator__Group__1__Impl
+            // InternalIdioms.g:2080:1: ( rule__FinalLocator__Group__1__Impl )
+            // InternalIdioms.g:2081:2: rule__FinalLocator__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__FinalLocator__Group__1__Impl();
@@ -6896,17 +7124,17 @@
 
 
     // $ANTLR start "rule__FinalLocator__Group__1__Impl"
-    // InternalIdioms.g:2025:1: rule__FinalLocator__Group__1__Impl : ( 'final' ) ;
+    // InternalIdioms.g:2087:1: rule__FinalLocator__Group__1__Impl : ( 'final' ) ;
     public final void rule__FinalLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2029:1: ( ( 'final' ) )
-            // InternalIdioms.g:2030:1: ( 'final' )
+            // InternalIdioms.g:2091:1: ( ( 'final' ) )
+            // InternalIdioms.g:2092:1: ( 'final' )
             {
-            // InternalIdioms.g:2030:1: ( 'final' )
-            // InternalIdioms.g:2031:2: 'final'
+            // InternalIdioms.g:2092:1: ( 'final' )
+            // InternalIdioms.g:2093:2: 'final'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getFinalLocatorAccess().getFinalKeyword_1());
@@ -6937,14 +7165,14 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__0"
-    // InternalIdioms.g:2041:1: rule__ReturnsLocator__Group__0 : rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1 ;
+    // InternalIdioms.g:2103:1: rule__ReturnsLocator__Group__0 : rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1 ;
     public final void rule__ReturnsLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2045:1: ( rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1 )
-            // InternalIdioms.g:2046:2: rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1
+            // InternalIdioms.g:2107:1: ( rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1 )
+            // InternalIdioms.g:2108:2: rule__ReturnsLocator__Group__0__Impl rule__ReturnsLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__ReturnsLocator__Group__0__Impl();
@@ -6975,17 +7203,17 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__0__Impl"
-    // InternalIdioms.g:2053:1: rule__ReturnsLocator__Group__0__Impl : ( 'returns' ) ;
+    // InternalIdioms.g:2115:1: rule__ReturnsLocator__Group__0__Impl : ( 'returns' ) ;
     public final void rule__ReturnsLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2057:1: ( ( 'returns' ) )
-            // InternalIdioms.g:2058:1: ( 'returns' )
+            // InternalIdioms.g:2119:1: ( ( 'returns' ) )
+            // InternalIdioms.g:2120:1: ( 'returns' )
             {
-            // InternalIdioms.g:2058:1: ( 'returns' )
-            // InternalIdioms.g:2059:2: 'returns'
+            // InternalIdioms.g:2120:1: ( 'returns' )
+            // InternalIdioms.g:2121:2: 'returns'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getReturnsKeyword_0());
@@ -7016,14 +7244,14 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__1"
-    // InternalIdioms.g:2068:1: rule__ReturnsLocator__Group__1 : rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2 ;
+    // InternalIdioms.g:2130:1: rule__ReturnsLocator__Group__1 : rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2 ;
     public final void rule__ReturnsLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2072:1: ( rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2 )
-            // InternalIdioms.g:2073:2: rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2
+            // InternalIdioms.g:2134:1: ( rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2 )
+            // InternalIdioms.g:2135:2: rule__ReturnsLocator__Group__1__Impl rule__ReturnsLocator__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__ReturnsLocator__Group__1__Impl();
@@ -7054,22 +7282,22 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__1__Impl"
-    // InternalIdioms.g:2080:1: rule__ReturnsLocator__Group__1__Impl : ( ( rule__ReturnsLocator__Group_1__0 )? ) ;
+    // InternalIdioms.g:2142:1: rule__ReturnsLocator__Group__1__Impl : ( ( rule__ReturnsLocator__Group_1__0 )? ) ;
     public final void rule__ReturnsLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2084:1: ( ( ( rule__ReturnsLocator__Group_1__0 )? ) )
-            // InternalIdioms.g:2085:1: ( ( rule__ReturnsLocator__Group_1__0 )? )
+            // InternalIdioms.g:2146:1: ( ( ( rule__ReturnsLocator__Group_1__0 )? ) )
+            // InternalIdioms.g:2147:1: ( ( rule__ReturnsLocator__Group_1__0 )? )
             {
-            // InternalIdioms.g:2085:1: ( ( rule__ReturnsLocator__Group_1__0 )? )
-            // InternalIdioms.g:2086:2: ( rule__ReturnsLocator__Group_1__0 )?
+            // InternalIdioms.g:2147:1: ( ( rule__ReturnsLocator__Group_1__0 )? )
+            // InternalIdioms.g:2148:2: ( rule__ReturnsLocator__Group_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getGroup_1());
             }
-            // InternalIdioms.g:2087:2: ( rule__ReturnsLocator__Group_1__0 )?
+            // InternalIdioms.g:2149:2: ( rule__ReturnsLocator__Group_1__0 )?
             int alt16=2;
             int LA16_0 = input.LA(1);
 
@@ -7082,7 +7310,7 @@
             }
             switch (alt16) {
                 case 1 :
-                    // InternalIdioms.g:2087:3: rule__ReturnsLocator__Group_1__0
+                    // InternalIdioms.g:2149:3: rule__ReturnsLocator__Group_1__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__ReturnsLocator__Group_1__0();
@@ -7120,14 +7348,14 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__2"
-    // InternalIdioms.g:2095:1: rule__ReturnsLocator__Group__2 : rule__ReturnsLocator__Group__2__Impl ;
+    // InternalIdioms.g:2157:1: rule__ReturnsLocator__Group__2 : rule__ReturnsLocator__Group__2__Impl ;
     public final void rule__ReturnsLocator__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2099:1: ( rule__ReturnsLocator__Group__2__Impl )
-            // InternalIdioms.g:2100:2: rule__ReturnsLocator__Group__2__Impl
+            // InternalIdioms.g:2161:1: ( rule__ReturnsLocator__Group__2__Impl )
+            // InternalIdioms.g:2162:2: rule__ReturnsLocator__Group__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReturnsLocator__Group__2__Impl();
@@ -7153,23 +7381,23 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group__2__Impl"
-    // InternalIdioms.g:2106:1: rule__ReturnsLocator__Group__2__Impl : ( ( rule__ReturnsLocator__EClassAssignment_2 ) ) ;
+    // InternalIdioms.g:2168:1: rule__ReturnsLocator__Group__2__Impl : ( ( rule__ReturnsLocator__EClassAssignment_2 ) ) ;
     public final void rule__ReturnsLocator__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2110:1: ( ( ( rule__ReturnsLocator__EClassAssignment_2 ) ) )
-            // InternalIdioms.g:2111:1: ( ( rule__ReturnsLocator__EClassAssignment_2 ) )
+            // InternalIdioms.g:2172:1: ( ( ( rule__ReturnsLocator__EClassAssignment_2 ) ) )
+            // InternalIdioms.g:2173:1: ( ( rule__ReturnsLocator__EClassAssignment_2 ) )
             {
-            // InternalIdioms.g:2111:1: ( ( rule__ReturnsLocator__EClassAssignment_2 ) )
-            // InternalIdioms.g:2112:2: ( rule__ReturnsLocator__EClassAssignment_2 )
+            // InternalIdioms.g:2173:1: ( ( rule__ReturnsLocator__EClassAssignment_2 ) )
+            // InternalIdioms.g:2174:2: ( rule__ReturnsLocator__EClassAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEClassAssignment_2());
             }
-            // InternalIdioms.g:2113:2: ( rule__ReturnsLocator__EClassAssignment_2 )
-            // InternalIdioms.g:2113:3: rule__ReturnsLocator__EClassAssignment_2
+            // InternalIdioms.g:2175:2: ( rule__ReturnsLocator__EClassAssignment_2 )
+            // InternalIdioms.g:2175:3: rule__ReturnsLocator__EClassAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReturnsLocator__EClassAssignment_2();
@@ -7204,14 +7432,14 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group_1__0"
-    // InternalIdioms.g:2122:1: rule__ReturnsLocator__Group_1__0 : rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1 ;
+    // InternalIdioms.g:2184:1: rule__ReturnsLocator__Group_1__0 : rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1 ;
     public final void rule__ReturnsLocator__Group_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2126:1: ( rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1 )
-            // InternalIdioms.g:2127:2: rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1
+            // InternalIdioms.g:2188:1: ( rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1 )
+            // InternalIdioms.g:2189:2: rule__ReturnsLocator__Group_1__0__Impl rule__ReturnsLocator__Group_1__1
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__ReturnsLocator__Group_1__0__Impl();
@@ -7242,23 +7470,23 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group_1__0__Impl"
-    // InternalIdioms.g:2134:1: rule__ReturnsLocator__Group_1__0__Impl : ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) ) ;
+    // InternalIdioms.g:2196:1: rule__ReturnsLocator__Group_1__0__Impl : ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) ) ;
     public final void rule__ReturnsLocator__Group_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2138:1: ( ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) ) )
-            // InternalIdioms.g:2139:1: ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) )
+            // InternalIdioms.g:2200:1: ( ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) ) )
+            // InternalIdioms.g:2201:1: ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) )
             {
-            // InternalIdioms.g:2139:1: ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) )
-            // InternalIdioms.g:2140:2: ( rule__ReturnsLocator__EPackageAssignment_1_0 )
+            // InternalIdioms.g:2201:1: ( ( rule__ReturnsLocator__EPackageAssignment_1_0 ) )
+            // InternalIdioms.g:2202:2: ( rule__ReturnsLocator__EPackageAssignment_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEPackageAssignment_1_0());
             }
-            // InternalIdioms.g:2141:2: ( rule__ReturnsLocator__EPackageAssignment_1_0 )
-            // InternalIdioms.g:2141:3: rule__ReturnsLocator__EPackageAssignment_1_0
+            // InternalIdioms.g:2203:2: ( rule__ReturnsLocator__EPackageAssignment_1_0 )
+            // InternalIdioms.g:2203:3: rule__ReturnsLocator__EPackageAssignment_1_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReturnsLocator__EPackageAssignment_1_0();
@@ -7293,14 +7521,14 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group_1__1"
-    // InternalIdioms.g:2149:1: rule__ReturnsLocator__Group_1__1 : rule__ReturnsLocator__Group_1__1__Impl ;
+    // InternalIdioms.g:2211:1: rule__ReturnsLocator__Group_1__1 : rule__ReturnsLocator__Group_1__1__Impl ;
     public final void rule__ReturnsLocator__Group_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2153:1: ( rule__ReturnsLocator__Group_1__1__Impl )
-            // InternalIdioms.g:2154:2: rule__ReturnsLocator__Group_1__1__Impl
+            // InternalIdioms.g:2215:1: ( rule__ReturnsLocator__Group_1__1__Impl )
+            // InternalIdioms.g:2216:2: rule__ReturnsLocator__Group_1__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReturnsLocator__Group_1__1__Impl();
@@ -7326,17 +7554,17 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__Group_1__1__Impl"
-    // InternalIdioms.g:2160:1: rule__ReturnsLocator__Group_1__1__Impl : ( '::' ) ;
+    // InternalIdioms.g:2222:1: rule__ReturnsLocator__Group_1__1__Impl : ( '::' ) ;
     public final void rule__ReturnsLocator__Group_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2164:1: ( ( '::' ) )
-            // InternalIdioms.g:2165:1: ( '::' )
+            // InternalIdioms.g:2226:1: ( ( '::' ) )
+            // InternalIdioms.g:2227:1: ( '::' )
             {
-            // InternalIdioms.g:2165:1: ( '::' )
-            // InternalIdioms.g:2166:2: '::'
+            // InternalIdioms.g:2227:1: ( '::' )
+            // InternalIdioms.g:2228:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getColonColonKeyword_1_1());
@@ -7367,14 +7595,14 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group__0"
-    // InternalIdioms.g:2176:1: rule__ReferredLocator__Group__0 : rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1 ;
+    // InternalIdioms.g:2238:1: rule__ReferredLocator__Group__0 : rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1 ;
     public final void rule__ReferredLocator__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2180:1: ( rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1 )
-            // InternalIdioms.g:2181:2: rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1
+            // InternalIdioms.g:2242:1: ( rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1 )
+            // InternalIdioms.g:2243:2: rule__ReferredLocator__Group__0__Impl rule__ReferredLocator__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__ReferredLocator__Group__0__Impl();
@@ -7405,22 +7633,22 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group__0__Impl"
-    // InternalIdioms.g:2188:1: rule__ReferredLocator__Group__0__Impl : ( ( rule__ReferredLocator__Group_0__0 )? ) ;
+    // InternalIdioms.g:2250:1: rule__ReferredLocator__Group__0__Impl : ( ( rule__ReferredLocator__Group_0__0 )? ) ;
     public final void rule__ReferredLocator__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2192:1: ( ( ( rule__ReferredLocator__Group_0__0 )? ) )
-            // InternalIdioms.g:2193:1: ( ( rule__ReferredLocator__Group_0__0 )? )
+            // InternalIdioms.g:2254:1: ( ( ( rule__ReferredLocator__Group_0__0 )? ) )
+            // InternalIdioms.g:2255:1: ( ( rule__ReferredLocator__Group_0__0 )? )
             {
-            // InternalIdioms.g:2193:1: ( ( rule__ReferredLocator__Group_0__0 )? )
-            // InternalIdioms.g:2194:2: ( rule__ReferredLocator__Group_0__0 )?
+            // InternalIdioms.g:2255:1: ( ( rule__ReferredLocator__Group_0__0 )? )
+            // InternalIdioms.g:2256:2: ( rule__ReferredLocator__Group_0__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getGroup_0());
             }
-            // InternalIdioms.g:2195:2: ( rule__ReferredLocator__Group_0__0 )?
+            // InternalIdioms.g:2257:2: ( rule__ReferredLocator__Group_0__0 )?
             int alt17=2;
             int LA17_0 = input.LA(1);
 
@@ -7433,7 +7661,7 @@
             }
             switch (alt17) {
                 case 1 :
-                    // InternalIdioms.g:2195:3: rule__ReferredLocator__Group_0__0
+                    // InternalIdioms.g:2257:3: rule__ReferredLocator__Group_0__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__ReferredLocator__Group_0__0();
@@ -7471,14 +7699,14 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group__1"
-    // InternalIdioms.g:2203:1: rule__ReferredLocator__Group__1 : rule__ReferredLocator__Group__1__Impl ;
+    // InternalIdioms.g:2265:1: rule__ReferredLocator__Group__1 : rule__ReferredLocator__Group__1__Impl ;
     public final void rule__ReferredLocator__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2207:1: ( rule__ReferredLocator__Group__1__Impl )
-            // InternalIdioms.g:2208:2: rule__ReferredLocator__Group__1__Impl
+            // InternalIdioms.g:2269:1: ( rule__ReferredLocator__Group__1__Impl )
+            // InternalIdioms.g:2270:2: rule__ReferredLocator__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredLocator__Group__1__Impl();
@@ -7504,23 +7732,23 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group__1__Impl"
-    // InternalIdioms.g:2214:1: rule__ReferredLocator__Group__1__Impl : ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) ) ;
+    // InternalIdioms.g:2276:1: rule__ReferredLocator__Group__1__Impl : ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) ) ;
     public final void rule__ReferredLocator__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2218:1: ( ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) ) )
-            // InternalIdioms.g:2219:1: ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) )
+            // InternalIdioms.g:2280:1: ( ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) ) )
+            // InternalIdioms.g:2281:1: ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) )
             {
-            // InternalIdioms.g:2219:1: ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) )
-            // InternalIdioms.g:2220:2: ( rule__ReferredLocator__LocatorDeclarationAssignment_1 )
+            // InternalIdioms.g:2281:1: ( ( rule__ReferredLocator__LocatorDeclarationAssignment_1 ) )
+            // InternalIdioms.g:2282:2: ( rule__ReferredLocator__LocatorDeclarationAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getLocatorDeclarationAssignment_1());
             }
-            // InternalIdioms.g:2221:2: ( rule__ReferredLocator__LocatorDeclarationAssignment_1 )
-            // InternalIdioms.g:2221:3: rule__ReferredLocator__LocatorDeclarationAssignment_1
+            // InternalIdioms.g:2283:2: ( rule__ReferredLocator__LocatorDeclarationAssignment_1 )
+            // InternalIdioms.g:2283:3: rule__ReferredLocator__LocatorDeclarationAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredLocator__LocatorDeclarationAssignment_1();
@@ -7555,14 +7783,14 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group_0__0"
-    // InternalIdioms.g:2230:1: rule__ReferredLocator__Group_0__0 : rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1 ;
+    // InternalIdioms.g:2292:1: rule__ReferredLocator__Group_0__0 : rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1 ;
     public final void rule__ReferredLocator__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2234:1: ( rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1 )
-            // InternalIdioms.g:2235:2: rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1
+            // InternalIdioms.g:2296:1: ( rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1 )
+            // InternalIdioms.g:2297:2: rule__ReferredLocator__Group_0__0__Impl rule__ReferredLocator__Group_0__1
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__ReferredLocator__Group_0__0__Impl();
@@ -7593,23 +7821,23 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group_0__0__Impl"
-    // InternalIdioms.g:2242:1: rule__ReferredLocator__Group_0__0__Impl : ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) ) ;
+    // InternalIdioms.g:2304:1: rule__ReferredLocator__Group_0__0__Impl : ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) ) ;
     public final void rule__ReferredLocator__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2246:1: ( ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) ) )
-            // InternalIdioms.g:2247:1: ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) )
+            // InternalIdioms.g:2308:1: ( ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) ) )
+            // InternalIdioms.g:2309:1: ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) )
             {
-            // InternalIdioms.g:2247:1: ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) )
-            // InternalIdioms.g:2248:2: ( rule__ReferredLocator__IdiomsModelAssignment_0_0 )
+            // InternalIdioms.g:2309:1: ( ( rule__ReferredLocator__IdiomsModelAssignment_0_0 ) )
+            // InternalIdioms.g:2310:2: ( rule__ReferredLocator__IdiomsModelAssignment_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getIdiomsModelAssignment_0_0());
             }
-            // InternalIdioms.g:2249:2: ( rule__ReferredLocator__IdiomsModelAssignment_0_0 )
-            // InternalIdioms.g:2249:3: rule__ReferredLocator__IdiomsModelAssignment_0_0
+            // InternalIdioms.g:2311:2: ( rule__ReferredLocator__IdiomsModelAssignment_0_0 )
+            // InternalIdioms.g:2311:3: rule__ReferredLocator__IdiomsModelAssignment_0_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredLocator__IdiomsModelAssignment_0_0();
@@ -7644,14 +7872,14 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group_0__1"
-    // InternalIdioms.g:2257:1: rule__ReferredLocator__Group_0__1 : rule__ReferredLocator__Group_0__1__Impl ;
+    // InternalIdioms.g:2319:1: rule__ReferredLocator__Group_0__1 : rule__ReferredLocator__Group_0__1__Impl ;
     public final void rule__ReferredLocator__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2261:1: ( rule__ReferredLocator__Group_0__1__Impl )
-            // InternalIdioms.g:2262:2: rule__ReferredLocator__Group_0__1__Impl
+            // InternalIdioms.g:2323:1: ( rule__ReferredLocator__Group_0__1__Impl )
+            // InternalIdioms.g:2324:2: rule__ReferredLocator__Group_0__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredLocator__Group_0__1__Impl();
@@ -7677,17 +7905,17 @@
 
 
     // $ANTLR start "rule__ReferredLocator__Group_0__1__Impl"
-    // InternalIdioms.g:2268:1: rule__ReferredLocator__Group_0__1__Impl : ( '::' ) ;
+    // InternalIdioms.g:2330:1: rule__ReferredLocator__Group_0__1__Impl : ( '::' ) ;
     public final void rule__ReferredLocator__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2272:1: ( ( '::' ) )
-            // InternalIdioms.g:2273:1: ( '::' )
+            // InternalIdioms.g:2334:1: ( ( '::' ) )
+            // InternalIdioms.g:2335:1: ( '::' )
             {
-            // InternalIdioms.g:2273:1: ( '::' )
-            // InternalIdioms.g:2274:2: '::'
+            // InternalIdioms.g:2335:1: ( '::' )
+            // InternalIdioms.g:2336:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getColonColonKeyword_0_1());
@@ -7718,14 +7946,14 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__0"
-    // InternalIdioms.g:2284:1: rule__SegmentDeclaration__Group__0 : rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1 ;
+    // InternalIdioms.g:2346:1: rule__SegmentDeclaration__Group__0 : rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1 ;
     public final void rule__SegmentDeclaration__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2288:1: ( rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1 )
-            // InternalIdioms.g:2289:2: rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1
+            // InternalIdioms.g:2350:1: ( rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1 )
+            // InternalIdioms.g:2351:2: rule__SegmentDeclaration__Group__0__Impl rule__SegmentDeclaration__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__SegmentDeclaration__Group__0__Impl();
@@ -7756,17 +7984,17 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__0__Impl"
-    // InternalIdioms.g:2296:1: rule__SegmentDeclaration__Group__0__Impl : ( 'segment' ) ;
+    // InternalIdioms.g:2358:1: rule__SegmentDeclaration__Group__0__Impl : ( 'segment' ) ;
     public final void rule__SegmentDeclaration__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2300:1: ( ( 'segment' ) )
-            // InternalIdioms.g:2301:1: ( 'segment' )
+            // InternalIdioms.g:2362:1: ( ( 'segment' ) )
+            // InternalIdioms.g:2363:1: ( 'segment' )
             {
-            // InternalIdioms.g:2301:1: ( 'segment' )
-            // InternalIdioms.g:2302:2: 'segment'
+            // InternalIdioms.g:2363:1: ( 'segment' )
+            // InternalIdioms.g:2364:2: 'segment'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getSegmentKeyword_0());
@@ -7797,14 +8025,14 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__1"
-    // InternalIdioms.g:2311:1: rule__SegmentDeclaration__Group__1 : rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2 ;
+    // InternalIdioms.g:2373:1: rule__SegmentDeclaration__Group__1 : rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2 ;
     public final void rule__SegmentDeclaration__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2315:1: ( rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2 )
-            // InternalIdioms.g:2316:2: rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2
+            // InternalIdioms.g:2377:1: ( rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2 )
+            // InternalIdioms.g:2378:2: rule__SegmentDeclaration__Group__1__Impl rule__SegmentDeclaration__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_16);
             rule__SegmentDeclaration__Group__1__Impl();
@@ -7835,23 +8063,23 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__1__Impl"
-    // InternalIdioms.g:2323:1: rule__SegmentDeclaration__Group__1__Impl : ( ( rule__SegmentDeclaration__NameAssignment_1 ) ) ;
+    // InternalIdioms.g:2385:1: rule__SegmentDeclaration__Group__1__Impl : ( ( rule__SegmentDeclaration__NameAssignment_1 ) ) ;
     public final void rule__SegmentDeclaration__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2327:1: ( ( ( rule__SegmentDeclaration__NameAssignment_1 ) ) )
-            // InternalIdioms.g:2328:1: ( ( rule__SegmentDeclaration__NameAssignment_1 ) )
+            // InternalIdioms.g:2389:1: ( ( ( rule__SegmentDeclaration__NameAssignment_1 ) ) )
+            // InternalIdioms.g:2390:1: ( ( rule__SegmentDeclaration__NameAssignment_1 ) )
             {
-            // InternalIdioms.g:2328:1: ( ( rule__SegmentDeclaration__NameAssignment_1 ) )
-            // InternalIdioms.g:2329:2: ( rule__SegmentDeclaration__NameAssignment_1 )
+            // InternalIdioms.g:2390:1: ( ( rule__SegmentDeclaration__NameAssignment_1 ) )
+            // InternalIdioms.g:2391:2: ( rule__SegmentDeclaration__NameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getNameAssignment_1());
             }
-            // InternalIdioms.g:2330:2: ( rule__SegmentDeclaration__NameAssignment_1 )
-            // InternalIdioms.g:2330:3: rule__SegmentDeclaration__NameAssignment_1
+            // InternalIdioms.g:2392:2: ( rule__SegmentDeclaration__NameAssignment_1 )
+            // InternalIdioms.g:2392:3: rule__SegmentDeclaration__NameAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SegmentDeclaration__NameAssignment_1();
@@ -7886,14 +8114,14 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__2"
-    // InternalIdioms.g:2338:1: rule__SegmentDeclaration__Group__2 : rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3 ;
+    // InternalIdioms.g:2400:1: rule__SegmentDeclaration__Group__2 : rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3 ;
     public final void rule__SegmentDeclaration__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2342:1: ( rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3 )
-            // InternalIdioms.g:2343:2: rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3
+            // InternalIdioms.g:2404:1: ( rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3 )
+            // InternalIdioms.g:2405:2: rule__SegmentDeclaration__Group__2__Impl rule__SegmentDeclaration__Group__3
             {
             pushFollow(FollowSets000.FOLLOW_11);
             rule__SegmentDeclaration__Group__2__Impl();
@@ -7924,23 +8152,23 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__2__Impl"
-    // InternalIdioms.g:2350:1: rule__SegmentDeclaration__Group__2__Impl : ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) ) ;
+    // InternalIdioms.g:2412:1: rule__SegmentDeclaration__Group__2__Impl : ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) ) ;
     public final void rule__SegmentDeclaration__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2354:1: ( ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) ) )
-            // InternalIdioms.g:2355:1: ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) )
+            // InternalIdioms.g:2416:1: ( ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) ) )
+            // InternalIdioms.g:2417:1: ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) )
             {
-            // InternalIdioms.g:2355:1: ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) )
-            // InternalIdioms.g:2356:2: ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 )
+            // InternalIdioms.g:2417:1: ( ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 ) )
+            // InternalIdioms.g:2418:2: ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getOwnedSegmentAssignment_2());
             }
-            // InternalIdioms.g:2357:2: ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 )
-            // InternalIdioms.g:2357:3: rule__SegmentDeclaration__OwnedSegmentAssignment_2
+            // InternalIdioms.g:2419:2: ( rule__SegmentDeclaration__OwnedSegmentAssignment_2 )
+            // InternalIdioms.g:2419:3: rule__SegmentDeclaration__OwnedSegmentAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SegmentDeclaration__OwnedSegmentAssignment_2();
@@ -7975,14 +8203,14 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__3"
-    // InternalIdioms.g:2365:1: rule__SegmentDeclaration__Group__3 : rule__SegmentDeclaration__Group__3__Impl ;
+    // InternalIdioms.g:2427:1: rule__SegmentDeclaration__Group__3 : rule__SegmentDeclaration__Group__3__Impl ;
     public final void rule__SegmentDeclaration__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2369:1: ( rule__SegmentDeclaration__Group__3__Impl )
-            // InternalIdioms.g:2370:2: rule__SegmentDeclaration__Group__3__Impl
+            // InternalIdioms.g:2431:1: ( rule__SegmentDeclaration__Group__3__Impl )
+            // InternalIdioms.g:2432:2: rule__SegmentDeclaration__Group__3__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SegmentDeclaration__Group__3__Impl();
@@ -8008,17 +8236,17 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__Group__3__Impl"
-    // InternalIdioms.g:2376:1: rule__SegmentDeclaration__Group__3__Impl : ( ';' ) ;
+    // InternalIdioms.g:2438:1: rule__SegmentDeclaration__Group__3__Impl : ( ';' ) ;
     public final void rule__SegmentDeclaration__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2380:1: ( ( ';' ) )
-            // InternalIdioms.g:2381:1: ( ';' )
+            // InternalIdioms.g:2442:1: ( ( ';' ) )
+            // InternalIdioms.g:2443:1: ( ';' )
             {
-            // InternalIdioms.g:2381:1: ( ';' )
-            // InternalIdioms.g:2382:2: ';'
+            // InternalIdioms.g:2443:1: ( ';' )
+            // InternalIdioms.g:2444:2: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getSemicolonKeyword_3());
@@ -8049,14 +8277,14 @@
 
 
     // $ANTLR start "rule__CustomSegment__Group__0"
-    // InternalIdioms.g:2392:1: rule__CustomSegment__Group__0 : rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1 ;
+    // InternalIdioms.g:2454:1: rule__CustomSegment__Group__0 : rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1 ;
     public final void rule__CustomSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2396:1: ( rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1 )
-            // InternalIdioms.g:2397:2: rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1
+            // InternalIdioms.g:2458:1: ( rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1 )
+            // InternalIdioms.g:2459:2: rule__CustomSegment__Group__0__Impl rule__CustomSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_8);
             rule__CustomSegment__Group__0__Impl();
@@ -8087,17 +8315,17 @@
 
 
     // $ANTLR start "rule__CustomSegment__Group__0__Impl"
-    // InternalIdioms.g:2404:1: rule__CustomSegment__Group__0__Impl : ( 'custom' ) ;
+    // InternalIdioms.g:2466:1: rule__CustomSegment__Group__0__Impl : ( 'custom' ) ;
     public final void rule__CustomSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2408:1: ( ( 'custom' ) )
-            // InternalIdioms.g:2409:1: ( 'custom' )
+            // InternalIdioms.g:2470:1: ( ( 'custom' ) )
+            // InternalIdioms.g:2471:1: ( 'custom' )
             {
-            // InternalIdioms.g:2409:1: ( 'custom' )
-            // InternalIdioms.g:2410:2: 'custom'
+            // InternalIdioms.g:2471:1: ( 'custom' )
+            // InternalIdioms.g:2472:2: 'custom'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCustomSegmentAccess().getCustomKeyword_0());
@@ -8128,14 +8356,14 @@
 
 
     // $ANTLR start "rule__CustomSegment__Group__1"
-    // InternalIdioms.g:2419:1: rule__CustomSegment__Group__1 : rule__CustomSegment__Group__1__Impl ;
+    // InternalIdioms.g:2481:1: rule__CustomSegment__Group__1 : rule__CustomSegment__Group__1__Impl ;
     public final void rule__CustomSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2423:1: ( rule__CustomSegment__Group__1__Impl )
-            // InternalIdioms.g:2424:2: rule__CustomSegment__Group__1__Impl
+            // InternalIdioms.g:2485:1: ( rule__CustomSegment__Group__1__Impl )
+            // InternalIdioms.g:2486:2: rule__CustomSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__CustomSegment__Group__1__Impl();
@@ -8161,23 +8389,23 @@
 
 
     // $ANTLR start "rule__CustomSegment__Group__1__Impl"
-    // InternalIdioms.g:2430:1: rule__CustomSegment__Group__1__Impl : ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) ) ;
+    // InternalIdioms.g:2492:1: rule__CustomSegment__Group__1__Impl : ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) ) ;
     public final void rule__CustomSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2434:1: ( ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) ) )
-            // InternalIdioms.g:2435:1: ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) )
+            // InternalIdioms.g:2496:1: ( ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) ) )
+            // InternalIdioms.g:2497:1: ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) )
             {
-            // InternalIdioms.g:2435:1: ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) )
-            // InternalIdioms.g:2436:2: ( rule__CustomSegment__SupportClassNameAssignment_1 )
+            // InternalIdioms.g:2497:1: ( ( rule__CustomSegment__SupportClassNameAssignment_1 ) )
+            // InternalIdioms.g:2498:2: ( rule__CustomSegment__SupportClassNameAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCustomSegmentAccess().getSupportClassNameAssignment_1());
             }
-            // InternalIdioms.g:2437:2: ( rule__CustomSegment__SupportClassNameAssignment_1 )
-            // InternalIdioms.g:2437:3: rule__CustomSegment__SupportClassNameAssignment_1
+            // InternalIdioms.g:2499:2: ( rule__CustomSegment__SupportClassNameAssignment_1 )
+            // InternalIdioms.g:2499:3: rule__CustomSegment__SupportClassNameAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__CustomSegment__SupportClassNameAssignment_1();
@@ -8212,14 +8440,14 @@
 
 
     // $ANTLR start "rule__HalfNewLineSegment__Group__0"
-    // InternalIdioms.g:2446:1: rule__HalfNewLineSegment__Group__0 : rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1 ;
+    // InternalIdioms.g:2508:1: rule__HalfNewLineSegment__Group__0 : rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1 ;
     public final void rule__HalfNewLineSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2450:1: ( rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1 )
-            // InternalIdioms.g:2451:2: rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1
+            // InternalIdioms.g:2512:1: ( rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1 )
+            // InternalIdioms.g:2513:2: rule__HalfNewLineSegment__Group__0__Impl rule__HalfNewLineSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_17);
             rule__HalfNewLineSegment__Group__0__Impl();
@@ -8250,23 +8478,23 @@
 
 
     // $ANTLR start "rule__HalfNewLineSegment__Group__0__Impl"
-    // InternalIdioms.g:2458:1: rule__HalfNewLineSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2520:1: rule__HalfNewLineSegment__Group__0__Impl : ( () ) ;
     public final void rule__HalfNewLineSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2462:1: ( ( () ) )
-            // InternalIdioms.g:2463:1: ( () )
+            // InternalIdioms.g:2524:1: ( ( () ) )
+            // InternalIdioms.g:2525:1: ( () )
             {
-            // InternalIdioms.g:2463:1: ( () )
-            // InternalIdioms.g:2464:2: ()
+            // InternalIdioms.g:2525:1: ( () )
+            // InternalIdioms.g:2526:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getHalfNewLineSegmentAccess().getHalfNewLineSegmentAction_0());
             }
-            // InternalIdioms.g:2465:2: ()
-            // InternalIdioms.g:2465:3:
+            // InternalIdioms.g:2527:2: ()
+            // InternalIdioms.g:2527:3:
             {
             }
 
@@ -8291,14 +8519,14 @@
 
 
     // $ANTLR start "rule__HalfNewLineSegment__Group__1"
-    // InternalIdioms.g:2473:1: rule__HalfNewLineSegment__Group__1 : rule__HalfNewLineSegment__Group__1__Impl ;
+    // InternalIdioms.g:2535:1: rule__HalfNewLineSegment__Group__1 : rule__HalfNewLineSegment__Group__1__Impl ;
     public final void rule__HalfNewLineSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2477:1: ( rule__HalfNewLineSegment__Group__1__Impl )
-            // InternalIdioms.g:2478:2: rule__HalfNewLineSegment__Group__1__Impl
+            // InternalIdioms.g:2539:1: ( rule__HalfNewLineSegment__Group__1__Impl )
+            // InternalIdioms.g:2540:2: rule__HalfNewLineSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__HalfNewLineSegment__Group__1__Impl();
@@ -8324,17 +8552,17 @@
 
 
     // $ANTLR start "rule__HalfNewLineSegment__Group__1__Impl"
-    // InternalIdioms.g:2484:1: rule__HalfNewLineSegment__Group__1__Impl : ( 'half-new-line' ) ;
+    // InternalIdioms.g:2546:1: rule__HalfNewLineSegment__Group__1__Impl : ( 'half-new-line' ) ;
     public final void rule__HalfNewLineSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2488:1: ( ( 'half-new-line' ) )
-            // InternalIdioms.g:2489:1: ( 'half-new-line' )
+            // InternalIdioms.g:2550:1: ( ( 'half-new-line' ) )
+            // InternalIdioms.g:2551:1: ( 'half-new-line' )
             {
-            // InternalIdioms.g:2489:1: ( 'half-new-line' )
-            // InternalIdioms.g:2490:2: 'half-new-line'
+            // InternalIdioms.g:2551:1: ( 'half-new-line' )
+            // InternalIdioms.g:2552:2: 'half-new-line'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getHalfNewLineSegmentAccess().getHalfNewLineKeyword_1());
@@ -8365,14 +8593,14 @@
 
 
     // $ANTLR start "rule__NewLineSegment__Group__0"
-    // InternalIdioms.g:2500:1: rule__NewLineSegment__Group__0 : rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1 ;
+    // InternalIdioms.g:2562:1: rule__NewLineSegment__Group__0 : rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1 ;
     public final void rule__NewLineSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2504:1: ( rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1 )
-            // InternalIdioms.g:2505:2: rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1
+            // InternalIdioms.g:2566:1: ( rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1 )
+            // InternalIdioms.g:2567:2: rule__NewLineSegment__Group__0__Impl rule__NewLineSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_18);
             rule__NewLineSegment__Group__0__Impl();
@@ -8403,23 +8631,23 @@
 
 
     // $ANTLR start "rule__NewLineSegment__Group__0__Impl"
-    // InternalIdioms.g:2512:1: rule__NewLineSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2574:1: rule__NewLineSegment__Group__0__Impl : ( () ) ;
     public final void rule__NewLineSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2516:1: ( ( () ) )
-            // InternalIdioms.g:2517:1: ( () )
+            // InternalIdioms.g:2578:1: ( ( () ) )
+            // InternalIdioms.g:2579:1: ( () )
             {
-            // InternalIdioms.g:2517:1: ( () )
-            // InternalIdioms.g:2518:2: ()
+            // InternalIdioms.g:2579:1: ( () )
+            // InternalIdioms.g:2580:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNewLineSegmentAccess().getNewLineSegmentAction_0());
             }
-            // InternalIdioms.g:2519:2: ()
-            // InternalIdioms.g:2519:3:
+            // InternalIdioms.g:2581:2: ()
+            // InternalIdioms.g:2581:3:
             {
             }
 
@@ -8444,14 +8672,14 @@
 
 
     // $ANTLR start "rule__NewLineSegment__Group__1"
-    // InternalIdioms.g:2527:1: rule__NewLineSegment__Group__1 : rule__NewLineSegment__Group__1__Impl ;
+    // InternalIdioms.g:2589:1: rule__NewLineSegment__Group__1 : rule__NewLineSegment__Group__1__Impl ;
     public final void rule__NewLineSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2531:1: ( rule__NewLineSegment__Group__1__Impl )
-            // InternalIdioms.g:2532:2: rule__NewLineSegment__Group__1__Impl
+            // InternalIdioms.g:2593:1: ( rule__NewLineSegment__Group__1__Impl )
+            // InternalIdioms.g:2594:2: rule__NewLineSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__NewLineSegment__Group__1__Impl();
@@ -8477,17 +8705,17 @@
 
 
     // $ANTLR start "rule__NewLineSegment__Group__1__Impl"
-    // InternalIdioms.g:2538:1: rule__NewLineSegment__Group__1__Impl : ( 'new-line' ) ;
+    // InternalIdioms.g:2600:1: rule__NewLineSegment__Group__1__Impl : ( 'new-line' ) ;
     public final void rule__NewLineSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2542:1: ( ( 'new-line' ) )
-            // InternalIdioms.g:2543:1: ( 'new-line' )
+            // InternalIdioms.g:2604:1: ( ( 'new-line' ) )
+            // InternalIdioms.g:2605:1: ( 'new-line' )
             {
-            // InternalIdioms.g:2543:1: ( 'new-line' )
-            // InternalIdioms.g:2544:2: 'new-line'
+            // InternalIdioms.g:2605:1: ( 'new-line' )
+            // InternalIdioms.g:2606:2: 'new-line'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNewLineSegmentAccess().getNewLineKeyword_1());
@@ -8518,14 +8746,14 @@
 
 
     // $ANTLR start "rule__NoSpaceSegment__Group__0"
-    // InternalIdioms.g:2554:1: rule__NoSpaceSegment__Group__0 : rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1 ;
+    // InternalIdioms.g:2616:1: rule__NoSpaceSegment__Group__0 : rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1 ;
     public final void rule__NoSpaceSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2558:1: ( rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1 )
-            // InternalIdioms.g:2559:2: rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1
+            // InternalIdioms.g:2620:1: ( rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1 )
+            // InternalIdioms.g:2621:2: rule__NoSpaceSegment__Group__0__Impl rule__NoSpaceSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_19);
             rule__NoSpaceSegment__Group__0__Impl();
@@ -8556,23 +8784,23 @@
 
 
     // $ANTLR start "rule__NoSpaceSegment__Group__0__Impl"
-    // InternalIdioms.g:2566:1: rule__NoSpaceSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2628:1: rule__NoSpaceSegment__Group__0__Impl : ( () ) ;
     public final void rule__NoSpaceSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2570:1: ( ( () ) )
-            // InternalIdioms.g:2571:1: ( () )
+            // InternalIdioms.g:2632:1: ( ( () ) )
+            // InternalIdioms.g:2633:1: ( () )
             {
-            // InternalIdioms.g:2571:1: ( () )
-            // InternalIdioms.g:2572:2: ()
+            // InternalIdioms.g:2633:1: ( () )
+            // InternalIdioms.g:2634:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNoSpaceSegmentAccess().getNoSpaceSegmentAction_0());
             }
-            // InternalIdioms.g:2573:2: ()
-            // InternalIdioms.g:2573:3:
+            // InternalIdioms.g:2635:2: ()
+            // InternalIdioms.g:2635:3:
             {
             }
 
@@ -8597,14 +8825,14 @@
 
 
     // $ANTLR start "rule__NoSpaceSegment__Group__1"
-    // InternalIdioms.g:2581:1: rule__NoSpaceSegment__Group__1 : rule__NoSpaceSegment__Group__1__Impl ;
+    // InternalIdioms.g:2643:1: rule__NoSpaceSegment__Group__1 : rule__NoSpaceSegment__Group__1__Impl ;
     public final void rule__NoSpaceSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2585:1: ( rule__NoSpaceSegment__Group__1__Impl )
-            // InternalIdioms.g:2586:2: rule__NoSpaceSegment__Group__1__Impl
+            // InternalIdioms.g:2647:1: ( rule__NoSpaceSegment__Group__1__Impl )
+            // InternalIdioms.g:2648:2: rule__NoSpaceSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__NoSpaceSegment__Group__1__Impl();
@@ -8630,17 +8858,17 @@
 
 
     // $ANTLR start "rule__NoSpaceSegment__Group__1__Impl"
-    // InternalIdioms.g:2592:1: rule__NoSpaceSegment__Group__1__Impl : ( 'no-space' ) ;
+    // InternalIdioms.g:2654:1: rule__NoSpaceSegment__Group__1__Impl : ( 'no-space' ) ;
     public final void rule__NoSpaceSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2596:1: ( ( 'no-space' ) )
-            // InternalIdioms.g:2597:1: ( 'no-space' )
+            // InternalIdioms.g:2658:1: ( ( 'no-space' ) )
+            // InternalIdioms.g:2659:1: ( 'no-space' )
             {
-            // InternalIdioms.g:2597:1: ( 'no-space' )
-            // InternalIdioms.g:2598:2: 'no-space'
+            // InternalIdioms.g:2659:1: ( 'no-space' )
+            // InternalIdioms.g:2660:2: 'no-space'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getNoSpaceSegmentAccess().getNoSpaceKeyword_1());
@@ -8671,14 +8899,14 @@
 
 
     // $ANTLR start "rule__PopSegment__Group__0"
-    // InternalIdioms.g:2608:1: rule__PopSegment__Group__0 : rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1 ;
+    // InternalIdioms.g:2670:1: rule__PopSegment__Group__0 : rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1 ;
     public final void rule__PopSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2612:1: ( rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1 )
-            // InternalIdioms.g:2613:2: rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1
+            // InternalIdioms.g:2674:1: ( rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1 )
+            // InternalIdioms.g:2675:2: rule__PopSegment__Group__0__Impl rule__PopSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_20);
             rule__PopSegment__Group__0__Impl();
@@ -8709,23 +8937,23 @@
 
 
     // $ANTLR start "rule__PopSegment__Group__0__Impl"
-    // InternalIdioms.g:2620:1: rule__PopSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2682:1: rule__PopSegment__Group__0__Impl : ( () ) ;
     public final void rule__PopSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2624:1: ( ( () ) )
-            // InternalIdioms.g:2625:1: ( () )
+            // InternalIdioms.g:2686:1: ( ( () ) )
+            // InternalIdioms.g:2687:1: ( () )
             {
-            // InternalIdioms.g:2625:1: ( () )
-            // InternalIdioms.g:2626:2: ()
+            // InternalIdioms.g:2687:1: ( () )
+            // InternalIdioms.g:2688:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPopSegmentAccess().getPopSegmentAction_0());
             }
-            // InternalIdioms.g:2627:2: ()
-            // InternalIdioms.g:2627:3:
+            // InternalIdioms.g:2689:2: ()
+            // InternalIdioms.g:2689:3:
             {
             }
 
@@ -8750,14 +8978,14 @@
 
 
     // $ANTLR start "rule__PopSegment__Group__1"
-    // InternalIdioms.g:2635:1: rule__PopSegment__Group__1 : rule__PopSegment__Group__1__Impl ;
+    // InternalIdioms.g:2697:1: rule__PopSegment__Group__1 : rule__PopSegment__Group__1__Impl ;
     public final void rule__PopSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2639:1: ( rule__PopSegment__Group__1__Impl )
-            // InternalIdioms.g:2640:2: rule__PopSegment__Group__1__Impl
+            // InternalIdioms.g:2701:1: ( rule__PopSegment__Group__1__Impl )
+            // InternalIdioms.g:2702:2: rule__PopSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__PopSegment__Group__1__Impl();
@@ -8783,17 +9011,17 @@
 
 
     // $ANTLR start "rule__PopSegment__Group__1__Impl"
-    // InternalIdioms.g:2646:1: rule__PopSegment__Group__1__Impl : ( 'pop' ) ;
+    // InternalIdioms.g:2708:1: rule__PopSegment__Group__1__Impl : ( 'pop' ) ;
     public final void rule__PopSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2650:1: ( ( 'pop' ) )
-            // InternalIdioms.g:2651:1: ( 'pop' )
+            // InternalIdioms.g:2712:1: ( ( 'pop' ) )
+            // InternalIdioms.g:2713:1: ( 'pop' )
             {
-            // InternalIdioms.g:2651:1: ( 'pop' )
-            // InternalIdioms.g:2652:2: 'pop'
+            // InternalIdioms.g:2713:1: ( 'pop' )
+            // InternalIdioms.g:2714:2: 'pop'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPopSegmentAccess().getPopKeyword_1());
@@ -8823,17 +9051,323 @@
     // $ANTLR end "rule__PopSegment__Group__1__Impl"
 
 
+    // $ANTLR start "rule__PostCommentSegment__Group__0"
+    // InternalIdioms.g:2724:1: rule__PostCommentSegment__Group__0 : rule__PostCommentSegment__Group__0__Impl rule__PostCommentSegment__Group__1 ;
+    public final void rule__PostCommentSegment__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2728:1: ( rule__PostCommentSegment__Group__0__Impl rule__PostCommentSegment__Group__1 )
+            // InternalIdioms.g:2729:2: rule__PostCommentSegment__Group__0__Impl rule__PostCommentSegment__Group__1
+            {
+            pushFollow(FollowSets000.FOLLOW_21);
+            rule__PostCommentSegment__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PostCommentSegment__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PostCommentSegment__Group__0"
+
+
+    // $ANTLR start "rule__PostCommentSegment__Group__0__Impl"
+    // InternalIdioms.g:2736:1: rule__PostCommentSegment__Group__0__Impl : ( () ) ;
+    public final void rule__PostCommentSegment__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2740:1: ( ( () ) )
+            // InternalIdioms.g:2741:1: ( () )
+            {
+            // InternalIdioms.g:2741:1: ( () )
+            // InternalIdioms.g:2742:2: ()
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0());
+            }
+            // InternalIdioms.g:2743:2: ()
+            // InternalIdioms.g:2743:3:
+            {
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0());
+            }
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PostCommentSegment__Group__0__Impl"
+
+
+    // $ANTLR start "rule__PostCommentSegment__Group__1"
+    // InternalIdioms.g:2751:1: rule__PostCommentSegment__Group__1 : rule__PostCommentSegment__Group__1__Impl ;
+    public final void rule__PostCommentSegment__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2755:1: ( rule__PostCommentSegment__Group__1__Impl )
+            // InternalIdioms.g:2756:2: rule__PostCommentSegment__Group__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PostCommentSegment__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PostCommentSegment__Group__1"
+
+
+    // $ANTLR start "rule__PostCommentSegment__Group__1__Impl"
+    // InternalIdioms.g:2762:1: rule__PostCommentSegment__Group__1__Impl : ( 'post-comment' ) ;
+    public final void rule__PostCommentSegment__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2766:1: ( ( 'post-comment' ) )
+            // InternalIdioms.g:2767:1: ( 'post-comment' )
+            {
+            // InternalIdioms.g:2767:1: ( 'post-comment' )
+            // InternalIdioms.g:2768:2: 'post-comment'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1());
+            }
+            match(input,29,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1());
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PostCommentSegment__Group__1__Impl"
+
+
+    // $ANTLR start "rule__PreCommentSegment__Group__0"
+    // InternalIdioms.g:2778:1: rule__PreCommentSegment__Group__0 : rule__PreCommentSegment__Group__0__Impl rule__PreCommentSegment__Group__1 ;
+    public final void rule__PreCommentSegment__Group__0() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2782:1: ( rule__PreCommentSegment__Group__0__Impl rule__PreCommentSegment__Group__1 )
+            // InternalIdioms.g:2783:2: rule__PreCommentSegment__Group__0__Impl rule__PreCommentSegment__Group__1
+            {
+            pushFollow(FollowSets000.FOLLOW_22);
+            rule__PreCommentSegment__Group__0__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PreCommentSegment__Group__1();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PreCommentSegment__Group__0"
+
+
+    // $ANTLR start "rule__PreCommentSegment__Group__0__Impl"
+    // InternalIdioms.g:2790:1: rule__PreCommentSegment__Group__0__Impl : ( () ) ;
+    public final void rule__PreCommentSegment__Group__0__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2794:1: ( ( () ) )
+            // InternalIdioms.g:2795:1: ( () )
+            {
+            // InternalIdioms.g:2795:1: ( () )
+            // InternalIdioms.g:2796:2: ()
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0());
+            }
+            // InternalIdioms.g:2797:2: ()
+            // InternalIdioms.g:2797:3:
+            {
+            }
+
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0());
+            }
+
+            }
+
+
+            }
+
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PreCommentSegment__Group__0__Impl"
+
+
+    // $ANTLR start "rule__PreCommentSegment__Group__1"
+    // InternalIdioms.g:2805:1: rule__PreCommentSegment__Group__1 : rule__PreCommentSegment__Group__1__Impl ;
+    public final void rule__PreCommentSegment__Group__1() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2809:1: ( rule__PreCommentSegment__Group__1__Impl )
+            // InternalIdioms.g:2810:2: rule__PreCommentSegment__Group__1__Impl
+            {
+            pushFollow(FollowSets000.FOLLOW_2);
+            rule__PreCommentSegment__Group__1__Impl();
+
+            state._fsp--;
+            if (state.failed) return ;
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PreCommentSegment__Group__1"
+
+
+    // $ANTLR start "rule__PreCommentSegment__Group__1__Impl"
+    // InternalIdioms.g:2816:1: rule__PreCommentSegment__Group__1__Impl : ( 'pre-comment' ) ;
+    public final void rule__PreCommentSegment__Group__1__Impl() throws RecognitionException {
+
+        		int stackSize = keepStackSize();
+
+        try {
+            // InternalIdioms.g:2820:1: ( ( 'pre-comment' ) )
+            // InternalIdioms.g:2821:1: ( 'pre-comment' )
+            {
+            // InternalIdioms.g:2821:1: ( 'pre-comment' )
+            // InternalIdioms.g:2822:2: 'pre-comment'
+            {
+            if ( state.backtracking==0 ) {
+               before(grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1());
+            }
+            match(input,30,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            if ( state.backtracking==0 ) {
+               after(grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1());
+            }
+
+            }
+
+
+            }
+
+        }
+        catch (RecognitionException re) {
+            reportError(re);
+            recover(input,re);
+        }
+        finally {
+
+            	restoreStackSize(stackSize);
+
+        }
+        return ;
+    }
+    // $ANTLR end "rule__PreCommentSegment__Group__1__Impl"
+
+
     // $ANTLR start "rule__PushSegment__Group__0"
-    // InternalIdioms.g:2662:1: rule__PushSegment__Group__0 : rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1 ;
+    // InternalIdioms.g:2832:1: rule__PushSegment__Group__0 : rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1 ;
     public final void rule__PushSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2666:1: ( rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1 )
-            // InternalIdioms.g:2667:2: rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1
+            // InternalIdioms.g:2836:1: ( rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1 )
+            // InternalIdioms.g:2837:2: rule__PushSegment__Group__0__Impl rule__PushSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_21);
+            pushFollow(FollowSets000.FOLLOW_23);
             rule__PushSegment__Group__0__Impl();
 
             state._fsp--;
@@ -8862,23 +9396,23 @@
 
 
     // $ANTLR start "rule__PushSegment__Group__0__Impl"
-    // InternalIdioms.g:2674:1: rule__PushSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2844:1: rule__PushSegment__Group__0__Impl : ( () ) ;
     public final void rule__PushSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2678:1: ( ( () ) )
-            // InternalIdioms.g:2679:1: ( () )
+            // InternalIdioms.g:2848:1: ( ( () ) )
+            // InternalIdioms.g:2849:1: ( () )
             {
-            // InternalIdioms.g:2679:1: ( () )
-            // InternalIdioms.g:2680:2: ()
+            // InternalIdioms.g:2849:1: ( () )
+            // InternalIdioms.g:2850:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPushSegmentAccess().getPushSegmentAction_0());
             }
-            // InternalIdioms.g:2681:2: ()
-            // InternalIdioms.g:2681:3:
+            // InternalIdioms.g:2851:2: ()
+            // InternalIdioms.g:2851:3:
             {
             }
 
@@ -8903,14 +9437,14 @@
 
 
     // $ANTLR start "rule__PushSegment__Group__1"
-    // InternalIdioms.g:2689:1: rule__PushSegment__Group__1 : rule__PushSegment__Group__1__Impl ;
+    // InternalIdioms.g:2859:1: rule__PushSegment__Group__1 : rule__PushSegment__Group__1__Impl ;
     public final void rule__PushSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2693:1: ( rule__PushSegment__Group__1__Impl )
-            // InternalIdioms.g:2694:2: rule__PushSegment__Group__1__Impl
+            // InternalIdioms.g:2863:1: ( rule__PushSegment__Group__1__Impl )
+            // InternalIdioms.g:2864:2: rule__PushSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__PushSegment__Group__1__Impl();
@@ -8936,22 +9470,22 @@
 
 
     // $ANTLR start "rule__PushSegment__Group__1__Impl"
-    // InternalIdioms.g:2700:1: rule__PushSegment__Group__1__Impl : ( 'push' ) ;
+    // InternalIdioms.g:2870:1: rule__PushSegment__Group__1__Impl : ( 'push' ) ;
     public final void rule__PushSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2704:1: ( ( 'push' ) )
-            // InternalIdioms.g:2705:1: ( 'push' )
+            // InternalIdioms.g:2874:1: ( ( 'push' ) )
+            // InternalIdioms.g:2875:1: ( 'push' )
             {
-            // InternalIdioms.g:2705:1: ( 'push' )
-            // InternalIdioms.g:2706:2: 'push'
+            // InternalIdioms.g:2875:1: ( 'push' )
+            // InternalIdioms.g:2876:2: 'push'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getPushSegmentAccess().getPushKeyword_1());
             }
-            match(input,29,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,31,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getPushSegmentAccess().getPushKeyword_1());
             }
@@ -8977,16 +9511,16 @@
 
 
     // $ANTLR start "rule__SoftNewLineSegment__Group__0"
-    // InternalIdioms.g:2716:1: rule__SoftNewLineSegment__Group__0 : rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1 ;
+    // InternalIdioms.g:2886:1: rule__SoftNewLineSegment__Group__0 : rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1 ;
     public final void rule__SoftNewLineSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2720:1: ( rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1 )
-            // InternalIdioms.g:2721:2: rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1
+            // InternalIdioms.g:2890:1: ( rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1 )
+            // InternalIdioms.g:2891:2: rule__SoftNewLineSegment__Group__0__Impl rule__SoftNewLineSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_22);
+            pushFollow(FollowSets000.FOLLOW_24);
             rule__SoftNewLineSegment__Group__0__Impl();
 
             state._fsp--;
@@ -9015,23 +9549,23 @@
 
 
     // $ANTLR start "rule__SoftNewLineSegment__Group__0__Impl"
-    // InternalIdioms.g:2728:1: rule__SoftNewLineSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2898:1: rule__SoftNewLineSegment__Group__0__Impl : ( () ) ;
     public final void rule__SoftNewLineSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2732:1: ( ( () ) )
-            // InternalIdioms.g:2733:1: ( () )
+            // InternalIdioms.g:2902:1: ( ( () ) )
+            // InternalIdioms.g:2903:1: ( () )
             {
-            // InternalIdioms.g:2733:1: ( () )
-            // InternalIdioms.g:2734:2: ()
+            // InternalIdioms.g:2903:1: ( () )
+            // InternalIdioms.g:2904:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftNewLineSegmentAccess().getSoftNewLineSegmentAction_0());
             }
-            // InternalIdioms.g:2735:2: ()
-            // InternalIdioms.g:2735:3:
+            // InternalIdioms.g:2905:2: ()
+            // InternalIdioms.g:2905:3:
             {
             }
 
@@ -9056,14 +9590,14 @@
 
 
     // $ANTLR start "rule__SoftNewLineSegment__Group__1"
-    // InternalIdioms.g:2743:1: rule__SoftNewLineSegment__Group__1 : rule__SoftNewLineSegment__Group__1__Impl ;
+    // InternalIdioms.g:2913:1: rule__SoftNewLineSegment__Group__1 : rule__SoftNewLineSegment__Group__1__Impl ;
     public final void rule__SoftNewLineSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2747:1: ( rule__SoftNewLineSegment__Group__1__Impl )
-            // InternalIdioms.g:2748:2: rule__SoftNewLineSegment__Group__1__Impl
+            // InternalIdioms.g:2917:1: ( rule__SoftNewLineSegment__Group__1__Impl )
+            // InternalIdioms.g:2918:2: rule__SoftNewLineSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SoftNewLineSegment__Group__1__Impl();
@@ -9089,22 +9623,22 @@
 
 
     // $ANTLR start "rule__SoftNewLineSegment__Group__1__Impl"
-    // InternalIdioms.g:2754:1: rule__SoftNewLineSegment__Group__1__Impl : ( 'soft-new-line' ) ;
+    // InternalIdioms.g:2924:1: rule__SoftNewLineSegment__Group__1__Impl : ( 'soft-new-line' ) ;
     public final void rule__SoftNewLineSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2758:1: ( ( 'soft-new-line' ) )
-            // InternalIdioms.g:2759:1: ( 'soft-new-line' )
+            // InternalIdioms.g:2928:1: ( ( 'soft-new-line' ) )
+            // InternalIdioms.g:2929:1: ( 'soft-new-line' )
             {
-            // InternalIdioms.g:2759:1: ( 'soft-new-line' )
-            // InternalIdioms.g:2760:2: 'soft-new-line'
+            // InternalIdioms.g:2929:1: ( 'soft-new-line' )
+            // InternalIdioms.g:2930:2: 'soft-new-line'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftNewLineSegmentAccess().getSoftNewLineKeyword_1());
             }
-            match(input,30,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,32,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSoftNewLineSegmentAccess().getSoftNewLineKeyword_1());
             }
@@ -9130,16 +9664,16 @@
 
 
     // $ANTLR start "rule__SoftSpaceSegment__Group__0"
-    // InternalIdioms.g:2770:1: rule__SoftSpaceSegment__Group__0 : rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1 ;
+    // InternalIdioms.g:2940:1: rule__SoftSpaceSegment__Group__0 : rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1 ;
     public final void rule__SoftSpaceSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2774:1: ( rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1 )
-            // InternalIdioms.g:2775:2: rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1
+            // InternalIdioms.g:2944:1: ( rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1 )
+            // InternalIdioms.g:2945:2: rule__SoftSpaceSegment__Group__0__Impl rule__SoftSpaceSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_23);
+            pushFollow(FollowSets000.FOLLOW_25);
             rule__SoftSpaceSegment__Group__0__Impl();
 
             state._fsp--;
@@ -9168,23 +9702,23 @@
 
 
     // $ANTLR start "rule__SoftSpaceSegment__Group__0__Impl"
-    // InternalIdioms.g:2782:1: rule__SoftSpaceSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:2952:1: rule__SoftSpaceSegment__Group__0__Impl : ( () ) ;
     public final void rule__SoftSpaceSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2786:1: ( ( () ) )
-            // InternalIdioms.g:2787:1: ( () )
+            // InternalIdioms.g:2956:1: ( ( () ) )
+            // InternalIdioms.g:2957:1: ( () )
             {
-            // InternalIdioms.g:2787:1: ( () )
-            // InternalIdioms.g:2788:2: ()
+            // InternalIdioms.g:2957:1: ( () )
+            // InternalIdioms.g:2958:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftSpaceSegmentAccess().getSoftSpaceSegmentAction_0());
             }
-            // InternalIdioms.g:2789:2: ()
-            // InternalIdioms.g:2789:3:
+            // InternalIdioms.g:2959:2: ()
+            // InternalIdioms.g:2959:3:
             {
             }
 
@@ -9209,14 +9743,14 @@
 
 
     // $ANTLR start "rule__SoftSpaceSegment__Group__1"
-    // InternalIdioms.g:2797:1: rule__SoftSpaceSegment__Group__1 : rule__SoftSpaceSegment__Group__1__Impl ;
+    // InternalIdioms.g:2967:1: rule__SoftSpaceSegment__Group__1 : rule__SoftSpaceSegment__Group__1__Impl ;
     public final void rule__SoftSpaceSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2801:1: ( rule__SoftSpaceSegment__Group__1__Impl )
-            // InternalIdioms.g:2802:2: rule__SoftSpaceSegment__Group__1__Impl
+            // InternalIdioms.g:2971:1: ( rule__SoftSpaceSegment__Group__1__Impl )
+            // InternalIdioms.g:2972:2: rule__SoftSpaceSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SoftSpaceSegment__Group__1__Impl();
@@ -9242,22 +9776,22 @@
 
 
     // $ANTLR start "rule__SoftSpaceSegment__Group__1__Impl"
-    // InternalIdioms.g:2808:1: rule__SoftSpaceSegment__Group__1__Impl : ( 'soft-space' ) ;
+    // InternalIdioms.g:2978:1: rule__SoftSpaceSegment__Group__1__Impl : ( 'soft-space' ) ;
     public final void rule__SoftSpaceSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2812:1: ( ( 'soft-space' ) )
-            // InternalIdioms.g:2813:1: ( 'soft-space' )
+            // InternalIdioms.g:2982:1: ( ( 'soft-space' ) )
+            // InternalIdioms.g:2983:1: ( 'soft-space' )
             {
-            // InternalIdioms.g:2813:1: ( 'soft-space' )
-            // InternalIdioms.g:2814:2: 'soft-space'
+            // InternalIdioms.g:2983:1: ( 'soft-space' )
+            // InternalIdioms.g:2984:2: 'soft-space'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSoftSpaceSegmentAccess().getSoftSpaceKeyword_1());
             }
-            match(input,31,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,33,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSoftSpaceSegmentAccess().getSoftSpaceKeyword_1());
             }
@@ -9283,14 +9817,14 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__0"
-    // InternalIdioms.g:2824:1: rule__StringSegment__Group__0 : rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1 ;
+    // InternalIdioms.g:2994:1: rule__StringSegment__Group__0 : rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1 ;
     public final void rule__StringSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2828:1: ( rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1 )
-            // InternalIdioms.g:2829:2: rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1
+            // InternalIdioms.g:2998:1: ( rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1 )
+            // InternalIdioms.g:2999:2: rule__StringSegment__Group__0__Impl rule__StringSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_8);
             rule__StringSegment__Group__0__Impl();
@@ -9321,22 +9855,22 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__0__Impl"
-    // InternalIdioms.g:2836:1: rule__StringSegment__Group__0__Impl : ( 'string' ) ;
+    // InternalIdioms.g:3006:1: rule__StringSegment__Group__0__Impl : ( 'string' ) ;
     public final void rule__StringSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2840:1: ( ( 'string' ) )
-            // InternalIdioms.g:2841:1: ( 'string' )
+            // InternalIdioms.g:3010:1: ( ( 'string' ) )
+            // InternalIdioms.g:3011:1: ( 'string' )
             {
-            // InternalIdioms.g:2841:1: ( 'string' )
-            // InternalIdioms.g:2842:2: 'string'
+            // InternalIdioms.g:3011:1: ( 'string' )
+            // InternalIdioms.g:3012:2: 'string'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getStringKeyword_0());
             }
-            match(input,32,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,34,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStringSegmentAccess().getStringKeyword_0());
             }
@@ -9362,16 +9896,16 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__1"
-    // InternalIdioms.g:2851:1: rule__StringSegment__Group__1 : rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2 ;
+    // InternalIdioms.g:3021:1: rule__StringSegment__Group__1 : rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2 ;
     public final void rule__StringSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2855:1: ( rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2 )
-            // InternalIdioms.g:2856:2: rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2
+            // InternalIdioms.g:3025:1: ( rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2 )
+            // InternalIdioms.g:3026:2: rule__StringSegment__Group__1__Impl rule__StringSegment__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_24);
+            pushFollow(FollowSets000.FOLLOW_26);
             rule__StringSegment__Group__1__Impl();
 
             state._fsp--;
@@ -9400,23 +9934,23 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__1__Impl"
-    // InternalIdioms.g:2863:1: rule__StringSegment__Group__1__Impl : ( ( rule__StringSegment__StringAssignment_1 ) ) ;
+    // InternalIdioms.g:3033:1: rule__StringSegment__Group__1__Impl : ( ( rule__StringSegment__StringAssignment_1 ) ) ;
     public final void rule__StringSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2867:1: ( ( ( rule__StringSegment__StringAssignment_1 ) ) )
-            // InternalIdioms.g:2868:1: ( ( rule__StringSegment__StringAssignment_1 ) )
+            // InternalIdioms.g:3037:1: ( ( ( rule__StringSegment__StringAssignment_1 ) ) )
+            // InternalIdioms.g:3038:1: ( ( rule__StringSegment__StringAssignment_1 ) )
             {
-            // InternalIdioms.g:2868:1: ( ( rule__StringSegment__StringAssignment_1 ) )
-            // InternalIdioms.g:2869:2: ( rule__StringSegment__StringAssignment_1 )
+            // InternalIdioms.g:3038:1: ( ( rule__StringSegment__StringAssignment_1 ) )
+            // InternalIdioms.g:3039:2: ( rule__StringSegment__StringAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getStringAssignment_1());
             }
-            // InternalIdioms.g:2870:2: ( rule__StringSegment__StringAssignment_1 )
-            // InternalIdioms.g:2870:3: rule__StringSegment__StringAssignment_1
+            // InternalIdioms.g:3040:2: ( rule__StringSegment__StringAssignment_1 )
+            // InternalIdioms.g:3040:3: rule__StringSegment__StringAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__StringSegment__StringAssignment_1();
@@ -9451,14 +9985,14 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__2"
-    // InternalIdioms.g:2878:1: rule__StringSegment__Group__2 : rule__StringSegment__Group__2__Impl ;
+    // InternalIdioms.g:3048:1: rule__StringSegment__Group__2 : rule__StringSegment__Group__2__Impl ;
     public final void rule__StringSegment__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2882:1: ( rule__StringSegment__Group__2__Impl )
-            // InternalIdioms.g:2883:2: rule__StringSegment__Group__2__Impl
+            // InternalIdioms.g:3052:1: ( rule__StringSegment__Group__2__Impl )
+            // InternalIdioms.g:3053:2: rule__StringSegment__Group__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__StringSegment__Group__2__Impl();
@@ -9484,23 +10018,23 @@
 
 
     // $ANTLR start "rule__StringSegment__Group__2__Impl"
-    // InternalIdioms.g:2889:1: rule__StringSegment__Group__2__Impl : ( ( rule__StringSegment__PrintableAssignment_2 ) ) ;
+    // InternalIdioms.g:3059:1: rule__StringSegment__Group__2__Impl : ( ( rule__StringSegment__PrintableAssignment_2 ) ) ;
     public final void rule__StringSegment__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2893:1: ( ( ( rule__StringSegment__PrintableAssignment_2 ) ) )
-            // InternalIdioms.g:2894:1: ( ( rule__StringSegment__PrintableAssignment_2 ) )
+            // InternalIdioms.g:3063:1: ( ( ( rule__StringSegment__PrintableAssignment_2 ) ) )
+            // InternalIdioms.g:3064:1: ( ( rule__StringSegment__PrintableAssignment_2 ) )
             {
-            // InternalIdioms.g:2894:1: ( ( rule__StringSegment__PrintableAssignment_2 ) )
-            // InternalIdioms.g:2895:2: ( rule__StringSegment__PrintableAssignment_2 )
+            // InternalIdioms.g:3064:1: ( ( rule__StringSegment__PrintableAssignment_2 ) )
+            // InternalIdioms.g:3065:2: ( rule__StringSegment__PrintableAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getPrintableAssignment_2());
             }
-            // InternalIdioms.g:2896:2: ( rule__StringSegment__PrintableAssignment_2 )
-            // InternalIdioms.g:2896:3: rule__StringSegment__PrintableAssignment_2
+            // InternalIdioms.g:3066:2: ( rule__StringSegment__PrintableAssignment_2 )
+            // InternalIdioms.g:3066:3: rule__StringSegment__PrintableAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__StringSegment__PrintableAssignment_2();
@@ -9535,16 +10069,16 @@
 
 
     // $ANTLR start "rule__ValueSegment__Group__0"
-    // InternalIdioms.g:2905:1: rule__ValueSegment__Group__0 : rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1 ;
+    // InternalIdioms.g:3075:1: rule__ValueSegment__Group__0 : rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1 ;
     public final void rule__ValueSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2909:1: ( rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1 )
-            // InternalIdioms.g:2910:2: rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1
+            // InternalIdioms.g:3079:1: ( rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1 )
+            // InternalIdioms.g:3080:2: rule__ValueSegment__Group__0__Impl rule__ValueSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_25);
+            pushFollow(FollowSets000.FOLLOW_27);
             rule__ValueSegment__Group__0__Impl();
 
             state._fsp--;
@@ -9573,23 +10107,23 @@
 
 
     // $ANTLR start "rule__ValueSegment__Group__0__Impl"
-    // InternalIdioms.g:2917:1: rule__ValueSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3087:1: rule__ValueSegment__Group__0__Impl : ( () ) ;
     public final void rule__ValueSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2921:1: ( ( () ) )
-            // InternalIdioms.g:2922:1: ( () )
+            // InternalIdioms.g:3091:1: ( ( () ) )
+            // InternalIdioms.g:3092:1: ( () )
             {
-            // InternalIdioms.g:2922:1: ( () )
-            // InternalIdioms.g:2923:2: ()
+            // InternalIdioms.g:3092:1: ( () )
+            // InternalIdioms.g:3093:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getValueSegmentAccess().getValueSegmentAction_0());
             }
-            // InternalIdioms.g:2924:2: ()
-            // InternalIdioms.g:2924:3:
+            // InternalIdioms.g:3094:2: ()
+            // InternalIdioms.g:3094:3:
             {
             }
 
@@ -9614,14 +10148,14 @@
 
 
     // $ANTLR start "rule__ValueSegment__Group__1"
-    // InternalIdioms.g:2932:1: rule__ValueSegment__Group__1 : rule__ValueSegment__Group__1__Impl ;
+    // InternalIdioms.g:3102:1: rule__ValueSegment__Group__1 : rule__ValueSegment__Group__1__Impl ;
     public final void rule__ValueSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2936:1: ( rule__ValueSegment__Group__1__Impl )
-            // InternalIdioms.g:2937:2: rule__ValueSegment__Group__1__Impl
+            // InternalIdioms.g:3106:1: ( rule__ValueSegment__Group__1__Impl )
+            // InternalIdioms.g:3107:2: rule__ValueSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ValueSegment__Group__1__Impl();
@@ -9647,22 +10181,22 @@
 
 
     // $ANTLR start "rule__ValueSegment__Group__1__Impl"
-    // InternalIdioms.g:2943:1: rule__ValueSegment__Group__1__Impl : ( 'value' ) ;
+    // InternalIdioms.g:3113:1: rule__ValueSegment__Group__1__Impl : ( 'value' ) ;
     public final void rule__ValueSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2947:1: ( ( 'value' ) )
-            // InternalIdioms.g:2948:1: ( 'value' )
+            // InternalIdioms.g:3117:1: ( ( 'value' ) )
+            // InternalIdioms.g:3118:1: ( 'value' )
             {
-            // InternalIdioms.g:2948:1: ( 'value' )
-            // InternalIdioms.g:2949:2: 'value'
+            // InternalIdioms.g:3118:1: ( 'value' )
+            // InternalIdioms.g:3119:2: 'value'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getValueSegmentAccess().getValueKeyword_1());
             }
-            match(input,33,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,35,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getValueSegmentAccess().getValueKeyword_1());
             }
@@ -9688,16 +10222,16 @@
 
 
     // $ANTLR start "rule__WrapAnchorSegment__Group__0"
-    // InternalIdioms.g:2959:1: rule__WrapAnchorSegment__Group__0 : rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1 ;
+    // InternalIdioms.g:3129:1: rule__WrapAnchorSegment__Group__0 : rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1 ;
     public final void rule__WrapAnchorSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2963:1: ( rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1 )
-            // InternalIdioms.g:2964:2: rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1
+            // InternalIdioms.g:3133:1: ( rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1 )
+            // InternalIdioms.g:3134:2: rule__WrapAnchorSegment__Group__0__Impl rule__WrapAnchorSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_26);
+            pushFollow(FollowSets000.FOLLOW_28);
             rule__WrapAnchorSegment__Group__0__Impl();
 
             state._fsp--;
@@ -9726,23 +10260,23 @@
 
 
     // $ANTLR start "rule__WrapAnchorSegment__Group__0__Impl"
-    // InternalIdioms.g:2971:1: rule__WrapAnchorSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3141:1: rule__WrapAnchorSegment__Group__0__Impl : ( () ) ;
     public final void rule__WrapAnchorSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2975:1: ( ( () ) )
-            // InternalIdioms.g:2976:1: ( () )
+            // InternalIdioms.g:3145:1: ( ( () ) )
+            // InternalIdioms.g:3146:1: ( () )
             {
-            // InternalIdioms.g:2976:1: ( () )
-            // InternalIdioms.g:2977:2: ()
+            // InternalIdioms.g:3146:1: ( () )
+            // InternalIdioms.g:3147:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapAnchorSegmentAccess().getWrapAnchorSegmentAction_0());
             }
-            // InternalIdioms.g:2978:2: ()
-            // InternalIdioms.g:2978:3:
+            // InternalIdioms.g:3148:2: ()
+            // InternalIdioms.g:3148:3:
             {
             }
 
@@ -9767,14 +10301,14 @@
 
 
     // $ANTLR start "rule__WrapAnchorSegment__Group__1"
-    // InternalIdioms.g:2986:1: rule__WrapAnchorSegment__Group__1 : rule__WrapAnchorSegment__Group__1__Impl ;
+    // InternalIdioms.g:3156:1: rule__WrapAnchorSegment__Group__1 : rule__WrapAnchorSegment__Group__1__Impl ;
     public final void rule__WrapAnchorSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:2990:1: ( rule__WrapAnchorSegment__Group__1__Impl )
-            // InternalIdioms.g:2991:2: rule__WrapAnchorSegment__Group__1__Impl
+            // InternalIdioms.g:3160:1: ( rule__WrapAnchorSegment__Group__1__Impl )
+            // InternalIdioms.g:3161:2: rule__WrapAnchorSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapAnchorSegment__Group__1__Impl();
@@ -9800,22 +10334,22 @@
 
 
     // $ANTLR start "rule__WrapAnchorSegment__Group__1__Impl"
-    // InternalIdioms.g:2997:1: rule__WrapAnchorSegment__Group__1__Impl : ( 'wrap-anchor' ) ;
+    // InternalIdioms.g:3167:1: rule__WrapAnchorSegment__Group__1__Impl : ( 'wrap-anchor' ) ;
     public final void rule__WrapAnchorSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3001:1: ( ( 'wrap-anchor' ) )
-            // InternalIdioms.g:3002:1: ( 'wrap-anchor' )
+            // InternalIdioms.g:3171:1: ( ( 'wrap-anchor' ) )
+            // InternalIdioms.g:3172:1: ( 'wrap-anchor' )
             {
-            // InternalIdioms.g:3002:1: ( 'wrap-anchor' )
-            // InternalIdioms.g:3003:2: 'wrap-anchor'
+            // InternalIdioms.g:3172:1: ( 'wrap-anchor' )
+            // InternalIdioms.g:3173:2: 'wrap-anchor'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapAnchorSegmentAccess().getWrapAnchorKeyword_1());
             }
-            match(input,34,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,36,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWrapAnchorSegmentAccess().getWrapAnchorKeyword_1());
             }
@@ -9841,16 +10375,16 @@
 
 
     // $ANTLR start "rule__WrapBeginAllSegment__Group__0"
-    // InternalIdioms.g:3013:1: rule__WrapBeginAllSegment__Group__0 : rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1 ;
+    // InternalIdioms.g:3183:1: rule__WrapBeginAllSegment__Group__0 : rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1 ;
     public final void rule__WrapBeginAllSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3017:1: ( rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1 )
-            // InternalIdioms.g:3018:2: rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1
+            // InternalIdioms.g:3187:1: ( rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1 )
+            // InternalIdioms.g:3188:2: rule__WrapBeginAllSegment__Group__0__Impl rule__WrapBeginAllSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_27);
+            pushFollow(FollowSets000.FOLLOW_29);
             rule__WrapBeginAllSegment__Group__0__Impl();
 
             state._fsp--;
@@ -9879,23 +10413,23 @@
 
 
     // $ANTLR start "rule__WrapBeginAllSegment__Group__0__Impl"
-    // InternalIdioms.g:3025:1: rule__WrapBeginAllSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3195:1: rule__WrapBeginAllSegment__Group__0__Impl : ( () ) ;
     public final void rule__WrapBeginAllSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3029:1: ( ( () ) )
-            // InternalIdioms.g:3030:1: ( () )
+            // InternalIdioms.g:3199:1: ( ( () ) )
+            // InternalIdioms.g:3200:1: ( () )
             {
-            // InternalIdioms.g:3030:1: ( () )
-            // InternalIdioms.g:3031:2: ()
+            // InternalIdioms.g:3200:1: ( () )
+            // InternalIdioms.g:3201:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginAllSegmentAccess().getWrapBeginAllSegmentAction_0());
             }
-            // InternalIdioms.g:3032:2: ()
-            // InternalIdioms.g:3032:3:
+            // InternalIdioms.g:3202:2: ()
+            // InternalIdioms.g:3202:3:
             {
             }
 
@@ -9920,14 +10454,14 @@
 
 
     // $ANTLR start "rule__WrapBeginAllSegment__Group__1"
-    // InternalIdioms.g:3040:1: rule__WrapBeginAllSegment__Group__1 : rule__WrapBeginAllSegment__Group__1__Impl ;
+    // InternalIdioms.g:3210:1: rule__WrapBeginAllSegment__Group__1 : rule__WrapBeginAllSegment__Group__1__Impl ;
     public final void rule__WrapBeginAllSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3044:1: ( rule__WrapBeginAllSegment__Group__1__Impl )
-            // InternalIdioms.g:3045:2: rule__WrapBeginAllSegment__Group__1__Impl
+            // InternalIdioms.g:3214:1: ( rule__WrapBeginAllSegment__Group__1__Impl )
+            // InternalIdioms.g:3215:2: rule__WrapBeginAllSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapBeginAllSegment__Group__1__Impl();
@@ -9953,22 +10487,22 @@
 
 
     // $ANTLR start "rule__WrapBeginAllSegment__Group__1__Impl"
-    // InternalIdioms.g:3051:1: rule__WrapBeginAllSegment__Group__1__Impl : ( 'wrap-begin-all' ) ;
+    // InternalIdioms.g:3221:1: rule__WrapBeginAllSegment__Group__1__Impl : ( 'wrap-begin-all' ) ;
     public final void rule__WrapBeginAllSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3055:1: ( ( 'wrap-begin-all' ) )
-            // InternalIdioms.g:3056:1: ( 'wrap-begin-all' )
+            // InternalIdioms.g:3225:1: ( ( 'wrap-begin-all' ) )
+            // InternalIdioms.g:3226:1: ( 'wrap-begin-all' )
             {
-            // InternalIdioms.g:3056:1: ( 'wrap-begin-all' )
-            // InternalIdioms.g:3057:2: 'wrap-begin-all'
+            // InternalIdioms.g:3226:1: ( 'wrap-begin-all' )
+            // InternalIdioms.g:3227:2: 'wrap-begin-all'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginAllSegmentAccess().getWrapBeginAllKeyword_1());
             }
-            match(input,35,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,37,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWrapBeginAllSegmentAccess().getWrapBeginAllKeyword_1());
             }
@@ -9994,16 +10528,16 @@
 
 
     // $ANTLR start "rule__WrapBeginSomeSegment__Group__0"
-    // InternalIdioms.g:3067:1: rule__WrapBeginSomeSegment__Group__0 : rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1 ;
+    // InternalIdioms.g:3237:1: rule__WrapBeginSomeSegment__Group__0 : rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1 ;
     public final void rule__WrapBeginSomeSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3071:1: ( rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1 )
-            // InternalIdioms.g:3072:2: rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1
+            // InternalIdioms.g:3241:1: ( rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1 )
+            // InternalIdioms.g:3242:2: rule__WrapBeginSomeSegment__Group__0__Impl rule__WrapBeginSomeSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_28);
+            pushFollow(FollowSets000.FOLLOW_30);
             rule__WrapBeginSomeSegment__Group__0__Impl();
 
             state._fsp--;
@@ -10032,23 +10566,23 @@
 
 
     // $ANTLR start "rule__WrapBeginSomeSegment__Group__0__Impl"
-    // InternalIdioms.g:3079:1: rule__WrapBeginSomeSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3249:1: rule__WrapBeginSomeSegment__Group__0__Impl : ( () ) ;
     public final void rule__WrapBeginSomeSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3083:1: ( ( () ) )
-            // InternalIdioms.g:3084:1: ( () )
+            // InternalIdioms.g:3253:1: ( ( () ) )
+            // InternalIdioms.g:3254:1: ( () )
             {
-            // InternalIdioms.g:3084:1: ( () )
-            // InternalIdioms.g:3085:2: ()
+            // InternalIdioms.g:3254:1: ( () )
+            // InternalIdioms.g:3255:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginSomeSegmentAccess().getWrapBeginSomeSegmentAction_0());
             }
-            // InternalIdioms.g:3086:2: ()
-            // InternalIdioms.g:3086:3:
+            // InternalIdioms.g:3256:2: ()
+            // InternalIdioms.g:3256:3:
             {
             }
 
@@ -10073,14 +10607,14 @@
 
 
     // $ANTLR start "rule__WrapBeginSomeSegment__Group__1"
-    // InternalIdioms.g:3094:1: rule__WrapBeginSomeSegment__Group__1 : rule__WrapBeginSomeSegment__Group__1__Impl ;
+    // InternalIdioms.g:3264:1: rule__WrapBeginSomeSegment__Group__1 : rule__WrapBeginSomeSegment__Group__1__Impl ;
     public final void rule__WrapBeginSomeSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3098:1: ( rule__WrapBeginSomeSegment__Group__1__Impl )
-            // InternalIdioms.g:3099:2: rule__WrapBeginSomeSegment__Group__1__Impl
+            // InternalIdioms.g:3268:1: ( rule__WrapBeginSomeSegment__Group__1__Impl )
+            // InternalIdioms.g:3269:2: rule__WrapBeginSomeSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapBeginSomeSegment__Group__1__Impl();
@@ -10106,22 +10640,22 @@
 
 
     // $ANTLR start "rule__WrapBeginSomeSegment__Group__1__Impl"
-    // InternalIdioms.g:3105:1: rule__WrapBeginSomeSegment__Group__1__Impl : ( 'wrap-begin-some' ) ;
+    // InternalIdioms.g:3275:1: rule__WrapBeginSomeSegment__Group__1__Impl : ( 'wrap-begin-some' ) ;
     public final void rule__WrapBeginSomeSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3109:1: ( ( 'wrap-begin-some' ) )
-            // InternalIdioms.g:3110:1: ( 'wrap-begin-some' )
+            // InternalIdioms.g:3279:1: ( ( 'wrap-begin-some' ) )
+            // InternalIdioms.g:3280:1: ( 'wrap-begin-some' )
             {
-            // InternalIdioms.g:3110:1: ( 'wrap-begin-some' )
-            // InternalIdioms.g:3111:2: 'wrap-begin-some'
+            // InternalIdioms.g:3280:1: ( 'wrap-begin-some' )
+            // InternalIdioms.g:3281:2: 'wrap-begin-some'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapBeginSomeSegmentAccess().getWrapBeginSomeKeyword_1());
             }
-            match(input,36,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,38,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWrapBeginSomeSegmentAccess().getWrapBeginSomeKeyword_1());
             }
@@ -10147,16 +10681,16 @@
 
 
     // $ANTLR start "rule__WrapEndSegment__Group__0"
-    // InternalIdioms.g:3121:1: rule__WrapEndSegment__Group__0 : rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1 ;
+    // InternalIdioms.g:3291:1: rule__WrapEndSegment__Group__0 : rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1 ;
     public final void rule__WrapEndSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3125:1: ( rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1 )
-            // InternalIdioms.g:3126:2: rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1
+            // InternalIdioms.g:3295:1: ( rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1 )
+            // InternalIdioms.g:3296:2: rule__WrapEndSegment__Group__0__Impl rule__WrapEndSegment__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_29);
+            pushFollow(FollowSets000.FOLLOW_31);
             rule__WrapEndSegment__Group__0__Impl();
 
             state._fsp--;
@@ -10185,23 +10719,23 @@
 
 
     // $ANTLR start "rule__WrapEndSegment__Group__0__Impl"
-    // InternalIdioms.g:3133:1: rule__WrapEndSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3303:1: rule__WrapEndSegment__Group__0__Impl : ( () ) ;
     public final void rule__WrapEndSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3137:1: ( ( () ) )
-            // InternalIdioms.g:3138:1: ( () )
+            // InternalIdioms.g:3307:1: ( ( () ) )
+            // InternalIdioms.g:3308:1: ( () )
             {
-            // InternalIdioms.g:3138:1: ( () )
-            // InternalIdioms.g:3139:2: ()
+            // InternalIdioms.g:3308:1: ( () )
+            // InternalIdioms.g:3309:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapEndSegmentAccess().getWrapEndSegmentAction_0());
             }
-            // InternalIdioms.g:3140:2: ()
-            // InternalIdioms.g:3140:3:
+            // InternalIdioms.g:3310:2: ()
+            // InternalIdioms.g:3310:3:
             {
             }
 
@@ -10226,14 +10760,14 @@
 
 
     // $ANTLR start "rule__WrapEndSegment__Group__1"
-    // InternalIdioms.g:3148:1: rule__WrapEndSegment__Group__1 : rule__WrapEndSegment__Group__1__Impl ;
+    // InternalIdioms.g:3318:1: rule__WrapEndSegment__Group__1 : rule__WrapEndSegment__Group__1__Impl ;
     public final void rule__WrapEndSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3152:1: ( rule__WrapEndSegment__Group__1__Impl )
-            // InternalIdioms.g:3153:2: rule__WrapEndSegment__Group__1__Impl
+            // InternalIdioms.g:3322:1: ( rule__WrapEndSegment__Group__1__Impl )
+            // InternalIdioms.g:3323:2: rule__WrapEndSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapEndSegment__Group__1__Impl();
@@ -10259,22 +10793,22 @@
 
 
     // $ANTLR start "rule__WrapEndSegment__Group__1__Impl"
-    // InternalIdioms.g:3159:1: rule__WrapEndSegment__Group__1__Impl : ( 'wrap-end' ) ;
+    // InternalIdioms.g:3329:1: rule__WrapEndSegment__Group__1__Impl : ( 'wrap-end' ) ;
     public final void rule__WrapEndSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3163:1: ( ( 'wrap-end' ) )
-            // InternalIdioms.g:3164:1: ( 'wrap-end' )
+            // InternalIdioms.g:3333:1: ( ( 'wrap-end' ) )
+            // InternalIdioms.g:3334:1: ( 'wrap-end' )
             {
-            // InternalIdioms.g:3164:1: ( 'wrap-end' )
-            // InternalIdioms.g:3165:2: 'wrap-end'
+            // InternalIdioms.g:3334:1: ( 'wrap-end' )
+            // InternalIdioms.g:3335:2: 'wrap-end'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapEndSegmentAccess().getWrapEndKeyword_1());
             }
-            match(input,37,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,39,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWrapEndSegmentAccess().getWrapEndKeyword_1());
             }
@@ -10300,14 +10834,14 @@
 
 
     // $ANTLR start "rule__WrapHereSegment__Group__0"
-    // InternalIdioms.g:3175:1: rule__WrapHereSegment__Group__0 : rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1 ;
+    // InternalIdioms.g:3345:1: rule__WrapHereSegment__Group__0 : rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1 ;
     public final void rule__WrapHereSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3179:1: ( rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1 )
-            // InternalIdioms.g:3180:2: rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1
+            // InternalIdioms.g:3349:1: ( rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1 )
+            // InternalIdioms.g:3350:2: rule__WrapHereSegment__Group__0__Impl rule__WrapHereSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_16);
             rule__WrapHereSegment__Group__0__Impl();
@@ -10338,23 +10872,23 @@
 
 
     // $ANTLR start "rule__WrapHereSegment__Group__0__Impl"
-    // InternalIdioms.g:3187:1: rule__WrapHereSegment__Group__0__Impl : ( () ) ;
+    // InternalIdioms.g:3357:1: rule__WrapHereSegment__Group__0__Impl : ( () ) ;
     public final void rule__WrapHereSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3191:1: ( ( () ) )
-            // InternalIdioms.g:3192:1: ( () )
+            // InternalIdioms.g:3361:1: ( ( () ) )
+            // InternalIdioms.g:3362:1: ( () )
             {
-            // InternalIdioms.g:3192:1: ( () )
-            // InternalIdioms.g:3193:2: ()
+            // InternalIdioms.g:3362:1: ( () )
+            // InternalIdioms.g:3363:2: ()
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapHereSegmentAccess().getWrapHereSegmentAction_0());
             }
-            // InternalIdioms.g:3194:2: ()
-            // InternalIdioms.g:3194:3:
+            // InternalIdioms.g:3364:2: ()
+            // InternalIdioms.g:3364:3:
             {
             }
 
@@ -10379,14 +10913,14 @@
 
 
     // $ANTLR start "rule__WrapHereSegment__Group__1"
-    // InternalIdioms.g:3202:1: rule__WrapHereSegment__Group__1 : rule__WrapHereSegment__Group__1__Impl ;
+    // InternalIdioms.g:3372:1: rule__WrapHereSegment__Group__1 : rule__WrapHereSegment__Group__1__Impl ;
     public final void rule__WrapHereSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3206:1: ( rule__WrapHereSegment__Group__1__Impl )
-            // InternalIdioms.g:3207:2: rule__WrapHereSegment__Group__1__Impl
+            // InternalIdioms.g:3376:1: ( rule__WrapHereSegment__Group__1__Impl )
+            // InternalIdioms.g:3377:2: rule__WrapHereSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__WrapHereSegment__Group__1__Impl();
@@ -10412,22 +10946,22 @@
 
 
     // $ANTLR start "rule__WrapHereSegment__Group__1__Impl"
-    // InternalIdioms.g:3213:1: rule__WrapHereSegment__Group__1__Impl : ( 'wrap-here' ) ;
+    // InternalIdioms.g:3383:1: rule__WrapHereSegment__Group__1__Impl : ( 'wrap-here' ) ;
     public final void rule__WrapHereSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3217:1: ( ( 'wrap-here' ) )
-            // InternalIdioms.g:3218:1: ( 'wrap-here' )
+            // InternalIdioms.g:3387:1: ( ( 'wrap-here' ) )
+            // InternalIdioms.g:3388:1: ( 'wrap-here' )
             {
-            // InternalIdioms.g:3218:1: ( 'wrap-here' )
-            // InternalIdioms.g:3219:2: 'wrap-here'
+            // InternalIdioms.g:3388:1: ( 'wrap-here' )
+            // InternalIdioms.g:3389:2: 'wrap-here'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getWrapHereSegmentAccess().getWrapHereKeyword_1());
             }
-            match(input,38,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,40,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getWrapHereSegmentAccess().getWrapHereKeyword_1());
             }
@@ -10453,14 +10987,14 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group__0"
-    // InternalIdioms.g:3229:1: rule__ReferredSegment__Group__0 : rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1 ;
+    // InternalIdioms.g:3399:1: rule__ReferredSegment__Group__0 : rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1 ;
     public final void rule__ReferredSegment__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3233:1: ( rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1 )
-            // InternalIdioms.g:3234:2: rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1
+            // InternalIdioms.g:3403:1: ( rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1 )
+            // InternalIdioms.g:3404:2: rule__ReferredSegment__Group__0__Impl rule__ReferredSegment__Group__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__ReferredSegment__Group__0__Impl();
@@ -10491,22 +11025,22 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group__0__Impl"
-    // InternalIdioms.g:3241:1: rule__ReferredSegment__Group__0__Impl : ( ( rule__ReferredSegment__Group_0__0 )? ) ;
+    // InternalIdioms.g:3411:1: rule__ReferredSegment__Group__0__Impl : ( ( rule__ReferredSegment__Group_0__0 )? ) ;
     public final void rule__ReferredSegment__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3245:1: ( ( ( rule__ReferredSegment__Group_0__0 )? ) )
-            // InternalIdioms.g:3246:1: ( ( rule__ReferredSegment__Group_0__0 )? )
+            // InternalIdioms.g:3415:1: ( ( ( rule__ReferredSegment__Group_0__0 )? ) )
+            // InternalIdioms.g:3416:1: ( ( rule__ReferredSegment__Group_0__0 )? )
             {
-            // InternalIdioms.g:3246:1: ( ( rule__ReferredSegment__Group_0__0 )? )
-            // InternalIdioms.g:3247:2: ( rule__ReferredSegment__Group_0__0 )?
+            // InternalIdioms.g:3416:1: ( ( rule__ReferredSegment__Group_0__0 )? )
+            // InternalIdioms.g:3417:2: ( rule__ReferredSegment__Group_0__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getGroup_0());
             }
-            // InternalIdioms.g:3248:2: ( rule__ReferredSegment__Group_0__0 )?
+            // InternalIdioms.g:3418:2: ( rule__ReferredSegment__Group_0__0 )?
             int alt18=2;
             int LA18_0 = input.LA(1);
 
@@ -10519,7 +11053,7 @@
             }
             switch (alt18) {
                 case 1 :
-                    // InternalIdioms.g:3248:3: rule__ReferredSegment__Group_0__0
+                    // InternalIdioms.g:3418:3: rule__ReferredSegment__Group_0__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__ReferredSegment__Group_0__0();
@@ -10557,14 +11091,14 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group__1"
-    // InternalIdioms.g:3256:1: rule__ReferredSegment__Group__1 : rule__ReferredSegment__Group__1__Impl ;
+    // InternalIdioms.g:3426:1: rule__ReferredSegment__Group__1 : rule__ReferredSegment__Group__1__Impl ;
     public final void rule__ReferredSegment__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3260:1: ( rule__ReferredSegment__Group__1__Impl )
-            // InternalIdioms.g:3261:2: rule__ReferredSegment__Group__1__Impl
+            // InternalIdioms.g:3430:1: ( rule__ReferredSegment__Group__1__Impl )
+            // InternalIdioms.g:3431:2: rule__ReferredSegment__Group__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredSegment__Group__1__Impl();
@@ -10590,23 +11124,23 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group__1__Impl"
-    // InternalIdioms.g:3267:1: rule__ReferredSegment__Group__1__Impl : ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) ) ;
+    // InternalIdioms.g:3437:1: rule__ReferredSegment__Group__1__Impl : ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) ) ;
     public final void rule__ReferredSegment__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3271:1: ( ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) ) )
-            // InternalIdioms.g:3272:1: ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) )
+            // InternalIdioms.g:3441:1: ( ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) ) )
+            // InternalIdioms.g:3442:1: ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) )
             {
-            // InternalIdioms.g:3272:1: ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) )
-            // InternalIdioms.g:3273:2: ( rule__ReferredSegment__SegmentDeclarationAssignment_1 )
+            // InternalIdioms.g:3442:1: ( ( rule__ReferredSegment__SegmentDeclarationAssignment_1 ) )
+            // InternalIdioms.g:3443:2: ( rule__ReferredSegment__SegmentDeclarationAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getSegmentDeclarationAssignment_1());
             }
-            // InternalIdioms.g:3274:2: ( rule__ReferredSegment__SegmentDeclarationAssignment_1 )
-            // InternalIdioms.g:3274:3: rule__ReferredSegment__SegmentDeclarationAssignment_1
+            // InternalIdioms.g:3444:2: ( rule__ReferredSegment__SegmentDeclarationAssignment_1 )
+            // InternalIdioms.g:3444:3: rule__ReferredSegment__SegmentDeclarationAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredSegment__SegmentDeclarationAssignment_1();
@@ -10641,14 +11175,14 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group_0__0"
-    // InternalIdioms.g:3283:1: rule__ReferredSegment__Group_0__0 : rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1 ;
+    // InternalIdioms.g:3453:1: rule__ReferredSegment__Group_0__0 : rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1 ;
     public final void rule__ReferredSegment__Group_0__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3287:1: ( rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1 )
-            // InternalIdioms.g:3288:2: rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1
+            // InternalIdioms.g:3457:1: ( rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1 )
+            // InternalIdioms.g:3458:2: rule__ReferredSegment__Group_0__0__Impl rule__ReferredSegment__Group_0__1
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__ReferredSegment__Group_0__0__Impl();
@@ -10679,23 +11213,23 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group_0__0__Impl"
-    // InternalIdioms.g:3295:1: rule__ReferredSegment__Group_0__0__Impl : ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) ) ;
+    // InternalIdioms.g:3465:1: rule__ReferredSegment__Group_0__0__Impl : ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) ) ;
     public final void rule__ReferredSegment__Group_0__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3299:1: ( ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) ) )
-            // InternalIdioms.g:3300:1: ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) )
+            // InternalIdioms.g:3469:1: ( ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) ) )
+            // InternalIdioms.g:3470:1: ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) )
             {
-            // InternalIdioms.g:3300:1: ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) )
-            // InternalIdioms.g:3301:2: ( rule__ReferredSegment__IdiomsModelAssignment_0_0 )
+            // InternalIdioms.g:3470:1: ( ( rule__ReferredSegment__IdiomsModelAssignment_0_0 ) )
+            // InternalIdioms.g:3471:2: ( rule__ReferredSegment__IdiomsModelAssignment_0_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getIdiomsModelAssignment_0_0());
             }
-            // InternalIdioms.g:3302:2: ( rule__ReferredSegment__IdiomsModelAssignment_0_0 )
-            // InternalIdioms.g:3302:3: rule__ReferredSegment__IdiomsModelAssignment_0_0
+            // InternalIdioms.g:3472:2: ( rule__ReferredSegment__IdiomsModelAssignment_0_0 )
+            // InternalIdioms.g:3472:3: rule__ReferredSegment__IdiomsModelAssignment_0_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredSegment__IdiomsModelAssignment_0_0();
@@ -10730,14 +11264,14 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group_0__1"
-    // InternalIdioms.g:3310:1: rule__ReferredSegment__Group_0__1 : rule__ReferredSegment__Group_0__1__Impl ;
+    // InternalIdioms.g:3480:1: rule__ReferredSegment__Group_0__1 : rule__ReferredSegment__Group_0__1__Impl ;
     public final void rule__ReferredSegment__Group_0__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3314:1: ( rule__ReferredSegment__Group_0__1__Impl )
-            // InternalIdioms.g:3315:2: rule__ReferredSegment__Group_0__1__Impl
+            // InternalIdioms.g:3484:1: ( rule__ReferredSegment__Group_0__1__Impl )
+            // InternalIdioms.g:3485:2: rule__ReferredSegment__Group_0__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__ReferredSegment__Group_0__1__Impl();
@@ -10763,17 +11297,17 @@
 
 
     // $ANTLR start "rule__ReferredSegment__Group_0__1__Impl"
-    // InternalIdioms.g:3321:1: rule__ReferredSegment__Group_0__1__Impl : ( '::' ) ;
+    // InternalIdioms.g:3491:1: rule__ReferredSegment__Group_0__1__Impl : ( '::' ) ;
     public final void rule__ReferredSegment__Group_0__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3325:1: ( ( '::' ) )
-            // InternalIdioms.g:3326:1: ( '::' )
+            // InternalIdioms.g:3495:1: ( ( '::' ) )
+            // InternalIdioms.g:3496:1: ( '::' )
             {
-            // InternalIdioms.g:3326:1: ( '::' )
-            // InternalIdioms.g:3327:2: '::'
+            // InternalIdioms.g:3496:1: ( '::' )
+            // InternalIdioms.g:3497:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getColonColonKeyword_0_1());
@@ -10804,16 +11338,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group__0"
-    // InternalIdioms.g:3337:1: rule__Idiom__Group__0 : rule__Idiom__Group__0__Impl rule__Idiom__Group__1 ;
+    // InternalIdioms.g:3507:1: rule__Idiom__Group__0 : rule__Idiom__Group__0__Impl rule__Idiom__Group__1 ;
     public final void rule__Idiom__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3341:1: ( rule__Idiom__Group__0__Impl rule__Idiom__Group__1 )
-            // InternalIdioms.g:3342:2: rule__Idiom__Group__0__Impl rule__Idiom__Group__1
+            // InternalIdioms.g:3511:1: ( rule__Idiom__Group__0__Impl rule__Idiom__Group__1 )
+            // InternalIdioms.g:3512:2: rule__Idiom__Group__0__Impl rule__Idiom__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_30);
+            pushFollow(FollowSets000.FOLLOW_32);
             rule__Idiom__Group__0__Impl();
 
             state._fsp--;
@@ -10842,31 +11376,31 @@
 
 
     // $ANTLR start "rule__Idiom__Group__0__Impl"
-    // InternalIdioms.g:3349:1: rule__Idiom__Group__0__Impl : ( ( rule__Idiom__MixinAssignment_0 )? ) ;
+    // InternalIdioms.g:3519:1: rule__Idiom__Group__0__Impl : ( ( rule__Idiom__MixinAssignment_0 )? ) ;
     public final void rule__Idiom__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3353:1: ( ( ( rule__Idiom__MixinAssignment_0 )? ) )
-            // InternalIdioms.g:3354:1: ( ( rule__Idiom__MixinAssignment_0 )? )
+            // InternalIdioms.g:3523:1: ( ( ( rule__Idiom__MixinAssignment_0 )? ) )
+            // InternalIdioms.g:3524:1: ( ( rule__Idiom__MixinAssignment_0 )? )
             {
-            // InternalIdioms.g:3354:1: ( ( rule__Idiom__MixinAssignment_0 )? )
-            // InternalIdioms.g:3355:2: ( rule__Idiom__MixinAssignment_0 )?
+            // InternalIdioms.g:3524:1: ( ( rule__Idiom__MixinAssignment_0 )? )
+            // InternalIdioms.g:3525:2: ( rule__Idiom__MixinAssignment_0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getMixinAssignment_0());
             }
-            // InternalIdioms.g:3356:2: ( rule__Idiom__MixinAssignment_0 )?
+            // InternalIdioms.g:3526:2: ( rule__Idiom__MixinAssignment_0 )?
             int alt19=2;
             int LA19_0 = input.LA(1);
 
-            if ( (LA19_0==47) ) {
+            if ( (LA19_0==49) ) {
                 alt19=1;
             }
             switch (alt19) {
                 case 1 :
-                    // InternalIdioms.g:3356:3: rule__Idiom__MixinAssignment_0
+                    // InternalIdioms.g:3526:3: rule__Idiom__MixinAssignment_0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__MixinAssignment_0();
@@ -10904,14 +11438,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group__1"
-    // InternalIdioms.g:3364:1: rule__Idiom__Group__1 : rule__Idiom__Group__1__Impl rule__Idiom__Group__2 ;
+    // InternalIdioms.g:3534:1: rule__Idiom__Group__1 : rule__Idiom__Group__1__Impl rule__Idiom__Group__2 ;
     public final void rule__Idiom__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3368:1: ( rule__Idiom__Group__1__Impl rule__Idiom__Group__2 )
-            // InternalIdioms.g:3369:2: rule__Idiom__Group__1__Impl rule__Idiom__Group__2
+            // InternalIdioms.g:3538:1: ( rule__Idiom__Group__1__Impl rule__Idiom__Group__2 )
+            // InternalIdioms.g:3539:2: rule__Idiom__Group__1__Impl rule__Idiom__Group__2
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__Idiom__Group__1__Impl();
@@ -10942,22 +11476,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group__1__Impl"
-    // InternalIdioms.g:3376:1: rule__Idiom__Group__1__Impl : ( 'idiom' ) ;
+    // InternalIdioms.g:3546:1: rule__Idiom__Group__1__Impl : ( 'idiom' ) ;
     public final void rule__Idiom__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3380:1: ( ( 'idiom' ) )
-            // InternalIdioms.g:3381:1: ( 'idiom' )
+            // InternalIdioms.g:3550:1: ( ( 'idiom' ) )
+            // InternalIdioms.g:3551:1: ( 'idiom' )
             {
-            // InternalIdioms.g:3381:1: ( 'idiom' )
-            // InternalIdioms.g:3382:2: 'idiom'
+            // InternalIdioms.g:3551:1: ( 'idiom' )
+            // InternalIdioms.g:3552:2: 'idiom'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getIdiomKeyword_1());
             }
-            match(input,39,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,41,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getIdiomKeyword_1());
             }
@@ -10983,16 +11517,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group__2"
-    // InternalIdioms.g:3391:1: rule__Idiom__Group__2 : rule__Idiom__Group__2__Impl rule__Idiom__Group__3 ;
+    // InternalIdioms.g:3561:1: rule__Idiom__Group__2 : rule__Idiom__Group__2__Impl rule__Idiom__Group__3 ;
     public final void rule__Idiom__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3395:1: ( rule__Idiom__Group__2__Impl rule__Idiom__Group__3 )
-            // InternalIdioms.g:3396:2: rule__Idiom__Group__2__Impl rule__Idiom__Group__3
+            // InternalIdioms.g:3565:1: ( rule__Idiom__Group__2__Impl rule__Idiom__Group__3 )
+            // InternalIdioms.g:3566:2: rule__Idiom__Group__2__Impl rule__Idiom__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_31);
+            pushFollow(FollowSets000.FOLLOW_33);
             rule__Idiom__Group__2__Impl();
 
             state._fsp--;
@@ -11021,23 +11555,23 @@
 
 
     // $ANTLR start "rule__Idiom__Group__2__Impl"
-    // InternalIdioms.g:3403:1: rule__Idiom__Group__2__Impl : ( ( rule__Idiom__NameAssignment_2 ) ) ;
+    // InternalIdioms.g:3573:1: rule__Idiom__Group__2__Impl : ( ( rule__Idiom__NameAssignment_2 ) ) ;
     public final void rule__Idiom__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3407:1: ( ( ( rule__Idiom__NameAssignment_2 ) ) )
-            // InternalIdioms.g:3408:1: ( ( rule__Idiom__NameAssignment_2 ) )
+            // InternalIdioms.g:3577:1: ( ( ( rule__Idiom__NameAssignment_2 ) ) )
+            // InternalIdioms.g:3578:1: ( ( rule__Idiom__NameAssignment_2 ) )
             {
-            // InternalIdioms.g:3408:1: ( ( rule__Idiom__NameAssignment_2 ) )
-            // InternalIdioms.g:3409:2: ( rule__Idiom__NameAssignment_2 )
+            // InternalIdioms.g:3578:1: ( ( rule__Idiom__NameAssignment_2 ) )
+            // InternalIdioms.g:3579:2: ( rule__Idiom__NameAssignment_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getNameAssignment_2());
             }
-            // InternalIdioms.g:3410:2: ( rule__Idiom__NameAssignment_2 )
-            // InternalIdioms.g:3410:3: rule__Idiom__NameAssignment_2
+            // InternalIdioms.g:3580:2: ( rule__Idiom__NameAssignment_2 )
+            // InternalIdioms.g:3580:3: rule__Idiom__NameAssignment_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__NameAssignment_2();
@@ -11072,16 +11606,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group__3"
-    // InternalIdioms.g:3418:1: rule__Idiom__Group__3 : rule__Idiom__Group__3__Impl rule__Idiom__Group__4 ;
+    // InternalIdioms.g:3588:1: rule__Idiom__Group__3 : rule__Idiom__Group__3__Impl rule__Idiom__Group__4 ;
     public final void rule__Idiom__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3422:1: ( rule__Idiom__Group__3__Impl rule__Idiom__Group__4 )
-            // InternalIdioms.g:3423:2: rule__Idiom__Group__3__Impl rule__Idiom__Group__4
+            // InternalIdioms.g:3592:1: ( rule__Idiom__Group__3__Impl rule__Idiom__Group__4 )
+            // InternalIdioms.g:3593:2: rule__Idiom__Group__3__Impl rule__Idiom__Group__4
             {
-            pushFollow(FollowSets000.FOLLOW_31);
+            pushFollow(FollowSets000.FOLLOW_33);
             rule__Idiom__Group__3__Impl();
 
             state._fsp--;
@@ -11110,31 +11644,31 @@
 
 
     // $ANTLR start "rule__Idiom__Group__3__Impl"
-    // InternalIdioms.g:3430:1: rule__Idiom__Group__3__Impl : ( ( rule__Idiom__Group_3__0 )? ) ;
+    // InternalIdioms.g:3600:1: rule__Idiom__Group__3__Impl : ( ( rule__Idiom__Group_3__0 )? ) ;
     public final void rule__Idiom__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3434:1: ( ( ( rule__Idiom__Group_3__0 )? ) )
-            // InternalIdioms.g:3435:1: ( ( rule__Idiom__Group_3__0 )? )
+            // InternalIdioms.g:3604:1: ( ( ( rule__Idiom__Group_3__0 )? ) )
+            // InternalIdioms.g:3605:1: ( ( rule__Idiom__Group_3__0 )? )
             {
-            // InternalIdioms.g:3435:1: ( ( rule__Idiom__Group_3__0 )? )
-            // InternalIdioms.g:3436:2: ( rule__Idiom__Group_3__0 )?
+            // InternalIdioms.g:3605:1: ( ( rule__Idiom__Group_3__0 )? )
+            // InternalIdioms.g:3606:2: ( rule__Idiom__Group_3__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getGroup_3());
             }
-            // InternalIdioms.g:3437:2: ( rule__Idiom__Group_3__0 )?
+            // InternalIdioms.g:3607:2: ( rule__Idiom__Group_3__0 )?
             int alt20=2;
             int LA20_0 = input.LA(1);
 
-            if ( (LA20_0==40) ) {
+            if ( (LA20_0==42) ) {
                 alt20=1;
             }
             switch (alt20) {
                 case 1 :
-                    // InternalIdioms.g:3437:3: rule__Idiom__Group_3__0
+                    // InternalIdioms.g:3607:3: rule__Idiom__Group_3__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__Group_3__0();
@@ -11172,16 +11706,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group__4"
-    // InternalIdioms.g:3445:1: rule__Idiom__Group__4 : rule__Idiom__Group__4__Impl rule__Idiom__Group__5 ;
+    // InternalIdioms.g:3615:1: rule__Idiom__Group__4 : rule__Idiom__Group__4__Impl rule__Idiom__Group__5 ;
     public final void rule__Idiom__Group__4() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3449:1: ( rule__Idiom__Group__4__Impl rule__Idiom__Group__5 )
-            // InternalIdioms.g:3450:2: rule__Idiom__Group__4__Impl rule__Idiom__Group__5
+            // InternalIdioms.g:3619:1: ( rule__Idiom__Group__4__Impl rule__Idiom__Group__5 )
+            // InternalIdioms.g:3620:2: rule__Idiom__Group__4__Impl rule__Idiom__Group__5
             {
-            pushFollow(FollowSets000.FOLLOW_31);
+            pushFollow(FollowSets000.FOLLOW_33);
             rule__Idiom__Group__4__Impl();
 
             state._fsp--;
@@ -11210,31 +11744,31 @@
 
 
     // $ANTLR start "rule__Idiom__Group__4__Impl"
-    // InternalIdioms.g:3457:1: rule__Idiom__Group__4__Impl : ( ( rule__Idiom__Group_4__0 )? ) ;
+    // InternalIdioms.g:3627:1: rule__Idiom__Group__4__Impl : ( ( rule__Idiom__Group_4__0 )? ) ;
     public final void rule__Idiom__Group__4__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3461:1: ( ( ( rule__Idiom__Group_4__0 )? ) )
-            // InternalIdioms.g:3462:1: ( ( rule__Idiom__Group_4__0 )? )
+            // InternalIdioms.g:3631:1: ( ( ( rule__Idiom__Group_4__0 )? ) )
+            // InternalIdioms.g:3632:1: ( ( rule__Idiom__Group_4__0 )? )
             {
-            // InternalIdioms.g:3462:1: ( ( rule__Idiom__Group_4__0 )? )
-            // InternalIdioms.g:3463:2: ( rule__Idiom__Group_4__0 )?
+            // InternalIdioms.g:3632:1: ( ( rule__Idiom__Group_4__0 )? )
+            // InternalIdioms.g:3633:2: ( rule__Idiom__Group_4__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getGroup_4());
             }
-            // InternalIdioms.g:3464:2: ( rule__Idiom__Group_4__0 )?
+            // InternalIdioms.g:3634:2: ( rule__Idiom__Group_4__0 )?
             int alt21=2;
             int LA21_0 = input.LA(1);
 
-            if ( (LA21_0==41) ) {
+            if ( (LA21_0==43) ) {
                 alt21=1;
             }
             switch (alt21) {
                 case 1 :
-                    // InternalIdioms.g:3464:3: rule__Idiom__Group_4__0
+                    // InternalIdioms.g:3634:3: rule__Idiom__Group_4__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__Group_4__0();
@@ -11272,14 +11806,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group__5"
-    // InternalIdioms.g:3472:1: rule__Idiom__Group__5 : rule__Idiom__Group__5__Impl ;
+    // InternalIdioms.g:3642:1: rule__Idiom__Group__5 : rule__Idiom__Group__5__Impl ;
     public final void rule__Idiom__Group__5() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3476:1: ( rule__Idiom__Group__5__Impl )
-            // InternalIdioms.g:3477:2: rule__Idiom__Group__5__Impl
+            // InternalIdioms.g:3646:1: ( rule__Idiom__Group__5__Impl )
+            // InternalIdioms.g:3647:2: rule__Idiom__Group__5__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group__5__Impl();
@@ -11305,23 +11839,23 @@
 
 
     // $ANTLR start "rule__Idiom__Group__5__Impl"
-    // InternalIdioms.g:3483:1: rule__Idiom__Group__5__Impl : ( ( rule__Idiom__Alternatives_5 ) ) ;
+    // InternalIdioms.g:3653:1: rule__Idiom__Group__5__Impl : ( ( rule__Idiom__Alternatives_5 ) ) ;
     public final void rule__Idiom__Group__5__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3487:1: ( ( ( rule__Idiom__Alternatives_5 ) ) )
-            // InternalIdioms.g:3488:1: ( ( rule__Idiom__Alternatives_5 ) )
+            // InternalIdioms.g:3657:1: ( ( ( rule__Idiom__Alternatives_5 ) ) )
+            // InternalIdioms.g:3658:1: ( ( rule__Idiom__Alternatives_5 ) )
             {
-            // InternalIdioms.g:3488:1: ( ( rule__Idiom__Alternatives_5 ) )
-            // InternalIdioms.g:3489:2: ( rule__Idiom__Alternatives_5 )
+            // InternalIdioms.g:3658:1: ( ( rule__Idiom__Alternatives_5 ) )
+            // InternalIdioms.g:3659:2: ( rule__Idiom__Alternatives_5 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getAlternatives_5());
             }
-            // InternalIdioms.g:3490:2: ( rule__Idiom__Alternatives_5 )
-            // InternalIdioms.g:3490:3: rule__Idiom__Alternatives_5
+            // InternalIdioms.g:3660:2: ( rule__Idiom__Alternatives_5 )
+            // InternalIdioms.g:3660:3: rule__Idiom__Alternatives_5
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Alternatives_5();
@@ -11356,14 +11890,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__0"
-    // InternalIdioms.g:3499:1: rule__Idiom__Group_3__0 : rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1 ;
+    // InternalIdioms.g:3669:1: rule__Idiom__Group_3__0 : rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1 ;
     public final void rule__Idiom__Group_3__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3503:1: ( rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1 )
-            // InternalIdioms.g:3504:2: rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1
+            // InternalIdioms.g:3673:1: ( rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1 )
+            // InternalIdioms.g:3674:2: rule__Idiom__Group_3__0__Impl rule__Idiom__Group_3__1
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__Idiom__Group_3__0__Impl();
@@ -11394,22 +11928,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__0__Impl"
-    // InternalIdioms.g:3511:1: rule__Idiom__Group_3__0__Impl : ( 'for' ) ;
+    // InternalIdioms.g:3681:1: rule__Idiom__Group_3__0__Impl : ( 'for' ) ;
     public final void rule__Idiom__Group_3__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3515:1: ( ( 'for' ) )
-            // InternalIdioms.g:3516:1: ( 'for' )
+            // InternalIdioms.g:3685:1: ( ( 'for' ) )
+            // InternalIdioms.g:3686:1: ( 'for' )
             {
-            // InternalIdioms.g:3516:1: ( 'for' )
-            // InternalIdioms.g:3517:2: 'for'
+            // InternalIdioms.g:3686:1: ( 'for' )
+            // InternalIdioms.g:3687:2: 'for'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForKeyword_3_0());
             }
-            match(input,40,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,42,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getForKeyword_3_0());
             }
@@ -11435,14 +11969,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__1"
-    // InternalIdioms.g:3526:1: rule__Idiom__Group_3__1 : rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2 ;
+    // InternalIdioms.g:3696:1: rule__Idiom__Group_3__1 : rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2 ;
     public final void rule__Idiom__Group_3__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3530:1: ( rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2 )
-            // InternalIdioms.g:3531:2: rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2
+            // InternalIdioms.g:3700:1: ( rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2 )
+            // InternalIdioms.g:3701:2: rule__Idiom__Group_3__1__Impl rule__Idiom__Group_3__2
             {
             pushFollow(FollowSets000.FOLLOW_3);
             rule__Idiom__Group_3__1__Impl();
@@ -11473,22 +12007,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__1__Impl"
-    // InternalIdioms.g:3538:1: rule__Idiom__Group_3__1__Impl : ( ( rule__Idiom__Group_3_1__0 )? ) ;
+    // InternalIdioms.g:3708:1: rule__Idiom__Group_3__1__Impl : ( ( rule__Idiom__Group_3_1__0 )? ) ;
     public final void rule__Idiom__Group_3__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3542:1: ( ( ( rule__Idiom__Group_3_1__0 )? ) )
-            // InternalIdioms.g:3543:1: ( ( rule__Idiom__Group_3_1__0 )? )
+            // InternalIdioms.g:3712:1: ( ( ( rule__Idiom__Group_3_1__0 )? ) )
+            // InternalIdioms.g:3713:1: ( ( rule__Idiom__Group_3_1__0 )? )
             {
-            // InternalIdioms.g:3543:1: ( ( rule__Idiom__Group_3_1__0 )? )
-            // InternalIdioms.g:3544:2: ( rule__Idiom__Group_3_1__0 )?
+            // InternalIdioms.g:3713:1: ( ( rule__Idiom__Group_3_1__0 )? )
+            // InternalIdioms.g:3714:2: ( rule__Idiom__Group_3_1__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getGroup_3_1());
             }
-            // InternalIdioms.g:3545:2: ( rule__Idiom__Group_3_1__0 )?
+            // InternalIdioms.g:3715:2: ( rule__Idiom__Group_3_1__0 )?
             int alt22=2;
             int LA22_0 = input.LA(1);
 
@@ -11501,7 +12035,7 @@
             }
             switch (alt22) {
                 case 1 :
-                    // InternalIdioms.g:3545:3: rule__Idiom__Group_3_1__0
+                    // InternalIdioms.g:3715:3: rule__Idiom__Group_3_1__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__Idiom__Group_3_1__0();
@@ -11539,14 +12073,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__2"
-    // InternalIdioms.g:3553:1: rule__Idiom__Group_3__2 : rule__Idiom__Group_3__2__Impl ;
+    // InternalIdioms.g:3723:1: rule__Idiom__Group_3__2 : rule__Idiom__Group_3__2__Impl ;
     public final void rule__Idiom__Group_3__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3557:1: ( rule__Idiom__Group_3__2__Impl )
-            // InternalIdioms.g:3558:2: rule__Idiom__Group_3__2__Impl
+            // InternalIdioms.g:3727:1: ( rule__Idiom__Group_3__2__Impl )
+            // InternalIdioms.g:3728:2: rule__Idiom__Group_3__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group_3__2__Impl();
@@ -11572,23 +12106,23 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3__2__Impl"
-    // InternalIdioms.g:3564:1: rule__Idiom__Group_3__2__Impl : ( ( rule__Idiom__ForEClassAssignment_3_2 ) ) ;
+    // InternalIdioms.g:3734:1: rule__Idiom__Group_3__2__Impl : ( ( rule__Idiom__ForEClassAssignment_3_2 ) ) ;
     public final void rule__Idiom__Group_3__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3568:1: ( ( ( rule__Idiom__ForEClassAssignment_3_2 ) ) )
-            // InternalIdioms.g:3569:1: ( ( rule__Idiom__ForEClassAssignment_3_2 ) )
+            // InternalIdioms.g:3738:1: ( ( ( rule__Idiom__ForEClassAssignment_3_2 ) ) )
+            // InternalIdioms.g:3739:1: ( ( rule__Idiom__ForEClassAssignment_3_2 ) )
             {
-            // InternalIdioms.g:3569:1: ( ( rule__Idiom__ForEClassAssignment_3_2 ) )
-            // InternalIdioms.g:3570:2: ( rule__Idiom__ForEClassAssignment_3_2 )
+            // InternalIdioms.g:3739:1: ( ( rule__Idiom__ForEClassAssignment_3_2 ) )
+            // InternalIdioms.g:3740:2: ( rule__Idiom__ForEClassAssignment_3_2 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEClassAssignment_3_2());
             }
-            // InternalIdioms.g:3571:2: ( rule__Idiom__ForEClassAssignment_3_2 )
-            // InternalIdioms.g:3571:3: rule__Idiom__ForEClassAssignment_3_2
+            // InternalIdioms.g:3741:2: ( rule__Idiom__ForEClassAssignment_3_2 )
+            // InternalIdioms.g:3741:3: rule__Idiom__ForEClassAssignment_3_2
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__ForEClassAssignment_3_2();
@@ -11623,14 +12157,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3_1__0"
-    // InternalIdioms.g:3580:1: rule__Idiom__Group_3_1__0 : rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1 ;
+    // InternalIdioms.g:3750:1: rule__Idiom__Group_3_1__0 : rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1 ;
     public final void rule__Idiom__Group_3_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3584:1: ( rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1 )
-            // InternalIdioms.g:3585:2: rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1
+            // InternalIdioms.g:3754:1: ( rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1 )
+            // InternalIdioms.g:3755:2: rule__Idiom__Group_3_1__0__Impl rule__Idiom__Group_3_1__1
             {
             pushFollow(FollowSets000.FOLLOW_14);
             rule__Idiom__Group_3_1__0__Impl();
@@ -11661,23 +12195,23 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3_1__0__Impl"
-    // InternalIdioms.g:3592:1: rule__Idiom__Group_3_1__0__Impl : ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) ) ;
+    // InternalIdioms.g:3762:1: rule__Idiom__Group_3_1__0__Impl : ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) ) ;
     public final void rule__Idiom__Group_3_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3596:1: ( ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) ) )
-            // InternalIdioms.g:3597:1: ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) )
+            // InternalIdioms.g:3766:1: ( ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) ) )
+            // InternalIdioms.g:3767:1: ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) )
             {
-            // InternalIdioms.g:3597:1: ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) )
-            // InternalIdioms.g:3598:2: ( rule__Idiom__ForEPackageAssignment_3_1_0 )
+            // InternalIdioms.g:3767:1: ( ( rule__Idiom__ForEPackageAssignment_3_1_0 ) )
+            // InternalIdioms.g:3768:2: ( rule__Idiom__ForEPackageAssignment_3_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEPackageAssignment_3_1_0());
             }
-            // InternalIdioms.g:3599:2: ( rule__Idiom__ForEPackageAssignment_3_1_0 )
-            // InternalIdioms.g:3599:3: rule__Idiom__ForEPackageAssignment_3_1_0
+            // InternalIdioms.g:3769:2: ( rule__Idiom__ForEPackageAssignment_3_1_0 )
+            // InternalIdioms.g:3769:3: rule__Idiom__ForEPackageAssignment_3_1_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__ForEPackageAssignment_3_1_0();
@@ -11712,14 +12246,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3_1__1"
-    // InternalIdioms.g:3607:1: rule__Idiom__Group_3_1__1 : rule__Idiom__Group_3_1__1__Impl ;
+    // InternalIdioms.g:3777:1: rule__Idiom__Group_3_1__1 : rule__Idiom__Group_3_1__1__Impl ;
     public final void rule__Idiom__Group_3_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3611:1: ( rule__Idiom__Group_3_1__1__Impl )
-            // InternalIdioms.g:3612:2: rule__Idiom__Group_3_1__1__Impl
+            // InternalIdioms.g:3781:1: ( rule__Idiom__Group_3_1__1__Impl )
+            // InternalIdioms.g:3782:2: rule__Idiom__Group_3_1__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group_3_1__1__Impl();
@@ -11745,17 +12279,17 @@
 
 
     // $ANTLR start "rule__Idiom__Group_3_1__1__Impl"
-    // InternalIdioms.g:3618:1: rule__Idiom__Group_3_1__1__Impl : ( '::' ) ;
+    // InternalIdioms.g:3788:1: rule__Idiom__Group_3_1__1__Impl : ( '::' ) ;
     public final void rule__Idiom__Group_3_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3622:1: ( ( '::' ) )
-            // InternalIdioms.g:3623:1: ( '::' )
+            // InternalIdioms.g:3792:1: ( ( '::' ) )
+            // InternalIdioms.g:3793:1: ( '::' )
             {
-            // InternalIdioms.g:3623:1: ( '::' )
-            // InternalIdioms.g:3624:2: '::'
+            // InternalIdioms.g:3793:1: ( '::' )
+            // InternalIdioms.g:3794:2: '::'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getColonColonKeyword_3_1_1());
@@ -11786,14 +12320,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_4__0"
-    // InternalIdioms.g:3634:1: rule__Idiom__Group_4__0 : rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1 ;
+    // InternalIdioms.g:3804:1: rule__Idiom__Group_4__0 : rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1 ;
     public final void rule__Idiom__Group_4__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3638:1: ( rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1 )
-            // InternalIdioms.g:3639:2: rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1
+            // InternalIdioms.g:3808:1: ( rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1 )
+            // InternalIdioms.g:3809:2: rule__Idiom__Group_4__0__Impl rule__Idiom__Group_4__1
             {
             pushFollow(FollowSets000.FOLLOW_8);
             rule__Idiom__Group_4__0__Impl();
@@ -11824,22 +12358,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group_4__0__Impl"
-    // InternalIdioms.g:3646:1: rule__Idiom__Group_4__0__Impl : ( 'in' ) ;
+    // InternalIdioms.g:3816:1: rule__Idiom__Group_4__0__Impl : ( 'in' ) ;
     public final void rule__Idiom__Group_4__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3650:1: ( ( 'in' ) )
-            // InternalIdioms.g:3651:1: ( 'in' )
+            // InternalIdioms.g:3820:1: ( ( 'in' ) )
+            // InternalIdioms.g:3821:1: ( 'in' )
             {
-            // InternalIdioms.g:3651:1: ( 'in' )
-            // InternalIdioms.g:3652:2: 'in'
+            // InternalIdioms.g:3821:1: ( 'in' )
+            // InternalIdioms.g:3822:2: 'in'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getInKeyword_4_0());
             }
-            match(input,41,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,43,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getInKeyword_4_0());
             }
@@ -11865,14 +12399,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_4__1"
-    // InternalIdioms.g:3661:1: rule__Idiom__Group_4__1 : rule__Idiom__Group_4__1__Impl ;
+    // InternalIdioms.g:3831:1: rule__Idiom__Group_4__1 : rule__Idiom__Group_4__1__Impl ;
     public final void rule__Idiom__Group_4__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3665:1: ( rule__Idiom__Group_4__1__Impl )
-            // InternalIdioms.g:3666:2: rule__Idiom__Group_4__1__Impl
+            // InternalIdioms.g:3835:1: ( rule__Idiom__Group_4__1__Impl )
+            // InternalIdioms.g:3836:2: rule__Idiom__Group_4__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group_4__1__Impl();
@@ -11898,23 +12432,23 @@
 
 
     // $ANTLR start "rule__Idiom__Group_4__1__Impl"
-    // InternalIdioms.g:3672:1: rule__Idiom__Group_4__1__Impl : ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) ) ;
+    // InternalIdioms.g:3842:1: rule__Idiom__Group_4__1__Impl : ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) ) ;
     public final void rule__Idiom__Group_4__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3676:1: ( ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) ) )
-            // InternalIdioms.g:3677:1: ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) )
+            // InternalIdioms.g:3846:1: ( ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) ) )
+            // InternalIdioms.g:3847:1: ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) )
             {
-            // InternalIdioms.g:3677:1: ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) )
-            // InternalIdioms.g:3678:2: ( rule__Idiom__InRuleRegexAssignment_4_1 )
+            // InternalIdioms.g:3847:1: ( ( rule__Idiom__InRuleRegexAssignment_4_1 ) )
+            // InternalIdioms.g:3848:2: ( rule__Idiom__InRuleRegexAssignment_4_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getInRuleRegexAssignment_4_1());
             }
-            // InternalIdioms.g:3679:2: ( rule__Idiom__InRuleRegexAssignment_4_1 )
-            // InternalIdioms.g:3679:3: rule__Idiom__InRuleRegexAssignment_4_1
+            // InternalIdioms.g:3849:2: ( rule__Idiom__InRuleRegexAssignment_4_1 )
+            // InternalIdioms.g:3849:3: rule__Idiom__InRuleRegexAssignment_4_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__InRuleRegexAssignment_4_1();
@@ -11949,16 +12483,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__0"
-    // InternalIdioms.g:3688:1: rule__Idiom__Group_5_1__0 : rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1 ;
+    // InternalIdioms.g:3858:1: rule__Idiom__Group_5_1__0 : rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1 ;
     public final void rule__Idiom__Group_5_1__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3692:1: ( rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1 )
-            // InternalIdioms.g:3693:2: rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1
+            // InternalIdioms.g:3862:1: ( rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1 )
+            // InternalIdioms.g:3863:2: rule__Idiom__Group_5_1__0__Impl rule__Idiom__Group_5_1__1
             {
-            pushFollow(FollowSets000.FOLLOW_32);
+            pushFollow(FollowSets000.FOLLOW_34);
             rule__Idiom__Group_5_1__0__Impl();
 
             state._fsp--;
@@ -11987,22 +12521,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__0__Impl"
-    // InternalIdioms.g:3700:1: rule__Idiom__Group_5_1__0__Impl : ( '{' ) ;
+    // InternalIdioms.g:3870:1: rule__Idiom__Group_5_1__0__Impl : ( '{' ) ;
     public final void rule__Idiom__Group_5_1__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3704:1: ( ( '{' ) )
-            // InternalIdioms.g:3705:1: ( '{' )
+            // InternalIdioms.g:3874:1: ( ( '{' ) )
+            // InternalIdioms.g:3875:1: ( '{' )
             {
-            // InternalIdioms.g:3705:1: ( '{' )
-            // InternalIdioms.g:3706:2: '{'
+            // InternalIdioms.g:3875:1: ( '{' )
+            // InternalIdioms.g:3876:2: '{'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getLeftCurlyBracketKeyword_5_1_0());
             }
-            match(input,42,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,44,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getLeftCurlyBracketKeyword_5_1_0());
             }
@@ -12028,16 +12562,16 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__1"
-    // InternalIdioms.g:3715:1: rule__Idiom__Group_5_1__1 : rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2 ;
+    // InternalIdioms.g:3885:1: rule__Idiom__Group_5_1__1 : rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2 ;
     public final void rule__Idiom__Group_5_1__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3719:1: ( rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2 )
-            // InternalIdioms.g:3720:2: rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2
+            // InternalIdioms.g:3889:1: ( rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2 )
+            // InternalIdioms.g:3890:2: rule__Idiom__Group_5_1__1__Impl rule__Idiom__Group_5_1__2
             {
-            pushFollow(FollowSets000.FOLLOW_32);
+            pushFollow(FollowSets000.FOLLOW_34);
             rule__Idiom__Group_5_1__1__Impl();
 
             state._fsp--;
@@ -12066,37 +12600,37 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__1__Impl"
-    // InternalIdioms.g:3727:1: rule__Idiom__Group_5_1__1__Impl : ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* ) ;
+    // InternalIdioms.g:3897:1: rule__Idiom__Group_5_1__1__Impl : ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* ) ;
     public final void rule__Idiom__Group_5_1__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3731:1: ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* ) )
-            // InternalIdioms.g:3732:1: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* )
+            // InternalIdioms.g:3901:1: ( ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* ) )
+            // InternalIdioms.g:3902:1: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* )
             {
-            // InternalIdioms.g:3732:1: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* )
-            // InternalIdioms.g:3733:2: ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )*
+            // InternalIdioms.g:3902:1: ( ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )* )
+            // InternalIdioms.g:3903:2: ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getOwnedSubIdiomsAssignment_5_1_1());
             }
-            // InternalIdioms.g:3734:2: ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )*
+            // InternalIdioms.g:3904:2: ( rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 )*
             loop23:
             do {
                 int alt23=2;
                 int LA23_0 = input.LA(1);
 
-                if ( (LA23_0==44) ) {
+                if ( (LA23_0==46) ) {
                     alt23=1;
                 }
 
 
                 switch (alt23) {
             	case 1 :
-            	    // InternalIdioms.g:3734:3: rule__Idiom__OwnedSubIdiomsAssignment_5_1_1
+            	    // InternalIdioms.g:3904:3: rule__Idiom__OwnedSubIdiomsAssignment_5_1_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_33);
+            	    pushFollow(FollowSets000.FOLLOW_35);
             	    rule__Idiom__OwnedSubIdiomsAssignment_5_1_1();
 
             	    state._fsp--;
@@ -12135,14 +12669,14 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__2"
-    // InternalIdioms.g:3742:1: rule__Idiom__Group_5_1__2 : rule__Idiom__Group_5_1__2__Impl ;
+    // InternalIdioms.g:3912:1: rule__Idiom__Group_5_1__2 : rule__Idiom__Group_5_1__2__Impl ;
     public final void rule__Idiom__Group_5_1__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3746:1: ( rule__Idiom__Group_5_1__2__Impl )
-            // InternalIdioms.g:3747:2: rule__Idiom__Group_5_1__2__Impl
+            // InternalIdioms.g:3916:1: ( rule__Idiom__Group_5_1__2__Impl )
+            // InternalIdioms.g:3917:2: rule__Idiom__Group_5_1__2__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__Idiom__Group_5_1__2__Impl();
@@ -12168,22 +12702,22 @@
 
 
     // $ANTLR start "rule__Idiom__Group_5_1__2__Impl"
-    // InternalIdioms.g:3753:1: rule__Idiom__Group_5_1__2__Impl : ( '}' ) ;
+    // InternalIdioms.g:3923:1: rule__Idiom__Group_5_1__2__Impl : ( '}' ) ;
     public final void rule__Idiom__Group_5_1__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3757:1: ( ( '}' ) )
-            // InternalIdioms.g:3758:1: ( '}' )
+            // InternalIdioms.g:3927:1: ( ( '}' ) )
+            // InternalIdioms.g:3928:1: ( '}' )
             {
-            // InternalIdioms.g:3758:1: ( '}' )
-            // InternalIdioms.g:3759:2: '}'
+            // InternalIdioms.g:3928:1: ( '}' )
+            // InternalIdioms.g:3929:2: '}'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getRightCurlyBracketKeyword_5_1_2());
             }
-            match(input,43,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,45,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getRightCurlyBracketKeyword_5_1_2());
             }
@@ -12209,16 +12743,16 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__0"
-    // InternalIdioms.g:3769:1: rule__SubIdiom__Group__0 : rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1 ;
+    // InternalIdioms.g:3939:1: rule__SubIdiom__Group__0 : rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1 ;
     public final void rule__SubIdiom__Group__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3773:1: ( rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1 )
-            // InternalIdioms.g:3774:2: rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1
+            // InternalIdioms.g:3943:1: ( rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1 )
+            // InternalIdioms.g:3944:2: rule__SubIdiom__Group__0__Impl rule__SubIdiom__Group__1
             {
-            pushFollow(FollowSets000.FOLLOW_34);
+            pushFollow(FollowSets000.FOLLOW_36);
             rule__SubIdiom__Group__0__Impl();
 
             state._fsp--;
@@ -12247,22 +12781,22 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__0__Impl"
-    // InternalIdioms.g:3781:1: rule__SubIdiom__Group__0__Impl : ( 'at' ) ;
+    // InternalIdioms.g:3951:1: rule__SubIdiom__Group__0__Impl : ( 'at' ) ;
     public final void rule__SubIdiom__Group__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3785:1: ( ( 'at' ) )
-            // InternalIdioms.g:3786:1: ( 'at' )
+            // InternalIdioms.g:3955:1: ( ( 'at' ) )
+            // InternalIdioms.g:3956:1: ( 'at' )
             {
-            // InternalIdioms.g:3786:1: ( 'at' )
-            // InternalIdioms.g:3787:2: 'at'
+            // InternalIdioms.g:3956:1: ( 'at' )
+            // InternalIdioms.g:3957:2: 'at'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getAtKeyword_0());
             }
-            match(input,44,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,46,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSubIdiomAccess().getAtKeyword_0());
             }
@@ -12288,16 +12822,16 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__1"
-    // InternalIdioms.g:3796:1: rule__SubIdiom__Group__1 : rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2 ;
+    // InternalIdioms.g:3966:1: rule__SubIdiom__Group__1 : rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2 ;
     public final void rule__SubIdiom__Group__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3800:1: ( rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2 )
-            // InternalIdioms.g:3801:2: rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2
+            // InternalIdioms.g:3970:1: ( rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2 )
+            // InternalIdioms.g:3971:2: rule__SubIdiom__Group__1__Impl rule__SubIdiom__Group__2
             {
-            pushFollow(FollowSets000.FOLLOW_35);
+            pushFollow(FollowSets000.FOLLOW_37);
             rule__SubIdiom__Group__1__Impl();
 
             state._fsp--;
@@ -12326,23 +12860,23 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__1__Impl"
-    // InternalIdioms.g:3808:1: rule__SubIdiom__Group__1__Impl : ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) ) ;
+    // InternalIdioms.g:3978:1: rule__SubIdiom__Group__1__Impl : ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) ) ;
     public final void rule__SubIdiom__Group__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3812:1: ( ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) ) )
-            // InternalIdioms.g:3813:1: ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) )
+            // InternalIdioms.g:3982:1: ( ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) ) )
+            // InternalIdioms.g:3983:1: ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) )
             {
-            // InternalIdioms.g:3813:1: ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) )
-            // InternalIdioms.g:3814:2: ( rule__SubIdiom__OwnedLocatorAssignment_1 )
+            // InternalIdioms.g:3983:1: ( ( rule__SubIdiom__OwnedLocatorAssignment_1 ) )
+            // InternalIdioms.g:3984:2: ( rule__SubIdiom__OwnedLocatorAssignment_1 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getOwnedLocatorAssignment_1());
             }
-            // InternalIdioms.g:3815:2: ( rule__SubIdiom__OwnedLocatorAssignment_1 )
-            // InternalIdioms.g:3815:3: rule__SubIdiom__OwnedLocatorAssignment_1
+            // InternalIdioms.g:3985:2: ( rule__SubIdiom__OwnedLocatorAssignment_1 )
+            // InternalIdioms.g:3985:3: rule__SubIdiom__OwnedLocatorAssignment_1
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__OwnedLocatorAssignment_1();
@@ -12377,16 +12911,16 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__2"
-    // InternalIdioms.g:3823:1: rule__SubIdiom__Group__2 : rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3 ;
+    // InternalIdioms.g:3993:1: rule__SubIdiom__Group__2 : rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3 ;
     public final void rule__SubIdiom__Group__2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3827:1: ( rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3 )
-            // InternalIdioms.g:3828:2: rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3
+            // InternalIdioms.g:3997:1: ( rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3 )
+            // InternalIdioms.g:3998:2: rule__SubIdiom__Group__2__Impl rule__SubIdiom__Group__3
             {
-            pushFollow(FollowSets000.FOLLOW_35);
+            pushFollow(FollowSets000.FOLLOW_37);
             rule__SubIdiom__Group__2__Impl();
 
             state._fsp--;
@@ -12415,31 +12949,31 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__2__Impl"
-    // InternalIdioms.g:3835:1: rule__SubIdiom__Group__2__Impl : ( ( rule__SubIdiom__Group_2__0 )? ) ;
+    // InternalIdioms.g:4005:1: rule__SubIdiom__Group__2__Impl : ( ( rule__SubIdiom__Group_2__0 )? ) ;
     public final void rule__SubIdiom__Group__2__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3839:1: ( ( ( rule__SubIdiom__Group_2__0 )? ) )
-            // InternalIdioms.g:3840:1: ( ( rule__SubIdiom__Group_2__0 )? )
+            // InternalIdioms.g:4009:1: ( ( ( rule__SubIdiom__Group_2__0 )? ) )
+            // InternalIdioms.g:4010:1: ( ( rule__SubIdiom__Group_2__0 )? )
             {
-            // InternalIdioms.g:3840:1: ( ( rule__SubIdiom__Group_2__0 )? )
-            // InternalIdioms.g:3841:2: ( rule__SubIdiom__Group_2__0 )?
+            // InternalIdioms.g:4010:1: ( ( rule__SubIdiom__Group_2__0 )? )
+            // InternalIdioms.g:4011:2: ( rule__SubIdiom__Group_2__0 )?
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getGroup_2());
             }
-            // InternalIdioms.g:3842:2: ( rule__SubIdiom__Group_2__0 )?
+            // InternalIdioms.g:4012:2: ( rule__SubIdiom__Group_2__0 )?
             int alt24=2;
             int LA24_0 = input.LA(1);
 
-            if ( (LA24_0==45) ) {
+            if ( (LA24_0==47) ) {
                 alt24=1;
             }
             switch (alt24) {
                 case 1 :
-                    // InternalIdioms.g:3842:3: rule__SubIdiom__Group_2__0
+                    // InternalIdioms.g:4012:3: rule__SubIdiom__Group_2__0
                     {
                     pushFollow(FollowSets000.FOLLOW_2);
                     rule__SubIdiom__Group_2__0();
@@ -12477,14 +13011,14 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__3"
-    // InternalIdioms.g:3850:1: rule__SubIdiom__Group__3 : rule__SubIdiom__Group__3__Impl ;
+    // InternalIdioms.g:4020:1: rule__SubIdiom__Group__3 : rule__SubIdiom__Group__3__Impl ;
     public final void rule__SubIdiom__Group__3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3854:1: ( rule__SubIdiom__Group__3__Impl )
-            // InternalIdioms.g:3855:2: rule__SubIdiom__Group__3__Impl
+            // InternalIdioms.g:4024:1: ( rule__SubIdiom__Group__3__Impl )
+            // InternalIdioms.g:4025:2: rule__SubIdiom__Group__3__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__Group__3__Impl();
@@ -12510,17 +13044,17 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group__3__Impl"
-    // InternalIdioms.g:3861:1: rule__SubIdiom__Group__3__Impl : ( ';' ) ;
+    // InternalIdioms.g:4031:1: rule__SubIdiom__Group__3__Impl : ( ';' ) ;
     public final void rule__SubIdiom__Group__3__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3865:1: ( ( ';' ) )
-            // InternalIdioms.g:3866:1: ( ';' )
+            // InternalIdioms.g:4035:1: ( ( ';' ) )
+            // InternalIdioms.g:4036:1: ( ';' )
             {
-            // InternalIdioms.g:3866:1: ( ';' )
-            // InternalIdioms.g:3867:2: ';'
+            // InternalIdioms.g:4036:1: ( ';' )
+            // InternalIdioms.g:4037:2: ';'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getSemicolonKeyword_3());
@@ -12551,16 +13085,16 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group_2__0"
-    // InternalIdioms.g:3877:1: rule__SubIdiom__Group_2__0 : rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1 ;
+    // InternalIdioms.g:4047:1: rule__SubIdiom__Group_2__0 : rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1 ;
     public final void rule__SubIdiom__Group_2__0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3881:1: ( rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1 )
-            // InternalIdioms.g:3882:2: rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1
+            // InternalIdioms.g:4051:1: ( rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1 )
+            // InternalIdioms.g:4052:2: rule__SubIdiom__Group_2__0__Impl rule__SubIdiom__Group_2__1
             {
-            pushFollow(FollowSets000.FOLLOW_36);
+            pushFollow(FollowSets000.FOLLOW_38);
             rule__SubIdiom__Group_2__0__Impl();
 
             state._fsp--;
@@ -12589,22 +13123,22 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group_2__0__Impl"
-    // InternalIdioms.g:3889:1: rule__SubIdiom__Group_2__0__Impl : ( 'do' ) ;
+    // InternalIdioms.g:4059:1: rule__SubIdiom__Group_2__0__Impl : ( 'do' ) ;
     public final void rule__SubIdiom__Group_2__0__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3893:1: ( ( 'do' ) )
-            // InternalIdioms.g:3894:1: ( 'do' )
+            // InternalIdioms.g:4063:1: ( ( 'do' ) )
+            // InternalIdioms.g:4064:1: ( 'do' )
             {
-            // InternalIdioms.g:3894:1: ( 'do' )
-            // InternalIdioms.g:3895:2: 'do'
+            // InternalIdioms.g:4064:1: ( 'do' )
+            // InternalIdioms.g:4065:2: 'do'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getDoKeyword_2_0());
             }
-            match(input,45,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,47,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getSubIdiomAccess().getDoKeyword_2_0());
             }
@@ -12630,14 +13164,14 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group_2__1"
-    // InternalIdioms.g:3904:1: rule__SubIdiom__Group_2__1 : rule__SubIdiom__Group_2__1__Impl ;
+    // InternalIdioms.g:4074:1: rule__SubIdiom__Group_2__1 : rule__SubIdiom__Group_2__1__Impl ;
     public final void rule__SubIdiom__Group_2__1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3908:1: ( rule__SubIdiom__Group_2__1__Impl )
-            // InternalIdioms.g:3909:2: rule__SubIdiom__Group_2__1__Impl
+            // InternalIdioms.g:4078:1: ( rule__SubIdiom__Group_2__1__Impl )
+            // InternalIdioms.g:4079:2: rule__SubIdiom__Group_2__1__Impl
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__Group_2__1__Impl();
@@ -12663,37 +13197,37 @@
 
 
     // $ANTLR start "rule__SubIdiom__Group_2__1__Impl"
-    // InternalIdioms.g:3915:1: rule__SubIdiom__Group_2__1__Impl : ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* ) ;
+    // InternalIdioms.g:4085:1: rule__SubIdiom__Group_2__1__Impl : ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* ) ;
     public final void rule__SubIdiom__Group_2__1__Impl() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3919:1: ( ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* ) )
-            // InternalIdioms.g:3920:1: ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* )
+            // InternalIdioms.g:4089:1: ( ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* ) )
+            // InternalIdioms.g:4090:1: ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* )
             {
-            // InternalIdioms.g:3920:1: ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* )
-            // InternalIdioms.g:3921:2: ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )*
+            // InternalIdioms.g:4090:1: ( ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )* )
+            // InternalIdioms.g:4091:2: ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )*
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getOwnedSegmentsAssignment_2_1());
             }
-            // InternalIdioms.g:3922:2: ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )*
+            // InternalIdioms.g:4092:2: ( rule__SubIdiom__OwnedSegmentsAssignment_2_1 )*
             loop25:
             do {
                 int alt25=2;
                 int LA25_0 = input.LA(1);
 
-                if ( (LA25_0==RULE_ID||(LA25_0>=24 && LA25_0<=38)) ) {
+                if ( (LA25_0==RULE_ID||(LA25_0>=24 && LA25_0<=40)) ) {
                     alt25=1;
                 }
 
 
                 switch (alt25) {
             	case 1 :
-            	    // InternalIdioms.g:3922:3: rule__SubIdiom__OwnedSegmentsAssignment_2_1
+            	    // InternalIdioms.g:4092:3: rule__SubIdiom__OwnedSegmentsAssignment_2_1
             	    {
-            	    pushFollow(FollowSets000.FOLLOW_37);
+            	    pushFollow(FollowSets000.FOLLOW_39);
             	    rule__SubIdiom__OwnedSegmentsAssignment_2_1();
 
             	    state._fsp--;
@@ -12732,17 +13266,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__NameAssignment_1"
-    // InternalIdioms.g:3931:1: rule__IdiomsModel__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalIdioms.g:4101:1: rule__IdiomsModel__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__IdiomsModel__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3935:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:3936:2: ( RULE_ID )
+            // InternalIdioms.g:4105:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4106:2: ( RULE_ID )
             {
-            // InternalIdioms.g:3936:2: ( RULE_ID )
-            // InternalIdioms.g:3937:3: RULE_ID
+            // InternalIdioms.g:4106:2: ( RULE_ID )
+            // InternalIdioms.g:4107:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getNameIDTerminalRuleCall_1_0());
@@ -12773,17 +13307,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__OwnedWithsAssignment_2"
-    // InternalIdioms.g:3946:1: rule__IdiomsModel__OwnedWithsAssignment_2 : ( ruleIdiomsImport ) ;
+    // InternalIdioms.g:4116:1: rule__IdiomsModel__OwnedWithsAssignment_2 : ( ruleIdiomsImport ) ;
     public final void rule__IdiomsModel__OwnedWithsAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3950:1: ( ( ruleIdiomsImport ) )
-            // InternalIdioms.g:3951:2: ( ruleIdiomsImport )
+            // InternalIdioms.g:4120:1: ( ( ruleIdiomsImport ) )
+            // InternalIdioms.g:4121:2: ( ruleIdiomsImport )
             {
-            // InternalIdioms.g:3951:2: ( ruleIdiomsImport )
-            // InternalIdioms.g:3952:3: ruleIdiomsImport
+            // InternalIdioms.g:4121:2: ( ruleIdiomsImport )
+            // InternalIdioms.g:4122:3: ruleIdiomsImport
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedWithsIdiomsImportParserRuleCall_2_0());
@@ -12818,17 +13352,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__OwnedImportsAssignment_3"
-    // InternalIdioms.g:3961:1: rule__IdiomsModel__OwnedImportsAssignment_3 : ( ruleEPackageImport ) ;
+    // InternalIdioms.g:4131:1: rule__IdiomsModel__OwnedImportsAssignment_3 : ( ruleEPackageImport ) ;
     public final void rule__IdiomsModel__OwnedImportsAssignment_3() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3965:1: ( ( ruleEPackageImport ) )
-            // InternalIdioms.g:3966:2: ( ruleEPackageImport )
+            // InternalIdioms.g:4135:1: ( ( ruleEPackageImport ) )
+            // InternalIdioms.g:4136:2: ( ruleEPackageImport )
             {
-            // InternalIdioms.g:3966:2: ( ruleEPackageImport )
-            // InternalIdioms.g:3967:3: ruleEPackageImport
+            // InternalIdioms.g:4136:2: ( ruleEPackageImport )
+            // InternalIdioms.g:4137:3: ruleEPackageImport
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedImportsEPackageImportParserRuleCall_3_0());
@@ -12863,17 +13397,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0"
-    // InternalIdioms.g:3976:1: rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 : ( ruleLocatorDeclaration ) ;
+    // InternalIdioms.g:4146:1: rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0 : ( ruleLocatorDeclaration ) ;
     public final void rule__IdiomsModel__OwnedLocatorDeclarationsAssignment_4_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3980:1: ( ( ruleLocatorDeclaration ) )
-            // InternalIdioms.g:3981:2: ( ruleLocatorDeclaration )
+            // InternalIdioms.g:4150:1: ( ( ruleLocatorDeclaration ) )
+            // InternalIdioms.g:4151:2: ( ruleLocatorDeclaration )
             {
-            // InternalIdioms.g:3981:2: ( ruleLocatorDeclaration )
-            // InternalIdioms.g:3982:3: ruleLocatorDeclaration
+            // InternalIdioms.g:4151:2: ( ruleLocatorDeclaration )
+            // InternalIdioms.g:4152:3: ruleLocatorDeclaration
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedLocatorDeclarationsLocatorDeclarationParserRuleCall_4_0_0());
@@ -12908,17 +13442,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1"
-    // InternalIdioms.g:3991:1: rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 : ( ruleSegmentDeclaration ) ;
+    // InternalIdioms.g:4161:1: rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1 : ( ruleSegmentDeclaration ) ;
     public final void rule__IdiomsModel__OwnedSegmentDeclarationsAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:3995:1: ( ( ruleSegmentDeclaration ) )
-            // InternalIdioms.g:3996:2: ( ruleSegmentDeclaration )
+            // InternalIdioms.g:4165:1: ( ( ruleSegmentDeclaration ) )
+            // InternalIdioms.g:4166:2: ( ruleSegmentDeclaration )
             {
-            // InternalIdioms.g:3996:2: ( ruleSegmentDeclaration )
-            // InternalIdioms.g:3997:3: ruleSegmentDeclaration
+            // InternalIdioms.g:4166:2: ( ruleSegmentDeclaration )
+            // InternalIdioms.g:4167:3: ruleSegmentDeclaration
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedSegmentDeclarationsSegmentDeclarationParserRuleCall_4_1_0());
@@ -12953,17 +13487,17 @@
 
 
     // $ANTLR start "rule__IdiomsModel__OwnedIdiomsAssignment_4_2"
-    // InternalIdioms.g:4006:1: rule__IdiomsModel__OwnedIdiomsAssignment_4_2 : ( ruleIdiom ) ;
+    // InternalIdioms.g:4176:1: rule__IdiomsModel__OwnedIdiomsAssignment_4_2 : ( ruleIdiom ) ;
     public final void rule__IdiomsModel__OwnedIdiomsAssignment_4_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4010:1: ( ( ruleIdiom ) )
-            // InternalIdioms.g:4011:2: ( ruleIdiom )
+            // InternalIdioms.g:4180:1: ( ( ruleIdiom ) )
+            // InternalIdioms.g:4181:2: ( ruleIdiom )
             {
-            // InternalIdioms.g:4011:2: ( ruleIdiom )
-            // InternalIdioms.g:4012:3: ruleIdiom
+            // InternalIdioms.g:4181:2: ( ruleIdiom )
+            // InternalIdioms.g:4182:3: ruleIdiom
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsModelAccess().getOwnedIdiomsIdiomParserRuleCall_4_2_0());
@@ -12998,23 +13532,23 @@
 
 
     // $ANTLR start "rule__EPackageImport__EPackageAssignment_1"
-    // InternalIdioms.g:4021:1: rule__EPackageImport__EPackageAssignment_1 : ( ( RULE_STRING ) ) ;
+    // InternalIdioms.g:4191:1: rule__EPackageImport__EPackageAssignment_1 : ( ( RULE_STRING ) ) ;
     public final void rule__EPackageImport__EPackageAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4025:1: ( ( ( RULE_STRING ) ) )
-            // InternalIdioms.g:4026:2: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4195:1: ( ( ( RULE_STRING ) ) )
+            // InternalIdioms.g:4196:2: ( ( RULE_STRING ) )
             {
-            // InternalIdioms.g:4026:2: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4027:3: ( RULE_STRING )
+            // InternalIdioms.g:4196:2: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4197:3: ( RULE_STRING )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getEPackageEPackageCrossReference_1_0());
             }
-            // InternalIdioms.g:4028:3: ( RULE_STRING )
-            // InternalIdioms.g:4029:4: RULE_STRING
+            // InternalIdioms.g:4198:3: ( RULE_STRING )
+            // InternalIdioms.g:4199:4: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getEPackageEPackageSTRINGTerminalRuleCall_1_0_1());
@@ -13051,17 +13585,17 @@
 
 
     // $ANTLR start "rule__EPackageImport__AsAssignment_2_1"
-    // InternalIdioms.g:4040:1: rule__EPackageImport__AsAssignment_2_1 : ( RULE_ID ) ;
+    // InternalIdioms.g:4210:1: rule__EPackageImport__AsAssignment_2_1 : ( RULE_ID ) ;
     public final void rule__EPackageImport__AsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4044:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:4045:2: ( RULE_ID )
+            // InternalIdioms.g:4214:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4215:2: ( RULE_ID )
             {
-            // InternalIdioms.g:4045:2: ( RULE_ID )
-            // InternalIdioms.g:4046:3: RULE_ID
+            // InternalIdioms.g:4215:2: ( RULE_ID )
+            // InternalIdioms.g:4216:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getEPackageImportAccess().getAsIDTerminalRuleCall_2_1_0());
@@ -13092,23 +13626,23 @@
 
 
     // $ANTLR start "rule__IdiomsImport__IdiomsModelAssignment_1"
-    // InternalIdioms.g:4055:1: rule__IdiomsImport__IdiomsModelAssignment_1 : ( ( RULE_STRING ) ) ;
+    // InternalIdioms.g:4225:1: rule__IdiomsImport__IdiomsModelAssignment_1 : ( ( RULE_STRING ) ) ;
     public final void rule__IdiomsImport__IdiomsModelAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4059:1: ( ( ( RULE_STRING ) ) )
-            // InternalIdioms.g:4060:2: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4229:1: ( ( ( RULE_STRING ) ) )
+            // InternalIdioms.g:4230:2: ( ( RULE_STRING ) )
             {
-            // InternalIdioms.g:4060:2: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4061:3: ( RULE_STRING )
+            // InternalIdioms.g:4230:2: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4231:3: ( RULE_STRING )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getIdiomsModelIdiomsModelCrossReference_1_0());
             }
-            // InternalIdioms.g:4062:3: ( RULE_STRING )
-            // InternalIdioms.g:4063:4: RULE_STRING
+            // InternalIdioms.g:4232:3: ( RULE_STRING )
+            // InternalIdioms.g:4233:4: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getIdiomsModelIdiomsModelSTRINGTerminalRuleCall_1_0_1());
@@ -13145,17 +13679,17 @@
 
 
     // $ANTLR start "rule__IdiomsImport__AsAssignment_2_1"
-    // InternalIdioms.g:4074:1: rule__IdiomsImport__AsAssignment_2_1 : ( RULE_ID ) ;
+    // InternalIdioms.g:4244:1: rule__IdiomsImport__AsAssignment_2_1 : ( RULE_ID ) ;
     public final void rule__IdiomsImport__AsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4078:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:4079:2: ( RULE_ID )
+            // InternalIdioms.g:4248:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4249:2: ( RULE_ID )
             {
-            // InternalIdioms.g:4079:2: ( RULE_ID )
-            // InternalIdioms.g:4080:3: RULE_ID
+            // InternalIdioms.g:4249:2: ( RULE_ID )
+            // InternalIdioms.g:4250:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomsImportAccess().getAsIDTerminalRuleCall_2_1_0());
@@ -13186,17 +13720,17 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__NameAssignment_1"
-    // InternalIdioms.g:4089:1: rule__LocatorDeclaration__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalIdioms.g:4259:1: rule__LocatorDeclaration__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__LocatorDeclaration__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4093:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:4094:2: ( RULE_ID )
+            // InternalIdioms.g:4263:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4264:2: ( RULE_ID )
             {
-            // InternalIdioms.g:4094:2: ( RULE_ID )
-            // InternalIdioms.g:4095:3: RULE_ID
+            // InternalIdioms.g:4264:2: ( RULE_ID )
+            // InternalIdioms.g:4265:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getNameIDTerminalRuleCall_1_0());
@@ -13227,17 +13761,17 @@
 
 
     // $ANTLR start "rule__LocatorDeclaration__OwnedLocatorAssignment_2"
-    // InternalIdioms.g:4104:1: rule__LocatorDeclaration__OwnedLocatorAssignment_2 : ( ruleLocator ) ;
+    // InternalIdioms.g:4274:1: rule__LocatorDeclaration__OwnedLocatorAssignment_2 : ( ruleLocator ) ;
     public final void rule__LocatorDeclaration__OwnedLocatorAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4108:1: ( ( ruleLocator ) )
-            // InternalIdioms.g:4109:2: ( ruleLocator )
+            // InternalIdioms.g:4278:1: ( ( ruleLocator ) )
+            // InternalIdioms.g:4279:2: ( ruleLocator )
             {
-            // InternalIdioms.g:4109:2: ( ruleLocator )
-            // InternalIdioms.g:4110:3: ruleLocator
+            // InternalIdioms.g:4279:2: ( ruleLocator )
+            // InternalIdioms.g:4280:3: ruleLocator
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getLocatorDeclarationAccess().getOwnedLocatorLocatorParserRuleCall_2_0());
@@ -13272,23 +13806,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__EPackageAssignment_1_0_0"
-    // InternalIdioms.g:4119:1: rule__AssignmentLocator__EPackageAssignment_1_0_0 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4289:1: rule__AssignmentLocator__EPackageAssignment_1_0_0 : ( ( RULE_ID ) ) ;
     public final void rule__AssignmentLocator__EPackageAssignment_1_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4123:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4124:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4293:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4294:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4124:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4125:3: ( RULE_ID )
+            // InternalIdioms.g:4294:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4295:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEPackageEPackageCrossReference_1_0_0_0());
             }
-            // InternalIdioms.g:4126:3: ( RULE_ID )
-            // InternalIdioms.g:4127:4: RULE_ID
+            // InternalIdioms.g:4296:3: ( RULE_ID )
+            // InternalIdioms.g:4297:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEPackageEPackageIDTerminalRuleCall_1_0_0_0_1());
@@ -13325,23 +13859,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__EClassAssignment_1_1"
-    // InternalIdioms.g:4138:1: rule__AssignmentLocator__EClassAssignment_1_1 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4308:1: rule__AssignmentLocator__EClassAssignment_1_1 : ( ( RULE_ID ) ) ;
     public final void rule__AssignmentLocator__EClassAssignment_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4142:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4143:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4312:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4313:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4143:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4144:3: ( RULE_ID )
+            // InternalIdioms.g:4313:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4314:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEClassEClassCrossReference_1_1_0());
             }
-            // InternalIdioms.g:4145:3: ( RULE_ID )
-            // InternalIdioms.g:4146:4: RULE_ID
+            // InternalIdioms.g:4315:3: ( RULE_ID )
+            // InternalIdioms.g:4316:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEClassEClassIDTerminalRuleCall_1_1_0_1());
@@ -13378,23 +13912,23 @@
 
 
     // $ANTLR start "rule__AssignmentLocator__EStructuralFeatureAssignment_2"
-    // InternalIdioms.g:4157:1: rule__AssignmentLocator__EStructuralFeatureAssignment_2 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4327:1: rule__AssignmentLocator__EStructuralFeatureAssignment_2 : ( ( RULE_ID ) ) ;
     public final void rule__AssignmentLocator__EStructuralFeatureAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4161:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4162:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4331:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4332:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4162:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4163:3: ( RULE_ID )
+            // InternalIdioms.g:4332:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4333:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEStructuralFeatureEStructuralFeatureCrossReference_2_0());
             }
-            // InternalIdioms.g:4164:3: ( RULE_ID )
-            // InternalIdioms.g:4165:4: RULE_ID
+            // InternalIdioms.g:4334:3: ( RULE_ID )
+            // InternalIdioms.g:4335:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getAssignmentLocatorAccess().getEStructuralFeatureEStructuralFeatureIDTerminalRuleCall_2_0_1());
@@ -13431,17 +13965,17 @@
 
 
     // $ANTLR start "rule__KeywordLocator__StringAssignment"
-    // InternalIdioms.g:4176:1: rule__KeywordLocator__StringAssignment : ( RULE_STRING ) ;
+    // InternalIdioms.g:4346:1: rule__KeywordLocator__StringAssignment : ( RULE_STRING ) ;
     public final void rule__KeywordLocator__StringAssignment() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4180:1: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4181:2: ( RULE_STRING )
+            // InternalIdioms.g:4350:1: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4351:2: ( RULE_STRING )
             {
-            // InternalIdioms.g:4181:2: ( RULE_STRING )
-            // InternalIdioms.g:4182:3: RULE_STRING
+            // InternalIdioms.g:4351:2: ( RULE_STRING )
+            // InternalIdioms.g:4352:3: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getKeywordLocatorAccess().getStringSTRINGTerminalRuleCall_0());
@@ -13472,23 +14006,23 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__EPackageAssignment_1_0"
-    // InternalIdioms.g:4191:1: rule__ReturnsLocator__EPackageAssignment_1_0 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4361:1: rule__ReturnsLocator__EPackageAssignment_1_0 : ( ( RULE_ID ) ) ;
     public final void rule__ReturnsLocator__EPackageAssignment_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4195:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4196:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4365:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4366:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4196:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4197:3: ( RULE_ID )
+            // InternalIdioms.g:4366:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4367:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEPackageEPackageCrossReference_1_0_0());
             }
-            // InternalIdioms.g:4198:3: ( RULE_ID )
-            // InternalIdioms.g:4199:4: RULE_ID
+            // InternalIdioms.g:4368:3: ( RULE_ID )
+            // InternalIdioms.g:4369:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEPackageEPackageIDTerminalRuleCall_1_0_0_1());
@@ -13525,23 +14059,23 @@
 
 
     // $ANTLR start "rule__ReturnsLocator__EClassAssignment_2"
-    // InternalIdioms.g:4210:1: rule__ReturnsLocator__EClassAssignment_2 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4380:1: rule__ReturnsLocator__EClassAssignment_2 : ( ( RULE_ID ) ) ;
     public final void rule__ReturnsLocator__EClassAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4214:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4215:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4384:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4385:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4215:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4216:3: ( RULE_ID )
+            // InternalIdioms.g:4385:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4386:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEClassEClassCrossReference_2_0());
             }
-            // InternalIdioms.g:4217:3: ( RULE_ID )
-            // InternalIdioms.g:4218:4: RULE_ID
+            // InternalIdioms.g:4387:3: ( RULE_ID )
+            // InternalIdioms.g:4388:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReturnsLocatorAccess().getEClassEClassIDTerminalRuleCall_2_0_1());
@@ -13578,23 +14112,23 @@
 
 
     // $ANTLR start "rule__ReferredLocator__IdiomsModelAssignment_0_0"
-    // InternalIdioms.g:4229:1: rule__ReferredLocator__IdiomsModelAssignment_0_0 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4399:1: rule__ReferredLocator__IdiomsModelAssignment_0_0 : ( ( RULE_ID ) ) ;
     public final void rule__ReferredLocator__IdiomsModelAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4233:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4234:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4403:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4404:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4234:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4235:3: ( RULE_ID )
+            // InternalIdioms.g:4404:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4405:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getIdiomsModelIdiomsModelCrossReference_0_0_0());
             }
-            // InternalIdioms.g:4236:3: ( RULE_ID )
-            // InternalIdioms.g:4237:4: RULE_ID
+            // InternalIdioms.g:4406:3: ( RULE_ID )
+            // InternalIdioms.g:4407:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getIdiomsModelIdiomsModelIDTerminalRuleCall_0_0_0_1());
@@ -13631,23 +14165,23 @@
 
 
     // $ANTLR start "rule__ReferredLocator__LocatorDeclarationAssignment_1"
-    // InternalIdioms.g:4248:1: rule__ReferredLocator__LocatorDeclarationAssignment_1 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4418:1: rule__ReferredLocator__LocatorDeclarationAssignment_1 : ( ( RULE_ID ) ) ;
     public final void rule__ReferredLocator__LocatorDeclarationAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4252:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4253:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4422:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4423:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4253:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4254:3: ( RULE_ID )
+            // InternalIdioms.g:4423:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4424:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getLocatorDeclarationLocatorDeclarationCrossReference_1_0());
             }
-            // InternalIdioms.g:4255:3: ( RULE_ID )
-            // InternalIdioms.g:4256:4: RULE_ID
+            // InternalIdioms.g:4425:3: ( RULE_ID )
+            // InternalIdioms.g:4426:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredLocatorAccess().getLocatorDeclarationLocatorDeclarationIDTerminalRuleCall_1_0_1());
@@ -13684,17 +14218,17 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__NameAssignment_1"
-    // InternalIdioms.g:4267:1: rule__SegmentDeclaration__NameAssignment_1 : ( RULE_ID ) ;
+    // InternalIdioms.g:4437:1: rule__SegmentDeclaration__NameAssignment_1 : ( RULE_ID ) ;
     public final void rule__SegmentDeclaration__NameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4271:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:4272:2: ( RULE_ID )
+            // InternalIdioms.g:4441:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4442:2: ( RULE_ID )
             {
-            // InternalIdioms.g:4272:2: ( RULE_ID )
-            // InternalIdioms.g:4273:3: RULE_ID
+            // InternalIdioms.g:4442:2: ( RULE_ID )
+            // InternalIdioms.g:4443:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getNameIDTerminalRuleCall_1_0());
@@ -13725,17 +14259,17 @@
 
 
     // $ANTLR start "rule__SegmentDeclaration__OwnedSegmentAssignment_2"
-    // InternalIdioms.g:4282:1: rule__SegmentDeclaration__OwnedSegmentAssignment_2 : ( ruleSegment ) ;
+    // InternalIdioms.g:4452:1: rule__SegmentDeclaration__OwnedSegmentAssignment_2 : ( ruleSegment ) ;
     public final void rule__SegmentDeclaration__OwnedSegmentAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4286:1: ( ( ruleSegment ) )
-            // InternalIdioms.g:4287:2: ( ruleSegment )
+            // InternalIdioms.g:4456:1: ( ( ruleSegment ) )
+            // InternalIdioms.g:4457:2: ( ruleSegment )
             {
-            // InternalIdioms.g:4287:2: ( ruleSegment )
-            // InternalIdioms.g:4288:3: ruleSegment
+            // InternalIdioms.g:4457:2: ( ruleSegment )
+            // InternalIdioms.g:4458:3: ruleSegment
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSegmentDeclarationAccess().getOwnedSegmentSegmentParserRuleCall_2_0());
@@ -13770,17 +14304,17 @@
 
 
     // $ANTLR start "rule__CustomSegment__SupportClassNameAssignment_1"
-    // InternalIdioms.g:4297:1: rule__CustomSegment__SupportClassNameAssignment_1 : ( RULE_STRING ) ;
+    // InternalIdioms.g:4467:1: rule__CustomSegment__SupportClassNameAssignment_1 : ( RULE_STRING ) ;
     public final void rule__CustomSegment__SupportClassNameAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4301:1: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4302:2: ( RULE_STRING )
+            // InternalIdioms.g:4471:1: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4472:2: ( RULE_STRING )
             {
-            // InternalIdioms.g:4302:2: ( RULE_STRING )
-            // InternalIdioms.g:4303:3: RULE_STRING
+            // InternalIdioms.g:4472:2: ( RULE_STRING )
+            // InternalIdioms.g:4473:3: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getCustomSegmentAccess().getSupportClassNameSTRINGTerminalRuleCall_1_0());
@@ -13811,17 +14345,17 @@
 
 
     // $ANTLR start "rule__StringSegment__StringAssignment_1"
-    // InternalIdioms.g:4312:1: rule__StringSegment__StringAssignment_1 : ( RULE_STRING ) ;
+    // InternalIdioms.g:4482:1: rule__StringSegment__StringAssignment_1 : ( RULE_STRING ) ;
     public final void rule__StringSegment__StringAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4316:1: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4317:2: ( RULE_STRING )
+            // InternalIdioms.g:4486:1: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4487:2: ( RULE_STRING )
             {
-            // InternalIdioms.g:4317:2: ( RULE_STRING )
-            // InternalIdioms.g:4318:3: RULE_STRING
+            // InternalIdioms.g:4487:2: ( RULE_STRING )
+            // InternalIdioms.g:4488:3: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getStringSTRINGTerminalRuleCall_1_0());
@@ -13852,28 +14386,28 @@
 
 
     // $ANTLR start "rule__StringSegment__PrintableAssignment_2"
-    // InternalIdioms.g:4327:1: rule__StringSegment__PrintableAssignment_2 : ( ( 'printable' ) ) ;
+    // InternalIdioms.g:4497:1: rule__StringSegment__PrintableAssignment_2 : ( ( 'printable' ) ) ;
     public final void rule__StringSegment__PrintableAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4331:1: ( ( ( 'printable' ) ) )
-            // InternalIdioms.g:4332:2: ( ( 'printable' ) )
+            // InternalIdioms.g:4501:1: ( ( ( 'printable' ) ) )
+            // InternalIdioms.g:4502:2: ( ( 'printable' ) )
             {
-            // InternalIdioms.g:4332:2: ( ( 'printable' ) )
-            // InternalIdioms.g:4333:3: ( 'printable' )
+            // InternalIdioms.g:4502:2: ( ( 'printable' ) )
+            // InternalIdioms.g:4503:3: ( 'printable' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getPrintablePrintableKeyword_2_0());
             }
-            // InternalIdioms.g:4334:3: ( 'printable' )
-            // InternalIdioms.g:4335:4: 'printable'
+            // InternalIdioms.g:4504:3: ( 'printable' )
+            // InternalIdioms.g:4505:4: 'printable'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getStringSegmentAccess().getPrintablePrintableKeyword_2_0());
             }
-            match(input,46,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,48,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getStringSegmentAccess().getPrintablePrintableKeyword_2_0());
             }
@@ -13905,23 +14439,23 @@
 
 
     // $ANTLR start "rule__ReferredSegment__IdiomsModelAssignment_0_0"
-    // InternalIdioms.g:4346:1: rule__ReferredSegment__IdiomsModelAssignment_0_0 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4516:1: rule__ReferredSegment__IdiomsModelAssignment_0_0 : ( ( RULE_ID ) ) ;
     public final void rule__ReferredSegment__IdiomsModelAssignment_0_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4350:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4351:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4520:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4521:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4351:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4352:3: ( RULE_ID )
+            // InternalIdioms.g:4521:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4522:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getIdiomsModelIdiomsModelCrossReference_0_0_0());
             }
-            // InternalIdioms.g:4353:3: ( RULE_ID )
-            // InternalIdioms.g:4354:4: RULE_ID
+            // InternalIdioms.g:4523:3: ( RULE_ID )
+            // InternalIdioms.g:4524:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getIdiomsModelIdiomsModelIDTerminalRuleCall_0_0_0_1());
@@ -13958,23 +14492,23 @@
 
 
     // $ANTLR start "rule__ReferredSegment__SegmentDeclarationAssignment_1"
-    // InternalIdioms.g:4365:1: rule__ReferredSegment__SegmentDeclarationAssignment_1 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4535:1: rule__ReferredSegment__SegmentDeclarationAssignment_1 : ( ( RULE_ID ) ) ;
     public final void rule__ReferredSegment__SegmentDeclarationAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4369:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4370:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4539:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4540:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4370:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4371:3: ( RULE_ID )
+            // InternalIdioms.g:4540:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4541:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getSegmentDeclarationSegmentDeclarationCrossReference_1_0());
             }
-            // InternalIdioms.g:4372:3: ( RULE_ID )
-            // InternalIdioms.g:4373:4: RULE_ID
+            // InternalIdioms.g:4542:3: ( RULE_ID )
+            // InternalIdioms.g:4543:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getReferredSegmentAccess().getSegmentDeclarationSegmentDeclarationIDTerminalRuleCall_1_0_1());
@@ -14011,28 +14545,28 @@
 
 
     // $ANTLR start "rule__Idiom__MixinAssignment_0"
-    // InternalIdioms.g:4384:1: rule__Idiom__MixinAssignment_0 : ( ( 'mixin' ) ) ;
+    // InternalIdioms.g:4554:1: rule__Idiom__MixinAssignment_0 : ( ( 'mixin' ) ) ;
     public final void rule__Idiom__MixinAssignment_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4388:1: ( ( ( 'mixin' ) ) )
-            // InternalIdioms.g:4389:2: ( ( 'mixin' ) )
+            // InternalIdioms.g:4558:1: ( ( ( 'mixin' ) ) )
+            // InternalIdioms.g:4559:2: ( ( 'mixin' ) )
             {
-            // InternalIdioms.g:4389:2: ( ( 'mixin' ) )
-            // InternalIdioms.g:4390:3: ( 'mixin' )
+            // InternalIdioms.g:4559:2: ( ( 'mixin' ) )
+            // InternalIdioms.g:4560:3: ( 'mixin' )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getMixinMixinKeyword_0_0());
             }
-            // InternalIdioms.g:4391:3: ( 'mixin' )
-            // InternalIdioms.g:4392:4: 'mixin'
+            // InternalIdioms.g:4561:3: ( 'mixin' )
+            // InternalIdioms.g:4562:4: 'mixin'
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getMixinMixinKeyword_0_0());
             }
-            match(input,47,FollowSets000.FOLLOW_2); if (state.failed) return ;
+            match(input,49,FollowSets000.FOLLOW_2); if (state.failed) return ;
             if ( state.backtracking==0 ) {
                after(grammarAccess.getIdiomAccess().getMixinMixinKeyword_0_0());
             }
@@ -14064,17 +14598,17 @@
 
 
     // $ANTLR start "rule__Idiom__NameAssignment_2"
-    // InternalIdioms.g:4403:1: rule__Idiom__NameAssignment_2 : ( RULE_ID ) ;
+    // InternalIdioms.g:4573:1: rule__Idiom__NameAssignment_2 : ( RULE_ID ) ;
     public final void rule__Idiom__NameAssignment_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4407:1: ( ( RULE_ID ) )
-            // InternalIdioms.g:4408:2: ( RULE_ID )
+            // InternalIdioms.g:4577:1: ( ( RULE_ID ) )
+            // InternalIdioms.g:4578:2: ( RULE_ID )
             {
-            // InternalIdioms.g:4408:2: ( RULE_ID )
-            // InternalIdioms.g:4409:3: RULE_ID
+            // InternalIdioms.g:4578:2: ( RULE_ID )
+            // InternalIdioms.g:4579:3: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getNameIDTerminalRuleCall_2_0());
@@ -14105,23 +14639,23 @@
 
 
     // $ANTLR start "rule__Idiom__ForEPackageAssignment_3_1_0"
-    // InternalIdioms.g:4418:1: rule__Idiom__ForEPackageAssignment_3_1_0 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4588:1: rule__Idiom__ForEPackageAssignment_3_1_0 : ( ( RULE_ID ) ) ;
     public final void rule__Idiom__ForEPackageAssignment_3_1_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4422:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4423:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4592:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4593:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4423:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4424:3: ( RULE_ID )
+            // InternalIdioms.g:4593:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4594:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEPackageEPackageCrossReference_3_1_0_0());
             }
-            // InternalIdioms.g:4425:3: ( RULE_ID )
-            // InternalIdioms.g:4426:4: RULE_ID
+            // InternalIdioms.g:4595:3: ( RULE_ID )
+            // InternalIdioms.g:4596:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEPackageEPackageIDTerminalRuleCall_3_1_0_0_1());
@@ -14158,23 +14692,23 @@
 
 
     // $ANTLR start "rule__Idiom__ForEClassAssignment_3_2"
-    // InternalIdioms.g:4437:1: rule__Idiom__ForEClassAssignment_3_2 : ( ( RULE_ID ) ) ;
+    // InternalIdioms.g:4607:1: rule__Idiom__ForEClassAssignment_3_2 : ( ( RULE_ID ) ) ;
     public final void rule__Idiom__ForEClassAssignment_3_2() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4441:1: ( ( ( RULE_ID ) ) )
-            // InternalIdioms.g:4442:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4611:1: ( ( ( RULE_ID ) ) )
+            // InternalIdioms.g:4612:2: ( ( RULE_ID ) )
             {
-            // InternalIdioms.g:4442:2: ( ( RULE_ID ) )
-            // InternalIdioms.g:4443:3: ( RULE_ID )
+            // InternalIdioms.g:4612:2: ( ( RULE_ID ) )
+            // InternalIdioms.g:4613:3: ( RULE_ID )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEClassEClassCrossReference_3_2_0());
             }
-            // InternalIdioms.g:4444:3: ( RULE_ID )
-            // InternalIdioms.g:4445:4: RULE_ID
+            // InternalIdioms.g:4614:3: ( RULE_ID )
+            // InternalIdioms.g:4615:4: RULE_ID
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getForEClassEClassIDTerminalRuleCall_3_2_0_1());
@@ -14211,17 +14745,17 @@
 
 
     // $ANTLR start "rule__Idiom__InRuleRegexAssignment_4_1"
-    // InternalIdioms.g:4456:1: rule__Idiom__InRuleRegexAssignment_4_1 : ( RULE_STRING ) ;
+    // InternalIdioms.g:4626:1: rule__Idiom__InRuleRegexAssignment_4_1 : ( RULE_STRING ) ;
     public final void rule__Idiom__InRuleRegexAssignment_4_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4460:1: ( ( RULE_STRING ) )
-            // InternalIdioms.g:4461:2: ( RULE_STRING )
+            // InternalIdioms.g:4630:1: ( ( RULE_STRING ) )
+            // InternalIdioms.g:4631:2: ( RULE_STRING )
             {
-            // InternalIdioms.g:4461:2: ( RULE_STRING )
-            // InternalIdioms.g:4462:3: RULE_STRING
+            // InternalIdioms.g:4631:2: ( RULE_STRING )
+            // InternalIdioms.g:4632:3: RULE_STRING
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getInRuleRegexSTRINGTerminalRuleCall_4_1_0());
@@ -14252,17 +14786,17 @@
 
 
     // $ANTLR start "rule__Idiom__OwnedSubIdiomsAssignment_5_0"
-    // InternalIdioms.g:4471:1: rule__Idiom__OwnedSubIdiomsAssignment_5_0 : ( ruleSubIdiom ) ;
+    // InternalIdioms.g:4641:1: rule__Idiom__OwnedSubIdiomsAssignment_5_0 : ( ruleSubIdiom ) ;
     public final void rule__Idiom__OwnedSubIdiomsAssignment_5_0() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4475:1: ( ( ruleSubIdiom ) )
-            // InternalIdioms.g:4476:2: ( ruleSubIdiom )
+            // InternalIdioms.g:4645:1: ( ( ruleSubIdiom ) )
+            // InternalIdioms.g:4646:2: ( ruleSubIdiom )
             {
-            // InternalIdioms.g:4476:2: ( ruleSubIdiom )
-            // InternalIdioms.g:4477:3: ruleSubIdiom
+            // InternalIdioms.g:4646:2: ( ruleSubIdiom )
+            // InternalIdioms.g:4647:3: ruleSubIdiom
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getOwnedSubIdiomsSubIdiomParserRuleCall_5_0_0());
@@ -14297,17 +14831,17 @@
 
 
     // $ANTLR start "rule__Idiom__OwnedSubIdiomsAssignment_5_1_1"
-    // InternalIdioms.g:4486:1: rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 : ( ruleSubIdiom ) ;
+    // InternalIdioms.g:4656:1: rule__Idiom__OwnedSubIdiomsAssignment_5_1_1 : ( ruleSubIdiom ) ;
     public final void rule__Idiom__OwnedSubIdiomsAssignment_5_1_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4490:1: ( ( ruleSubIdiom ) )
-            // InternalIdioms.g:4491:2: ( ruleSubIdiom )
+            // InternalIdioms.g:4660:1: ( ( ruleSubIdiom ) )
+            // InternalIdioms.g:4661:2: ( ruleSubIdiom )
             {
-            // InternalIdioms.g:4491:2: ( ruleSubIdiom )
-            // InternalIdioms.g:4492:3: ruleSubIdiom
+            // InternalIdioms.g:4661:2: ( ruleSubIdiom )
+            // InternalIdioms.g:4662:3: ruleSubIdiom
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getIdiomAccess().getOwnedSubIdiomsSubIdiomParserRuleCall_5_1_1_0());
@@ -14342,23 +14876,23 @@
 
 
     // $ANTLR start "rule__SubIdiom__OwnedLocatorAssignment_1"
-    // InternalIdioms.g:4501:1: rule__SubIdiom__OwnedLocatorAssignment_1 : ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) ) ;
+    // InternalIdioms.g:4671:1: rule__SubIdiom__OwnedLocatorAssignment_1 : ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) ) ;
     public final void rule__SubIdiom__OwnedLocatorAssignment_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4505:1: ( ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) ) )
-            // InternalIdioms.g:4506:2: ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) )
+            // InternalIdioms.g:4675:1: ( ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) ) )
+            // InternalIdioms.g:4676:2: ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) )
             {
-            // InternalIdioms.g:4506:2: ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) )
-            // InternalIdioms.g:4507:3: ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 )
+            // InternalIdioms.g:4676:2: ( ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 ) )
+            // InternalIdioms.g:4677:3: ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getOwnedLocatorAlternatives_1_0());
             }
-            // InternalIdioms.g:4508:3: ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 )
-            // InternalIdioms.g:4508:4: rule__SubIdiom__OwnedLocatorAlternatives_1_0
+            // InternalIdioms.g:4678:3: ( rule__SubIdiom__OwnedLocatorAlternatives_1_0 )
+            // InternalIdioms.g:4678:4: rule__SubIdiom__OwnedLocatorAlternatives_1_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__OwnedLocatorAlternatives_1_0();
@@ -14393,23 +14927,23 @@
 
 
     // $ANTLR start "rule__SubIdiom__OwnedSegmentsAssignment_2_1"
-    // InternalIdioms.g:4516:1: rule__SubIdiom__OwnedSegmentsAssignment_2_1 : ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) ) ;
+    // InternalIdioms.g:4686:1: rule__SubIdiom__OwnedSegmentsAssignment_2_1 : ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) ) ;
     public final void rule__SubIdiom__OwnedSegmentsAssignment_2_1() throws RecognitionException {
 
         		int stackSize = keepStackSize();
 
         try {
-            // InternalIdioms.g:4520:1: ( ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) ) )
-            // InternalIdioms.g:4521:2: ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) )
+            // InternalIdioms.g:4690:1: ( ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) ) )
+            // InternalIdioms.g:4691:2: ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) )
             {
-            // InternalIdioms.g:4521:2: ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) )
-            // InternalIdioms.g:4522:3: ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 )
+            // InternalIdioms.g:4691:2: ( ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 ) )
+            // InternalIdioms.g:4692:3: ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 )
             {
             if ( state.backtracking==0 ) {
                before(grammarAccess.getSubIdiomAccess().getOwnedSegmentsAlternatives_2_1_0());
             }
-            // InternalIdioms.g:4523:3: ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 )
-            // InternalIdioms.g:4523:4: rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0
+            // InternalIdioms.g:4693:3: ( rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0 )
+            // InternalIdioms.g:4693:4: rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0
             {
             pushFollow(FollowSets000.FOLLOW_2);
             rule__SubIdiom__OwnedSegmentsAlternatives_2_1_0();
@@ -14452,10 +14986,10 @@
         public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
         public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000808000819000L});
+        public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0002020000819000L});
         public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000000000008002L});
         public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000000000001002L});
-        public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000808000810002L});
+        public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0002020000810002L});
         public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000000020L});
         public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000006000L});
         public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x00000000006E0020L});
@@ -14464,7 +14998,7 @@
         public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x0000000000040000L});
         public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000000100000L});
         public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000000000200000L});
-        public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0000007FFF000000L});
+        public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x000001FFFF000000L});
         public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000000002000000L});
         public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000000004000000L});
         public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000000008000000L});
@@ -14472,20 +15006,22 @@
         public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000000020000000L});
         public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x0000000040000000L});
         public static final BitSet FOLLOW_23 = new BitSet(new long[]{0x0000000080000000L});
-        public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000400000000000L});
+        public static final BitSet FOLLOW_24 = new BitSet(new long[]{0x0000000100000000L});
         public static final BitSet FOLLOW_25 = new BitSet(new long[]{0x0000000200000000L});
-        public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0000000400000000L});
+        public static final BitSet FOLLOW_26 = new BitSet(new long[]{0x0001000000000000L});
         public static final BitSet FOLLOW_27 = new BitSet(new long[]{0x0000000800000000L});
         public static final BitSet FOLLOW_28 = new BitSet(new long[]{0x0000001000000000L});
         public static final BitSet FOLLOW_29 = new BitSet(new long[]{0x0000002000000000L});
-        public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000808000810000L});
-        public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000170000000000L});
-        public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0000180000000000L});
-        public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x0000100000000002L});
-        public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x00000000006E0030L});
-        public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000200000002000L});
-        public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x0000007FFF000010L});
-        public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000007FFF000012L});
+        public static final BitSet FOLLOW_30 = new BitSet(new long[]{0x0000004000000000L});
+        public static final BitSet FOLLOW_31 = new BitSet(new long[]{0x0000008000000000L});
+        public static final BitSet FOLLOW_32 = new BitSet(new long[]{0x0002020000810000L});
+        public static final BitSet FOLLOW_33 = new BitSet(new long[]{0x00005C0000000000L});
+        public static final BitSet FOLLOW_34 = new BitSet(new long[]{0x0000600000000000L});
+        public static final BitSet FOLLOW_35 = new BitSet(new long[]{0x0000400000000002L});
+        public static final BitSet FOLLOW_36 = new BitSet(new long[]{0x00000000006E0030L});
+        public static final BitSet FOLLOW_37 = new BitSet(new long[]{0x0000800000002000L});
+        public static final BitSet FOLLOW_38 = new BitSet(new long[]{0x000001FFFF000010L});
+        public static final BitSet FOLLOW_39 = new BitSet(new long[]{0x000001FFFF000012L});
     }
 
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ui/contentassist/AbstractIdiomsProposalProvider.java b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ui/contentassist/AbstractIdiomsProposalProvider.java
index 05fdc49..da07b99 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ui/contentassist/AbstractIdiomsProposalProvider.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms.ui/src-gen/org/eclipse/ocl/examples/xtext/idioms/ui/contentassist/AbstractIdiomsProposalProvider.java
@@ -193,6 +193,12 @@
 	public void complete_PopSegment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
+	public void complete_PostCommentSegment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
+	public void complete_PreCommentSegment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
+		// subclasses may override
+	}
 	public void complete_PushSegment(EObject model, RuleCall ruleCall, ContentAssistContext context, ICompletionProposalAcceptor acceptor) {
 		// subclasses may override
 	}
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsFactory.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsFactory.java
index b23aac0..83b1bc0 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsFactory.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsFactory.java
@@ -185,6 +185,26 @@
 	PopSegment createPopSegment();
 
 	/**
+	 * Returns a new object of class '<em>Post Comment Segment</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Post Comment Segment</em>'.
+	 * @generated
+	 */
+	@NonNull
+	PostCommentSegment createPostCommentSegment();
+
+	/**
+	 * Returns a new object of class '<em>Pre Comment Segment</em>'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return a new object of class '<em>Pre Comment Segment</em>'.
+	 * @generated
+	 */
+	@NonNull
+	PreCommentSegment createPreCommentSegment();
+
+	/**
 	 * Returns a new object of class '<em>Referred Locator</em>'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsPackage.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsPackage.java
index a70155b..93658e2 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsPackage.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/IdiomsPackage.java
@@ -97,7 +97,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getSegment()
 	 * @generated
 	 */
-	int SEGMENT = 21;
+	int SEGMENT = 23;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.LocatorImpl <em>Locator</em>}' class.
@@ -383,7 +383,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getReferredLocator()
 	 * @generated
 	 */
-	int REFERRED_LOCATOR = 17;
+	int REFERRED_LOCATOR = 19;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.ReferredSegmentImpl <em>Referred Segment</em>}' class.
@@ -393,7 +393,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getReferredSegment()
 	 * @generated
 	 */
-	int REFERRED_SEGMENT = 18;
+	int REFERRED_SEGMENT = 20;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.ReturnsLocatorImpl <em>Returns Locator</em>}' class.
@@ -403,7 +403,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getReturnsLocator()
 	 * @generated
 	 */
-	int RETURNS_LOCATOR = 19;
+	int RETURNS_LOCATOR = 21;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.PushSegmentImpl <em>Push Segment</em>}' class.
@@ -413,7 +413,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getPushSegment()
 	 * @generated
 	 */
-	int PUSH_SEGMENT = 20;
+	int PUSH_SEGMENT = 22;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.SegmentDeclarationImpl <em>Segment Declaration</em>}' class.
@@ -423,7 +423,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getSegmentDeclaration()
 	 * @generated
 	 */
-	int SEGMENT_DECLARATION = 22;
+	int SEGMENT_DECLARATION = 24;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.SoftNewLineSegmentImpl <em>Soft New Line Segment</em>}' class.
@@ -433,7 +433,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getSoftNewLineSegment()
 	 * @generated
 	 */
-	int SOFT_NEW_LINE_SEGMENT = 23;
+	int SOFT_NEW_LINE_SEGMENT = 25;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.SoftSpaceSegmentImpl <em>Soft Space Segment</em>}' class.
@@ -443,7 +443,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getSoftSpaceSegment()
 	 * @generated
 	 */
-	int SOFT_SPACE_SEGMENT = 24;
+	int SOFT_SPACE_SEGMENT = 26;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.StringSegmentImpl <em>String Segment</em>}' class.
@@ -453,7 +453,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getStringSegment()
 	 * @generated
 	 */
-	int STRING_SEGMENT = 25;
+	int STRING_SEGMENT = 27;
 
 	/**
 	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.HalfNewLineSegmentImpl <em>Half New Line Segment</em>}' class.
@@ -702,6 +702,44 @@
 	int POP_SEGMENT_FEATURE_COUNT = SEGMENT_FEATURE_COUNT + 0;
 
 	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.PostCommentSegmentImpl <em>Post Comment Segment</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.PostCommentSegmentImpl
+	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getPostCommentSegment()
+	 * @generated
+	 */
+	int POST_COMMENT_SEGMENT = 17;
+
+	/**
+	 * The number of structural features of the '<em>Post Comment Segment</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int POST_COMMENT_SEGMENT_FEATURE_COUNT = SEGMENT_FEATURE_COUNT + 0;
+
+	/**
+	 * The meta object id for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.PreCommentSegmentImpl <em>Pre Comment Segment</em>}' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.PreCommentSegmentImpl
+	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getPreCommentSegment()
+	 * @generated
+	 */
+	int PRE_COMMENT_SEGMENT = 18;
+
+	/**
+	 * The number of structural features of the '<em>Pre Comment Segment</em>' class.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 * @ordered
+	 */
+	int PRE_COMMENT_SEGMENT_FEATURE_COUNT = SEGMENT_FEATURE_COUNT + 0;
+
+	/**
 	 * The feature id for the '<em><b>Idioms Model</b></em>' reference.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -871,7 +909,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getSubIdiom()
 	 * @generated
 	 */
-	int SUB_IDIOM = 26;
+	int SUB_IDIOM = 28;
 
 	/**
 	 * The feature id for the '<em><b>Owned Locator</b></em>' containment reference.
@@ -917,7 +955,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getValueSegment()
 	 * @generated
 	 */
-	int VALUE_SEGMENT = 27;
+	int VALUE_SEGMENT = 29;
 
 	/**
 	 * The number of structural features of the '<em>Value Segment</em>' class.
@@ -936,7 +974,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getWrapAnchorSegment()
 	 * @generated
 	 */
-	int WRAP_ANCHOR_SEGMENT = 28;
+	int WRAP_ANCHOR_SEGMENT = 30;
 
 	/**
 	 * The number of structural features of the '<em>Wrap Anchor Segment</em>' class.
@@ -955,7 +993,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getWrapBeginSomeSegment()
 	 * @generated
 	 */
-	int WRAP_BEGIN_SOME_SEGMENT = 29;
+	int WRAP_BEGIN_SOME_SEGMENT = 31;
 
 	/**
 	 * The number of structural features of the '<em>Wrap Begin Some Segment</em>' class.
@@ -974,7 +1012,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getWrapBeginAllSegment()
 	 * @generated
 	 */
-	int WRAP_BEGIN_ALL_SEGMENT = 30;
+	int WRAP_BEGIN_ALL_SEGMENT = 32;
 
 	/**
 	 * The number of structural features of the '<em>Wrap Begin All Segment</em>' class.
@@ -993,7 +1031,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getWrapEndSegment()
 	 * @generated
 	 */
-	int WRAP_END_SEGMENT = 31;
+	int WRAP_END_SEGMENT = 33;
 
 	/**
 	 * The number of structural features of the '<em>Wrap End Segment</em>' class.
@@ -1012,7 +1050,7 @@
 	 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getWrapHereSegment()
 	 * @generated
 	 */
-	int WRAP_HERE_SEGMENT = 32;
+	int WRAP_HERE_SEGMENT = 34;
 
 	/**
 	 * The number of structural features of the '<em>Wrap Here Segment</em>' class.
@@ -1447,6 +1485,26 @@
 	EClass getPopSegment();
 
 	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment <em>Post Comment Segment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Post Comment Segment</em>'.
+	 * @see org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment
+	 * @generated
+	 */
+	EClass getPostCommentSegment();
+
+	/**
+	 * Returns the meta object for class '{@link org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment <em>Pre Comment Segment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @return the meta object for class '<em>Pre Comment Segment</em>'.
+	 * @see org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment
+	 * @generated
+	 */
+	EClass getPreCommentSegment();
+
+	/**
 	 * Returns the meta object for class '{@link org.eclipse.ocl.examples.xtext.idioms.ReferredLocator <em>Referred Locator</em>}'.
 	 * <!-- begin-user-doc -->
 	 * <!-- end-user-doc -->
@@ -2142,6 +2200,26 @@
 		EClass POP_SEGMENT = eINSTANCE.getPopSegment();
 
 		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.PostCommentSegmentImpl <em>Post Comment Segment</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.examples.xtext.idioms.impl.PostCommentSegmentImpl
+		 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getPostCommentSegment()
+		 * @generated
+		 */
+		EClass POST_COMMENT_SEGMENT = eINSTANCE.getPostCommentSegment();
+
+		/**
+		 * The meta object literal for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.PreCommentSegmentImpl <em>Pre Comment Segment</em>}' class.
+		 * <!-- begin-user-doc -->
+		 * <!-- end-user-doc -->
+		 * @see org.eclipse.ocl.examples.xtext.idioms.impl.PreCommentSegmentImpl
+		 * @see org.eclipse.ocl.examples.xtext.idioms.impl.IdiomsPackageImpl#getPreCommentSegment()
+		 * @generated
+		 */
+		EClass PRE_COMMENT_SEGMENT = eINSTANCE.getPreCommentSegment();
+
+		/**
 		 * The meta object literal for the '{@link org.eclipse.ocl.examples.xtext.idioms.impl.ReferredLocatorImpl <em>Referred Locator</em>}' class.
 		 * <!-- begin-user-doc -->
 		 * <!-- end-user-doc -->
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PostCommentSegment.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PostCommentSegment.java
new file mode 100644
index 0000000..d474e0c
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PostCommentSegment.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2020 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.ocl.examples.xtext.idioms;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Post Comment Segment</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A PostCommentSegment supports serialization of the standard Xtext postfix comments.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.ocl.examples.xtext.idioms.IdiomsPackage#getPostCommentSegment()
+ * @model
+ * @generated
+ */
+public interface PostCommentSegment
+		extends Segment {
+} // PostCommentSegment
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PreCommentSegment.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PreCommentSegment.java
new file mode 100644
index 0000000..ae0e93e
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/PreCommentSegment.java
@@ -0,0 +1,29 @@
+/**
+ * Copyright (c) 2020 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.ocl.examples.xtext.idioms;
+
+/**
+ * <!-- begin-user-doc -->
+ * A representation of the model object '<em><b>Pre Comment Segment</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * <!-- begin-model-doc -->
+ * A PreCommentSegment supports serialization of the standard Xtext prefix comments.
+ * <!-- end-model-doc -->
+ *
+ *
+ * @see org.eclipse.ocl.examples.xtext.idioms.IdiomsPackage#getPreCommentSegment()
+ * @model
+ * @generated
+ */
+public interface PreCommentSegment
+		extends Segment {
+} // PreCommentSegment
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsFactoryImpl.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsFactoryImpl.java
index bb12c16..f68ad41 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsFactoryImpl.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsFactoryImpl.java
@@ -33,6 +33,8 @@
 import org.eclipse.ocl.examples.xtext.idioms.NewLineSegment;
 import org.eclipse.ocl.examples.xtext.idioms.NoSpaceSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PopSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PushSegment;
 import org.eclipse.ocl.examples.xtext.idioms.ReferredLocator;
 import org.eclipse.ocl.examples.xtext.idioms.ReferredSegment;
@@ -126,6 +128,10 @@
 				return createNoSpaceSegment();
 			case IdiomsPackage.POP_SEGMENT :
 				return createPopSegment();
+			case IdiomsPackage.POST_COMMENT_SEGMENT :
+				return createPostCommentSegment();
+			case IdiomsPackage.PRE_COMMENT_SEGMENT :
+				return createPreCommentSegment();
 			case IdiomsPackage.REFERRED_LOCATOR :
 				return createReferredLocator();
 			case IdiomsPackage.REFERRED_SEGMENT :
@@ -333,6 +339,28 @@
 	 * @generated
 	 */
 	@Override
+	public @NonNull PostCommentSegment createPostCommentSegment() {
+		PostCommentSegmentImpl postCommentSegment = new PostCommentSegmentImpl();
+		return postCommentSegment;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public @NonNull PreCommentSegment createPreCommentSegment() {
+		PreCommentSegmentImpl preCommentSegment = new PreCommentSegmentImpl();
+		return preCommentSegment;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public @NonNull ReferredLocator createReferredLocator() {
 		ReferredLocatorImpl referredLocator = new ReferredLocatorImpl();
 		return referredLocator;
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsPackageImpl.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsPackageImpl.java
index 6e22a17..1a03194 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsPackageImpl.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/IdiomsPackageImpl.java
@@ -36,6 +36,8 @@
 import org.eclipse.ocl.examples.xtext.idioms.NewLineSegment;
 import org.eclipse.ocl.examples.xtext.idioms.NoSpaceSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PopSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment;
+import org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment;
 import org.eclipse.ocl.examples.xtext.idioms.PushSegment;
 import org.eclipse.ocl.examples.xtext.idioms.ReturnsLocator;
 import org.eclipse.ocl.examples.xtext.idioms.Segment;
@@ -186,6 +188,20 @@
 	 * <!-- end-user-doc -->
 	 * @generated
 	 */
+	private EClass postCommentSegmentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	private EClass preCommentSegmentEClass = null;
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
 	private EClass referredLocatorEClass = null;
 
 	/**
@@ -776,6 +792,26 @@
 	 * @generated
 	 */
 	@Override
+	public EClass getPostCommentSegment() {
+		return postCommentSegmentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	public EClass getPreCommentSegment() {
+		return preCommentSegmentEClass;
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
 	public EClass getReferredLocator() {
 		return referredLocatorEClass;
 	}
@@ -1160,6 +1196,10 @@
 
 		popSegmentEClass = createEClass(POP_SEGMENT);
 
+		postCommentSegmentEClass = createEClass(POST_COMMENT_SEGMENT);
+
+		preCommentSegmentEClass = createEClass(PRE_COMMENT_SEGMENT);
+
 		referredLocatorEClass = createEClass(REFERRED_LOCATOR);
 		createEReference(referredLocatorEClass, REFERRED_LOCATOR__IDIOMS_MODEL);
 		createEReference(referredLocatorEClass,
@@ -1254,6 +1294,8 @@
 		newLineSegmentEClass.getESuperTypes().add(this.getSegment());
 		noSpaceSegmentEClass.getESuperTypes().add(this.getSegment());
 		popSegmentEClass.getESuperTypes().add(this.getSegment());
+		postCommentSegmentEClass.getESuperTypes().add(this.getSegment());
+		preCommentSegmentEClass.getESuperTypes().add(this.getSegment());
 		referredLocatorEClass.getESuperTypes().add(this.getLocator());
 		referredSegmentEClass.getESuperTypes().add(this.getSegment());
 		returnsLocatorEClass.getESuperTypes().add(this.getLocator());
@@ -1425,6 +1467,14 @@
 		initEClass(popSegmentEClass, PopSegment.class, "PopSegment", //$NON-NLS-1$
 			!IS_ABSTRACT, !IS_INTERFACE, IS_GENERATED_INSTANCE_CLASS);
 
+		initEClass(postCommentSegmentEClass, PostCommentSegment.class,
+			"PostCommentSegment", !IS_ABSTRACT, !IS_INTERFACE, //$NON-NLS-1$
+			IS_GENERATED_INSTANCE_CLASS);
+
+		initEClass(preCommentSegmentEClass, PreCommentSegment.class,
+			"PreCommentSegment", !IS_ABSTRACT, !IS_INTERFACE, //$NON-NLS-1$
+			IS_GENERATED_INSTANCE_CLASS);
+
 		initEClass(referredLocatorEClass, ReferredLocator.class,
 			"ReferredLocator", !IS_ABSTRACT, !IS_INTERFACE, //$NON-NLS-1$
 			IS_GENERATED_INSTANCE_CLASS);
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PostCommentSegmentImpl.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PostCommentSegmentImpl.java
new file mode 100644
index 0000000..eeac8dc
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PostCommentSegmentImpl.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2020 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.ocl.examples.xtext.idioms.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.ocl.examples.xtext.idioms.IdiomsPackage;
+import org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment;
+import org.eclipse.ocl.examples.xtext.serializer.SerializationBuilder;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Post Comment Segment</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class PostCommentSegmentImpl
+		extends SegmentImpl
+		implements PostCommentSegment {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PostCommentSegmentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return IdiomsPackage.Literals.POST_COMMENT_SEGMENT;
+	}
+
+	@Override
+	public String toString() {
+		return SerializationBuilder.POST_COMMENT;
+	}
+} //PostCommentSegmentImpl
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PreCommentSegmentImpl.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PreCommentSegmentImpl.java
new file mode 100644
index 0000000..7693217
--- /dev/null
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/impl/PreCommentSegmentImpl.java
@@ -0,0 +1,52 @@
+/**
+ * Copyright (c) 2020 Willink Transformations and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v2.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v20.html
+ *
+ * Contributors:
+ *   E.D.Willink - Initial API and implementation
+ */
+package org.eclipse.ocl.examples.xtext.idioms.impl;
+
+import org.eclipse.emf.ecore.EClass;
+import org.eclipse.ocl.examples.xtext.idioms.IdiomsPackage;
+import org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment;
+import org.eclipse.ocl.examples.xtext.serializer.SerializationBuilder;
+
+/**
+ * <!-- begin-user-doc -->
+ * An implementation of the model object '<em><b>Pre Comment Segment</b></em>'.
+ * <!-- end-user-doc -->
+ *
+ * @generated
+ */
+public class PreCommentSegmentImpl
+		extends SegmentImpl
+		implements PreCommentSegment {
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	protected PreCommentSegmentImpl() {
+		super();
+	}
+
+	/**
+	 * <!-- begin-user-doc -->
+	 * <!-- end-user-doc -->
+	 * @generated
+	 */
+	@Override
+	protected EClass eStaticClass() {
+		return IdiomsPackage.Literals.PRE_COMMENT_SEGMENT;
+	}
+
+	@Override
+	public String toString() {
+		return SerializationBuilder.PRE_COMMENT;
+	}
+} //PreCommentSegmentImpl
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsAdapterFactory.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsAdapterFactory.java
index 9295ed6..5257290 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsAdapterFactory.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsAdapterFactory.java
@@ -162,6 +162,16 @@
 		}
 
 		@Override
+		public Adapter casePostCommentSegment(PostCommentSegment object) {
+			return createPostCommentSegmentAdapter();
+		}
+
+		@Override
+		public Adapter casePreCommentSegment(PreCommentSegment object) {
+			return createPreCommentSegmentAdapter();
+		}
+
+		@Override
 		public Adapter caseReferredLocator(ReferredLocator object) {
 			return createReferredLocatorAdapter();
 		}
@@ -499,6 +509,34 @@
 	}
 
 	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment <em>Post Comment Segment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.examples.xtext.idioms.PostCommentSegment
+	 * @generated
+	 */
+	public Adapter createPostCommentSegmentAdapter() {
+		return null;
+	}
+
+	/**
+	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment <em>Pre Comment Segment</em>}'.
+	 * <!-- begin-user-doc -->
+	 * This default implementation returns null so that we can easily ignore cases;
+	 * it's useful to ignore a case when inheritance will catch all the cases anyway.
+	 * <!-- end-user-doc -->
+	 * @return the new adapter.
+	 * @see org.eclipse.ocl.examples.xtext.idioms.PreCommentSegment
+	 * @generated
+	 */
+	public Adapter createPreCommentSegmentAdapter() {
+		return null;
+	}
+
+	/**
 	 * Creates a new adapter for an object of class '{@link org.eclipse.ocl.examples.xtext.idioms.ReferredLocator <em>Referred Locator</em>}'.
 	 * <!-- begin-user-doc -->
 	 * This default implementation returns null so that we can easily ignore cases;
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsSwitch.java b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsSwitch.java
index c4b4268..1c369cf 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsSwitch.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/emf-gen/org/eclipse/ocl/examples/xtext/idioms/util/IdiomsSwitch.java
@@ -246,6 +246,28 @@
 					result = defaultCase(theEObject);
 				return result;
 			}
+			case IdiomsPackage.POST_COMMENT_SEGMENT : {
+				PostCommentSegment postCommentSegment = (PostCommentSegment) theEObject;
+				T result = casePostCommentSegment(postCommentSegment);
+				if (result == null)
+					result = caseSegment(postCommentSegment);
+				if (result == null)
+					result = caseIdiomsElement(postCommentSegment);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
+			case IdiomsPackage.PRE_COMMENT_SEGMENT : {
+				PreCommentSegment preCommentSegment = (PreCommentSegment) theEObject;
+				T result = casePreCommentSegment(preCommentSegment);
+				if (result == null)
+					result = caseSegment(preCommentSegment);
+				if (result == null)
+					result = caseIdiomsElement(preCommentSegment);
+				if (result == null)
+					result = defaultCase(theEObject);
+				return result;
+			}
 			case IdiomsPackage.REFERRED_LOCATOR : {
 				ReferredLocator referredLocator = (ReferredLocator) theEObject;
 				T result = caseReferredLocator(referredLocator);
@@ -677,6 +699,36 @@
 	}
 
 	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Post Comment Segment</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Post Comment Segment</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePostCommentSegment(PostCommentSegment object) {
+		return null;
+	}
+
+	/**
+	 * Returns the result of interpreting the object as an instance of '<em>Pre Comment Segment</em>'.
+	 * <!-- begin-user-doc -->
+	 * This implementation returns null;
+	 * returning a non-null result will terminate the switch.
+	 * <!-- end-user-doc -->
+	 * @param object the target of the switch.
+	 * @return the result of interpreting the object as an instance of '<em>Pre Comment Segment</em>'.
+	 * @see #doSwitch(org.eclipse.emf.ecore.EObject) doSwitch(EObject)
+	 * @generated
+	 */
+	public T casePreCommentSegment(PreCommentSegment object) {
+		return null;
+	}
+
+	/**
 	 * Returns the result of interpreting the object as an instance of '<em>Referred Locator</em>'.
 	 * <!-- begin-user-doc -->
 	 * This implementation returns null;
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.ecore b/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.ecore
index f8f63b4..408caff 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.ecore
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.ecore
@@ -169,6 +169,16 @@
       <details key="documentation" value="A PopSegment terminates the additional indentation level started by a PushSegment."/>
     </eAnnotations>
   </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PostCommentSegment" eSuperTypes="#//Segment">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A PostCommentSegment supports serialization of the standard Xtext postfix comments."/>
+    </eAnnotations>
+  </eClassifiers>
+  <eClassifiers xsi:type="ecore:EClass" name="PreCommentSegment" eSuperTypes="#//Segment">
+    <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
+      <details key="documentation" value="A PreCommentSegment supports serialization of the standard Xtext prefix comments."/>
+    </eAnnotations>
+  </eClassifiers>
   <eClassifiers xsi:type="ecore:EClass" name="ReferredLocator" eSuperTypes="#//Locator">
     <eAnnotations source="http://www.eclipse.org/emf/2002/GenModel">
       <details key="documentation" value="A ReferredLocator references a LocatorDefinition in an optionally distinct IdiomsModel."/>
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.genmodel b/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.genmodel
index ecf5533..152c864 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.genmodel
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/model/Idioms.genmodel
@@ -65,6 +65,8 @@
     <genClasses ecoreClass="Idioms.ecore#//NewLineSegment"/>
     <genClasses ecoreClass="Idioms.ecore#//NoSpaceSegment"/>
     <genClasses ecoreClass="Idioms.ecore#//PopSegment"/>
+    <genClasses ecoreClass="Idioms.ecore#//PostCommentSegment"/>
+    <genClasses ecoreClass="Idioms.ecore#//PreCommentSegment"/>
     <genClasses ecoreClass="Idioms.ecore#//ReferredLocator">
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Idioms.ecore#//ReferredLocator/idiomsModel"/>
       <genFeatures notify="false" createChild="false" propertySortChoices="true" ecoreFeature="ecore:EReference Idioms.ecore#//ReferredLocator/locatorDeclaration"/>
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtextbin b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtextbin
index 2d2173a..b171903 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtextbin
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtextbin
Binary files differ
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.g b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.g
index b0146d2..bad98da 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.g
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.g
@@ -986,11 +986,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5());
+			newCompositeNode(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5());
 		}
-		this_PushSegment_5=rulePushSegment
+		this_PostCommentSegment_5=rulePostCommentSegment
 		{
-			$current = $this_PushSegment_5.current;
+			$current = $this_PostCommentSegment_5.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -998,11 +998,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6());
+			newCompositeNode(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6());
 		}
-		this_SoftNewLineSegment_6=ruleSoftNewLineSegment
+		this_PreCommentSegment_6=rulePreCommentSegment
 		{
-			$current = $this_SoftNewLineSegment_6.current;
+			$current = $this_PreCommentSegment_6.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1010,11 +1010,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7());
+			newCompositeNode(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7());
 		}
-		this_SoftSpaceSegment_7=ruleSoftSpaceSegment
+		this_PushSegment_7=rulePushSegment
 		{
-			$current = $this_SoftSpaceSegment_7.current;
+			$current = $this_PushSegment_7.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1022,11 +1022,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8());
+			newCompositeNode(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8());
 		}
-		this_StringSegment_8=ruleStringSegment
+		this_SoftNewLineSegment_8=ruleSoftNewLineSegment
 		{
-			$current = $this_StringSegment_8.current;
+			$current = $this_SoftNewLineSegment_8.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1034,11 +1034,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9());
+			newCompositeNode(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9());
 		}
-		this_ValueSegment_9=ruleValueSegment
+		this_SoftSpaceSegment_9=ruleSoftSpaceSegment
 		{
-			$current = $this_ValueSegment_9.current;
+			$current = $this_SoftSpaceSegment_9.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1046,11 +1046,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10());
+			newCompositeNode(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10());
 		}
-		this_WrapAnchorSegment_10=ruleWrapAnchorSegment
+		this_StringSegment_10=ruleStringSegment
 		{
-			$current = $this_WrapAnchorSegment_10.current;
+			$current = $this_StringSegment_10.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1058,11 +1058,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11());
+			newCompositeNode(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11());
 		}
-		this_WrapBeginAllSegment_11=ruleWrapBeginAllSegment
+		this_ValueSegment_11=ruleValueSegment
 		{
-			$current = $this_WrapBeginAllSegment_11.current;
+			$current = $this_ValueSegment_11.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1070,11 +1070,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12());
+			newCompositeNode(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12());
 		}
-		this_WrapBeginSomeSegment_12=ruleWrapBeginSomeSegment
+		this_WrapAnchorSegment_12=ruleWrapAnchorSegment
 		{
-			$current = $this_WrapBeginSomeSegment_12.current;
+			$current = $this_WrapAnchorSegment_12.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1082,11 +1082,11 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13());
+			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13());
 		}
-		this_WrapEndSegment_13=ruleWrapEndSegment
+		this_WrapBeginAllSegment_13=ruleWrapBeginAllSegment
 		{
-			$current = $this_WrapEndSegment_13.current;
+			$current = $this_WrapBeginAllSegment_13.current;
 			afterParserOrEnumRuleCall();
 		}
 		    |
@@ -1094,11 +1094,35 @@
 			/* */
 		}
 		{
-			newCompositeNode(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14());
+			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14());
 		}
-		this_WrapHereSegment_14=ruleWrapHereSegment
+		this_WrapBeginSomeSegment_14=ruleWrapBeginSomeSegment
 		{
-			$current = $this_WrapHereSegment_14.current;
+			$current = $this_WrapBeginSomeSegment_14.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15());
+		}
+		this_WrapEndSegment_15=ruleWrapEndSegment
+		{
+			$current = $this_WrapEndSegment_15.current;
+			afterParserOrEnumRuleCall();
+		}
+		    |
+		{
+			/* */
+		}
+		{
+			newCompositeNode(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16());
+		}
+		this_WrapHereSegment_16=ruleWrapHereSegment
+		{
+			$current = $this_WrapHereSegment_16.current;
 			afterParserOrEnumRuleCall();
 		}
 	)
@@ -1277,6 +1301,72 @@
 	)
 ;
 
+// Entry rule entryRulePostCommentSegment
+entryRulePostCommentSegment returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getPostCommentSegmentRule()); }
+	iv_rulePostCommentSegment=rulePostCommentSegment
+	{ $current=$iv_rulePostCommentSegment.current; }
+	EOF;
+
+// Rule PostCommentSegment
+rulePostCommentSegment returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				/* */
+			}
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='post-comment'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1());
+		}
+	)
+;
+
+// Entry rule entryRulePreCommentSegment
+entryRulePreCommentSegment returns [EObject current=null]:
+	{ newCompositeNode(grammarAccess.getPreCommentSegmentRule()); }
+	iv_rulePreCommentSegment=rulePreCommentSegment
+	{ $current=$iv_rulePreCommentSegment.current; }
+	EOF;
+
+// Rule PreCommentSegment
+rulePreCommentSegment returns [EObject current=null]
+@init {
+	enterRule();
+}
+@after {
+	leaveRule();
+}:
+	(
+		(
+			{
+				/* */
+			}
+			{
+				$current = forceCreateModelElement(
+					grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0(),
+					$current);
+			}
+		)
+		otherlv_1='pre-comment'
+		{
+			newLeafNode(otherlv_1, grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1());
+		}
+	)
+;
+
 // Entry rule entryRulePushSegment
 entryRulePushSegment returns [EObject current=null]:
 	{ newCompositeNode(grammarAccess.getPushSegmentRule()); }
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.tokens b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.tokens
index 0a411ba..ba18511 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.tokens
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdioms.tokens
@@ -4,37 +4,39 @@
 'any-element'=18
 'as'=13
 'assignment'=19
-'at'=46
+'at'=48
 'custom'=24
-'do'=47
+'do'=49
 'final'=21
-'for'=42
+'for'=44
 'half-new-line'=25
-'idiom'=41
+'idiom'=43
 'import'=12
-'in'=43
+'in'=45
 'locator'=16
-'mixin'=40
+'mixin'=42
 'model'=11
 'new-line'=26
 'no-space'=27
 'pop'=28
-'printable'=33
-'push'=29
+'post-comment'=29
+'pre-comment'=30
+'printable'=35
+'push'=31
 'returns'=22
 'segment'=23
-'soft-new-line'=30
-'soft-space'=31
-'string'=32
-'value'=34
+'soft-new-line'=32
+'soft-space'=33
+'string'=34
+'value'=36
 'with'=15
-'wrap-anchor'=35
-'wrap-begin-all'=36
-'wrap-begin-some'=37
-'wrap-end'=38
-'wrap-here'=39
-'{'=44
-'}'=45
+'wrap-anchor'=37
+'wrap-begin-all'=38
+'wrap-begin-some'=39
+'wrap-end'=40
+'wrap-here'=41
+'{'=46
+'}'=47
 RULE_ANY_OTHER=10
 RULE_ID=4
 RULE_INT=6
@@ -79,3 +81,5 @@
 T__45=45
 T__46=46
 T__47=47
+T__48=48
+T__49=49
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsLexer.java b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsLexer.java
index 7a9e661..cd5a745 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsLexer.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsLexer.java
@@ -49,6 +49,8 @@
     public static final int T__32=32;
     public static final int RULE_WS=9;
     public static final int RULE_ANY_OTHER=10;
+    public static final int T__48=48;
+    public static final int T__49=49;
     public static final int T__44=44;
     public static final int T__45=45;
     public static final int T__46=46;
@@ -453,10 +455,10 @@
         try {
             int _type = T__29;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:29:7: ( 'push' )
-            // InternalIdioms.g:29:9: 'push'
+            // InternalIdioms.g:29:7: ( 'post-comment' )
+            // InternalIdioms.g:29:9: 'post-comment'
             {
-            match("push");
+            match("post-comment");
 
 
             }
@@ -474,10 +476,10 @@
         try {
             int _type = T__30;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:30:7: ( 'soft-new-line' )
-            // InternalIdioms.g:30:9: 'soft-new-line'
+            // InternalIdioms.g:30:7: ( 'pre-comment' )
+            // InternalIdioms.g:30:9: 'pre-comment'
             {
-            match("soft-new-line");
+            match("pre-comment");
 
 
             }
@@ -495,10 +497,10 @@
         try {
             int _type = T__31;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:31:7: ( 'soft-space' )
-            // InternalIdioms.g:31:9: 'soft-space'
+            // InternalIdioms.g:31:7: ( 'push' )
+            // InternalIdioms.g:31:9: 'push'
             {
-            match("soft-space");
+            match("push");
 
 
             }
@@ -516,10 +518,10 @@
         try {
             int _type = T__32;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:32:7: ( 'string' )
-            // InternalIdioms.g:32:9: 'string'
+            // InternalIdioms.g:32:7: ( 'soft-new-line' )
+            // InternalIdioms.g:32:9: 'soft-new-line'
             {
-            match("string");
+            match("soft-new-line");
 
 
             }
@@ -537,10 +539,10 @@
         try {
             int _type = T__33;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:33:7: ( 'printable' )
-            // InternalIdioms.g:33:9: 'printable'
+            // InternalIdioms.g:33:7: ( 'soft-space' )
+            // InternalIdioms.g:33:9: 'soft-space'
             {
-            match("printable");
+            match("soft-space");
 
 
             }
@@ -558,10 +560,10 @@
         try {
             int _type = T__34;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:34:7: ( 'value' )
-            // InternalIdioms.g:34:9: 'value'
+            // InternalIdioms.g:34:7: ( 'string' )
+            // InternalIdioms.g:34:9: 'string'
             {
-            match("value");
+            match("string");
 
 
             }
@@ -579,10 +581,10 @@
         try {
             int _type = T__35;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:35:7: ( 'wrap-anchor' )
-            // InternalIdioms.g:35:9: 'wrap-anchor'
+            // InternalIdioms.g:35:7: ( 'printable' )
+            // InternalIdioms.g:35:9: 'printable'
             {
-            match("wrap-anchor");
+            match("printable");
 
 
             }
@@ -600,10 +602,10 @@
         try {
             int _type = T__36;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:36:7: ( 'wrap-begin-all' )
-            // InternalIdioms.g:36:9: 'wrap-begin-all'
+            // InternalIdioms.g:36:7: ( 'value' )
+            // InternalIdioms.g:36:9: 'value'
             {
-            match("wrap-begin-all");
+            match("value");
 
 
             }
@@ -621,10 +623,10 @@
         try {
             int _type = T__37;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:37:7: ( 'wrap-begin-some' )
-            // InternalIdioms.g:37:9: 'wrap-begin-some'
+            // InternalIdioms.g:37:7: ( 'wrap-anchor' )
+            // InternalIdioms.g:37:9: 'wrap-anchor'
             {
-            match("wrap-begin-some");
+            match("wrap-anchor");
 
 
             }
@@ -642,10 +644,10 @@
         try {
             int _type = T__38;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:38:7: ( 'wrap-end' )
-            // InternalIdioms.g:38:9: 'wrap-end'
+            // InternalIdioms.g:38:7: ( 'wrap-begin-all' )
+            // InternalIdioms.g:38:9: 'wrap-begin-all'
             {
-            match("wrap-end");
+            match("wrap-begin-all");
 
 
             }
@@ -663,10 +665,10 @@
         try {
             int _type = T__39;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:39:7: ( 'wrap-here' )
-            // InternalIdioms.g:39:9: 'wrap-here'
+            // InternalIdioms.g:39:7: ( 'wrap-begin-some' )
+            // InternalIdioms.g:39:9: 'wrap-begin-some'
             {
-            match("wrap-here");
+            match("wrap-begin-some");
 
 
             }
@@ -684,10 +686,10 @@
         try {
             int _type = T__40;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:40:7: ( 'mixin' )
-            // InternalIdioms.g:40:9: 'mixin'
+            // InternalIdioms.g:40:7: ( 'wrap-end' )
+            // InternalIdioms.g:40:9: 'wrap-end'
             {
-            match("mixin");
+            match("wrap-end");
 
 
             }
@@ -705,10 +707,10 @@
         try {
             int _type = T__41;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:41:7: ( 'idiom' )
-            // InternalIdioms.g:41:9: 'idiom'
+            // InternalIdioms.g:41:7: ( 'wrap-here' )
+            // InternalIdioms.g:41:9: 'wrap-here'
             {
-            match("idiom");
+            match("wrap-here");
 
 
             }
@@ -726,10 +728,10 @@
         try {
             int _type = T__42;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:42:7: ( 'for' )
-            // InternalIdioms.g:42:9: 'for'
+            // InternalIdioms.g:42:7: ( 'mixin' )
+            // InternalIdioms.g:42:9: 'mixin'
             {
-            match("for");
+            match("mixin");
 
 
             }
@@ -747,10 +749,10 @@
         try {
             int _type = T__43;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:43:7: ( 'in' )
-            // InternalIdioms.g:43:9: 'in'
+            // InternalIdioms.g:43:7: ( 'idiom' )
+            // InternalIdioms.g:43:9: 'idiom'
             {
-            match("in");
+            match("idiom");
 
 
             }
@@ -768,10 +770,11 @@
         try {
             int _type = T__44;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:44:7: ( '{' )
-            // InternalIdioms.g:44:9: '{'
+            // InternalIdioms.g:44:7: ( 'for' )
+            // InternalIdioms.g:44:9: 'for'
             {
-            match('{');
+            match("for");
+
 
             }
 
@@ -788,10 +791,11 @@
         try {
             int _type = T__45;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:45:7: ( '}' )
-            // InternalIdioms.g:45:9: '}'
+            // InternalIdioms.g:45:7: ( 'in' )
+            // InternalIdioms.g:45:9: 'in'
             {
-            match('}');
+            match("in");
+
 
             }
 
@@ -808,11 +812,10 @@
         try {
             int _type = T__46;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:46:7: ( 'at' )
-            // InternalIdioms.g:46:9: 'at'
+            // InternalIdioms.g:46:7: ( '{' )
+            // InternalIdioms.g:46:9: '{'
             {
-            match("at");
-
+            match('{');
 
             }
 
@@ -829,8 +832,49 @@
         try {
             int _type = T__47;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:47:7: ( 'do' )
-            // InternalIdioms.g:47:9: 'do'
+            // InternalIdioms.g:47:7: ( '}' )
+            // InternalIdioms.g:47:9: '}'
+            {
+            match('}');
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__47"
+
+    // $ANTLR start "T__48"
+    public final void mT__48() throws RecognitionException {
+        try {
+            int _type = T__48;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalIdioms.g:48:7: ( 'at' )
+            // InternalIdioms.g:48:9: 'at'
+            {
+            match("at");
+
+
+            }
+
+            state.type = _type;
+            state.channel = _channel;
+        }
+        finally {
+        }
+    }
+    // $ANTLR end "T__48"
+
+    // $ANTLR start "T__49"
+    public final void mT__49() throws RecognitionException {
+        try {
+            int _type = T__49;
+            int _channel = DEFAULT_TOKEN_CHANNEL;
+            // InternalIdioms.g:49:7: ( 'do' )
+            // InternalIdioms.g:49:9: 'do'
             {
             match("do");
 
@@ -843,17 +887,17 @@
         finally {
         }
     }
-    // $ANTLR end "T__47"
+    // $ANTLR end "T__49"
 
     // $ANTLR start "RULE_ID"
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1970:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // InternalIdioms.g:1970:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalIdioms.g:2060:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // InternalIdioms.g:2060:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // InternalIdioms.g:1970:11: ( '^' )?
+            // InternalIdioms.g:2060:11: ( '^' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -862,7 +906,7 @@
             }
             switch (alt1) {
                 case 1 :
-                    // InternalIdioms.g:1970:11: '^'
+                    // InternalIdioms.g:2060:11: '^'
                     {
                     match('^');
 
@@ -880,7 +924,7 @@
                 recover(mse);
                 throw mse;}
 
-            // InternalIdioms.g:1970:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // InternalIdioms.g:2060:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop2:
             do {
                 int alt2=2;
@@ -929,10 +973,10 @@
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1972:10: ( ( '0' .. '9' )+ )
-            // InternalIdioms.g:1972:12: ( '0' .. '9' )+
+            // InternalIdioms.g:2062:10: ( ( '0' .. '9' )+ )
+            // InternalIdioms.g:2062:12: ( '0' .. '9' )+
             {
-            // InternalIdioms.g:1972:12: ( '0' .. '9' )+
+            // InternalIdioms.g:2062:12: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -946,7 +990,7 @@
 
                 switch (alt3) {
             	case 1 :
-            	    // InternalIdioms.g:1972:13: '0' .. '9'
+            	    // InternalIdioms.g:2062:13: '0' .. '9'
             	    {
             	    matchRange('0','9');
 
@@ -978,10 +1022,10 @@
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1974:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // InternalIdioms.g:1974:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalIdioms.g:2064:13: ( ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // InternalIdioms.g:2064:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // InternalIdioms.g:1974:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // InternalIdioms.g:2064:15: ( '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -999,10 +1043,10 @@
             }
             switch (alt6) {
                 case 1 :
-                    // InternalIdioms.g:1974:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // InternalIdioms.g:2064:16: '\"' ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"');
-                    // InternalIdioms.g:1974:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // InternalIdioms.g:2064:20: ( '\\\\' . | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop4:
                     do {
                         int alt4=3;
@@ -1018,7 +1062,7 @@
 
                         switch (alt4) {
                     	case 1 :
-                    	    // InternalIdioms.g:1974:21: '\\\\' .
+                    	    // InternalIdioms.g:2064:21: '\\\\' .
                     	    {
                     	    match('\\');
                     	    matchAny();
@@ -1026,7 +1070,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalIdioms.g:1974:28: ~ ( ( '\\\\' | '\"' ) )
+                    	    // InternalIdioms.g:2064:28: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -1051,10 +1095,10 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1974:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // InternalIdioms.g:2064:48: '\\'' ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\'');
-                    // InternalIdioms.g:1974:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // InternalIdioms.g:2064:53: ( '\\\\' . | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -1070,7 +1114,7 @@
 
                         switch (alt5) {
                     	case 1 :
-                    	    // InternalIdioms.g:1974:54: '\\\\' .
+                    	    // InternalIdioms.g:2064:54: '\\\\' .
                     	    {
                     	    match('\\');
                     	    matchAny();
@@ -1078,7 +1122,7 @@
                     	    }
                     	    break;
                     	case 2 :
-                    	    // InternalIdioms.g:1974:61: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // InternalIdioms.g:2064:61: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -1121,12 +1165,12 @@
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1976:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // InternalIdioms.g:1976:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // InternalIdioms.g:2066:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // InternalIdioms.g:2066:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*");
 
-            // InternalIdioms.g:1976:24: ( options {greedy=false; } : . )*
+            // InternalIdioms.g:2066:24: ( options {greedy=false; } : . )*
             loop7:
             do {
                 int alt7=2;
@@ -1151,7 +1195,7 @@
 
                 switch (alt7) {
             	case 1 :
-            	    // InternalIdioms.g:1976:52: .
+            	    // InternalIdioms.g:2066:52: .
             	    {
             	    matchAny();
 
@@ -1181,12 +1225,12 @@
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1978:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // InternalIdioms.g:1978:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // InternalIdioms.g:2068:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // InternalIdioms.g:2068:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//");
 
-            // InternalIdioms.g:1978:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // InternalIdioms.g:2068:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop8:
             do {
                 int alt8=2;
@@ -1199,7 +1243,7 @@
 
                 switch (alt8) {
             	case 1 :
-            	    // InternalIdioms.g:1978:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // InternalIdioms.g:2068:24: ~ ( ( '\\n' | '\\r' ) )
             	    {
             	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='\t')||(input.LA(1)>='\u000B' && input.LA(1)<='\f')||(input.LA(1)>='\u000E' && input.LA(1)<='\uFFFF') ) {
             	        input.consume();
@@ -1219,7 +1263,7 @@
                 }
             } while (true);
 
-            // InternalIdioms.g:1978:40: ( ( '\\r' )? '\\n' )?
+            // InternalIdioms.g:2068:40: ( ( '\\r' )? '\\n' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -1228,9 +1272,9 @@
             }
             switch (alt10) {
                 case 1 :
-                    // InternalIdioms.g:1978:41: ( '\\r' )? '\\n'
+                    // InternalIdioms.g:2068:41: ( '\\r' )? '\\n'
                     {
-                    // InternalIdioms.g:1978:41: ( '\\r' )?
+                    // InternalIdioms.g:2068:41: ( '\\r' )?
                     int alt9=2;
                     int LA9_0 = input.LA(1);
 
@@ -1239,7 +1283,7 @@
                     }
                     switch (alt9) {
                         case 1 :
-                            // InternalIdioms.g:1978:41: '\\r'
+                            // InternalIdioms.g:2068:41: '\\r'
                             {
                             match('\r');
 
@@ -1271,10 +1315,10 @@
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1980:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // InternalIdioms.g:1980:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalIdioms.g:2070:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // InternalIdioms.g:2070:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // InternalIdioms.g:1980:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // InternalIdioms.g:2070:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt11=0;
             loop11:
             do {
@@ -1328,8 +1372,8 @@
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // InternalIdioms.g:1982:16: ( . )
-            // InternalIdioms.g:1982:18: .
+            // InternalIdioms.g:2072:16: ( . )
+            // InternalIdioms.g:2072:18: .
             {
             matchAny();
 
@@ -1344,8 +1388,8 @@
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // InternalIdioms.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=44;
+        // InternalIdioms.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=46;
         alt12 = dfa12.predict(input);
         switch (alt12) {
             case 1 :
@@ -1608,49 +1652,63 @@
                 }
                 break;
             case 38 :
-                // InternalIdioms.g:1:232: RULE_ID
+                // InternalIdioms.g:1:232: T__48
+                {
+                mT__48();
+
+                }
+                break;
+            case 39 :
+                // InternalIdioms.g:1:238: T__49
+                {
+                mT__49();
+
+                }
+                break;
+            case 40 :
+                // InternalIdioms.g:1:244: RULE_ID
                 {
                 mRULE_ID();
 
                 }
                 break;
-            case 39 :
-                // InternalIdioms.g:1:240: RULE_INT
+            case 41 :
+                // InternalIdioms.g:1:252: RULE_INT
                 {
                 mRULE_INT();
 
                 }
                 break;
-            case 40 :
-                // InternalIdioms.g:1:249: RULE_STRING
+            case 42 :
+                // InternalIdioms.g:1:261: RULE_STRING
                 {
                 mRULE_STRING();
 
                 }
                 break;
-            case 41 :
-                // InternalIdioms.g:1:261: RULE_ML_COMMENT
+            case 43 :
+                // InternalIdioms.g:1:273: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT();
 
                 }
                 break;
-            case 42 :
-                // InternalIdioms.g:1:277: RULE_SL_COMMENT
+            case 44 :
+                // InternalIdioms.g:1:289: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT();
 
                 }
                 break;
-            case 43 :
-                // InternalIdioms.g:1:293: RULE_WS
+            case 45 :
+                // InternalIdioms.g:1:305: RULE_WS
                 {
                 mRULE_WS();
 
                 }
                 break;
-            case 44 :
-                // InternalIdioms.g:1:301: RULE_ANY_OTHER
+            case 46 :
+                // InternalIdioms.g:1:313: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER();
 
@@ -1664,17 +1722,17 @@
 
     protected DFA12 dfa12 = new DFA12(this);
     static final String DFA12_eotS =
-        "\1\uffff\3\35\1\uffff\2\35\1\32\10\35\2\uffff\1\35\1\32\2\uffff\3\32\2\uffff\2\35\1\uffff\2\35\1\103\1\105\1\35\1\107\1\uffff\3\35\1\uffff\16\35\2\uffff\1\131\5\uffff\4\35\1\uffff\1\35\1\uffff\1\35\1\uffff\4\35\1\144\7\35\1\uffff\1\154\3\35\1\uffff\5\35\1\uffff\1\167\3\35\1\uffff\6\35\2\uffff\1\u0081\2\35\1\u0084\1\u0085\1\35\1\u0087\1\35\4\uffff\1\35\1\u008e\2\35\1\uffff\2\35\2\uffff\1\35\1\u0096\2\uffff\1\u0097\1\uffff\1\35\4\uffff\1\35\1\uffff\2\35\2\uffff\1\u009d\1\u009e\1\35\2\uffff\1\35\1\uffff\1\u00a2\1\u00a3\1\u00a4\2\uffff\2\35\4\uffff\2\35\1\uffff\1\u00ab\1\u00ac\6\uffff";
+        "\1\uffff\3\35\1\uffff\2\35\1\32\10\35\2\uffff\1\35\1\32\2\uffff\3\32\2\uffff\2\35\1\uffff\2\35\1\103\1\105\1\35\1\107\1\uffff\3\35\1\uffff\16\35\2\uffff\1\133\5\uffff\4\35\1\uffff\1\35\1\uffff\1\35\1\uffff\4\35\1\146\7\35\1\uffff\1\156\5\35\1\uffff\5\35\1\uffff\1\173\3\35\1\uffff\6\35\2\uffff\1\35\1\uffff\1\35\1\u0087\1\35\1\u0089\1\u008a\1\35\1\u008c\1\35\4\uffff\1\35\1\u0093\2\35\1\uffff\2\35\2\uffff\1\35\1\uffff\1\u009b\2\uffff\1\u009c\1\uffff\1\35\4\uffff\1\35\1\uffff\2\35\2\uffff\1\u00a2\1\u00a3\1\35\2\uffff\1\35\1\uffff\1\u00a7\1\u00a8\1\u00a9\2\uffff\2\35\4\uffff\2\35\1\uffff\1\u00b0\1\u00b1\6\uffff";
     static final String DFA12_eofS =
-        "\u00b0\uffff";
+        "\u00b5\uffff";
     static final String DFA12_minS =
-        "\1\0\1\151\1\144\1\156\1\uffff\1\151\1\157\1\72\1\151\2\145\1\165\1\141\1\145\1\157\1\141\2\uffff\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\144\1\170\1\uffff\1\160\1\151\2\60\1\171\1\60\1\uffff\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\163\1\151\1\154\2\uffff\1\60\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\60\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\60\1\150\1\156\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\141\1\60\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\60\1\164\1\145\2\60\1\164\1\60\1\156\3\uffff\1\141\1\157\1\60\3\156\1\147\1\155\2\uffff\1\141\1\60\2\uffff\1\60\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\60\1\142\2\uffff\1\145\1\147\3\60\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\60\1\55\2\uffff\1\141\2\uffff";
+        "\1\0\1\151\1\144\1\156\1\uffff\1\151\1\157\1\72\1\151\2\145\1\165\1\141\1\145\1\157\1\141\2\uffff\1\157\1\101\2\uffff\2\0\1\52\2\uffff\1\144\1\170\1\uffff\1\160\1\151\2\60\1\171\1\60\1\uffff\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\145\1\163\1\154\2\uffff\1\60\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\60\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\60\1\164\1\55\1\156\1\150\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\141\1\60\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\55\1\uffff\1\164\1\60\1\145\2\60\1\164\1\60\1\156\3\uffff\1\141\1\157\1\60\3\156\1\147\1\155\2\uffff\1\141\1\uffff\1\60\2\uffff\1\60\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\60\1\142\2\uffff\1\145\1\147\3\60\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\60\1\55\2\uffff\1\141\2\uffff";
     static final String DFA12_maxS =
-        "\1\uffff\1\157\1\156\1\164\1\uffff\1\162\1\157\1\72\1\157\1\145\1\164\1\165\1\141\1\157\1\165\1\141\2\uffff\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\170\1\uffff\1\160\1\151\2\172\1\171\1\172\1\uffff\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\160\1\163\1\151\1\154\2\uffff\1\172\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\172\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\172\1\150\1\156\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\145\1\172\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\172\1\164\1\145\2\172\1\164\1\172\1\156\3\uffff\1\150\1\157\1\172\2\156\1\163\1\147\1\155\2\uffff\1\141\1\172\2\uffff\1\172\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\172\1\142\2\uffff\1\145\1\147\3\172\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\172\1\55\2\uffff\1\163\2\uffff";
+        "\1\uffff\1\157\1\156\1\164\1\uffff\1\162\1\157\1\72\1\157\1\145\1\164\1\165\1\141\1\157\1\165\1\141\2\uffff\1\157\1\172\2\uffff\2\uffff\1\57\2\uffff\1\144\1\170\1\uffff\1\160\1\151\2\172\1\171\1\172\1\uffff\1\164\1\141\1\143\1\uffff\1\156\1\162\1\164\1\147\1\146\1\162\1\163\1\154\1\167\1\55\1\163\1\151\1\163\1\154\2\uffff\1\172\5\uffff\1\145\1\151\2\157\1\uffff\1\151\1\uffff\1\55\1\uffff\1\150\1\160\2\141\1\172\1\165\1\155\1\164\1\151\1\164\1\146\1\55\1\uffff\1\172\1\164\1\55\1\156\1\150\1\165\1\uffff\1\154\1\156\1\162\1\155\1\147\1\145\1\172\1\55\1\164\1\154\1\uffff\1\162\1\145\1\55\1\156\1\157\1\55\2\uffff\1\55\1\uffff\1\164\1\172\1\145\2\172\1\164\1\172\1\156\3\uffff\1\150\1\157\1\172\2\156\1\163\1\147\1\155\2\uffff\1\141\1\uffff\1\172\2\uffff\1\172\1\uffff\1\155\1\uffff\1\145\2\uffff\1\162\1\uffff\1\163\1\164\2\uffff\2\172\1\142\2\uffff\1\145\1\147\3\172\2\uffff\1\154\1\156\1\151\3\uffff\1\145\1\164\1\156\2\172\1\55\2\uffff\1\163\2\uffff";
     static final String DFA12_acceptS =
-        "\4\uffff\1\4\13\uffff\1\42\1\43\2\uffff\1\46\1\47\3\uffff\1\53\1\54\2\uffff\1\46\6\uffff\1\4\3\uffff\1\12\16\uffff\1\42\1\43\1\uffff\1\47\1\50\1\51\1\52\1\53\4\uffff\1\41\1\uffff\1\3\1\uffff\1\44\14\uffff\1\21\4\uffff\1\45\12\uffff\1\40\6\uffff\1\20\1\22\10\uffff\1\7\1\10\1\5\10\uffff\1\17\1\23\2\uffff\1\1\1\36\1\uffff\1\37\1\uffff\1\31\1\uffff\1\34\1\35\1\uffff\1\13\2\uffff\1\24\1\25\3\uffff\1\30\1\2\5\uffff\1\26\1\16\3\uffff\1\6\1\14\1\15\6\uffff\1\27\1\11\1\uffff\1\32\1\33";
+        "\4\uffff\1\4\13\uffff\1\44\1\45\2\uffff\1\50\1\51\3\uffff\1\55\1\56\2\uffff\1\50\6\uffff\1\4\3\uffff\1\12\16\uffff\1\44\1\45\1\uffff\1\51\1\52\1\53\1\54\1\55\4\uffff\1\43\1\uffff\1\3\1\uffff\1\46\14\uffff\1\21\6\uffff\1\47\12\uffff\1\42\6\uffff\1\20\1\22\1\uffff\1\24\10\uffff\1\7\1\10\1\5\10\uffff\1\17\1\23\1\uffff\1\25\1\uffff\1\1\1\40\1\uffff\1\41\1\uffff\1\33\1\uffff\1\36\1\37\1\uffff\1\13\2\uffff\1\26\1\27\3\uffff\1\32\1\2\5\uffff\1\30\1\16\3\uffff\1\6\1\14\1\15\6\uffff\1\31\1\11\1\uffff\1\34\1\35";
     static final String DFA12_specialS =
-        "\1\1\25\uffff\1\0\1\2\u0098\uffff}>";
+        "\1\0\25\uffff\1\2\1\1\u009d\uffff}>";
     static final String[] DFA12_transitionS = DFA12_transitionS_.DFA12_transitionS;
     private static final class DFA12_transitionS_ {
         static final String[] DFA12_transitionS = {
@@ -1692,7 +1750,7 @@
                 "\1\57",
                 "\1\60",
                 "\1\61\11\uffff\1\62",
-                "\1\63\2\uffff\1\65\2\uffff\1\64",
+                "\1\63\2\uffff\1\64\2\uffff\1\65",
                 "\1\66",
                 "",
                 "",
@@ -1729,10 +1787,10 @@
                 "\1\122",
                 "\1\123",
                 "\1\124",
-                "\1\125",
-                "\1\126",
-                "\1\127",
-                "\1\130",
+                "\1\125\2\uffff\1\126",
+                "\1\127\3\uffff\1\130",
+                "\1\131",
+                "\1\132",
                 "",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
@@ -1741,117 +1799,122 @@
                 "",
                 "",
                 "",
-                "\1\132",
-                "\1\133",
                 "\1\134",
                 "\1\135",
-                "",
                 "\1\136",
-                "",
                 "\1\137",
                 "",
                 "\1\140",
+                "",
                 "\1\141",
+                "",
                 "\1\142",
                 "\1\143",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\144",
                 "\1\145",
-                "\1\146",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\147",
                 "\1\150",
                 "\1\151",
                 "\1\152",
                 "\1\153",
+                "\1\154",
+                "\1\155",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\155",
-                "\1\156",
                 "\1\157",
-                "",
                 "\1\160",
                 "\1\161",
                 "\1\162",
                 "\1\163",
-                "\1\164",
-                "\1\165\3\uffff\1\166",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\170",
-                "\1\171",
-                "\1\172",
                 "",
-                "\1\173",
+                "\1\164",
+                "\1\165",
+                "\1\166",
+                "\1\167",
+                "\1\170",
+                "\1\171\3\uffff\1\172",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\174",
                 "\1\175",
                 "\1\176",
+                "",
                 "\1\177",
                 "\1\u0080",
-                "",
-                "",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u0081",
                 "\1\u0082",
                 "\1\u0083",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u0084",
+                "",
+                "",
+                "\1\u0085",
+                "",
                 "\1\u0086",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\u0088",
-                "",
-                "",
-                "",
-                "\1\u0089\1\u008a\2\uffff\1\u008b\2\uffff\1\u008c",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u008b",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\1\u008d",
+                "",
+                "",
+                "",
+                "\1\u008e\1\u008f\2\uffff\1\u0090\2\uffff\1\u0091",
+                "\1\u0092",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\1\u008f",
-                "\1\u0090",
-                "\1\u0091\4\uffff\1\u0092",
-                "\1\u0093",
                 "\1\u0094",
-                "",
-                "",
                 "\1\u0095",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "",
-                "",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "",
+                "\1\u0096\4\uffff\1\u0097",
                 "\1\u0098",
-                "",
                 "\1\u0099",
                 "",
                 "",
                 "\1\u009a",
                 "",
-                "\1\u009b",
-                "\1\u009c",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "",
                 "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "",
+                "\1\u009d",
+                "",
+                "\1\u009e",
+                "",
+                "",
                 "\1\u009f",
                 "",
-                "",
                 "\1\u00a0",
                 "\1\u00a1",
+                "",
+                "",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00a4",
                 "",
                 "",
                 "\1\u00a5",
                 "\1\u00a6",
-                "\1\u00a7",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
                 "",
                 "",
-                "",
-                "\1\u00a8",
-                "\1\u00a9",
                 "\1\u00aa",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
-                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00ab",
+                "\1\u00ac",
+                "",
+                "",
+                "",
                 "\1\u00ad",
+                "\1\u00ae",
+                "\1\u00af",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\12\35\7\uffff\32\35\4\uffff\1\35\1\uffff\32\35",
+                "\1\u00b2",
                 "",
                 "",
-                "\1\u00ae\21\uffff\1\u00af",
+                "\1\u00b3\21\uffff\1\u00b4",
                 "",
                 ""
         };
@@ -1887,23 +1950,13 @@
             this.transition = DFA12_transition;
         }
         public String getDescription() {
-            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
+            return "1:1: Tokens : ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | T__20 | T__21 | T__22 | T__23 | T__24 | T__25 | T__26 | T__27 | T__28 | T__29 | T__30 | T__31 | T__32 | T__33 | T__34 | T__35 | T__36 | T__37 | T__38 | T__39 | T__40 | T__41 | T__42 | T__43 | T__44 | T__45 | T__46 | T__47 | T__48 | T__49 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER );";
         }
         public int specialStateTransition(int s, IntStream _input) throws NoViableAltException {
             IntStream input = _input;
         	int _s = s;
             switch ( s ) {
                     case 0 :
-                        int LA12_22 = input.LA(1);
-
-                        s = -1;
-                        if ( ((LA12_22>='\u0000' && LA12_22<='\uFFFF')) ) {s = 59;}
-
-                        else s = 26;
-
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 :
                         int LA12_0 = input.LA(1);
 
                         s = -1;
@@ -1961,7 +2014,7 @@
 
                         if ( s>=0 ) return s;
                         break;
-                    case 2 :
+                    case 1 :
                         int LA12_23 = input.LA(1);
 
                         s = -1;
@@ -1971,6 +2024,16 @@
 
                         if ( s>=0 ) return s;
                         break;
+                    case 2 :
+                        int LA12_22 = input.LA(1);
+
+                        s = -1;
+                        if ( ((LA12_22>='\u0000' && LA12_22<='\uFFFF')) ) {s = 59;}
+
+                        else s = 26;
+
+                        if ( s>=0 ) return s;
+                        break;
             }
             NoViableAltException nvae =
                 new NoViableAltException(getDescription(), 12, _s, input);
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsParser.java b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsParser.java
index a695cbf..2b319d7 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsParser.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/parser/antlr/internal/InternalIdiomsParser.java
@@ -34,7 +34,7 @@
 @SuppressWarnings("all")
 public class InternalIdiomsParser extends AbstractInternalAntlrParser {
     public static final String[] tokenNames = new String[] {
-        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'model'", "'import'", "'as'", "';'", "'with'", "'locator'", "'any-assignment'", "'any-element'", "'assignment'", "'::'", "'final'", "'returns'", "'segment'", "'custom'", "'half-new-line'", "'new-line'", "'no-space'", "'pop'", "'push'", "'soft-new-line'", "'soft-space'", "'string'", "'printable'", "'value'", "'wrap-anchor'", "'wrap-begin-all'", "'wrap-begin-some'", "'wrap-end'", "'wrap-here'", "'mixin'", "'idiom'", "'for'", "'in'", "'{'", "'}'", "'at'", "'do'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'model'", "'import'", "'as'", "';'", "'with'", "'locator'", "'any-assignment'", "'any-element'", "'assignment'", "'::'", "'final'", "'returns'", "'segment'", "'custom'", "'half-new-line'", "'new-line'", "'no-space'", "'pop'", "'post-comment'", "'pre-comment'", "'push'", "'soft-new-line'", "'soft-space'", "'string'", "'printable'", "'value'", "'wrap-anchor'", "'wrap-begin-all'", "'wrap-begin-some'", "'wrap-end'", "'wrap-here'", "'mixin'", "'idiom'", "'for'", "'in'", "'{'", "'}'", "'at'", "'do'"
     };
     public static final int T__19=19;
     public static final int T__15=15;
@@ -73,6 +73,8 @@
     public static final int T__32=32;
     public static final int RULE_WS=9;
     public static final int RULE_ANY_OTHER=10;
+    public static final int T__48=48;
+    public static final int T__49=49;
     public static final int T__44=44;
     public static final int T__45=45;
     public static final int T__46=46;
@@ -351,8 +353,8 @@
                     alt3=2;
                     }
                     break;
-                case 40:
-                case 41:
+                case 42:
+                case 43:
                     {
                     alt3=3;
                     }
@@ -2577,7 +2579,7 @@
 
 
     // $ANTLR start "ruleSegment"
-    // InternalIdioms.g:917:1: ruleSegment returns [EObject current=null] : (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PushSegment_5= rulePushSegment | this_SoftNewLineSegment_6= ruleSoftNewLineSegment | this_SoftSpaceSegment_7= ruleSoftSpaceSegment | this_StringSegment_8= ruleStringSegment | this_ValueSegment_9= ruleValueSegment | this_WrapAnchorSegment_10= ruleWrapAnchorSegment | this_WrapBeginAllSegment_11= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_12= ruleWrapBeginSomeSegment | this_WrapEndSegment_13= ruleWrapEndSegment | this_WrapHereSegment_14= ruleWrapHereSegment ) ;
+    // InternalIdioms.g:917:1: ruleSegment returns [EObject current=null] : (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PostCommentSegment_5= rulePostCommentSegment | this_PreCommentSegment_6= rulePreCommentSegment | this_PushSegment_7= rulePushSegment | this_SoftNewLineSegment_8= ruleSoftNewLineSegment | this_SoftSpaceSegment_9= ruleSoftSpaceSegment | this_StringSegment_10= ruleStringSegment | this_ValueSegment_11= ruleValueSegment | this_WrapAnchorSegment_12= ruleWrapAnchorSegment | this_WrapBeginAllSegment_13= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_14= ruleWrapBeginSomeSegment | this_WrapEndSegment_15= ruleWrapEndSegment | this_WrapHereSegment_16= ruleWrapHereSegment ) ;
     public final EObject ruleSegment() throws RecognitionException {
         EObject current = null;
 
@@ -2591,36 +2593,40 @@
 
         EObject this_PopSegment_4 = null;
 
-        EObject this_PushSegment_5 = null;
+        EObject this_PostCommentSegment_5 = null;
 
-        EObject this_SoftNewLineSegment_6 = null;
+        EObject this_PreCommentSegment_6 = null;
 
-        EObject this_SoftSpaceSegment_7 = null;
+        EObject this_PushSegment_7 = null;
 
-        EObject this_StringSegment_8 = null;
+        EObject this_SoftNewLineSegment_8 = null;
 
-        EObject this_ValueSegment_9 = null;
+        EObject this_SoftSpaceSegment_9 = null;
 
-        EObject this_WrapAnchorSegment_10 = null;
+        EObject this_StringSegment_10 = null;
 
-        EObject this_WrapBeginAllSegment_11 = null;
+        EObject this_ValueSegment_11 = null;
 
-        EObject this_WrapBeginSomeSegment_12 = null;
+        EObject this_WrapAnchorSegment_12 = null;
 
-        EObject this_WrapEndSegment_13 = null;
+        EObject this_WrapBeginAllSegment_13 = null;
 
-        EObject this_WrapHereSegment_14 = null;
+        EObject this_WrapBeginSomeSegment_14 = null;
+
+        EObject this_WrapEndSegment_15 = null;
+
+        EObject this_WrapHereSegment_16 = null;
 
 
 
         	enterRule();
 
         try {
-            // InternalIdioms.g:923:2: ( (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PushSegment_5= rulePushSegment | this_SoftNewLineSegment_6= ruleSoftNewLineSegment | this_SoftSpaceSegment_7= ruleSoftSpaceSegment | this_StringSegment_8= ruleStringSegment | this_ValueSegment_9= ruleValueSegment | this_WrapAnchorSegment_10= ruleWrapAnchorSegment | this_WrapBeginAllSegment_11= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_12= ruleWrapBeginSomeSegment | this_WrapEndSegment_13= ruleWrapEndSegment | this_WrapHereSegment_14= ruleWrapHereSegment ) )
-            // InternalIdioms.g:924:2: (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PushSegment_5= rulePushSegment | this_SoftNewLineSegment_6= ruleSoftNewLineSegment | this_SoftSpaceSegment_7= ruleSoftSpaceSegment | this_StringSegment_8= ruleStringSegment | this_ValueSegment_9= ruleValueSegment | this_WrapAnchorSegment_10= ruleWrapAnchorSegment | this_WrapBeginAllSegment_11= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_12= ruleWrapBeginSomeSegment | this_WrapEndSegment_13= ruleWrapEndSegment | this_WrapHereSegment_14= ruleWrapHereSegment )
+            // InternalIdioms.g:923:2: ( (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PostCommentSegment_5= rulePostCommentSegment | this_PreCommentSegment_6= rulePreCommentSegment | this_PushSegment_7= rulePushSegment | this_SoftNewLineSegment_8= ruleSoftNewLineSegment | this_SoftSpaceSegment_9= ruleSoftSpaceSegment | this_StringSegment_10= ruleStringSegment | this_ValueSegment_11= ruleValueSegment | this_WrapAnchorSegment_12= ruleWrapAnchorSegment | this_WrapBeginAllSegment_13= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_14= ruleWrapBeginSomeSegment | this_WrapEndSegment_15= ruleWrapEndSegment | this_WrapHereSegment_16= ruleWrapHereSegment ) )
+            // InternalIdioms.g:924:2: (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PostCommentSegment_5= rulePostCommentSegment | this_PreCommentSegment_6= rulePreCommentSegment | this_PushSegment_7= rulePushSegment | this_SoftNewLineSegment_8= ruleSoftNewLineSegment | this_SoftSpaceSegment_9= ruleSoftSpaceSegment | this_StringSegment_10= ruleStringSegment | this_ValueSegment_11= ruleValueSegment | this_WrapAnchorSegment_12= ruleWrapAnchorSegment | this_WrapBeginAllSegment_13= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_14= ruleWrapBeginSomeSegment | this_WrapEndSegment_15= ruleWrapEndSegment | this_WrapHereSegment_16= ruleWrapHereSegment )
             {
-            // InternalIdioms.g:924:2: (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PushSegment_5= rulePushSegment | this_SoftNewLineSegment_6= ruleSoftNewLineSegment | this_SoftSpaceSegment_7= ruleSoftSpaceSegment | this_StringSegment_8= ruleStringSegment | this_ValueSegment_9= ruleValueSegment | this_WrapAnchorSegment_10= ruleWrapAnchorSegment | this_WrapBeginAllSegment_11= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_12= ruleWrapBeginSomeSegment | this_WrapEndSegment_13= ruleWrapEndSegment | this_WrapHereSegment_14= ruleWrapHereSegment )
-            int alt13=15;
+            // InternalIdioms.g:924:2: (this_CustomSegment_0= ruleCustomSegment | this_HalfNewLineSegment_1= ruleHalfNewLineSegment | this_NewLineSegment_2= ruleNewLineSegment | this_NoSpaceSegment_3= ruleNoSpaceSegment | this_PopSegment_4= rulePopSegment | this_PostCommentSegment_5= rulePostCommentSegment | this_PreCommentSegment_6= rulePreCommentSegment | this_PushSegment_7= rulePushSegment | this_SoftNewLineSegment_8= ruleSoftNewLineSegment | this_SoftSpaceSegment_9= ruleSoftSpaceSegment | this_StringSegment_10= ruleStringSegment | this_ValueSegment_11= ruleValueSegment | this_WrapAnchorSegment_12= ruleWrapAnchorSegment | this_WrapBeginAllSegment_13= ruleWrapBeginAllSegment | this_WrapBeginSomeSegment_14= ruleWrapBeginSomeSegment | this_WrapEndSegment_15= ruleWrapEndSegment | this_WrapHereSegment_16= ruleWrapHereSegment )
+            int alt13=17;
             switch ( input.LA(1) ) {
             case 24:
                 {
@@ -2667,12 +2673,12 @@
                 alt13=9;
                 }
                 break;
-            case 34:
+            case 33:
                 {
                 alt13=10;
                 }
                 break;
-            case 35:
+            case 34:
                 {
                 alt13=11;
                 }
@@ -2697,6 +2703,16 @@
                 alt13=15;
                 }
                 break;
+            case 40:
+                {
+                alt13=16;
+                }
+                break;
+            case 41:
+                {
+                alt13=17;
+                }
+                break;
             default:
                 if (state.backtracking>0) {state.failed=true; return current;}
                 NoViableAltException nvae =
@@ -2842,7 +2858,7 @@
                     }
                     break;
                 case 6 :
-                    // InternalIdioms.g:985:3: this_PushSegment_5= rulePushSegment
+                    // InternalIdioms.g:985:3: this_PostCommentSegment_5= rulePostCommentSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2851,17 +2867,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_5());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getPostCommentSegmentParserRuleCall_5());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_PushSegment_5=rulePushSegment();
+                    this_PostCommentSegment_5=rulePostCommentSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_PushSegment_5;
+                      			current = this_PostCommentSegment_5;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -2869,7 +2885,7 @@
                     }
                     break;
                 case 7 :
-                    // InternalIdioms.g:997:3: this_SoftNewLineSegment_6= ruleSoftNewLineSegment
+                    // InternalIdioms.g:997:3: this_PreCommentSegment_6= rulePreCommentSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2878,17 +2894,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_6());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getPreCommentSegmentParserRuleCall_6());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_SoftNewLineSegment_6=ruleSoftNewLineSegment();
+                    this_PreCommentSegment_6=rulePreCommentSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_SoftNewLineSegment_6;
+                      			current = this_PreCommentSegment_6;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -2896,7 +2912,7 @@
                     }
                     break;
                 case 8 :
-                    // InternalIdioms.g:1009:3: this_SoftSpaceSegment_7= ruleSoftSpaceSegment
+                    // InternalIdioms.g:1009:3: this_PushSegment_7= rulePushSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2905,17 +2921,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_7());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getPushSegmentParserRuleCall_7());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_SoftSpaceSegment_7=ruleSoftSpaceSegment();
+                    this_PushSegment_7=rulePushSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_SoftSpaceSegment_7;
+                      			current = this_PushSegment_7;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -2923,7 +2939,7 @@
                     }
                     break;
                 case 9 :
-                    // InternalIdioms.g:1021:3: this_StringSegment_8= ruleStringSegment
+                    // InternalIdioms.g:1021:3: this_SoftNewLineSegment_8= ruleSoftNewLineSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2932,17 +2948,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_8());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getSoftNewLineSegmentParserRuleCall_8());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_StringSegment_8=ruleStringSegment();
+                    this_SoftNewLineSegment_8=ruleSoftNewLineSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_StringSegment_8;
+                      			current = this_SoftNewLineSegment_8;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -2950,7 +2966,7 @@
                     }
                     break;
                 case 10 :
-                    // InternalIdioms.g:1033:3: this_ValueSegment_9= ruleValueSegment
+                    // InternalIdioms.g:1033:3: this_SoftSpaceSegment_9= ruleSoftSpaceSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2959,17 +2975,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_9());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getSoftSpaceSegmentParserRuleCall_9());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_ValueSegment_9=ruleValueSegment();
+                    this_SoftSpaceSegment_9=ruleSoftSpaceSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_ValueSegment_9;
+                      			current = this_SoftSpaceSegment_9;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -2977,7 +2993,7 @@
                     }
                     break;
                 case 11 :
-                    // InternalIdioms.g:1045:3: this_WrapAnchorSegment_10= ruleWrapAnchorSegment
+                    // InternalIdioms.g:1045:3: this_StringSegment_10= ruleStringSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -2986,17 +3002,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_10());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getStringSegmentParserRuleCall_10());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_WrapAnchorSegment_10=ruleWrapAnchorSegment();
+                    this_StringSegment_10=ruleStringSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_WrapAnchorSegment_10;
+                      			current = this_StringSegment_10;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -3004,7 +3020,7 @@
                     }
                     break;
                 case 12 :
-                    // InternalIdioms.g:1057:3: this_WrapBeginAllSegment_11= ruleWrapBeginAllSegment
+                    // InternalIdioms.g:1057:3: this_ValueSegment_11= ruleValueSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3013,17 +3029,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_11());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getValueSegmentParserRuleCall_11());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_WrapBeginAllSegment_11=ruleWrapBeginAllSegment();
+                    this_ValueSegment_11=ruleValueSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_WrapBeginAllSegment_11;
+                      			current = this_ValueSegment_11;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -3031,7 +3047,7 @@
                     }
                     break;
                 case 13 :
-                    // InternalIdioms.g:1069:3: this_WrapBeginSomeSegment_12= ruleWrapBeginSomeSegment
+                    // InternalIdioms.g:1069:3: this_WrapAnchorSegment_12= ruleWrapAnchorSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3040,17 +3056,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_12());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapAnchorSegmentParserRuleCall_12());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_WrapBeginSomeSegment_12=ruleWrapBeginSomeSegment();
+                    this_WrapAnchorSegment_12=ruleWrapAnchorSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_WrapBeginSomeSegment_12;
+                      			current = this_WrapAnchorSegment_12;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -3058,7 +3074,7 @@
                     }
                     break;
                 case 14 :
-                    // InternalIdioms.g:1081:3: this_WrapEndSegment_13= ruleWrapEndSegment
+                    // InternalIdioms.g:1081:3: this_WrapBeginAllSegment_13= ruleWrapBeginAllSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3067,17 +3083,17 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_13());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginAllSegmentParserRuleCall_13());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_WrapEndSegment_13=ruleWrapEndSegment();
+                    this_WrapBeginAllSegment_13=ruleWrapBeginAllSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_WrapEndSegment_13;
+                      			current = this_WrapBeginAllSegment_13;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -3085,7 +3101,7 @@
                     }
                     break;
                 case 15 :
-                    // InternalIdioms.g:1093:3: this_WrapHereSegment_14= ruleWrapHereSegment
+                    // InternalIdioms.g:1093:3: this_WrapBeginSomeSegment_14= ruleWrapBeginSomeSegment
                     {
                     if ( state.backtracking==0 ) {
 
@@ -3094,17 +3110,71 @@
                     }
                     if ( state.backtracking==0 ) {
 
-                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_14());
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapBeginSomeSegmentParserRuleCall_14());
 
                     }
                     pushFollow(FollowSets000.FOLLOW_2);
-                    this_WrapHereSegment_14=ruleWrapHereSegment();
+                    this_WrapBeginSomeSegment_14=ruleWrapBeginSomeSegment();
 
                     state._fsp--;
                     if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
-                      			current = this_WrapHereSegment_14;
+                      			current = this_WrapBeginSomeSegment_14;
+                      			afterParserOrEnumRuleCall();
+
+                    }
+
+                    }
+                    break;
+                case 16 :
+                    // InternalIdioms.g:1105:3: this_WrapEndSegment_15= ruleWrapEndSegment
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapEndSegmentParserRuleCall_15());
+
+                    }
+                    pushFollow(FollowSets000.FOLLOW_2);
+                    this_WrapEndSegment_15=ruleWrapEndSegment();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_WrapEndSegment_15;
+                      			afterParserOrEnumRuleCall();
+
+                    }
+
+                    }
+                    break;
+                case 17 :
+                    // InternalIdioms.g:1117:3: this_WrapHereSegment_16= ruleWrapHereSegment
+                    {
+                    if ( state.backtracking==0 ) {
+
+                      			/* */
+
+                    }
+                    if ( state.backtracking==0 ) {
+
+                      			newCompositeNode(grammarAccess.getSegmentAccess().getWrapHereSegmentParserRuleCall_16());
+
+                    }
+                    pushFollow(FollowSets000.FOLLOW_2);
+                    this_WrapHereSegment_16=ruleWrapHereSegment();
+
+                    state._fsp--;
+                    if (state.failed) return current;
+                    if ( state.backtracking==0 ) {
+
+                      			current = this_WrapHereSegment_16;
                       			afterParserOrEnumRuleCall();
 
                     }
@@ -3136,7 +3206,7 @@
 
 
     // $ANTLR start "entryRuleCustomSegment"
-    // InternalIdioms.g:1108:1: entryRuleCustomSegment returns [EObject current=null] : iv_ruleCustomSegment= ruleCustomSegment EOF ;
+    // InternalIdioms.g:1132:1: entryRuleCustomSegment returns [EObject current=null] : iv_ruleCustomSegment= ruleCustomSegment EOF ;
     public final EObject entryRuleCustomSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3144,8 +3214,8 @@
 
 
         try {
-            // InternalIdioms.g:1108:54: (iv_ruleCustomSegment= ruleCustomSegment EOF )
-            // InternalIdioms.g:1109:2: iv_ruleCustomSegment= ruleCustomSegment EOF
+            // InternalIdioms.g:1132:54: (iv_ruleCustomSegment= ruleCustomSegment EOF )
+            // InternalIdioms.g:1133:2: iv_ruleCustomSegment= ruleCustomSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getCustomSegmentRule());
@@ -3176,7 +3246,7 @@
 
 
     // $ANTLR start "ruleCustomSegment"
-    // InternalIdioms.g:1115:1: ruleCustomSegment returns [EObject current=null] : (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) ) ;
+    // InternalIdioms.g:1139:1: ruleCustomSegment returns [EObject current=null] : (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) ) ;
     public final EObject ruleCustomSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3187,11 +3257,11 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1121:2: ( (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) ) )
-            // InternalIdioms.g:1122:2: (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) )
+            // InternalIdioms.g:1145:2: ( (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) ) )
+            // InternalIdioms.g:1146:2: (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) )
             {
-            // InternalIdioms.g:1122:2: (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) )
-            // InternalIdioms.g:1123:3: otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) )
+            // InternalIdioms.g:1146:2: (otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) ) )
+            // InternalIdioms.g:1147:3: otherlv_0= 'custom' ( (lv_supportClassName_1_0= RULE_STRING ) )
             {
             otherlv_0=(Token)match(input,24,FollowSets000.FOLLOW_7); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -3199,11 +3269,11 @@
               			newLeafNode(otherlv_0, grammarAccess.getCustomSegmentAccess().getCustomKeyword_0());
 
             }
-            // InternalIdioms.g:1127:3: ( (lv_supportClassName_1_0= RULE_STRING ) )
-            // InternalIdioms.g:1128:4: (lv_supportClassName_1_0= RULE_STRING )
+            // InternalIdioms.g:1151:3: ( (lv_supportClassName_1_0= RULE_STRING ) )
+            // InternalIdioms.g:1152:4: (lv_supportClassName_1_0= RULE_STRING )
             {
-            // InternalIdioms.g:1128:4: (lv_supportClassName_1_0= RULE_STRING )
-            // InternalIdioms.g:1129:5: lv_supportClassName_1_0= RULE_STRING
+            // InternalIdioms.g:1152:4: (lv_supportClassName_1_0= RULE_STRING )
+            // InternalIdioms.g:1153:5: lv_supportClassName_1_0= RULE_STRING
             {
             lv_supportClassName_1_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -3254,7 +3324,7 @@
 
 
     // $ANTLR start "entryRuleHalfNewLineSegment"
-    // InternalIdioms.g:1149:1: entryRuleHalfNewLineSegment returns [EObject current=null] : iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF ;
+    // InternalIdioms.g:1173:1: entryRuleHalfNewLineSegment returns [EObject current=null] : iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF ;
     public final EObject entryRuleHalfNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3262,8 +3332,8 @@
 
 
         try {
-            // InternalIdioms.g:1149:59: (iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF )
-            // InternalIdioms.g:1150:2: iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF
+            // InternalIdioms.g:1173:59: (iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF )
+            // InternalIdioms.g:1174:2: iv_ruleHalfNewLineSegment= ruleHalfNewLineSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getHalfNewLineSegmentRule());
@@ -3294,7 +3364,7 @@
 
 
     // $ANTLR start "ruleHalfNewLineSegment"
-    // InternalIdioms.g:1156:1: ruleHalfNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'half-new-line' ) ;
+    // InternalIdioms.g:1180:1: ruleHalfNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'half-new-line' ) ;
     public final EObject ruleHalfNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3304,14 +3374,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1162:2: ( ( () otherlv_1= 'half-new-line' ) )
-            // InternalIdioms.g:1163:2: ( () otherlv_1= 'half-new-line' )
+            // InternalIdioms.g:1186:2: ( ( () otherlv_1= 'half-new-line' ) )
+            // InternalIdioms.g:1187:2: ( () otherlv_1= 'half-new-line' )
             {
-            // InternalIdioms.g:1163:2: ( () otherlv_1= 'half-new-line' )
-            // InternalIdioms.g:1164:3: () otherlv_1= 'half-new-line'
+            // InternalIdioms.g:1187:2: ( () otherlv_1= 'half-new-line' )
+            // InternalIdioms.g:1188:3: () otherlv_1= 'half-new-line'
             {
-            // InternalIdioms.g:1164:3: ()
-            // InternalIdioms.g:1165:4:
+            // InternalIdioms.g:1188:3: ()
+            // InternalIdioms.g:1189:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3359,7 +3429,7 @@
 
 
     // $ANTLR start "entryRuleNewLineSegment"
-    // InternalIdioms.g:1182:1: entryRuleNewLineSegment returns [EObject current=null] : iv_ruleNewLineSegment= ruleNewLineSegment EOF ;
+    // InternalIdioms.g:1206:1: entryRuleNewLineSegment returns [EObject current=null] : iv_ruleNewLineSegment= ruleNewLineSegment EOF ;
     public final EObject entryRuleNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3367,8 +3437,8 @@
 
 
         try {
-            // InternalIdioms.g:1182:55: (iv_ruleNewLineSegment= ruleNewLineSegment EOF )
-            // InternalIdioms.g:1183:2: iv_ruleNewLineSegment= ruleNewLineSegment EOF
+            // InternalIdioms.g:1206:55: (iv_ruleNewLineSegment= ruleNewLineSegment EOF )
+            // InternalIdioms.g:1207:2: iv_ruleNewLineSegment= ruleNewLineSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNewLineSegmentRule());
@@ -3399,7 +3469,7 @@
 
 
     // $ANTLR start "ruleNewLineSegment"
-    // InternalIdioms.g:1189:1: ruleNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'new-line' ) ;
+    // InternalIdioms.g:1213:1: ruleNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'new-line' ) ;
     public final EObject ruleNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3409,14 +3479,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1195:2: ( ( () otherlv_1= 'new-line' ) )
-            // InternalIdioms.g:1196:2: ( () otherlv_1= 'new-line' )
+            // InternalIdioms.g:1219:2: ( ( () otherlv_1= 'new-line' ) )
+            // InternalIdioms.g:1220:2: ( () otherlv_1= 'new-line' )
             {
-            // InternalIdioms.g:1196:2: ( () otherlv_1= 'new-line' )
-            // InternalIdioms.g:1197:3: () otherlv_1= 'new-line'
+            // InternalIdioms.g:1220:2: ( () otherlv_1= 'new-line' )
+            // InternalIdioms.g:1221:3: () otherlv_1= 'new-line'
             {
-            // InternalIdioms.g:1197:3: ()
-            // InternalIdioms.g:1198:4:
+            // InternalIdioms.g:1221:3: ()
+            // InternalIdioms.g:1222:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3464,7 +3534,7 @@
 
 
     // $ANTLR start "entryRuleNoSpaceSegment"
-    // InternalIdioms.g:1215:1: entryRuleNoSpaceSegment returns [EObject current=null] : iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF ;
+    // InternalIdioms.g:1239:1: entryRuleNoSpaceSegment returns [EObject current=null] : iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF ;
     public final EObject entryRuleNoSpaceSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3472,8 +3542,8 @@
 
 
         try {
-            // InternalIdioms.g:1215:55: (iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF )
-            // InternalIdioms.g:1216:2: iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF
+            // InternalIdioms.g:1239:55: (iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF )
+            // InternalIdioms.g:1240:2: iv_ruleNoSpaceSegment= ruleNoSpaceSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getNoSpaceSegmentRule());
@@ -3504,7 +3574,7 @@
 
 
     // $ANTLR start "ruleNoSpaceSegment"
-    // InternalIdioms.g:1222:1: ruleNoSpaceSegment returns [EObject current=null] : ( () otherlv_1= 'no-space' ) ;
+    // InternalIdioms.g:1246:1: ruleNoSpaceSegment returns [EObject current=null] : ( () otherlv_1= 'no-space' ) ;
     public final EObject ruleNoSpaceSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3514,14 +3584,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1228:2: ( ( () otherlv_1= 'no-space' ) )
-            // InternalIdioms.g:1229:2: ( () otherlv_1= 'no-space' )
+            // InternalIdioms.g:1252:2: ( ( () otherlv_1= 'no-space' ) )
+            // InternalIdioms.g:1253:2: ( () otherlv_1= 'no-space' )
             {
-            // InternalIdioms.g:1229:2: ( () otherlv_1= 'no-space' )
-            // InternalIdioms.g:1230:3: () otherlv_1= 'no-space'
+            // InternalIdioms.g:1253:2: ( () otherlv_1= 'no-space' )
+            // InternalIdioms.g:1254:3: () otherlv_1= 'no-space'
             {
-            // InternalIdioms.g:1230:3: ()
-            // InternalIdioms.g:1231:4:
+            // InternalIdioms.g:1254:3: ()
+            // InternalIdioms.g:1255:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3569,7 +3639,7 @@
 
 
     // $ANTLR start "entryRulePopSegment"
-    // InternalIdioms.g:1248:1: entryRulePopSegment returns [EObject current=null] : iv_rulePopSegment= rulePopSegment EOF ;
+    // InternalIdioms.g:1272:1: entryRulePopSegment returns [EObject current=null] : iv_rulePopSegment= rulePopSegment EOF ;
     public final EObject entryRulePopSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3577,8 +3647,8 @@
 
 
         try {
-            // InternalIdioms.g:1248:51: (iv_rulePopSegment= rulePopSegment EOF )
-            // InternalIdioms.g:1249:2: iv_rulePopSegment= rulePopSegment EOF
+            // InternalIdioms.g:1272:51: (iv_rulePopSegment= rulePopSegment EOF )
+            // InternalIdioms.g:1273:2: iv_rulePopSegment= rulePopSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPopSegmentRule());
@@ -3609,7 +3679,7 @@
 
 
     // $ANTLR start "rulePopSegment"
-    // InternalIdioms.g:1255:1: rulePopSegment returns [EObject current=null] : ( () otherlv_1= 'pop' ) ;
+    // InternalIdioms.g:1279:1: rulePopSegment returns [EObject current=null] : ( () otherlv_1= 'pop' ) ;
     public final EObject rulePopSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3619,14 +3689,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1261:2: ( ( () otherlv_1= 'pop' ) )
-            // InternalIdioms.g:1262:2: ( () otherlv_1= 'pop' )
+            // InternalIdioms.g:1285:2: ( ( () otherlv_1= 'pop' ) )
+            // InternalIdioms.g:1286:2: ( () otherlv_1= 'pop' )
             {
-            // InternalIdioms.g:1262:2: ( () otherlv_1= 'pop' )
-            // InternalIdioms.g:1263:3: () otherlv_1= 'pop'
+            // InternalIdioms.g:1286:2: ( () otherlv_1= 'pop' )
+            // InternalIdioms.g:1287:3: () otherlv_1= 'pop'
             {
-            // InternalIdioms.g:1263:3: ()
-            // InternalIdioms.g:1264:4:
+            // InternalIdioms.g:1287:3: ()
+            // InternalIdioms.g:1288:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3673,8 +3743,218 @@
     // $ANTLR end "rulePopSegment"
 
 
+    // $ANTLR start "entryRulePostCommentSegment"
+    // InternalIdioms.g:1305:1: entryRulePostCommentSegment returns [EObject current=null] : iv_rulePostCommentSegment= rulePostCommentSegment EOF ;
+    public final EObject entryRulePostCommentSegment() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulePostCommentSegment = null;
+
+
+        try {
+            // InternalIdioms.g:1305:59: (iv_rulePostCommentSegment= rulePostCommentSegment EOF )
+            // InternalIdioms.g:1306:2: iv_rulePostCommentSegment= rulePostCommentSegment EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getPostCommentSegmentRule());
+            }
+            pushFollow(FollowSets000.FOLLOW_1);
+            iv_rulePostCommentSegment=rulePostCommentSegment();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_rulePostCommentSegment;
+            }
+            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRulePostCommentSegment"
+
+
+    // $ANTLR start "rulePostCommentSegment"
+    // InternalIdioms.g:1312:1: rulePostCommentSegment returns [EObject current=null] : ( () otherlv_1= 'post-comment' ) ;
+    public final EObject rulePostCommentSegment() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalIdioms.g:1318:2: ( ( () otherlv_1= 'post-comment' ) )
+            // InternalIdioms.g:1319:2: ( () otherlv_1= 'post-comment' )
+            {
+            // InternalIdioms.g:1319:2: ( () otherlv_1= 'post-comment' )
+            // InternalIdioms.g:1320:3: () otherlv_1= 'post-comment'
+            {
+            // InternalIdioms.g:1320:3: ()
+            // InternalIdioms.g:1321:4:
+            {
+            if ( state.backtracking==0 ) {
+
+              				/* */
+
+            }
+            if ( state.backtracking==0 ) {
+
+              				current = forceCreateModelElement(
+              					grammarAccess.getPostCommentSegmentAccess().getPostCommentSegmentAction_0(),
+              					current);
+
+            }
+
+            }
+
+            otherlv_1=(Token)match(input,29,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getPostCommentSegmentAccess().getPostCommentKeyword_1());
+
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "rulePostCommentSegment"
+
+
+    // $ANTLR start "entryRulePreCommentSegment"
+    // InternalIdioms.g:1338:1: entryRulePreCommentSegment returns [EObject current=null] : iv_rulePreCommentSegment= rulePreCommentSegment EOF ;
+    public final EObject entryRulePreCommentSegment() throws RecognitionException {
+        EObject current = null;
+
+        EObject iv_rulePreCommentSegment = null;
+
+
+        try {
+            // InternalIdioms.g:1338:58: (iv_rulePreCommentSegment= rulePreCommentSegment EOF )
+            // InternalIdioms.g:1339:2: iv_rulePreCommentSegment= rulePreCommentSegment EOF
+            {
+            if ( state.backtracking==0 ) {
+               newCompositeNode(grammarAccess.getPreCommentSegmentRule());
+            }
+            pushFollow(FollowSets000.FOLLOW_1);
+            iv_rulePreCommentSegment=rulePreCommentSegment();
+
+            state._fsp--;
+            if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+               current =iv_rulePreCommentSegment;
+            }
+            match(input,EOF,FollowSets000.FOLLOW_2); if (state.failed) return current;
+
+            }
+
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "entryRulePreCommentSegment"
+
+
+    // $ANTLR start "rulePreCommentSegment"
+    // InternalIdioms.g:1345:1: rulePreCommentSegment returns [EObject current=null] : ( () otherlv_1= 'pre-comment' ) ;
+    public final EObject rulePreCommentSegment() throws RecognitionException {
+        EObject current = null;
+
+        Token otherlv_1=null;
+
+
+        	enterRule();
+
+        try {
+            // InternalIdioms.g:1351:2: ( ( () otherlv_1= 'pre-comment' ) )
+            // InternalIdioms.g:1352:2: ( () otherlv_1= 'pre-comment' )
+            {
+            // InternalIdioms.g:1352:2: ( () otherlv_1= 'pre-comment' )
+            // InternalIdioms.g:1353:3: () otherlv_1= 'pre-comment'
+            {
+            // InternalIdioms.g:1353:3: ()
+            // InternalIdioms.g:1354:4:
+            {
+            if ( state.backtracking==0 ) {
+
+              				/* */
+
+            }
+            if ( state.backtracking==0 ) {
+
+              				current = forceCreateModelElement(
+              					grammarAccess.getPreCommentSegmentAccess().getPreCommentSegmentAction_0(),
+              					current);
+
+            }
+
+            }
+
+            otherlv_1=(Token)match(input,30,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            if ( state.backtracking==0 ) {
+
+              			newLeafNode(otherlv_1, grammarAccess.getPreCommentSegmentAccess().getPreCommentKeyword_1());
+
+            }
+
+            }
+
+
+            }
+
+            if ( state.backtracking==0 ) {
+
+              	leaveRule();
+
+            }
+        }
+
+            catch (RecognitionException re) {
+                recover(input,re);
+                appendSkippedTokens();
+            }
+        finally {
+        }
+        return current;
+    }
+    // $ANTLR end "rulePreCommentSegment"
+
+
     // $ANTLR start "entryRulePushSegment"
-    // InternalIdioms.g:1281:1: entryRulePushSegment returns [EObject current=null] : iv_rulePushSegment= rulePushSegment EOF ;
+    // InternalIdioms.g:1371:1: entryRulePushSegment returns [EObject current=null] : iv_rulePushSegment= rulePushSegment EOF ;
     public final EObject entryRulePushSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3682,8 +3962,8 @@
 
 
         try {
-            // InternalIdioms.g:1281:52: (iv_rulePushSegment= rulePushSegment EOF )
-            // InternalIdioms.g:1282:2: iv_rulePushSegment= rulePushSegment EOF
+            // InternalIdioms.g:1371:52: (iv_rulePushSegment= rulePushSegment EOF )
+            // InternalIdioms.g:1372:2: iv_rulePushSegment= rulePushSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getPushSegmentRule());
@@ -3714,7 +3994,7 @@
 
 
     // $ANTLR start "rulePushSegment"
-    // InternalIdioms.g:1288:1: rulePushSegment returns [EObject current=null] : ( () otherlv_1= 'push' ) ;
+    // InternalIdioms.g:1378:1: rulePushSegment returns [EObject current=null] : ( () otherlv_1= 'push' ) ;
     public final EObject rulePushSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3724,14 +4004,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1294:2: ( ( () otherlv_1= 'push' ) )
-            // InternalIdioms.g:1295:2: ( () otherlv_1= 'push' )
+            // InternalIdioms.g:1384:2: ( ( () otherlv_1= 'push' ) )
+            // InternalIdioms.g:1385:2: ( () otherlv_1= 'push' )
             {
-            // InternalIdioms.g:1295:2: ( () otherlv_1= 'push' )
-            // InternalIdioms.g:1296:3: () otherlv_1= 'push'
+            // InternalIdioms.g:1385:2: ( () otherlv_1= 'push' )
+            // InternalIdioms.g:1386:3: () otherlv_1= 'push'
             {
-            // InternalIdioms.g:1296:3: ()
-            // InternalIdioms.g:1297:4:
+            // InternalIdioms.g:1386:3: ()
+            // InternalIdioms.g:1387:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3748,7 +4028,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,29,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,31,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getPushSegmentAccess().getPushKeyword_1());
@@ -3779,7 +4059,7 @@
 
 
     // $ANTLR start "entryRuleSoftNewLineSegment"
-    // InternalIdioms.g:1314:1: entryRuleSoftNewLineSegment returns [EObject current=null] : iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF ;
+    // InternalIdioms.g:1404:1: entryRuleSoftNewLineSegment returns [EObject current=null] : iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF ;
     public final EObject entryRuleSoftNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3787,8 +4067,8 @@
 
 
         try {
-            // InternalIdioms.g:1314:59: (iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF )
-            // InternalIdioms.g:1315:2: iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF
+            // InternalIdioms.g:1404:59: (iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF )
+            // InternalIdioms.g:1405:2: iv_ruleSoftNewLineSegment= ruleSoftNewLineSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSoftNewLineSegmentRule());
@@ -3819,7 +4099,7 @@
 
 
     // $ANTLR start "ruleSoftNewLineSegment"
-    // InternalIdioms.g:1321:1: ruleSoftNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'soft-new-line' ) ;
+    // InternalIdioms.g:1411:1: ruleSoftNewLineSegment returns [EObject current=null] : ( () otherlv_1= 'soft-new-line' ) ;
     public final EObject ruleSoftNewLineSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3829,14 +4109,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1327:2: ( ( () otherlv_1= 'soft-new-line' ) )
-            // InternalIdioms.g:1328:2: ( () otherlv_1= 'soft-new-line' )
+            // InternalIdioms.g:1417:2: ( ( () otherlv_1= 'soft-new-line' ) )
+            // InternalIdioms.g:1418:2: ( () otherlv_1= 'soft-new-line' )
             {
-            // InternalIdioms.g:1328:2: ( () otherlv_1= 'soft-new-line' )
-            // InternalIdioms.g:1329:3: () otherlv_1= 'soft-new-line'
+            // InternalIdioms.g:1418:2: ( () otherlv_1= 'soft-new-line' )
+            // InternalIdioms.g:1419:3: () otherlv_1= 'soft-new-line'
             {
-            // InternalIdioms.g:1329:3: ()
-            // InternalIdioms.g:1330:4:
+            // InternalIdioms.g:1419:3: ()
+            // InternalIdioms.g:1420:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3853,7 +4133,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,30,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,32,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getSoftNewLineSegmentAccess().getSoftNewLineKeyword_1());
@@ -3884,7 +4164,7 @@
 
 
     // $ANTLR start "entryRuleSoftSpaceSegment"
-    // InternalIdioms.g:1347:1: entryRuleSoftSpaceSegment returns [EObject current=null] : iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF ;
+    // InternalIdioms.g:1437:1: entryRuleSoftSpaceSegment returns [EObject current=null] : iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF ;
     public final EObject entryRuleSoftSpaceSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3892,8 +4172,8 @@
 
 
         try {
-            // InternalIdioms.g:1347:57: (iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF )
-            // InternalIdioms.g:1348:2: iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF
+            // InternalIdioms.g:1437:57: (iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF )
+            // InternalIdioms.g:1438:2: iv_ruleSoftSpaceSegment= ruleSoftSpaceSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSoftSpaceSegmentRule());
@@ -3924,7 +4204,7 @@
 
 
     // $ANTLR start "ruleSoftSpaceSegment"
-    // InternalIdioms.g:1354:1: ruleSoftSpaceSegment returns [EObject current=null] : ( () otherlv_1= 'soft-space' ) ;
+    // InternalIdioms.g:1444:1: ruleSoftSpaceSegment returns [EObject current=null] : ( () otherlv_1= 'soft-space' ) ;
     public final EObject ruleSoftSpaceSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3934,14 +4214,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1360:2: ( ( () otherlv_1= 'soft-space' ) )
-            // InternalIdioms.g:1361:2: ( () otherlv_1= 'soft-space' )
+            // InternalIdioms.g:1450:2: ( ( () otherlv_1= 'soft-space' ) )
+            // InternalIdioms.g:1451:2: ( () otherlv_1= 'soft-space' )
             {
-            // InternalIdioms.g:1361:2: ( () otherlv_1= 'soft-space' )
-            // InternalIdioms.g:1362:3: () otherlv_1= 'soft-space'
+            // InternalIdioms.g:1451:2: ( () otherlv_1= 'soft-space' )
+            // InternalIdioms.g:1452:3: () otherlv_1= 'soft-space'
             {
-            // InternalIdioms.g:1362:3: ()
-            // InternalIdioms.g:1363:4:
+            // InternalIdioms.g:1452:3: ()
+            // InternalIdioms.g:1453:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -3958,7 +4238,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,31,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,33,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getSoftSpaceSegmentAccess().getSoftSpaceKeyword_1());
@@ -3989,7 +4269,7 @@
 
 
     // $ANTLR start "entryRuleStringSegment"
-    // InternalIdioms.g:1380:1: entryRuleStringSegment returns [EObject current=null] : iv_ruleStringSegment= ruleStringSegment EOF ;
+    // InternalIdioms.g:1470:1: entryRuleStringSegment returns [EObject current=null] : iv_ruleStringSegment= ruleStringSegment EOF ;
     public final EObject entryRuleStringSegment() throws RecognitionException {
         EObject current = null;
 
@@ -3997,8 +4277,8 @@
 
 
         try {
-            // InternalIdioms.g:1380:54: (iv_ruleStringSegment= ruleStringSegment EOF )
-            // InternalIdioms.g:1381:2: iv_ruleStringSegment= ruleStringSegment EOF
+            // InternalIdioms.g:1470:54: (iv_ruleStringSegment= ruleStringSegment EOF )
+            // InternalIdioms.g:1471:2: iv_ruleStringSegment= ruleStringSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getStringSegmentRule());
@@ -4029,7 +4309,7 @@
 
 
     // $ANTLR start "ruleStringSegment"
-    // InternalIdioms.g:1387:1: ruleStringSegment returns [EObject current=null] : (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) ) ;
+    // InternalIdioms.g:1477:1: ruleStringSegment returns [EObject current=null] : (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) ) ;
     public final EObject ruleStringSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4041,23 +4321,23 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1393:2: ( (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) ) )
-            // InternalIdioms.g:1394:2: (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) )
+            // InternalIdioms.g:1483:2: ( (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) ) )
+            // InternalIdioms.g:1484:2: (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) )
             {
-            // InternalIdioms.g:1394:2: (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) )
-            // InternalIdioms.g:1395:3: otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) )
+            // InternalIdioms.g:1484:2: (otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) ) )
+            // InternalIdioms.g:1485:3: otherlv_0= 'string' ( (lv_string_1_0= RULE_STRING ) ) ( (lv_printable_2_0= 'printable' ) )
             {
-            otherlv_0=(Token)match(input,32,FollowSets000.FOLLOW_7); if (state.failed) return current;
+            otherlv_0=(Token)match(input,34,FollowSets000.FOLLOW_7); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_0, grammarAccess.getStringSegmentAccess().getStringKeyword_0());
 
             }
-            // InternalIdioms.g:1399:3: ( (lv_string_1_0= RULE_STRING ) )
-            // InternalIdioms.g:1400:4: (lv_string_1_0= RULE_STRING )
+            // InternalIdioms.g:1489:3: ( (lv_string_1_0= RULE_STRING ) )
+            // InternalIdioms.g:1490:4: (lv_string_1_0= RULE_STRING )
             {
-            // InternalIdioms.g:1400:4: (lv_string_1_0= RULE_STRING )
-            // InternalIdioms.g:1401:5: lv_string_1_0= RULE_STRING
+            // InternalIdioms.g:1490:4: (lv_string_1_0= RULE_STRING )
+            // InternalIdioms.g:1491:5: lv_string_1_0= RULE_STRING
             {
             lv_string_1_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_14); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -4083,13 +4363,13 @@
 
             }
 
-            // InternalIdioms.g:1417:3: ( (lv_printable_2_0= 'printable' ) )
-            // InternalIdioms.g:1418:4: (lv_printable_2_0= 'printable' )
+            // InternalIdioms.g:1507:3: ( (lv_printable_2_0= 'printable' ) )
+            // InternalIdioms.g:1508:4: (lv_printable_2_0= 'printable' )
             {
-            // InternalIdioms.g:1418:4: (lv_printable_2_0= 'printable' )
-            // InternalIdioms.g:1419:5: lv_printable_2_0= 'printable'
+            // InternalIdioms.g:1508:4: (lv_printable_2_0= 'printable' )
+            // InternalIdioms.g:1509:5: lv_printable_2_0= 'printable'
             {
-            lv_printable_2_0=(Token)match(input,33,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            lv_printable_2_0=(Token)match(input,35,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               					newLeafNode(lv_printable_2_0, grammarAccess.getStringSegmentAccess().getPrintablePrintableKeyword_2_0());
@@ -4134,7 +4414,7 @@
 
 
     // $ANTLR start "entryRuleValueSegment"
-    // InternalIdioms.g:1435:1: entryRuleValueSegment returns [EObject current=null] : iv_ruleValueSegment= ruleValueSegment EOF ;
+    // InternalIdioms.g:1525:1: entryRuleValueSegment returns [EObject current=null] : iv_ruleValueSegment= ruleValueSegment EOF ;
     public final EObject entryRuleValueSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4142,8 +4422,8 @@
 
 
         try {
-            // InternalIdioms.g:1435:53: (iv_ruleValueSegment= ruleValueSegment EOF )
-            // InternalIdioms.g:1436:2: iv_ruleValueSegment= ruleValueSegment EOF
+            // InternalIdioms.g:1525:53: (iv_ruleValueSegment= ruleValueSegment EOF )
+            // InternalIdioms.g:1526:2: iv_ruleValueSegment= ruleValueSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getValueSegmentRule());
@@ -4174,7 +4454,7 @@
 
 
     // $ANTLR start "ruleValueSegment"
-    // InternalIdioms.g:1442:1: ruleValueSegment returns [EObject current=null] : ( () otherlv_1= 'value' ) ;
+    // InternalIdioms.g:1532:1: ruleValueSegment returns [EObject current=null] : ( () otherlv_1= 'value' ) ;
     public final EObject ruleValueSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4184,14 +4464,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1448:2: ( ( () otherlv_1= 'value' ) )
-            // InternalIdioms.g:1449:2: ( () otherlv_1= 'value' )
+            // InternalIdioms.g:1538:2: ( ( () otherlv_1= 'value' ) )
+            // InternalIdioms.g:1539:2: ( () otherlv_1= 'value' )
             {
-            // InternalIdioms.g:1449:2: ( () otherlv_1= 'value' )
-            // InternalIdioms.g:1450:3: () otherlv_1= 'value'
+            // InternalIdioms.g:1539:2: ( () otherlv_1= 'value' )
+            // InternalIdioms.g:1540:3: () otherlv_1= 'value'
             {
-            // InternalIdioms.g:1450:3: ()
-            // InternalIdioms.g:1451:4:
+            // InternalIdioms.g:1540:3: ()
+            // InternalIdioms.g:1541:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4208,7 +4488,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,34,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,36,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getValueSegmentAccess().getValueKeyword_1());
@@ -4239,7 +4519,7 @@
 
 
     // $ANTLR start "entryRuleWrapAnchorSegment"
-    // InternalIdioms.g:1468:1: entryRuleWrapAnchorSegment returns [EObject current=null] : iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF ;
+    // InternalIdioms.g:1558:1: entryRuleWrapAnchorSegment returns [EObject current=null] : iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF ;
     public final EObject entryRuleWrapAnchorSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4247,8 +4527,8 @@
 
 
         try {
-            // InternalIdioms.g:1468:58: (iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF )
-            // InternalIdioms.g:1469:2: iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF
+            // InternalIdioms.g:1558:58: (iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF )
+            // InternalIdioms.g:1559:2: iv_ruleWrapAnchorSegment= ruleWrapAnchorSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWrapAnchorSegmentRule());
@@ -4279,7 +4559,7 @@
 
 
     // $ANTLR start "ruleWrapAnchorSegment"
-    // InternalIdioms.g:1475:1: ruleWrapAnchorSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-anchor' ) ;
+    // InternalIdioms.g:1565:1: ruleWrapAnchorSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-anchor' ) ;
     public final EObject ruleWrapAnchorSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4289,14 +4569,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1481:2: ( ( () otherlv_1= 'wrap-anchor' ) )
-            // InternalIdioms.g:1482:2: ( () otherlv_1= 'wrap-anchor' )
+            // InternalIdioms.g:1571:2: ( ( () otherlv_1= 'wrap-anchor' ) )
+            // InternalIdioms.g:1572:2: ( () otherlv_1= 'wrap-anchor' )
             {
-            // InternalIdioms.g:1482:2: ( () otherlv_1= 'wrap-anchor' )
-            // InternalIdioms.g:1483:3: () otherlv_1= 'wrap-anchor'
+            // InternalIdioms.g:1572:2: ( () otherlv_1= 'wrap-anchor' )
+            // InternalIdioms.g:1573:3: () otherlv_1= 'wrap-anchor'
             {
-            // InternalIdioms.g:1483:3: ()
-            // InternalIdioms.g:1484:4:
+            // InternalIdioms.g:1573:3: ()
+            // InternalIdioms.g:1574:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4313,7 +4593,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,35,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,37,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getWrapAnchorSegmentAccess().getWrapAnchorKeyword_1());
@@ -4344,7 +4624,7 @@
 
 
     // $ANTLR start "entryRuleWrapBeginAllSegment"
-    // InternalIdioms.g:1501:1: entryRuleWrapBeginAllSegment returns [EObject current=null] : iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF ;
+    // InternalIdioms.g:1591:1: entryRuleWrapBeginAllSegment returns [EObject current=null] : iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF ;
     public final EObject entryRuleWrapBeginAllSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4352,8 +4632,8 @@
 
 
         try {
-            // InternalIdioms.g:1501:60: (iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF )
-            // InternalIdioms.g:1502:2: iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF
+            // InternalIdioms.g:1591:60: (iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF )
+            // InternalIdioms.g:1592:2: iv_ruleWrapBeginAllSegment= ruleWrapBeginAllSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWrapBeginAllSegmentRule());
@@ -4384,7 +4664,7 @@
 
 
     // $ANTLR start "ruleWrapBeginAllSegment"
-    // InternalIdioms.g:1508:1: ruleWrapBeginAllSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-begin-all' ) ;
+    // InternalIdioms.g:1598:1: ruleWrapBeginAllSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-begin-all' ) ;
     public final EObject ruleWrapBeginAllSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4394,14 +4674,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1514:2: ( ( () otherlv_1= 'wrap-begin-all' ) )
-            // InternalIdioms.g:1515:2: ( () otherlv_1= 'wrap-begin-all' )
+            // InternalIdioms.g:1604:2: ( ( () otherlv_1= 'wrap-begin-all' ) )
+            // InternalIdioms.g:1605:2: ( () otherlv_1= 'wrap-begin-all' )
             {
-            // InternalIdioms.g:1515:2: ( () otherlv_1= 'wrap-begin-all' )
-            // InternalIdioms.g:1516:3: () otherlv_1= 'wrap-begin-all'
+            // InternalIdioms.g:1605:2: ( () otherlv_1= 'wrap-begin-all' )
+            // InternalIdioms.g:1606:3: () otherlv_1= 'wrap-begin-all'
             {
-            // InternalIdioms.g:1516:3: ()
-            // InternalIdioms.g:1517:4:
+            // InternalIdioms.g:1606:3: ()
+            // InternalIdioms.g:1607:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4418,7 +4698,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,36,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,38,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getWrapBeginAllSegmentAccess().getWrapBeginAllKeyword_1());
@@ -4449,7 +4729,7 @@
 
 
     // $ANTLR start "entryRuleWrapBeginSomeSegment"
-    // InternalIdioms.g:1534:1: entryRuleWrapBeginSomeSegment returns [EObject current=null] : iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF ;
+    // InternalIdioms.g:1624:1: entryRuleWrapBeginSomeSegment returns [EObject current=null] : iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF ;
     public final EObject entryRuleWrapBeginSomeSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4457,8 +4737,8 @@
 
 
         try {
-            // InternalIdioms.g:1534:61: (iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF )
-            // InternalIdioms.g:1535:2: iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF
+            // InternalIdioms.g:1624:61: (iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF )
+            // InternalIdioms.g:1625:2: iv_ruleWrapBeginSomeSegment= ruleWrapBeginSomeSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWrapBeginSomeSegmentRule());
@@ -4489,7 +4769,7 @@
 
 
     // $ANTLR start "ruleWrapBeginSomeSegment"
-    // InternalIdioms.g:1541:1: ruleWrapBeginSomeSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-begin-some' ) ;
+    // InternalIdioms.g:1631:1: ruleWrapBeginSomeSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-begin-some' ) ;
     public final EObject ruleWrapBeginSomeSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4499,14 +4779,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1547:2: ( ( () otherlv_1= 'wrap-begin-some' ) )
-            // InternalIdioms.g:1548:2: ( () otherlv_1= 'wrap-begin-some' )
+            // InternalIdioms.g:1637:2: ( ( () otherlv_1= 'wrap-begin-some' ) )
+            // InternalIdioms.g:1638:2: ( () otherlv_1= 'wrap-begin-some' )
             {
-            // InternalIdioms.g:1548:2: ( () otherlv_1= 'wrap-begin-some' )
-            // InternalIdioms.g:1549:3: () otherlv_1= 'wrap-begin-some'
+            // InternalIdioms.g:1638:2: ( () otherlv_1= 'wrap-begin-some' )
+            // InternalIdioms.g:1639:3: () otherlv_1= 'wrap-begin-some'
             {
-            // InternalIdioms.g:1549:3: ()
-            // InternalIdioms.g:1550:4:
+            // InternalIdioms.g:1639:3: ()
+            // InternalIdioms.g:1640:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4523,7 +4803,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,37,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,39,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getWrapBeginSomeSegmentAccess().getWrapBeginSomeKeyword_1());
@@ -4554,7 +4834,7 @@
 
 
     // $ANTLR start "entryRuleWrapEndSegment"
-    // InternalIdioms.g:1567:1: entryRuleWrapEndSegment returns [EObject current=null] : iv_ruleWrapEndSegment= ruleWrapEndSegment EOF ;
+    // InternalIdioms.g:1657:1: entryRuleWrapEndSegment returns [EObject current=null] : iv_ruleWrapEndSegment= ruleWrapEndSegment EOF ;
     public final EObject entryRuleWrapEndSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4562,8 +4842,8 @@
 
 
         try {
-            // InternalIdioms.g:1567:55: (iv_ruleWrapEndSegment= ruleWrapEndSegment EOF )
-            // InternalIdioms.g:1568:2: iv_ruleWrapEndSegment= ruleWrapEndSegment EOF
+            // InternalIdioms.g:1657:55: (iv_ruleWrapEndSegment= ruleWrapEndSegment EOF )
+            // InternalIdioms.g:1658:2: iv_ruleWrapEndSegment= ruleWrapEndSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWrapEndSegmentRule());
@@ -4594,7 +4874,7 @@
 
 
     // $ANTLR start "ruleWrapEndSegment"
-    // InternalIdioms.g:1574:1: ruleWrapEndSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-end' ) ;
+    // InternalIdioms.g:1664:1: ruleWrapEndSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-end' ) ;
     public final EObject ruleWrapEndSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4604,14 +4884,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1580:2: ( ( () otherlv_1= 'wrap-end' ) )
-            // InternalIdioms.g:1581:2: ( () otherlv_1= 'wrap-end' )
+            // InternalIdioms.g:1670:2: ( ( () otherlv_1= 'wrap-end' ) )
+            // InternalIdioms.g:1671:2: ( () otherlv_1= 'wrap-end' )
             {
-            // InternalIdioms.g:1581:2: ( () otherlv_1= 'wrap-end' )
-            // InternalIdioms.g:1582:3: () otherlv_1= 'wrap-end'
+            // InternalIdioms.g:1671:2: ( () otherlv_1= 'wrap-end' )
+            // InternalIdioms.g:1672:3: () otherlv_1= 'wrap-end'
             {
-            // InternalIdioms.g:1582:3: ()
-            // InternalIdioms.g:1583:4:
+            // InternalIdioms.g:1672:3: ()
+            // InternalIdioms.g:1673:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4628,7 +4908,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,38,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,40,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getWrapEndSegmentAccess().getWrapEndKeyword_1());
@@ -4659,7 +4939,7 @@
 
 
     // $ANTLR start "entryRuleWrapHereSegment"
-    // InternalIdioms.g:1600:1: entryRuleWrapHereSegment returns [EObject current=null] : iv_ruleWrapHereSegment= ruleWrapHereSegment EOF ;
+    // InternalIdioms.g:1690:1: entryRuleWrapHereSegment returns [EObject current=null] : iv_ruleWrapHereSegment= ruleWrapHereSegment EOF ;
     public final EObject entryRuleWrapHereSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4667,8 +4947,8 @@
 
 
         try {
-            // InternalIdioms.g:1600:56: (iv_ruleWrapHereSegment= ruleWrapHereSegment EOF )
-            // InternalIdioms.g:1601:2: iv_ruleWrapHereSegment= ruleWrapHereSegment EOF
+            // InternalIdioms.g:1690:56: (iv_ruleWrapHereSegment= ruleWrapHereSegment EOF )
+            // InternalIdioms.g:1691:2: iv_ruleWrapHereSegment= ruleWrapHereSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getWrapHereSegmentRule());
@@ -4699,7 +4979,7 @@
 
 
     // $ANTLR start "ruleWrapHereSegment"
-    // InternalIdioms.g:1607:1: ruleWrapHereSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-here' ) ;
+    // InternalIdioms.g:1697:1: ruleWrapHereSegment returns [EObject current=null] : ( () otherlv_1= 'wrap-here' ) ;
     public final EObject ruleWrapHereSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4709,14 +4989,14 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1613:2: ( ( () otherlv_1= 'wrap-here' ) )
-            // InternalIdioms.g:1614:2: ( () otherlv_1= 'wrap-here' )
+            // InternalIdioms.g:1703:2: ( ( () otherlv_1= 'wrap-here' ) )
+            // InternalIdioms.g:1704:2: ( () otherlv_1= 'wrap-here' )
             {
-            // InternalIdioms.g:1614:2: ( () otherlv_1= 'wrap-here' )
-            // InternalIdioms.g:1615:3: () otherlv_1= 'wrap-here'
+            // InternalIdioms.g:1704:2: ( () otherlv_1= 'wrap-here' )
+            // InternalIdioms.g:1705:3: () otherlv_1= 'wrap-here'
             {
-            // InternalIdioms.g:1615:3: ()
-            // InternalIdioms.g:1616:4:
+            // InternalIdioms.g:1705:3: ()
+            // InternalIdioms.g:1706:4:
             {
             if ( state.backtracking==0 ) {
 
@@ -4733,7 +5013,7 @@
 
             }
 
-            otherlv_1=(Token)match(input,39,FollowSets000.FOLLOW_2); if (state.failed) return current;
+            otherlv_1=(Token)match(input,41,FollowSets000.FOLLOW_2); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getWrapHereSegmentAccess().getWrapHereKeyword_1());
@@ -4764,7 +5044,7 @@
 
 
     // $ANTLR start "entryRuleReferredSegment"
-    // InternalIdioms.g:1633:1: entryRuleReferredSegment returns [EObject current=null] : iv_ruleReferredSegment= ruleReferredSegment EOF ;
+    // InternalIdioms.g:1723:1: entryRuleReferredSegment returns [EObject current=null] : iv_ruleReferredSegment= ruleReferredSegment EOF ;
     public final EObject entryRuleReferredSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4772,8 +5052,8 @@
 
 
         try {
-            // InternalIdioms.g:1633:56: (iv_ruleReferredSegment= ruleReferredSegment EOF )
-            // InternalIdioms.g:1634:2: iv_ruleReferredSegment= ruleReferredSegment EOF
+            // InternalIdioms.g:1723:56: (iv_ruleReferredSegment= ruleReferredSegment EOF )
+            // InternalIdioms.g:1724:2: iv_ruleReferredSegment= ruleReferredSegment EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getReferredSegmentRule());
@@ -4804,7 +5084,7 @@
 
 
     // $ANTLR start "ruleReferredSegment"
-    // InternalIdioms.g:1640:1: ruleReferredSegment returns [EObject current=null] : ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) ) ;
+    // InternalIdioms.g:1730:1: ruleReferredSegment returns [EObject current=null] : ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) ) ;
     public final EObject ruleReferredSegment() throws RecognitionException {
         EObject current = null;
 
@@ -4816,13 +5096,13 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1646:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) ) )
-            // InternalIdioms.g:1647:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) )
+            // InternalIdioms.g:1736:2: ( ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) ) )
+            // InternalIdioms.g:1737:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) )
             {
-            // InternalIdioms.g:1647:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) )
-            // InternalIdioms.g:1648:3: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) )
+            // InternalIdioms.g:1737:2: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) ) )
+            // InternalIdioms.g:1738:3: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )? ( (otherlv_2= RULE_ID ) )
             {
-            // InternalIdioms.g:1648:3: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )?
+            // InternalIdioms.g:1738:3: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '::' )?
             int alt14=2;
             int LA14_0 = input.LA(1);
 
@@ -4835,13 +5115,13 @@
             }
             switch (alt14) {
                 case 1 :
-                    // InternalIdioms.g:1649:4: ( (otherlv_0= RULE_ID ) ) otherlv_1= '::'
+                    // InternalIdioms.g:1739:4: ( (otherlv_0= RULE_ID ) ) otherlv_1= '::'
                     {
-                    // InternalIdioms.g:1649:4: ( (otherlv_0= RULE_ID ) )
-                    // InternalIdioms.g:1650:5: (otherlv_0= RULE_ID )
+                    // InternalIdioms.g:1739:4: ( (otherlv_0= RULE_ID ) )
+                    // InternalIdioms.g:1740:5: (otherlv_0= RULE_ID )
                     {
-                    // InternalIdioms.g:1650:5: (otherlv_0= RULE_ID )
-                    // InternalIdioms.g:1651:6: otherlv_0= RULE_ID
+                    // InternalIdioms.g:1740:5: (otherlv_0= RULE_ID )
+                    // InternalIdioms.g:1741:6: otherlv_0= RULE_ID
                     {
                     if ( state.backtracking==0 ) {
 
@@ -4879,11 +5159,11 @@
 
             }
 
-            // InternalIdioms.g:1670:3: ( (otherlv_2= RULE_ID ) )
-            // InternalIdioms.g:1671:4: (otherlv_2= RULE_ID )
+            // InternalIdioms.g:1760:3: ( (otherlv_2= RULE_ID ) )
+            // InternalIdioms.g:1761:4: (otherlv_2= RULE_ID )
             {
-            // InternalIdioms.g:1671:4: (otherlv_2= RULE_ID )
-            // InternalIdioms.g:1672:5: otherlv_2= RULE_ID
+            // InternalIdioms.g:1761:4: (otherlv_2= RULE_ID )
+            // InternalIdioms.g:1762:5: otherlv_2= RULE_ID
             {
             if ( state.backtracking==0 ) {
 
@@ -4934,7 +5214,7 @@
 
 
     // $ANTLR start "entryRuleIdiom"
-    // InternalIdioms.g:1690:1: entryRuleIdiom returns [EObject current=null] : iv_ruleIdiom= ruleIdiom EOF ;
+    // InternalIdioms.g:1780:1: entryRuleIdiom returns [EObject current=null] : iv_ruleIdiom= ruleIdiom EOF ;
     public final EObject entryRuleIdiom() throws RecognitionException {
         EObject current = null;
 
@@ -4942,8 +5222,8 @@
 
 
         try {
-            // InternalIdioms.g:1690:46: (iv_ruleIdiom= ruleIdiom EOF )
-            // InternalIdioms.g:1691:2: iv_ruleIdiom= ruleIdiom EOF
+            // InternalIdioms.g:1780:46: (iv_ruleIdiom= ruleIdiom EOF )
+            // InternalIdioms.g:1781:2: iv_ruleIdiom= ruleIdiom EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getIdiomRule());
@@ -4974,7 +5254,7 @@
 
 
     // $ANTLR start "ruleIdiom"
-    // InternalIdioms.g:1697:1: ruleIdiom returns [EObject current=null] : ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) ) ;
+    // InternalIdioms.g:1787:1: ruleIdiom returns [EObject current=null] : ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) ) ;
     public final EObject ruleIdiom() throws RecognitionException {
         EObject current = null;
 
@@ -4998,27 +5278,27 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1703:2: ( ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) ) )
-            // InternalIdioms.g:1704:2: ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) )
+            // InternalIdioms.g:1793:2: ( ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) ) )
+            // InternalIdioms.g:1794:2: ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) )
             {
-            // InternalIdioms.g:1704:2: ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) )
-            // InternalIdioms.g:1705:3: ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) )
+            // InternalIdioms.g:1794:2: ( ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) ) )
+            // InternalIdioms.g:1795:3: ( (lv_mixin_0_0= 'mixin' ) )? otherlv_1= 'idiom' ( (lv_name_2_0= RULE_ID ) ) (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )? (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )? ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) )
             {
-            // InternalIdioms.g:1705:3: ( (lv_mixin_0_0= 'mixin' ) )?
+            // InternalIdioms.g:1795:3: ( (lv_mixin_0_0= 'mixin' ) )?
             int alt15=2;
             int LA15_0 = input.LA(1);
 
-            if ( (LA15_0==40) ) {
+            if ( (LA15_0==42) ) {
                 alt15=1;
             }
             switch (alt15) {
                 case 1 :
-                    // InternalIdioms.g:1706:4: (lv_mixin_0_0= 'mixin' )
+                    // InternalIdioms.g:1796:4: (lv_mixin_0_0= 'mixin' )
                     {
-                    // InternalIdioms.g:1706:4: (lv_mixin_0_0= 'mixin' )
-                    // InternalIdioms.g:1707:5: lv_mixin_0_0= 'mixin'
+                    // InternalIdioms.g:1796:4: (lv_mixin_0_0= 'mixin' )
+                    // InternalIdioms.g:1797:5: lv_mixin_0_0= 'mixin'
                     {
-                    lv_mixin_0_0=(Token)match(input,40,FollowSets000.FOLLOW_15); if (state.failed) return current;
+                    lv_mixin_0_0=(Token)match(input,42,FollowSets000.FOLLOW_15); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       					newLeafNode(lv_mixin_0_0, grammarAccess.getIdiomAccess().getMixinMixinKeyword_0_0());
@@ -5041,17 +5321,17 @@
 
             }
 
-            otherlv_1=(Token)match(input,41,FollowSets000.FOLLOW_3); if (state.failed) return current;
+            otherlv_1=(Token)match(input,43,FollowSets000.FOLLOW_3); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_1, grammarAccess.getIdiomAccess().getIdiomKeyword_1());
 
             }
-            // InternalIdioms.g:1723:3: ( (lv_name_2_0= RULE_ID ) )
-            // InternalIdioms.g:1724:4: (lv_name_2_0= RULE_ID )
+            // InternalIdioms.g:1813:3: ( (lv_name_2_0= RULE_ID ) )
+            // InternalIdioms.g:1814:4: (lv_name_2_0= RULE_ID )
             {
-            // InternalIdioms.g:1724:4: (lv_name_2_0= RULE_ID )
-            // InternalIdioms.g:1725:5: lv_name_2_0= RULE_ID
+            // InternalIdioms.g:1814:4: (lv_name_2_0= RULE_ID )
+            // InternalIdioms.g:1815:5: lv_name_2_0= RULE_ID
             {
             lv_name_2_0=(Token)match(input,RULE_ID,FollowSets000.FOLLOW_16); if (state.failed) return current;
             if ( state.backtracking==0 ) {
@@ -5077,24 +5357,24 @@
 
             }
 
-            // InternalIdioms.g:1741:3: (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )?
+            // InternalIdioms.g:1831:3: (otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) ) )?
             int alt17=2;
             int LA17_0 = input.LA(1);
 
-            if ( (LA17_0==42) ) {
+            if ( (LA17_0==44) ) {
                 alt17=1;
             }
             switch (alt17) {
                 case 1 :
-                    // InternalIdioms.g:1742:4: otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) )
+                    // InternalIdioms.g:1832:4: otherlv_3= 'for' ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )? ( (otherlv_6= RULE_ID ) )
                     {
-                    otherlv_3=(Token)match(input,42,FollowSets000.FOLLOW_3); if (state.failed) return current;
+                    otherlv_3=(Token)match(input,44,FollowSets000.FOLLOW_3); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       				newLeafNode(otherlv_3, grammarAccess.getIdiomAccess().getForKeyword_3_0());
 
                     }
-                    // InternalIdioms.g:1746:4: ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )?
+                    // InternalIdioms.g:1836:4: ( ( (otherlv_4= RULE_ID ) ) otherlv_5= '::' )?
                     int alt16=2;
                     int LA16_0 = input.LA(1);
 
@@ -5107,13 +5387,13 @@
                     }
                     switch (alt16) {
                         case 1 :
-                            // InternalIdioms.g:1747:5: ( (otherlv_4= RULE_ID ) ) otherlv_5= '::'
+                            // InternalIdioms.g:1837:5: ( (otherlv_4= RULE_ID ) ) otherlv_5= '::'
                             {
-                            // InternalIdioms.g:1747:5: ( (otherlv_4= RULE_ID ) )
-                            // InternalIdioms.g:1748:6: (otherlv_4= RULE_ID )
+                            // InternalIdioms.g:1837:5: ( (otherlv_4= RULE_ID ) )
+                            // InternalIdioms.g:1838:6: (otherlv_4= RULE_ID )
                             {
-                            // InternalIdioms.g:1748:6: (otherlv_4= RULE_ID )
-                            // InternalIdioms.g:1749:7: otherlv_4= RULE_ID
+                            // InternalIdioms.g:1838:6: (otherlv_4= RULE_ID )
+                            // InternalIdioms.g:1839:7: otherlv_4= RULE_ID
                             {
                             if ( state.backtracking==0 ) {
 
@@ -5151,11 +5431,11 @@
 
                     }
 
-                    // InternalIdioms.g:1768:4: ( (otherlv_6= RULE_ID ) )
-                    // InternalIdioms.g:1769:5: (otherlv_6= RULE_ID )
+                    // InternalIdioms.g:1858:4: ( (otherlv_6= RULE_ID ) )
+                    // InternalIdioms.g:1859:5: (otherlv_6= RULE_ID )
                     {
-                    // InternalIdioms.g:1769:5: (otherlv_6= RULE_ID )
-                    // InternalIdioms.g:1770:6: otherlv_6= RULE_ID
+                    // InternalIdioms.g:1859:5: (otherlv_6= RULE_ID )
+                    // InternalIdioms.g:1860:6: otherlv_6= RULE_ID
                     {
                     if ( state.backtracking==0 ) {
 
@@ -5187,28 +5467,28 @@
 
             }
 
-            // InternalIdioms.g:1785:3: (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )?
+            // InternalIdioms.g:1875:3: (otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) ) )?
             int alt18=2;
             int LA18_0 = input.LA(1);
 
-            if ( (LA18_0==43) ) {
+            if ( (LA18_0==45) ) {
                 alt18=1;
             }
             switch (alt18) {
                 case 1 :
-                    // InternalIdioms.g:1786:4: otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) )
+                    // InternalIdioms.g:1876:4: otherlv_7= 'in' ( (lv_inRuleRegex_8_0= RULE_STRING ) )
                     {
-                    otherlv_7=(Token)match(input,43,FollowSets000.FOLLOW_7); if (state.failed) return current;
+                    otherlv_7=(Token)match(input,45,FollowSets000.FOLLOW_7); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       				newLeafNode(otherlv_7, grammarAccess.getIdiomAccess().getInKeyword_4_0());
 
                     }
-                    // InternalIdioms.g:1790:4: ( (lv_inRuleRegex_8_0= RULE_STRING ) )
-                    // InternalIdioms.g:1791:5: (lv_inRuleRegex_8_0= RULE_STRING )
+                    // InternalIdioms.g:1880:4: ( (lv_inRuleRegex_8_0= RULE_STRING ) )
+                    // InternalIdioms.g:1881:5: (lv_inRuleRegex_8_0= RULE_STRING )
                     {
-                    // InternalIdioms.g:1791:5: (lv_inRuleRegex_8_0= RULE_STRING )
-                    // InternalIdioms.g:1792:6: lv_inRuleRegex_8_0= RULE_STRING
+                    // InternalIdioms.g:1881:5: (lv_inRuleRegex_8_0= RULE_STRING )
+                    // InternalIdioms.g:1882:6: lv_inRuleRegex_8_0= RULE_STRING
                     {
                     lv_inRuleRegex_8_0=(Token)match(input,RULE_STRING,FollowSets000.FOLLOW_18); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
@@ -5240,14 +5520,14 @@
 
             }
 
-            // InternalIdioms.g:1809:3: ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) )
+            // InternalIdioms.g:1899:3: ( ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) ) | (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' ) )
             int alt20=2;
             int LA20_0 = input.LA(1);
 
-            if ( (LA20_0==46) ) {
+            if ( (LA20_0==48) ) {
                 alt20=1;
             }
-            else if ( (LA20_0==44) ) {
+            else if ( (LA20_0==46) ) {
                 alt20=2;
             }
             else {
@@ -5259,13 +5539,13 @@
             }
             switch (alt20) {
                 case 1 :
-                    // InternalIdioms.g:1810:4: ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) )
+                    // InternalIdioms.g:1900:4: ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) )
                     {
-                    // InternalIdioms.g:1810:4: ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) )
-                    // InternalIdioms.g:1811:5: (lv_ownedSubIdioms_9_0= ruleSubIdiom )
+                    // InternalIdioms.g:1900:4: ( (lv_ownedSubIdioms_9_0= ruleSubIdiom ) )
+                    // InternalIdioms.g:1901:5: (lv_ownedSubIdioms_9_0= ruleSubIdiom )
                     {
-                    // InternalIdioms.g:1811:5: (lv_ownedSubIdioms_9_0= ruleSubIdiom )
-                    // InternalIdioms.g:1812:6: lv_ownedSubIdioms_9_0= ruleSubIdiom
+                    // InternalIdioms.g:1901:5: (lv_ownedSubIdioms_9_0= ruleSubIdiom )
+                    // InternalIdioms.g:1902:6: lv_ownedSubIdioms_9_0= ruleSubIdiom
                     {
                     if ( state.backtracking==0 ) {
 
@@ -5300,34 +5580,34 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1830:4: (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' )
+                    // InternalIdioms.g:1920:4: (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' )
                     {
-                    // InternalIdioms.g:1830:4: (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' )
-                    // InternalIdioms.g:1831:5: otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}'
+                    // InternalIdioms.g:1920:4: (otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}' )
+                    // InternalIdioms.g:1921:5: otherlv_10= '{' ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )* otherlv_12= '}'
                     {
-                    otherlv_10=(Token)match(input,44,FollowSets000.FOLLOW_19); if (state.failed) return current;
+                    otherlv_10=(Token)match(input,46,FollowSets000.FOLLOW_19); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       					newLeafNode(otherlv_10, grammarAccess.getIdiomAccess().getLeftCurlyBracketKeyword_5_1_0());
 
                     }
-                    // InternalIdioms.g:1835:5: ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )*
+                    // InternalIdioms.g:1925:5: ( (lv_ownedSubIdioms_11_0= ruleSubIdiom ) )*
                     loop19:
                     do {
                         int alt19=2;
                         int LA19_0 = input.LA(1);
 
-                        if ( (LA19_0==46) ) {
+                        if ( (LA19_0==48) ) {
                             alt19=1;
                         }
 
 
                         switch (alt19) {
                     	case 1 :
-                    	    // InternalIdioms.g:1836:6: (lv_ownedSubIdioms_11_0= ruleSubIdiom )
+                    	    // InternalIdioms.g:1926:6: (lv_ownedSubIdioms_11_0= ruleSubIdiom )
                     	    {
-                    	    // InternalIdioms.g:1836:6: (lv_ownedSubIdioms_11_0= ruleSubIdiom )
-                    	    // InternalIdioms.g:1837:7: lv_ownedSubIdioms_11_0= ruleSubIdiom
+                    	    // InternalIdioms.g:1926:6: (lv_ownedSubIdioms_11_0= ruleSubIdiom )
+                    	    // InternalIdioms.g:1927:7: lv_ownedSubIdioms_11_0= ruleSubIdiom
                     	    {
                     	    if ( state.backtracking==0 ) {
 
@@ -5364,7 +5644,7 @@
                         }
                     } while (true);
 
-                    otherlv_12=(Token)match(input,45,FollowSets000.FOLLOW_2); if (state.failed) return current;
+                    otherlv_12=(Token)match(input,47,FollowSets000.FOLLOW_2); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       					newLeafNode(otherlv_12, grammarAccess.getIdiomAccess().getRightCurlyBracketKeyword_5_1_2());
@@ -5404,7 +5684,7 @@
 
 
     // $ANTLR start "entryRuleSubIdiom"
-    // InternalIdioms.g:1864:1: entryRuleSubIdiom returns [EObject current=null] : iv_ruleSubIdiom= ruleSubIdiom EOF ;
+    // InternalIdioms.g:1954:1: entryRuleSubIdiom returns [EObject current=null] : iv_ruleSubIdiom= ruleSubIdiom EOF ;
     public final EObject entryRuleSubIdiom() throws RecognitionException {
         EObject current = null;
 
@@ -5412,8 +5692,8 @@
 
 
         try {
-            // InternalIdioms.g:1864:49: (iv_ruleSubIdiom= ruleSubIdiom EOF )
-            // InternalIdioms.g:1865:2: iv_ruleSubIdiom= ruleSubIdiom EOF
+            // InternalIdioms.g:1954:49: (iv_ruleSubIdiom= ruleSubIdiom EOF )
+            // InternalIdioms.g:1955:2: iv_ruleSubIdiom= ruleSubIdiom EOF
             {
             if ( state.backtracking==0 ) {
                newCompositeNode(grammarAccess.getSubIdiomRule());
@@ -5444,7 +5724,7 @@
 
 
     // $ANTLR start "ruleSubIdiom"
-    // InternalIdioms.g:1871:1: ruleSubIdiom returns [EObject current=null] : (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' ) ;
+    // InternalIdioms.g:1961:1: ruleSubIdiom returns [EObject current=null] : (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' ) ;
     public final EObject ruleSubIdiom() throws RecognitionException {
         EObject current = null;
 
@@ -5464,25 +5744,25 @@
         	enterRule();
 
         try {
-            // InternalIdioms.g:1877:2: ( (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' ) )
-            // InternalIdioms.g:1878:2: (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' )
+            // InternalIdioms.g:1967:2: ( (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' ) )
+            // InternalIdioms.g:1968:2: (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' )
             {
-            // InternalIdioms.g:1878:2: (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' )
-            // InternalIdioms.g:1879:3: otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';'
+            // InternalIdioms.g:1968:2: (otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';' )
+            // InternalIdioms.g:1969:3: otherlv_0= 'at' ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) ) (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )? otherlv_4= ';'
             {
-            otherlv_0=(Token)match(input,46,FollowSets000.FOLLOW_20); if (state.failed) return current;
+            otherlv_0=(Token)match(input,48,FollowSets000.FOLLOW_20); if (state.failed) return current;
             if ( state.backtracking==0 ) {
 
               			newLeafNode(otherlv_0, grammarAccess.getSubIdiomAccess().getAtKeyword_0());
 
             }
-            // InternalIdioms.g:1883:3: ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) )
-            // InternalIdioms.g:1884:4: ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) )
+            // InternalIdioms.g:1973:3: ( ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) ) )
+            // InternalIdioms.g:1974:4: ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) )
             {
-            // InternalIdioms.g:1884:4: ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) )
-            // InternalIdioms.g:1885:5: (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator )
+            // InternalIdioms.g:1974:4: ( (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator ) )
+            // InternalIdioms.g:1975:5: (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator )
             {
-            // InternalIdioms.g:1885:5: (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator )
+            // InternalIdioms.g:1975:5: (lv_ownedLocator_1_1= ruleLocator | lv_ownedLocator_1_2= ruleReferredLocator )
             int alt21=2;
             int LA21_0 = input.LA(1);
 
@@ -5501,7 +5781,7 @@
             }
             switch (alt21) {
                 case 1 :
-                    // InternalIdioms.g:1886:6: lv_ownedLocator_1_1= ruleLocator
+                    // InternalIdioms.g:1976:6: lv_ownedLocator_1_1= ruleLocator
                     {
                     if ( state.backtracking==0 ) {
 
@@ -5530,7 +5810,7 @@
                     }
                     break;
                 case 2 :
-                    // InternalIdioms.g:1902:6: lv_ownedLocator_1_2= ruleReferredLocator
+                    // InternalIdioms.g:1992:6: lv_ownedLocator_1_2= ruleReferredLocator
                     {
                     if ( state.backtracking==0 ) {
 
@@ -5567,46 +5847,46 @@
 
             }
 
-            // InternalIdioms.g:1920:3: (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )?
+            // InternalIdioms.g:2010:3: (otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )* )?
             int alt24=2;
             int LA24_0 = input.LA(1);
 
-            if ( (LA24_0==47) ) {
+            if ( (LA24_0==49) ) {
                 alt24=1;
             }
             switch (alt24) {
                 case 1 :
-                    // InternalIdioms.g:1921:4: otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )*
+                    // InternalIdioms.g:2011:4: otherlv_2= 'do' ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )*
                     {
-                    otherlv_2=(Token)match(input,47,FollowSets000.FOLLOW_22); if (state.failed) return current;
+                    otherlv_2=(Token)match(input,49,FollowSets000.FOLLOW_22); if (state.failed) return current;
                     if ( state.backtracking==0 ) {
 
                       				newLeafNode(otherlv_2, grammarAccess.getSubIdiomAccess().getDoKeyword_2_0());
 
                     }
-                    // InternalIdioms.g:1925:4: ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )*
+                    // InternalIdioms.g:2015:4: ( ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) ) )*
                     loop23:
                     do {
                         int alt23=2;
                         int LA23_0 = input.LA(1);
 
-                        if ( (LA23_0==RULE_ID||(LA23_0>=24 && LA23_0<=32)||(LA23_0>=34 && LA23_0<=39)) ) {
+                        if ( (LA23_0==RULE_ID||(LA23_0>=24 && LA23_0<=34)||(LA23_0>=36 && LA23_0<=41)) ) {
                             alt23=1;
                         }
 
 
                         switch (alt23) {
                     	case 1 :
-                    	    // InternalIdioms.g:1926:5: ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) )
+                    	    // InternalIdioms.g:2016:5: ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) )
                     	    {
-                    	    // InternalIdioms.g:1926:5: ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) )
-                    	    // InternalIdioms.g:1927:6: (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment )
+                    	    // InternalIdioms.g:2016:5: ( (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment ) )
+                    	    // InternalIdioms.g:2017:6: (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment )
                     	    {
-                    	    // InternalIdioms.g:1927:6: (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment )
+                    	    // InternalIdioms.g:2017:6: (lv_ownedSegments_3_1= ruleSegment | lv_ownedSegments_3_2= ruleReferredSegment )
                     	    int alt22=2;
                     	    int LA22_0 = input.LA(1);
 
-                    	    if ( ((LA22_0>=24 && LA22_0<=32)||(LA22_0>=34 && LA22_0<=39)) ) {
+                    	    if ( ((LA22_0>=24 && LA22_0<=34)||(LA22_0>=36 && LA22_0<=41)) ) {
                     	        alt22=1;
                     	    }
                     	    else if ( (LA22_0==RULE_ID) ) {
@@ -5621,7 +5901,7 @@
                     	    }
                     	    switch (alt22) {
                     	        case 1 :
-                    	            // InternalIdioms.g:1928:7: lv_ownedSegments_3_1= ruleSegment
+                    	            // InternalIdioms.g:2018:7: lv_ownedSegments_3_1= ruleSegment
                     	            {
                     	            if ( state.backtracking==0 ) {
 
@@ -5650,7 +5930,7 @@
                     	            }
                     	            break;
                     	        case 2 :
-                    	            // InternalIdioms.g:1944:7: lv_ownedSegments_3_2= ruleReferredSegment
+                    	            // InternalIdioms.g:2034:7: lv_ownedSegments_3_2= ruleReferredSegment
                     	            {
                     	            if ( state.backtracking==0 ) {
 
@@ -5738,25 +6018,25 @@
         public static final BitSet FOLLOW_1 = new BitSet(new long[]{0x0000000000000000L});
         public static final BitSet FOLLOW_2 = new BitSet(new long[]{0x0000000000000002L});
         public static final BitSet FOLLOW_3 = new BitSet(new long[]{0x0000000000000010L});
-        public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x0000030000819002L});
-        public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x0000030000811002L});
-        public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x0000030000810002L});
+        public static final BitSet FOLLOW_4 = new BitSet(new long[]{0x00000C0000819002L});
+        public static final BitSet FOLLOW_5 = new BitSet(new long[]{0x00000C0000811002L});
+        public static final BitSet FOLLOW_6 = new BitSet(new long[]{0x00000C0000810002L});
         public static final BitSet FOLLOW_7 = new BitSet(new long[]{0x0000000000000020L});
         public static final BitSet FOLLOW_8 = new BitSet(new long[]{0x0000000000006002L});
         public static final BitSet FOLLOW_9 = new BitSet(new long[]{0x0000000000004002L});
         public static final BitSet FOLLOW_10 = new BitSet(new long[]{0x00000000006E0020L});
         public static final BitSet FOLLOW_11 = new BitSet(new long[]{0x0000000000004000L});
         public static final BitSet FOLLOW_12 = new BitSet(new long[]{0x0000000000100000L});
-        public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x000000FDFF000000L});
-        public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000200000000L});
-        public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000020000000000L});
-        public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x00005C0000000000L});
-        public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0000580000000000L});
-        public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0000500000000000L});
-        public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0000600000000000L});
+        public static final BitSet FOLLOW_13 = new BitSet(new long[]{0x000003F7FF000000L});
+        public static final BitSet FOLLOW_14 = new BitSet(new long[]{0x0000000800000000L});
+        public static final BitSet FOLLOW_15 = new BitSet(new long[]{0x0000080000000000L});
+        public static final BitSet FOLLOW_16 = new BitSet(new long[]{0x0001700000000000L});
+        public static final BitSet FOLLOW_17 = new BitSet(new long[]{0x0001600000000000L});
+        public static final BitSet FOLLOW_18 = new BitSet(new long[]{0x0001400000000000L});
+        public static final BitSet FOLLOW_19 = new BitSet(new long[]{0x0001800000000000L});
         public static final BitSet FOLLOW_20 = new BitSet(new long[]{0x00000000006E0030L});
-        public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0000800000004000L});
-        public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x000000FDFF004010L});
+        public static final BitSet FOLLOW_21 = new BitSet(new long[]{0x0002000000004000L});
+        public static final BitSet FOLLOW_22 = new BitSet(new long[]{0x000003F7FF004010L});
     }
 
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/serializer/IdiomsSerializationMetaData.java b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/serializer/IdiomsSerializationMetaData.java
index 67a7937..48dc3e5 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/serializer/IdiomsSerializationMetaData.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/serializer/IdiomsSerializationMetaData.java
@@ -42,15 +42,15 @@
 
 public class IdiomsSerializationMetaData extends AbstractSerializationMetaData
 {
-	private final @NonNull EClassValue @NonNull [] eClassValues = new @NonNull EClassValue[30];
+	private final @NonNull EClassValue @NonNull [] eClassValues = new @NonNull EClassValue[32];
 	private final @NonNull EnumerationValue @NonNull [] enumerationValues = new @NonNull EnumerationValue[2];
-	private final @NonNull GrammarRuleValue @NonNull [] grammarRuleValues = new @NonNull GrammarRuleValue[39];
+	private final @NonNull GrammarRuleValue @NonNull [] grammarRuleValues = new @NonNull GrammarRuleValue[41];
 	private final @NonNull GrammarRuleVector @NonNull [] grammarRuleVectors = new @NonNull GrammarRuleVector[14];
 	private final @NonNull SerializationMatchStep @NonNull [] serializationMatchSteps = new @NonNull SerializationMatchStep[47];
 	private final @NonNull SerializationMatchTerm @NonNull [] serializationMatchTerms = new @NonNull SerializationMatchTerm[56];
-	private final @NonNull SerializationRule @NonNull [] serializationRules = new @NonNull SerializationRule[31];
+	private final @NonNull SerializationRule @NonNull [] serializationRules = new @NonNull SerializationRule[33];
 	private final @NonNull SerializationSegment @NonNull [] @Nullable [] serializationSegments = new @NonNull SerializationSegment @NonNull [8] @Nullable [];
-	private final @NonNull SerializationStep @NonNull [] serializationSteps = new @NonNull SerializationStep[82];
+	private final @NonNull SerializationStep @NonNull [] serializationSteps = new @NonNull SerializationStep[84];
 
 	@Override
 	public @NonNull EClassValue @NonNull [] getEClassValues() {
@@ -89,7 +89,7 @@
 
 	@Override
 	protected int getLastGlobalSerializationStepLiteralIndex() {
-		return 69;
+		return 71;
 	}
 
 	@Override
@@ -233,89 +233,99 @@
 				15 /* "pop" */
 			), null
 		);
-		eClassValues[15] = new EClassValue(IdiomsPackage.Literals.PUSH_SEGMENT,
+		eClassValues[15] = new EClassValue(IdiomsPackage.Literals.POST_COMMENT_SEGMENT,
 			createSerializationRules(
-				16 /* "push" */
+				16 /* "post-comment" */
 			), null
 		);
-		eClassValues[16] = new EClassValue(IdiomsPackage.Literals.REFERRED_LOCATOR,
+		eClassValues[16] = new EClassValue(IdiomsPackage.Literals.PRE_COMMENT_SEGMENT,
 			createSerializationRules(
-				17 /* { { idiomsModel=ID "::" }[?] locatorDeclaration=ID } */
+				17 /* "pre-comment" */
 			), null
 		);
-		eClassValues[17] = new EClassValue(IdiomsPackage.Literals.REFERRED_SEGMENT,
+		eClassValues[17] = new EClassValue(IdiomsPackage.Literals.PUSH_SEGMENT,
 			createSerializationRules(
-				18 /* { { idiomsModel=ID "::" }[?] segmentDeclaration=ID } */
+				18 /* "push" */
 			), null
 		);
-		eClassValues[18] = new EClassValue(IdiomsPackage.Literals.RETURNS_LOCATOR,
+		eClassValues[18] = new EClassValue(IdiomsPackage.Literals.REFERRED_LOCATOR,
 			createSerializationRules(
-				19 /* { "returns" { ePackage=ID "::" }[?] eClass=ID } */
+				19 /* { { idiomsModel=ID "::" }[?] locatorDeclaration=ID } */
 			), null
 		);
-		eClassValues[19] = new EClassValue(IdiomsPackage.Literals.SEGMENT_DECLARATION,
+		eClassValues[19] = new EClassValue(IdiomsPackage.Literals.REFERRED_SEGMENT,
 			createSerializationRules(
-				20 /* { "segment" name=ID ownedSegment=Segment ";" } */
+				20 /* { { idiomsModel=ID "::" }[?] segmentDeclaration=ID } */
+			), null
+		);
+		eClassValues[20] = new EClassValue(IdiomsPackage.Literals.RETURNS_LOCATOR,
+			createSerializationRules(
+				21 /* { "returns" { ePackage=ID "::" }[?] eClass=ID } */
+			), null
+		);
+		eClassValues[21] = new EClassValue(IdiomsPackage.Literals.SEGMENT_DECLARATION,
+			createSerializationRules(
+				22 /* { "segment" name=ID ownedSegment=Segment ";" } */
 			),
 			new @NonNull EReference_RuleIndexes [] {
 				createEReference_RuleIndexes(IdiomsPackage.Literals.SEGMENT_DECLARATION__OWNED_SEGMENT,
-					12) /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */
+					12) /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PostCommentSegment|PreCommentSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */
 			}
 		);
-		eClassValues[20] = new EClassValue(IdiomsPackage.Literals.SOFT_NEW_LINE_SEGMENT,
+		eClassValues[22] = new EClassValue(IdiomsPackage.Literals.SOFT_NEW_LINE_SEGMENT,
 			createSerializationRules(
-				21 /* "soft-new-line" */
+				23 /* "soft-new-line" */
 			), null
 		);
-		eClassValues[21] = new EClassValue(IdiomsPackage.Literals.SOFT_SPACE_SEGMENT,
+		eClassValues[23] = new EClassValue(IdiomsPackage.Literals.SOFT_SPACE_SEGMENT,
 			createSerializationRules(
-				22 /* "soft-space" */
+				24 /* "soft-space" */
 			), null
 		);
-		eClassValues[22] = new EClassValue(IdiomsPackage.Literals.STRING_SEGMENT,
+		eClassValues[24] = new EClassValue(IdiomsPackage.Literals.STRING_SEGMENT,
 			createSerializationRules(
-				23 /* { "string" string=STRING printable="printable" } */
+				25 /* { "string" string=STRING printable="printable" } */
 			), null
 		);
-		eClassValues[23] = new EClassValue(IdiomsPackage.Literals.SUB_IDIOM,
+		eClassValues[25] = new EClassValue(IdiomsPackage.Literals.SUB_IDIOM,
 			createSerializationRules(
-				24 /* { "at" ownedLocator=(Locator|ReferredLocator) { "do" ownedSegments+=(Segment|ReferredSegment)[*] }[?] ";" } */
+				26 /* { "at" ownedLocator=(Locator|ReferredLocator) { "do" ownedSegments+=(Segment|ReferredSegment)[*] }[?] ";" } */
 			),
 			new @NonNull EReference_RuleIndexes [] {
 				createEReference_RuleIndexes(IdiomsPackage.Literals.SUB_IDIOM__OWNED_LOCATOR,
 					7) /* AnyAssignmentLocator|AnyElementLocator|AssignmentLocator|FinalLocator|KeywordLocator|Locator|ReferredLocator|ReturnsLocator */,
 				createEReference_RuleIndexes(IdiomsPackage.Literals.SUB_IDIOM__OWNED_SEGMENTS,
-					13) /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PushSegment|ReferredSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */
+					13) /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PostCommentSegment|PreCommentSegment|PushSegment|ReferredSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */
 			}
 		);
-		eClassValues[24] = new EClassValue(IdiomsPackage.Literals.VALUE_SEGMENT,
+		eClassValues[26] = new EClassValue(IdiomsPackage.Literals.VALUE_SEGMENT,
 			createSerializationRules(
-				25 /* "value" */
+				27 /* "value" */
 			), null
 		);
-		eClassValues[25] = new EClassValue(IdiomsPackage.Literals.WRAP_ANCHOR_SEGMENT,
+		eClassValues[27] = new EClassValue(IdiomsPackage.Literals.WRAP_ANCHOR_SEGMENT,
 			createSerializationRules(
-				26 /* "wrap-anchor" */
+				28 /* "wrap-anchor" */
 			), null
 		);
-		eClassValues[26] = new EClassValue(IdiomsPackage.Literals.WRAP_BEGIN_ALL_SEGMENT,
+		eClassValues[28] = new EClassValue(IdiomsPackage.Literals.WRAP_BEGIN_ALL_SEGMENT,
 			createSerializationRules(
-				27 /* "wrap-begin-all" */
+				29 /* "wrap-begin-all" */
 			), null
 		);
-		eClassValues[27] = new EClassValue(IdiomsPackage.Literals.WRAP_BEGIN_SOME_SEGMENT,
+		eClassValues[29] = new EClassValue(IdiomsPackage.Literals.WRAP_BEGIN_SOME_SEGMENT,
 			createSerializationRules(
-				28 /* "wrap-begin-some" */
+				30 /* "wrap-begin-some" */
 			), null
 		);
-		eClassValues[28] = new EClassValue(IdiomsPackage.Literals.WRAP_END_SEGMENT,
+		eClassValues[30] = new EClassValue(IdiomsPackage.Literals.WRAP_END_SEGMENT,
 			createSerializationRules(
-				29 /* "wrap-end" */
+				31 /* "wrap-end" */
 			), null
 		);
-		eClassValues[29] = new EClassValue(IdiomsPackage.Literals.WRAP_HERE_SEGMENT,
+		eClassValues[31] = new EClassValue(IdiomsPackage.Literals.WRAP_HERE_SEGMENT,
 			createSerializationRules(
-				30 /* "wrap-here" */
+				32 /* "wrap-here" */
 			), null
 		);
 	}
@@ -489,7 +499,7 @@
 				2	/* AssignmentLocator: { "assignment" { { ePackage=ID "::" }[?] eClass=ID "::" }[?] eStructuralFeature=ID } */,
 				5	/* FinalLocator: "final" */,
 				11	/* KeywordLocator: string=STRING */,
-				19	/* ReturnsLocator: { "returns" { ePackage=ID "::" }[?] eClass=ID } */
+				21	/* ReturnsLocator: { "returns" { ePackage=ID "::" }[?] eClass=ID } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Alternatives */,
@@ -544,9 +554,29 @@
 				6	/* "pop" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[20] = createParserRuleValue(20, "PushSegment", -1,
+		grammarRuleValues[20] = createParserRuleValue(20, "PostCommentSegment", -1,
 			createSerializationRules(
-				16	/* PushSegment: "push" */
+				16	/* PostCommentSegment: "post-comment" */
+			),
+			createFormattingSegmentsList(
+				-1	/* Group */,
+				-1	/* {PostCommentSegment} */,
+				6	/* "post-comment" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
+			)
+		);
+		grammarRuleValues[21] = createParserRuleValue(21, "PreCommentSegment", -1,
+			createSerializationRules(
+				17	/* PreCommentSegment: "pre-comment" */
+			),
+			createFormattingSegmentsList(
+				-1	/* Group */,
+				-1	/* {PreCommentSegment} */,
+				6	/* "pre-comment" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
+			)
+		);
+		grammarRuleValues[22] = createParserRuleValue(22, "PushSegment", -1,
+			createSerializationRules(
+				18	/* PushSegment: "push" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -554,9 +584,9 @@
 				6	/* "push" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[21] = createParserRuleValue(21, "ReferredLocator", -1,
+		grammarRuleValues[23] = createParserRuleValue(23, "ReferredLocator", -1,
 			createSerializationRules(
-				17	/* ReferredLocator: { { idiomsModel=ID "::" }[?] locatorDeclaration=ID } */
+				19	/* ReferredLocator: { { idiomsModel=ID "::" }[?] locatorDeclaration=ID } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -566,9 +596,9 @@
 				6	/* locatorDeclaration=ID : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[22] = createParserRuleValue(22, "ReferredSegment", -1,
+		grammarRuleValues[24] = createParserRuleValue(24, "ReferredSegment", -1,
 			createSerializationRules(
-				18	/* ReferredSegment: { { idiomsModel=ID "::" }[?] segmentDeclaration=ID } */
+				20	/* ReferredSegment: { { idiomsModel=ID "::" }[?] segmentDeclaration=ID } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -578,9 +608,9 @@
 				6	/* segmentDeclaration=ID : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[23] = createParserRuleValue(23, "ReturnsLocator", -1,
+		grammarRuleValues[25] = createParserRuleValue(25, "ReturnsLocator", -1,
 			createSerializationRules(
-				19	/* ReturnsLocator: { "returns" { ePackage=ID "::" }[?] eClass=ID } */
+				21	/* ReturnsLocator: { "returns" { ePackage=ID "::" }[?] eClass=ID } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -591,25 +621,27 @@
 				6	/* eClass=ID : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[24] = new TerminalRuleValue(24, "SL_COMMENT");
-		grammarRuleValues[25] = new TerminalRuleValue(25, "STRING");
-		grammarRuleValues[26] = createParserRuleValue(26, "Segment", 12 /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */,
+		grammarRuleValues[26] = new TerminalRuleValue(26, "SL_COMMENT");
+		grammarRuleValues[27] = new TerminalRuleValue(27, "STRING");
+		grammarRuleValues[28] = createParserRuleValue(28, "Segment", 12 /* CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PostCommentSegment|PreCommentSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment */,
 			createSerializationRules(
 				3	/* CustomSegment: { "custom" supportClassName=STRING } */,
 				6	/* HalfNewLineSegment: "half-new-line" */,
 				13	/* NewLineSegment: "new-line" */,
 				14	/* NoSpaceSegment: "no-space" */,
 				15	/* PopSegment: "pop" */,
-				16	/* PushSegment: "push" */,
-				21	/* SoftNewLineSegment: "soft-new-line" */,
-				22	/* SoftSpaceSegment: "soft-space" */,
-				23	/* StringSegment: { "string" string=STRING printable="printable" } */,
-				25	/* ValueSegment: "value" */,
-				26	/* WrapAnchorSegment: "wrap-anchor" */,
-				27	/* WrapBeginAllSegment: "wrap-begin-all" */,
-				28	/* WrapBeginSomeSegment: "wrap-begin-some" */,
-				29	/* WrapEndSegment: "wrap-end" */,
-				30	/* WrapHereSegment: "wrap-here" */
+				16	/* PostCommentSegment: "post-comment" */,
+				17	/* PreCommentSegment: "pre-comment" */,
+				18	/* PushSegment: "push" */,
+				23	/* SoftNewLineSegment: "soft-new-line" */,
+				24	/* SoftSpaceSegment: "soft-space" */,
+				25	/* StringSegment: { "string" string=STRING printable="printable" } */,
+				27	/* ValueSegment: "value" */,
+				28	/* WrapAnchorSegment: "wrap-anchor" */,
+				29	/* WrapBeginAllSegment: "wrap-begin-all" */,
+				30	/* WrapBeginSomeSegment: "wrap-begin-some" */,
+				31	/* WrapEndSegment: "wrap-end" */,
+				32	/* WrapHereSegment: "wrap-here" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Alternatives */,
@@ -618,6 +650,8 @@
 				-1	/* NewLineSegment */,
 				-1	/* NoSpaceSegment */,
 				-1	/* PopSegment */,
+				-1	/* PostCommentSegment */,
+				-1	/* PreCommentSegment */,
 				-1	/* PushSegment */,
 				-1	/* SoftNewLineSegment */,
 				-1	/* SoftSpaceSegment */,
@@ -630,9 +664,9 @@
 				-1	/* WrapHereSegment */
 			)
 		);
-		grammarRuleValues[27] = createParserRuleValue(27, "SegmentDeclaration", -1,
+		grammarRuleValues[29] = createParserRuleValue(29, "SegmentDeclaration", -1,
 			createSerializationRules(
-				20	/* SegmentDeclaration: { "segment" name=ID ownedSegment=Segment ";" } */
+				22	/* SegmentDeclaration: { "segment" name=ID ownedSegment=Segment ";" } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -642,9 +676,9 @@
 				3	/* ";" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, no-space, value, soft-new-line, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[28] = createParserRuleValue(28, "SoftNewLineSegment", -1,
+		grammarRuleValues[30] = createParserRuleValue(30, "SoftNewLineSegment", -1,
 			createSerializationRules(
-				21	/* SoftNewLineSegment: "soft-new-line" */
+				23	/* SoftNewLineSegment: "soft-new-line" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -652,9 +686,9 @@
 				6	/* "soft-new-line" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[29] = createParserRuleValue(29, "SoftSpaceSegment", -1,
+		grammarRuleValues[31] = createParserRuleValue(31, "SoftSpaceSegment", -1,
 			createSerializationRules(
-				22	/* SoftSpaceSegment: "soft-space" */
+				24	/* SoftSpaceSegment: "soft-space" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -662,9 +696,9 @@
 				6	/* "soft-space" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[30] = createParserRuleValue(30, "StringSegment", -1,
+		grammarRuleValues[32] = createParserRuleValue(32, "StringSegment", -1,
 			createSerializationRules(
-				23	/* StringSegment: { "string" string=STRING printable="printable" } */
+				25	/* StringSegment: { "string" string=STRING printable="printable" } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -673,9 +707,9 @@
 				6	/* printable?="printable" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[31] = createParserRuleValue(31, "SubIdiom", -1,
+		grammarRuleValues[33] = createParserRuleValue(33, "SubIdiom", -1,
 			createSerializationRules(
-				24	/* SubIdiom: { "at" ownedLocator=(Locator|ReferredLocator) { "do" ownedSegments+=(Segment|ReferredSegment)[*] }[?] ";" } */
+				26	/* SubIdiom: { "at" ownedLocator=(Locator|ReferredLocator) { "do" ownedSegments+=(Segment|ReferredSegment)[*] }[?] ";" } */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -687,9 +721,9 @@
 				3	/* ";" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, no-space, value, soft-new-line, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[32] = createParserRuleValue(32, "ValueSegment", -1,
+		grammarRuleValues[34] = createParserRuleValue(34, "ValueSegment", -1,
 			createSerializationRules(
-				25	/* ValueSegment: "value" */
+				27	/* ValueSegment: "value" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -697,10 +731,10 @@
 				6	/* "value" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[33] = new TerminalRuleValue(33, "WS");
-		grammarRuleValues[34] = createParserRuleValue(34, "WrapAnchorSegment", -1,
+		grammarRuleValues[35] = new TerminalRuleValue(35, "WS");
+		grammarRuleValues[36] = createParserRuleValue(36, "WrapAnchorSegment", -1,
 			createSerializationRules(
-				26	/* WrapAnchorSegment: "wrap-anchor" */
+				28	/* WrapAnchorSegment: "wrap-anchor" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -708,9 +742,9 @@
 				6	/* "wrap-anchor" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[35] = createParserRuleValue(35, "WrapBeginAllSegment", -1,
+		grammarRuleValues[37] = createParserRuleValue(37, "WrapBeginAllSegment", -1,
 			createSerializationRules(
-				27	/* WrapBeginAllSegment: "wrap-begin-all" */
+				29	/* WrapBeginAllSegment: "wrap-begin-all" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -718,9 +752,9 @@
 				6	/* "wrap-begin-all" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[36] = createParserRuleValue(36, "WrapBeginSomeSegment", -1,
+		grammarRuleValues[38] = createParserRuleValue(38, "WrapBeginSomeSegment", -1,
 			createSerializationRules(
-				28	/* WrapBeginSomeSegment: "wrap-begin-some" */
+				30	/* WrapBeginSomeSegment: "wrap-begin-some" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -728,9 +762,9 @@
 				6	/* "wrap-begin-some" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[37] = createParserRuleValue(37, "WrapEndSegment", -1,
+		grammarRuleValues[39] = createParserRuleValue(39, "WrapEndSegment", -1,
 			createSerializationRules(
-				29	/* WrapEndSegment: "wrap-end" */
+				31	/* WrapEndSegment: "wrap-end" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -738,9 +772,9 @@
 				6	/* "wrap-end" : [supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport, soft-space, value, soft-space, supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport] */
 			)
 		);
-		grammarRuleValues[38] = createParserRuleValue(38, "WrapHereSegment", -1,
+		grammarRuleValues[40] = createParserRuleValue(40, "WrapHereSegment", -1,
 			createSerializationRules(
-				30	/* WrapHereSegment: "wrap-here" */
+				32	/* WrapHereSegment: "wrap-here" */
 			),
 			createFormattingSegmentsList(
 				-1	/* Group */,
@@ -765,23 +799,23 @@
 		// LocatorDeclaration
 		grammarRuleVectors[4] = new GrammarRuleVector(0x8000L);
 		// Locator|ReferredLocator
-		grammarRuleVectors[5] = new GrammarRuleVector(0x204000L);
+		grammarRuleVectors[5] = new GrammarRuleVector(0x804000L);
 		// AnyAssignmentLocator|AnyElementLocator|AssignmentLocator|FinalLocator|KeywordLocator|Locator|ReturnsLocator
-		grammarRuleVectors[6] = new GrammarRuleVector(0x80604eL);
+		grammarRuleVectors[6] = new GrammarRuleVector(0x200604eL);
 		// AnyAssignmentLocator|AnyElementLocator|AssignmentLocator|FinalLocator|KeywordLocator|Locator|ReferredLocator|ReturnsLocator
-		grammarRuleVectors[7] = new GrammarRuleVector(0xa0604eL);
+		grammarRuleVectors[7] = new GrammarRuleVector(0x280604eL);
 		// Segment
-		grammarRuleVectors[8] = new GrammarRuleVector(0x4000000L);
+		grammarRuleVectors[8] = new GrammarRuleVector(0x10000000L);
 		// ReferredSegment|Segment
-		grammarRuleVectors[9] = new GrammarRuleVector(0x4400000L);
+		grammarRuleVectors[9] = new GrammarRuleVector(0x11000000L);
 		// SegmentDeclaration
-		grammarRuleVectors[10] = new GrammarRuleVector(0x8000000L);
+		grammarRuleVectors[10] = new GrammarRuleVector(0x20000000L);
 		// SubIdiom
-		grammarRuleVectors[11] = new GrammarRuleVector(0x80000000L);
-		// CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment
-		grammarRuleVectors[12] = new GrammarRuleVector(0x7d741e0090L);
-		// CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PushSegment|ReferredSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment
-		grammarRuleVectors[13] = new GrammarRuleVector(0x7d745e0090L);
+		grammarRuleVectors[11] = new GrammarRuleVector(0x200000000L);
+		// CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PostCommentSegment|PreCommentSegment|PushSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment
+		grammarRuleVectors[12] = new GrammarRuleVector(0x1f5d07e0090L);
+		// CustomSegment|HalfNewLineSegment|NewLineSegment|NoSpaceSegment|PopSegment|PostCommentSegment|PreCommentSegment|PushSegment|ReferredSegment|Segment|SoftNewLineSegment|SoftSpaceSegment|StringSegment|ValueSegment|WrapAnchorSegment|WrapBeginAllSegment|WrapBeginSomeSegment|WrapEndSegment|WrapHereSegment
+		grammarRuleVectors[13] = new GrammarRuleVector(0x1f5d17e0090L);
 	}
 
 	/**
@@ -862,7 +896,7 @@
 		serializationMatchSteps[35] = createMatchStep_Assign(4, 13);
 		// assign V4 = |IdiomsModel::ownedIdioms|
 		serializationMatchSteps[36] = createMatchStep_Assign(4, 17);
-		// check-rule idioms::Idiom.ownedSubIdioms : 31
+		// check-rule idioms::Idiom.ownedSubIdioms : 33
 		serializationMatchSteps[37] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOM__OWNED_SUB_IDIOMS, 11/*SubIdiom*/);
 		// check-rule idioms::IdiomsModel.ownedIdioms : 10
 		serializationMatchSteps[38] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_IDIOMS, 1/*Idiom*/);
@@ -870,17 +904,17 @@
 		serializationMatchSteps[39] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_IMPORTS, 0/*EPackageImport*/);
 		// check-rule idioms::IdiomsModel.ownedLocatorDeclarations : 15
 		serializationMatchSteps[40] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_LOCATOR_DECLARATIONS, 4/*LocatorDeclaration*/);
-		// check-rule idioms::IdiomsModel.ownedSegmentDeclarations : 27
+		// check-rule idioms::IdiomsModel.ownedSegmentDeclarations : 29
 		serializationMatchSteps[41] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_SEGMENT_DECLARATIONS, 10/*SegmentDeclaration*/);
 		// check-rule idioms::IdiomsModel.ownedWiths : 11
 		serializationMatchSteps[42] = createMatchStep_RuleCheck(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_WITHS, 2/*IdiomsImport*/);
 		// check-rule idioms::LocatorDeclaration.ownedLocator : 14
 		serializationMatchSteps[43] = createMatchStep_RuleCheck(IdiomsPackage.Literals.LOCATOR_DECLARATION__OWNED_LOCATOR, 3/*Locator*/);
-		// check-rule idioms::SegmentDeclaration.ownedSegment : 26
+		// check-rule idioms::SegmentDeclaration.ownedSegment : 28
 		serializationMatchSteps[44] = createMatchStep_RuleCheck(IdiomsPackage.Literals.SEGMENT_DECLARATION__OWNED_SEGMENT, 8/*Segment*/);
-		// check-rule idioms::SubIdiom.ownedLocator : 14|21
+		// check-rule idioms::SubIdiom.ownedLocator : 14|23
 		serializationMatchSteps[45] = createMatchStep_RuleCheck(IdiomsPackage.Literals.SUB_IDIOM__OWNED_LOCATOR, 5/*Locator|ReferredLocator*/);
-		// check-rule idioms::SubIdiom.ownedSegments : 22|26
+		// check-rule idioms::SubIdiom.ownedSegments : 24|28
 		serializationMatchSteps[46] = createMatchStep_RuleCheck(IdiomsPackage.Literals.SUB_IDIOM__OWNED_SEGMENTS, 9/*ReferredSegment|Segment*/);
 	}
 
@@ -1044,8 +1078,8 @@
 				),
 				createSerializationSteps(
 					38		/* 'assignment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					73		/* V00*5-steps */,
-					75		/* V01*2-steps */,
+					75		/* V00*5-steps */,
+					77		/* V01*2-steps */,
 					4		/* AssignmentLocator::ePackage=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					2		/* AssignmentLocator::eClass=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
@@ -1079,7 +1113,7 @@
 				),
 				createSerializationSteps(
 					40		/* 'custom' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					32		/* CustomSegment::supportClassName=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					32		/* CustomSegment::supportClassName=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1105,7 +1139,7 @@
 				createSerializationSteps(
 					46		/* 'import' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					5		/* EPackageImport::ePackage=STRING || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					71		/* V00*2-steps */,
+					73		/* V00*2-steps */,
 					37		/* 'as' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					0		/* EPackageImport::as=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
@@ -1158,7 +1192,7 @@
 		serializationRules[7] =
 			new SerializationRule("Idiom", 10,
 				createSerializationMatchSteps(
-					37		/* check-rule idioms::Idiom.ownedSubIdioms : 31 */,
+					37		/* check-rule idioms::Idiom.ownedSubIdioms : 33 */,
 					35		/* assign V4 = |Idiom::ownedSubIdioms| */,
 					33		/* assign V3 = |Idiom::inRuleRegex| */,
 					28		/* assign V1 = |Idiom::forEClass| */,
@@ -1167,23 +1201,23 @@
 					21		/* assign V0 = |Idiom::mixin.'mixin'| */
 				),
 				createSerializationSteps(
-					70		/* V00*1-steps */,
+					72		/* V00*1-steps */,
 					49		/* 'mixin' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					45		/* 'idiom' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					15		/* Idiom::name=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					76		/* V01*5-steps */,
+					78		/* V01*5-steps */,
 					43		/* 'for' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					78		/* V02*2-steps */,
+					80		/* V02*2-steps */,
 					9		/* Idiom::forEPackage=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					8		/* Idiom::forEClass=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					80		/* V03*2-steps */,
+					82		/* V03*2-steps */,
 					47		/* 'in' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					13		/* Idiom::inRuleRegex=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					68		/* '{' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value push soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					81		/* V04*1-steps */,
-					27		/* Idiom::ownedSubIdioms+=31 || value soft-new-line */,
-					69		/* '}' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport pop soft-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					13		/* Idiom::inRuleRegex=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					70		/* '{' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value push soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					83		/* V04*1-steps */,
+					27		/* Idiom::ownedSubIdioms+=33 || value soft-new-line */,
+					71		/* '}' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport pop soft-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				new @NonNull EAttribute_EnumerationValues [] {
 					createEAttribute_EnumerationValues(IdiomsPackage.Literals.IDIOM__MIXIN,
@@ -1225,7 +1259,7 @@
 					),
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.IDIOM__OWNED_SUB_IDIOMS,
 						new @NonNull RuleIndex_GrammarCardinality [] {
-						new RuleIndex_GrammarCardinality(31, GrammarCardinality.ZERO_OR_MORE)
+						new RuleIndex_GrammarCardinality(33, GrammarCardinality.ZERO_OR_MORE)
 						}
 					)
 				});
@@ -1234,7 +1268,7 @@
 		serializationRules[8] =
 			new SerializationRule("Idiom", 10,
 				createSerializationMatchSteps(
-					37		/* check-rule idioms::Idiom.ownedSubIdioms : 31 */,
+					37		/* check-rule idioms::Idiom.ownedSubIdioms : 33 */,
 					4		/* assert (|Idiom::ownedSubIdioms| - 1) == 0 */,
 					33		/* assign V3 = |Idiom::inRuleRegex| */,
 					28		/* assign V1 = |Idiom::forEClass| */,
@@ -1243,20 +1277,20 @@
 					21		/* assign V0 = |Idiom::mixin.'mixin'| */
 				),
 				createSerializationSteps(
-					70		/* V00*1-steps */,
+					72		/* V00*1-steps */,
 					49		/* 'mixin' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					45		/* 'idiom' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					15		/* Idiom::name=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					76		/* V01*5-steps */,
+					78		/* V01*5-steps */,
 					43		/* 'for' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					78		/* V02*2-steps */,
+					80		/* V02*2-steps */,
 					9		/* Idiom::forEPackage=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					8		/* Idiom::forEClass=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					80		/* V03*2-steps */,
+					82		/* V03*2-steps */,
 					47		/* 'in' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					13		/* Idiom::inRuleRegex=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					27		/* Idiom::ownedSubIdioms+=31 || value soft-new-line */
+					13		/* Idiom::inRuleRegex=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					27		/* Idiom::ownedSubIdioms+=33 || value soft-new-line */
 				),
 				new @NonNull EAttribute_EnumerationValues [] {
 					createEAttribute_EnumerationValues(IdiomsPackage.Literals.IDIOM__MIXIN,
@@ -1298,7 +1332,7 @@
 					),
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.IDIOM__OWNED_SUB_IDIOMS,
 						new @NonNull RuleIndex_GrammarCardinality [] {
-						new RuleIndex_GrammarCardinality(31, GrammarCardinality.ONE)
+						new RuleIndex_GrammarCardinality(33, GrammarCardinality.ONE)
 						}
 					)
 				});
@@ -1311,9 +1345,9 @@
 					5		/* assert (|IdiomsImport::idiomsModel| - 1) == 0 */
 				),
 				createSerializationSteps(
-					62		/* 'with' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					64		/* 'with' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					10		/* IdiomsImport::idiomsModel=STRING || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					71		/* V00*2-steps */,
+					73		/* V00*2-steps */,
 					37		/* 'as' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					1		/* IdiomsImport::as=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
@@ -1341,7 +1375,7 @@
 					38		/* check-rule idioms::IdiomsModel.ownedIdioms : 10 */,
 					39		/* check-rule idioms::IdiomsModel.ownedImports : 5 */,
 					40		/* check-rule idioms::IdiomsModel.ownedLocatorDeclarations : 15 */,
-					41		/* check-rule idioms::IdiomsModel.ownedSegmentDeclarations : 27 */,
+					41		/* check-rule idioms::IdiomsModel.ownedSegmentDeclarations : 29 */,
 					42		/* check-rule idioms::IdiomsModel.ownedWiths : 11 */,
 					36		/* assign V4 = |IdiomsModel::ownedIdioms| */,
 					34		/* assign V3 = |IdiomsModel::ownedSegmentDeclarations| */,
@@ -1353,15 +1387,15 @@
 				createSerializationSteps(
 					50		/* 'model' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					16		/* IdiomsModel::name=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					70		/* V00*1-steps */,
+					72		/* V00*1-steps */,
 					28		/* IdiomsModel::ownedWiths+=11 || soft-new-line value soft-new-line */,
-					74		/* V01*1-steps */,
+					76		/* V01*1-steps */,
 					20		/* IdiomsModel::ownedImports+=5 || soft-new-line value soft-new-line */,
-					77		/* V02*1-steps */,
+					79		/* V02*1-steps */,
 					23		/* IdiomsModel::ownedLocatorDeclarations+=15 || null */,
-					79		/* V03*1-steps */,
-					25		/* IdiomsModel::ownedSegmentDeclarations+=27 || null */,
-					81		/* V04*1-steps */,
+					81		/* V03*1-steps */,
+					25		/* IdiomsModel::ownedSegmentDeclarations+=29 || null */,
+					83		/* V04*1-steps */,
 					19		/* IdiomsModel::ownedIdioms+=10 || new-line soft-new-line value soft-new-line */
 				),
 				null,
@@ -1405,7 +1439,7 @@
 					),
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_SEGMENT_DECLARATIONS,
 						new @NonNull RuleIndex_GrammarCardinality [] {
-						new RuleIndex_GrammarCardinality(27, GrammarCardinality.ZERO_OR_MORE)
+						new RuleIndex_GrammarCardinality(29, GrammarCardinality.ZERO_OR_MORE)
 						}
 					),
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_WITHS,
@@ -1422,7 +1456,7 @@
 					7		/* assert (|KeywordLocator::string| - 1) == 0 */
 				),
 				createSerializationSteps(
-					30		/* KeywordLocator::string=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					30		/* KeywordLocator::string=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1517,13 +1551,41 @@
 				null,
 				null);
 			;
-		// Idioms::PushSegment(idioms::PushSegment): "push"
+		// Idioms::PostCommentSegment(idioms::PostCommentSegment): "post-comment"
 		serializationRules[16] =
-			new SerializationRule("PushSegment", 20,
+			new SerializationRule("PostCommentSegment", 20,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					55		/* 'push' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					54		/* 'post-comment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+				),
+				null,
+				null,
+				null,
+				null,
+				null);
+			;
+		// Idioms::PreCommentSegment(idioms::PreCommentSegment): "pre-comment"
+		serializationRules[17] =
+			new SerializationRule("PreCommentSegment", 21,
+				createSerializationMatchSteps(
+				),
+				createSerializationSteps(
+					55		/* 'pre-comment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+				),
+				null,
+				null,
+				null,
+				null,
+				null);
+			;
+		// Idioms::PushSegment(idioms::PushSegment): "push"
+		serializationRules[18] =
+			new SerializationRule("PushSegment", 22,
+				createSerializationMatchSteps(
+				),
+				createSerializationSteps(
+					57		/* 'push' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1532,14 +1594,14 @@
 				null);
 			;
 		// Idioms::ReferredLocator(idioms::ReferredLocator): { { idiomsModel=ID "::" }[?] locatorDeclaration=ID }
-		serializationRules[17] =
-			new SerializationRule("ReferredLocator", 21,
+		serializationRules[19] =
+			new SerializationRule("ReferredLocator", 23,
 				createSerializationMatchSteps(
 					10		/* assert (|ReferredLocator::locatorDeclaration| - 1) == 0 */,
 					24		/* assign V0 = |ReferredLocator::idiomsModel| */
 				),
 				createSerializationSteps(
-					71		/* V00*2-steps */,
+					73		/* V00*2-steps */,
 					11		/* ReferredLocator::idiomsModel=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					14		/* ReferredLocator::locatorDeclaration=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
@@ -1560,14 +1622,14 @@
 				});
 			;
 		// Idioms::ReferredSegment(idioms::ReferredSegment): { { idiomsModel=ID "::" }[?] segmentDeclaration=ID }
-		serializationRules[18] =
-			new SerializationRule("ReferredSegment", 22,
+		serializationRules[20] =
+			new SerializationRule("ReferredSegment", 24,
 				createSerializationMatchSteps(
 					11		/* assert (|ReferredSegment::segmentDeclaration| - 1) == 0 */,
 					25		/* assign V0 = |ReferredSegment::idiomsModel| */
 				),
 				createSerializationSteps(
-					71		/* V00*2-steps */,
+					73		/* V00*2-steps */,
 					12		/* ReferredSegment::idiomsModel=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					29		/* ReferredSegment::segmentDeclaration=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
@@ -1588,15 +1650,15 @@
 				});
 			;
 		// Idioms::ReturnsLocator(idioms::ReturnsLocator): { "returns" { ePackage=ID "::" }[?] eClass=ID }
-		serializationRules[19] =
-			new SerializationRule("ReturnsLocator", 23,
+		serializationRules[21] =
+			new SerializationRule("ReturnsLocator", 25,
 				createSerializationMatchSteps(
 					12		/* assert (|ReturnsLocator::eClass| - 1) == 0 */,
 					26		/* assign V0 = |ReturnsLocator::ePackage| */
 				),
 				createSerializationSteps(
-					56		/* 'returns' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					71		/* V00*2-steps */,
+					58		/* 'returns' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					73		/* V00*2-steps */,
 					6		/* ReturnsLocator::ePackage=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					33		/* '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					3		/* ReturnsLocator::eClass=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
@@ -1617,17 +1679,17 @@
 				});
 			;
 		// Idioms::SegmentDeclaration(idioms::SegmentDeclaration): { "segment" name=ID ownedSegment=Segment ";" }
-		serializationRules[20] =
-			new SerializationRule("SegmentDeclaration", 27,
+		serializationRules[22] =
+			new SerializationRule("SegmentDeclaration", 29,
 				createSerializationMatchSteps(
-					44		/* check-rule idioms::SegmentDeclaration.ownedSegment : 26 */,
+					44		/* check-rule idioms::SegmentDeclaration.ownedSegment : 28 */,
 					14		/* assert (|SegmentDeclaration::ownedSegment| - 1) == 0 */,
 					13		/* assert (|SegmentDeclaration::name| - 1) == 0 */
 				),
 				createSerializationSteps(
-					57		/* 'segment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					59		/* 'segment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
 					18		/* SegmentDeclaration::name=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					24		/* SegmentDeclaration::ownedSegment=26 || null */,
+					24		/* SegmentDeclaration::ownedSegment=28 || null */,
 					34		/* ';' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
@@ -1648,18 +1710,18 @@
 				new @NonNull EReference_RuleIndex_GrammarCardinality [] {
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.SEGMENT_DECLARATION__OWNED_SEGMENT,
 						new @NonNull RuleIndex_GrammarCardinality [] {
-						new RuleIndex_GrammarCardinality(26, GrammarCardinality.ONE)
+						new RuleIndex_GrammarCardinality(28, GrammarCardinality.ONE)
 						}
 					)
 				});
 			;
 		// Idioms::SoftNewLineSegment(idioms::SoftNewLineSegment): "soft-new-line"
-		serializationRules[21] =
-			new SerializationRule("SoftNewLineSegment", 28,
+		serializationRules[23] =
+			new SerializationRule("SoftNewLineSegment", 30,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					58		/* 'soft-new-line' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					60		/* 'soft-new-line' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1668,12 +1730,12 @@
 				null);
 			;
 		// Idioms::SoftSpaceSegment(idioms::SoftSpaceSegment): "soft-space"
-		serializationRules[22] =
-			new SerializationRule("SoftSpaceSegment", 29,
+		serializationRules[24] =
+			new SerializationRule("SoftSpaceSegment", 31,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					59		/* 'soft-space' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					61		/* 'soft-space' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1682,16 +1744,16 @@
 				null);
 			;
 		// Idioms::StringSegment(idioms::StringSegment): { "string" string=STRING printable="printable" }
-		serializationRules[23] =
-			new SerializationRule("StringSegment", 30,
+		serializationRules[25] =
+			new SerializationRule("StringSegment", 32,
 				createSerializationMatchSteps(
 					15		/* assert (|StringSegment::printable.'printable'| - 1) == 0 */,
 					16		/* assert (|StringSegment::string| - 1) == 0 */
 				),
 				createSerializationSteps(
-					60		/* 'string' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					31		/* StringSegment::string=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					54		/* 'printable' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					62		/* 'string' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					31		/* StringSegment::string=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
+					56		/* 'printable' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				new @NonNull EAttribute_EnumerationValues [] {
 					createEAttribute_EnumerationValues(IdiomsPackage.Literals.STRING_SEGMENT__PRINTABLE,
@@ -1717,22 +1779,22 @@
 				null);
 			;
 		// Idioms::SubIdiom(idioms::SubIdiom): { "at" ownedLocator=(Locator|ReferredLocator) { "do" ownedSegments+=(Segment|ReferredSegment)[*] }[?] ";" }
-		serializationRules[24] =
-			new SerializationRule("SubIdiom", 31,
+		serializationRules[26] =
+			new SerializationRule("SubIdiom", 33,
 				createSerializationMatchSteps(
-					45		/* check-rule idioms::SubIdiom.ownedLocator : 14|21 */,
-					46		/* check-rule idioms::SubIdiom.ownedSegments : 22|26 */,
+					45		/* check-rule idioms::SubIdiom.ownedLocator : 14|23 */,
+					46		/* check-rule idioms::SubIdiom.ownedSegments : 24|28 */,
 					17		/* assert (|SubIdiom::ownedLocator| - 1) == 0 */,
 					18		/* assign V0 = (|SubIdiom::ownedSegments| > 0) */,
 					30		/* assign V1 = |SubIdiom::ownedSegments| */
 				),
 				createSerializationSteps(
 					39		/* 'at' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					22		/* SubIdiom::ownedLocator=14|21 || null */,
-					72		/* V00*3-steps */,
+					22		/* SubIdiom::ownedLocator=14|23 || null */,
+					74		/* V00*3-steps */,
 					41		/* 'do' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */,
-					74		/* V01*1-steps */,
-					26		/* SubIdiom::ownedSegments+=26|22 || null */,
+					76		/* V01*1-steps */,
+					26		/* SubIdiom::ownedSegments+=28|24 || null */,
 					34		/* ';' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
@@ -1748,24 +1810,24 @@
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.SUB_IDIOM__OWNED_LOCATOR,
 						new @NonNull RuleIndex_GrammarCardinality [] {
 						new RuleIndex_GrammarCardinality(14, GrammarCardinality.ONE),
-						new RuleIndex_GrammarCardinality(21, GrammarCardinality.ONE)
+						new RuleIndex_GrammarCardinality(23, GrammarCardinality.ONE)
 						}
 					),
 					new EReference_RuleIndex_GrammarCardinality(IdiomsPackage.Literals.SUB_IDIOM__OWNED_SEGMENTS,
 						new @NonNull RuleIndex_GrammarCardinality [] {
-						new RuleIndex_GrammarCardinality(22, GrammarCardinality.ZERO_OR_MORE),
-						new RuleIndex_GrammarCardinality(26, GrammarCardinality.ZERO_OR_MORE)
+						new RuleIndex_GrammarCardinality(24, GrammarCardinality.ZERO_OR_MORE),
+						new RuleIndex_GrammarCardinality(28, GrammarCardinality.ZERO_OR_MORE)
 						}
 					)
 				});
 			;
 		// Idioms::ValueSegment(idioms::ValueSegment): "value"
-		serializationRules[25] =
-			new SerializationRule("ValueSegment", 32,
+		serializationRules[27] =
+			new SerializationRule("ValueSegment", 34,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					61		/* 'value' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					63		/* 'value' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1774,12 +1836,12 @@
 				null);
 			;
 		// Idioms::WrapAnchorSegment(idioms::WrapAnchorSegment): "wrap-anchor"
-		serializationRules[26] =
-			new SerializationRule("WrapAnchorSegment", 34,
+		serializationRules[28] =
+			new SerializationRule("WrapAnchorSegment", 36,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					63		/* 'wrap-anchor' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					65		/* 'wrap-anchor' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1788,12 +1850,12 @@
 				null);
 			;
 		// Idioms::WrapBeginAllSegment(idioms::WrapBeginAllSegment): "wrap-begin-all"
-		serializationRules[27] =
-			new SerializationRule("WrapBeginAllSegment", 35,
+		serializationRules[29] =
+			new SerializationRule("WrapBeginAllSegment", 37,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					64		/* 'wrap-begin-all' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					66		/* 'wrap-begin-all' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1802,12 +1864,12 @@
 				null);
 			;
 		// Idioms::WrapBeginSomeSegment(idioms::WrapBeginSomeSegment): "wrap-begin-some"
-		serializationRules[28] =
-			new SerializationRule("WrapBeginSomeSegment", 36,
+		serializationRules[30] =
+			new SerializationRule("WrapBeginSomeSegment", 38,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					65		/* 'wrap-begin-some' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					67		/* 'wrap-begin-some' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1816,12 +1878,12 @@
 				null);
 			;
 		// Idioms::WrapEndSegment(idioms::WrapEndSegment): "wrap-end"
-		serializationRules[29] =
-			new SerializationRule("WrapEndSegment", 37,
+		serializationRules[31] =
+			new SerializationRule("WrapEndSegment", 39,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					66		/* 'wrap-end' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					68		/* 'wrap-end' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1830,12 +1892,12 @@
 				null);
 			;
 		// Idioms::WrapHereSegment(idioms::WrapHereSegment): "wrap-here"
-		serializationRules[30] =
-			new SerializationRule("WrapHereSegment", 38,
+		serializationRules[32] =
+			new SerializationRule("WrapHereSegment", 40,
 				createSerializationMatchSteps(
 				),
 				createSerializationSteps(
-					67		/* 'wrap-here' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
+					69		/* 'wrap-here' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport */
 				),
 				null,
 				null,
@@ -1933,8 +1995,8 @@
 		serializationSteps[11] = createSerializationStepCrossReference(IdiomsPackage.Literals.REFERRED_LOCATOR__IDIOMS_MODEL, getCrossReference(IdiomsPackage.Literals.REFERRED_LOCATOR__IDIOMS_MODEL, "ID"), 6);
 		// ReferredSegment::idiomsModel=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
 		serializationSteps[12] = createSerializationStepCrossReference(IdiomsPackage.Literals.REFERRED_SEGMENT__IDIOMS_MODEL, getCrossReference(IdiomsPackage.Literals.REFERRED_SEGMENT__IDIOMS_MODEL, "ID"), 6);
-		// Idiom::inRuleRegex=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[13] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOM__IN_RULE_REGEX, 25 /*STRING*/, 6);
+		// Idiom::inRuleRegex=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[13] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOM__IN_RULE_REGEX, 27 /*STRING*/, 6);
 		// ReferredLocator::locatorDeclaration=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
 		serializationSteps[14] = createSerializationStepCrossReference(IdiomsPackage.Literals.REFERRED_LOCATOR__LOCATOR_DECLARATION, getCrossReference(IdiomsPackage.Literals.REFERRED_LOCATOR__LOCATOR_DECLARATION, "ID"), 6);
 		// Idiom::name=8 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
@@ -1951,28 +2013,28 @@
 		serializationSteps[20] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_IMPORTS, 5 /*EPackageImport*/, 1);
 		// LocatorDeclaration::ownedLocator=14 || null
 		serializationSteps[21] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.LOCATOR_DECLARATION__OWNED_LOCATOR, 14 /*Locator*/, -1);
-		// SubIdiom::ownedLocator=14|21 || null
-		serializationSteps[22] = createSerializationStepAssigns(IdiomsPackage.Literals.SUB_IDIOM__OWNED_LOCATOR, -1, new @NonNull Integer [] { 14/*Locator*/,21/*ReferredLocator*/}, -1);
+		// SubIdiom::ownedLocator=14|23 || null
+		serializationSteps[22] = createSerializationStepAssigns(IdiomsPackage.Literals.SUB_IDIOM__OWNED_LOCATOR, -1, new @NonNull Integer [] { 14/*Locator*/,23/*ReferredLocator*/}, -1);
 		// IdiomsModel::ownedLocatorDeclarations+=15 || null
 		serializationSteps[23] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_LOCATOR_DECLARATIONS, 15 /*LocatorDeclaration*/, -1);
-		// SegmentDeclaration::ownedSegment=26 || null
-		serializationSteps[24] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.SEGMENT_DECLARATION__OWNED_SEGMENT, 26 /*Segment*/, -1);
-		// IdiomsModel::ownedSegmentDeclarations+=27 || null
-		serializationSteps[25] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_SEGMENT_DECLARATIONS, 27 /*SegmentDeclaration*/, -1);
-		// SubIdiom::ownedSegments+=26|22 || null
-		serializationSteps[26] = createSerializationStepAssigns(IdiomsPackage.Literals.SUB_IDIOM__OWNED_SEGMENTS, -1, new @NonNull Integer [] { 26/*Segment*/,22/*ReferredSegment*/}, -1);
-		// Idiom::ownedSubIdioms+=31 || value soft-new-line
-		serializationSteps[27] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOM__OWNED_SUB_IDIOMS, 31 /*SubIdiom*/, 7);
+		// SegmentDeclaration::ownedSegment=28 || null
+		serializationSteps[24] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.SEGMENT_DECLARATION__OWNED_SEGMENT, 28 /*Segment*/, -1);
+		// IdiomsModel::ownedSegmentDeclarations+=29 || null
+		serializationSteps[25] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_SEGMENT_DECLARATIONS, 29 /*SegmentDeclaration*/, -1);
+		// SubIdiom::ownedSegments+=28|24 || null
+		serializationSteps[26] = createSerializationStepAssigns(IdiomsPackage.Literals.SUB_IDIOM__OWNED_SEGMENTS, -1, new @NonNull Integer [] { 28/*Segment*/,24/*ReferredSegment*/}, -1);
+		// Idiom::ownedSubIdioms+=33 || value soft-new-line
+		serializationSteps[27] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOM__OWNED_SUB_IDIOMS, 33 /*SubIdiom*/, 7);
 		// IdiomsModel::ownedWiths+=11 || soft-new-line value soft-new-line
 		serializationSteps[28] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.IDIOMS_MODEL__OWNED_WITHS, 11 /*IdiomsImport*/, 1);
 		// ReferredSegment::segmentDeclaration=ID || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
 		serializationSteps[29] = createSerializationStepCrossReference(IdiomsPackage.Literals.REFERRED_SEGMENT__SEGMENT_DECLARATION, getCrossReference(IdiomsPackage.Literals.REFERRED_SEGMENT__SEGMENT_DECLARATION, "ID"), 6);
-		// KeywordLocator::string=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[30] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.KEYWORD_LOCATOR__STRING, 25 /*STRING*/, 6);
-		// StringSegment::string=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[31] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.STRING_SEGMENT__STRING, 25 /*STRING*/, 6);
-		// CustomSegment::supportClassName=25 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[32] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.CUSTOM_SEGMENT__SUPPORT_CLASS_NAME, 25 /*STRING*/, 6);
+		// KeywordLocator::string=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[30] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.KEYWORD_LOCATOR__STRING, 27 /*STRING*/, 6);
+		// StringSegment::string=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[31] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.STRING_SEGMENT__STRING, 27 /*STRING*/, 6);
+		// CustomSegment::supportClassName=27 || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[32] = createSerializationStepAssignedRuleCall(IdiomsPackage.Literals.CUSTOM_SEGMENT__SUPPORT_CLASS_NAME, 27 /*STRING*/, 6);
 		// '::' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value no-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
 		serializationSteps[33] = createSerializationStepKeyword("::", 2);
 		// ';' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport no-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
@@ -2015,62 +2077,66 @@
 		serializationSteps[52] = createSerializationStepKeyword("no-space", 6);
 		// 'pop' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
 		serializationSteps[53] = createSerializationStepKeyword("pop", 6);
+		// 'post-comment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[54] = createSerializationStepKeyword("post-comment", 6);
+		// 'pre-comment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
+		serializationSteps[55] = createSerializationStepKeyword("pre-comment", 6);
 		// 'printable' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[54] = createSerializationStepKeyword("printable", 6);
+		serializationSteps[56] = createSerializationStepKeyword("printable", 6);
 		// 'push' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[55] = createSerializationStepKeyword("push", 6);
+		serializationSteps[57] = createSerializationStepKeyword("push", 6);
 		// 'returns' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[56] = createSerializationStepKeyword("returns", 6);
+		serializationSteps[58] = createSerializationStepKeyword("returns", 6);
 		// 'segment' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[57] = createSerializationStepKeyword("segment", 6);
+		serializationSteps[59] = createSerializationStepKeyword("segment", 6);
 		// 'soft-new-line' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[58] = createSerializationStepKeyword("soft-new-line", 6);
+		serializationSteps[60] = createSerializationStepKeyword("soft-new-line", 6);
 		// 'soft-space' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[59] = createSerializationStepKeyword("soft-space", 6);
+		serializationSteps[61] = createSerializationStepKeyword("soft-space", 6);
 		// 'string' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[60] = createSerializationStepKeyword("string", 6);
+		serializationSteps[62] = createSerializationStepKeyword("string", 6);
 		// 'value' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[61] = createSerializationStepKeyword("value", 6);
+		serializationSteps[63] = createSerializationStepKeyword("value", 6);
 		// 'with' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[62] = createSerializationStepKeyword("with", 6);
+		serializationSteps[64] = createSerializationStepKeyword("with", 6);
 		// 'wrap-anchor' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[63] = createSerializationStepKeyword("wrap-anchor", 6);
+		serializationSteps[65] = createSerializationStepKeyword("wrap-anchor", 6);
 		// 'wrap-begin-all' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[64] = createSerializationStepKeyword("wrap-begin-all", 6);
+		serializationSteps[66] = createSerializationStepKeyword("wrap-begin-all", 6);
 		// 'wrap-begin-some' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[65] = createSerializationStepKeyword("wrap-begin-some", 6);
+		serializationSteps[67] = createSerializationStepKeyword("wrap-begin-some", 6);
 		// 'wrap-end' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[66] = createSerializationStepKeyword("wrap-end", 6);
+		serializationSteps[68] = createSerializationStepKeyword("wrap-end", 6);
 		// 'wrap-here' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value soft-space supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[67] = createSerializationStepKeyword("wrap-here", 6);
+		serializationSteps[69] = createSerializationStepKeyword("wrap-here", 6);
 		// '{' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport soft-space value push soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[68] = createSerializationStepKeyword("{", 5);
+		serializationSteps[70] = createSerializationStepKeyword("{", 5);
 		// '}' || supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPreCommentSegmentSupport pop soft-space value soft-new-line supported by org.eclipse.ocl.examples.xtext.idioms.serializer.XtextPostCommentSegmentSupport
-		serializationSteps[69] = createSerializationStepKeyword("}", 4);
+		serializationSteps[71] = createSerializationStepKeyword("}", 4);
 		// V00*1-steps
-		serializationSteps[70] = createSerializationStepSequence(0, 1);
+		serializationSteps[72] = createSerializationStepSequence(0, 1);
 		// V00*2-steps
-		serializationSteps[71] = createSerializationStepSequence(0, 2);
+		serializationSteps[73] = createSerializationStepSequence(0, 2);
 		// V00*3-steps
-		serializationSteps[72] = createSerializationStepSequence(0, 3);
+		serializationSteps[74] = createSerializationStepSequence(0, 3);
 		// V00*5-steps
-		serializationSteps[73] = createSerializationStepSequence(0, 5);
+		serializationSteps[75] = createSerializationStepSequence(0, 5);
 		// V01*1-steps
-		serializationSteps[74] = createSerializationStepSequence(1, 1);
+		serializationSteps[76] = createSerializationStepSequence(1, 1);
 		// V01*2-steps
-		serializationSteps[75] = createSerializationStepSequence(1, 2);
+		serializationSteps[77] = createSerializationStepSequence(1, 2);
 		// V01*5-steps
-		serializationSteps[76] = createSerializationStepSequence(1, 5);
+		serializationSteps[78] = createSerializationStepSequence(1, 5);
 		// V02*1-steps
-		serializationSteps[77] = createSerializationStepSequence(2, 1);
+		serializationSteps[79] = createSerializationStepSequence(2, 1);
 		// V02*2-steps
-		serializationSteps[78] = createSerializationStepSequence(2, 2);
+		serializationSteps[80] = createSerializationStepSequence(2, 2);
 		// V03*1-steps
-		serializationSteps[79] = createSerializationStepSequence(3, 1);
+		serializationSteps[81] = createSerializationStepSequence(3, 1);
 		// V03*2-steps
-		serializationSteps[80] = createSerializationStepSequence(3, 2);
+		serializationSteps[82] = createSerializationStepSequence(3, 2);
 		// V04*1-steps
-		serializationSteps[81] = createSerializationStepSequence(4, 1);
+		serializationSteps[83] = createSerializationStepSequence(4, 1);
 	}
 }
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/services/IdiomsGrammarAccess.java b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/services/IdiomsGrammarAccess.java
index bd5f12b..4622d55 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/services/IdiomsGrammarAccess.java
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src-gen/org/eclipse/ocl/examples/xtext/idioms/services/IdiomsGrammarAccess.java
@@ -542,26 +542,28 @@
 		private final RuleCall cNewLineSegmentParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cNoSpaceSegmentParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		private final RuleCall cPopSegmentParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
-		private final RuleCall cPushSegmentParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
-		private final RuleCall cSoftNewLineSegmentParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
-		private final RuleCall cSoftSpaceSegmentParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
-		private final RuleCall cStringSegmentParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
-		private final RuleCall cValueSegmentParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
-		private final RuleCall cWrapAnchorSegmentParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
-		private final RuleCall cWrapBeginAllSegmentParserRuleCall_11 = (RuleCall)cAlternatives.eContents().get(11);
-		private final RuleCall cWrapBeginSomeSegmentParserRuleCall_12 = (RuleCall)cAlternatives.eContents().get(12);
-		private final RuleCall cWrapEndSegmentParserRuleCall_13 = (RuleCall)cAlternatives.eContents().get(13);
-		private final RuleCall cWrapHereSegmentParserRuleCall_14 = (RuleCall)cAlternatives.eContents().get(14);
+		private final RuleCall cPostCommentSegmentParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
+		private final RuleCall cPreCommentSegmentParserRuleCall_6 = (RuleCall)cAlternatives.eContents().get(6);
+		private final RuleCall cPushSegmentParserRuleCall_7 = (RuleCall)cAlternatives.eContents().get(7);
+		private final RuleCall cSoftNewLineSegmentParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
+		private final RuleCall cSoftSpaceSegmentParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
+		private final RuleCall cStringSegmentParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
+		private final RuleCall cValueSegmentParserRuleCall_11 = (RuleCall)cAlternatives.eContents().get(11);
+		private final RuleCall cWrapAnchorSegmentParserRuleCall_12 = (RuleCall)cAlternatives.eContents().get(12);
+		private final RuleCall cWrapBeginAllSegmentParserRuleCall_13 = (RuleCall)cAlternatives.eContents().get(13);
+		private final RuleCall cWrapBeginSomeSegmentParserRuleCall_14 = (RuleCall)cAlternatives.eContents().get(14);
+		private final RuleCall cWrapEndSegmentParserRuleCall_15 = (RuleCall)cAlternatives.eContents().get(15);
+		private final RuleCall cWrapHereSegmentParserRuleCall_16 = (RuleCall)cAlternatives.eContents().get(16);
 
 		//Segment:
-		//	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PushSegment | SoftNewLineSegment |
-		//	SoftSpaceSegment | StringSegment | ValueSegment | WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment |
-		//	WrapEndSegment | WrapHereSegment;
+		//	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PostCommentSegment |
+		//	PreCommentSegment | PushSegment | SoftNewLineSegment | SoftSpaceSegment | StringSegment | ValueSegment |
+		//	WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment | WrapEndSegment | WrapHereSegment;
 		@Override public ParserRule getRule() { return rule; }
 
-		//CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PushSegment | SoftNewLineSegment |
-		//SoftSpaceSegment | StringSegment | ValueSegment | WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment |
-		//WrapEndSegment | WrapHereSegment
+		//CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PostCommentSegment |
+		//PreCommentSegment | PushSegment | SoftNewLineSegment | SoftSpaceSegment | StringSegment | ValueSegment |
+		//WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment | WrapEndSegment | WrapHereSegment
 		public Alternatives getAlternatives() { return cAlternatives; }
 
 		//CustomSegment
@@ -579,35 +581,41 @@
 		//PopSegment
 		public RuleCall getPopSegmentParserRuleCall_4() { return cPopSegmentParserRuleCall_4; }
 
+		//PostCommentSegment
+		public RuleCall getPostCommentSegmentParserRuleCall_5() { return cPostCommentSegmentParserRuleCall_5; }
+
+		//PreCommentSegment
+		public RuleCall getPreCommentSegmentParserRuleCall_6() { return cPreCommentSegmentParserRuleCall_6; }
+
 		//PushSegment
-		public RuleCall getPushSegmentParserRuleCall_5() { return cPushSegmentParserRuleCall_5; }
+		public RuleCall getPushSegmentParserRuleCall_7() { return cPushSegmentParserRuleCall_7; }
 
 		//SoftNewLineSegment
-		public RuleCall getSoftNewLineSegmentParserRuleCall_6() { return cSoftNewLineSegmentParserRuleCall_6; }
+		public RuleCall getSoftNewLineSegmentParserRuleCall_8() { return cSoftNewLineSegmentParserRuleCall_8; }
 
 		//SoftSpaceSegment
-		public RuleCall getSoftSpaceSegmentParserRuleCall_7() { return cSoftSpaceSegmentParserRuleCall_7; }
+		public RuleCall getSoftSpaceSegmentParserRuleCall_9() { return cSoftSpaceSegmentParserRuleCall_9; }
 
 		//StringSegment
-		public RuleCall getStringSegmentParserRuleCall_8() { return cStringSegmentParserRuleCall_8; }
+		public RuleCall getStringSegmentParserRuleCall_10() { return cStringSegmentParserRuleCall_10; }
 
 		//ValueSegment
-		public RuleCall getValueSegmentParserRuleCall_9() { return cValueSegmentParserRuleCall_9; }
+		public RuleCall getValueSegmentParserRuleCall_11() { return cValueSegmentParserRuleCall_11; }
 
 		//WrapAnchorSegment
-		public RuleCall getWrapAnchorSegmentParserRuleCall_10() { return cWrapAnchorSegmentParserRuleCall_10; }
+		public RuleCall getWrapAnchorSegmentParserRuleCall_12() { return cWrapAnchorSegmentParserRuleCall_12; }
 
 		//WrapBeginAllSegment
-		public RuleCall getWrapBeginAllSegmentParserRuleCall_11() { return cWrapBeginAllSegmentParserRuleCall_11; }
+		public RuleCall getWrapBeginAllSegmentParserRuleCall_13() { return cWrapBeginAllSegmentParserRuleCall_13; }
 
 		//WrapBeginSomeSegment
-		public RuleCall getWrapBeginSomeSegmentParserRuleCall_12() { return cWrapBeginSomeSegmentParserRuleCall_12; }
+		public RuleCall getWrapBeginSomeSegmentParserRuleCall_14() { return cWrapBeginSomeSegmentParserRuleCall_14; }
 
 		//WrapEndSegment
-		public RuleCall getWrapEndSegmentParserRuleCall_13() { return cWrapEndSegmentParserRuleCall_13; }
+		public RuleCall getWrapEndSegmentParserRuleCall_15() { return cWrapEndSegmentParserRuleCall_15; }
 
 		//WrapHereSegment
-		public RuleCall getWrapHereSegmentParserRuleCall_14() { return cWrapHereSegmentParserRuleCall_14; }
+		public RuleCall getWrapHereSegmentParserRuleCall_16() { return cWrapHereSegmentParserRuleCall_16; }
 	}
 	public class CustomSegmentElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.ocl.examples.xtext.idioms.Idioms.CustomSegment");
@@ -708,6 +716,44 @@
 		//'pop'
 		public Keyword getPopKeyword_1() { return cPopKeyword_1; }
 	}
+	public class PostCommentSegmentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.ocl.examples.xtext.idioms.Idioms.PostCommentSegment");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cPostCommentSegmentAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cPostCommentKeyword_1 = (Keyword)cGroup.eContents().get(1);
+
+		//PostCommentSegment:
+		//	{PostCommentSegment} 'post-comment';
+		@Override public ParserRule getRule() { return rule; }
+
+		//{PostCommentSegment} 'post-comment'
+		public Group getGroup() { return cGroup; }
+
+		//{PostCommentSegment}
+		public Action getPostCommentSegmentAction_0() { return cPostCommentSegmentAction_0; }
+
+		//'post-comment'
+		public Keyword getPostCommentKeyword_1() { return cPostCommentKeyword_1; }
+	}
+	public class PreCommentSegmentElements extends AbstractParserRuleElementFinder {
+		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.ocl.examples.xtext.idioms.Idioms.PreCommentSegment");
+		private final Group cGroup = (Group)rule.eContents().get(1);
+		private final Action cPreCommentSegmentAction_0 = (Action)cGroup.eContents().get(0);
+		private final Keyword cPreCommentKeyword_1 = (Keyword)cGroup.eContents().get(1);
+
+		//PreCommentSegment:
+		//	{PreCommentSegment} 'pre-comment';
+		@Override public ParserRule getRule() { return rule; }
+
+		//{PreCommentSegment} 'pre-comment'
+		public Group getGroup() { return cGroup; }
+
+		//{PreCommentSegment}
+		public Action getPreCommentSegmentAction_0() { return cPreCommentSegmentAction_0; }
+
+		//'pre-comment'
+		public Keyword getPreCommentKeyword_1() { return cPreCommentKeyword_1; }
+	}
 	public class PushSegmentElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.ocl.examples.xtext.idioms.Idioms.PushSegment");
 		private final Group cGroup = (Group)rule.eContents().get(1);
@@ -1154,6 +1200,8 @@
 	private final NewLineSegmentElements pNewLineSegment;
 	private final NoSpaceSegmentElements pNoSpaceSegment;
 	private final PopSegmentElements pPopSegment;
+	private final PostCommentSegmentElements pPostCommentSegment;
+	private final PreCommentSegmentElements pPreCommentSegment;
 	private final PushSegmentElements pPushSegment;
 	private final SoftNewLineSegmentElements pSoftNewLineSegment;
 	private final SoftSpaceSegmentElements pSoftSpaceSegment;
@@ -1196,6 +1244,8 @@
 		this.pNewLineSegment = new NewLineSegmentElements();
 		this.pNoSpaceSegment = new NoSpaceSegmentElements();
 		this.pPopSegment = new PopSegmentElements();
+		this.pPostCommentSegment = new PostCommentSegmentElements();
+		this.pPreCommentSegment = new PreCommentSegmentElements();
 		this.pPushSegment = new PushSegmentElements();
 		this.pSoftNewLineSegment = new SoftNewLineSegmentElements();
 		this.pSoftSpaceSegment = new SoftSpaceSegmentElements();
@@ -1373,9 +1423,9 @@
 	}
 
 	//Segment:
-	//	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PushSegment | SoftNewLineSegment |
-	//	SoftSpaceSegment | StringSegment | ValueSegment | WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment |
-	//	WrapEndSegment | WrapHereSegment;
+	//	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PostCommentSegment |
+	//	PreCommentSegment | PushSegment | SoftNewLineSegment | SoftSpaceSegment | StringSegment | ValueSegment |
+	//	WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment | WrapEndSegment | WrapHereSegment;
 	public SegmentElements getSegmentAccess() {
 		return pSegment;
 	}
@@ -1434,6 +1484,26 @@
 		return getPopSegmentAccess().getRule();
 	}
 
+	//PostCommentSegment:
+	//	{PostCommentSegment} 'post-comment';
+	public PostCommentSegmentElements getPostCommentSegmentAccess() {
+		return pPostCommentSegment;
+	}
+
+	public ParserRule getPostCommentSegmentRule() {
+		return getPostCommentSegmentAccess().getRule();
+	}
+
+	//PreCommentSegment:
+	//	{PreCommentSegment} 'pre-comment';
+	public PreCommentSegmentElements getPreCommentSegmentAccess() {
+		return pPreCommentSegment;
+	}
+
+	public ParserRule getPreCommentSegmentRule() {
+		return getPreCommentSegmentAccess().getRule();
+	}
+
 	//PushSegment:
 	//	{PushSegment} 'push';
 	public PushSegmentElements getPushSegmentAccess() {
diff --git a/examples/org.eclipse.ocl.examples.xtext.idioms/src/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtext b/examples/org.eclipse.ocl.examples.xtext.idioms/src/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtext
index 1c90625..f3dfab3 100644
--- a/examples/org.eclipse.ocl.examples.xtext.idioms/src/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtext
+++ b/examples/org.eclipse.ocl.examples.xtext.idioms/src/org/eclipse/ocl/examples/xtext/idioms/Idioms.xtext
@@ -55,8 +55,8 @@
 	'segment' name=ID ownedSegment=Segment ';' ;
 
 Segment:
-	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment |
-	PopSegment | PushSegment | SoftNewLineSegment | SoftSpaceSegment | StringSegment | ValueSegment |
+	CustomSegment | HalfNewLineSegment | NewLineSegment | NoSpaceSegment | PopSegment | PostCommentSegment |
+	PreCommentSegment | PushSegment | SoftNewLineSegment | SoftSpaceSegment | StringSegment | ValueSegment |
 	WrapAnchorSegment | WrapBeginAllSegment | WrapBeginSomeSegment | WrapEndSegment | WrapHereSegment;
 
 CustomSegment:
@@ -74,6 +74,12 @@
 PopSegment:
 	{PopSegment} 'pop';
 
+PostCommentSegment:
+	{PostCommentSegment} 'post-comment';
+
+PreCommentSegment:
+	{PreCommentSegment} 'pre-comment';
+
 PushSegment:
 	{PushSegment} 'push';
 
diff --git a/examples/org.eclipse.ocl.examples.xtext.serializer/src/org/eclipse/ocl/examples/xtext/serializer/SerializationBuilder.java b/examples/org.eclipse.ocl.examples.xtext.serializer/src/org/eclipse/ocl/examples/xtext/serializer/SerializationBuilder.java
index 3e52cfb..82a4000 100644
--- a/examples/org.eclipse.ocl.examples.xtext.serializer/src/org/eclipse/ocl/examples/xtext/serializer/SerializationBuilder.java
+++ b/examples/org.eclipse.ocl.examples.xtext.serializer/src/org/eclipse/ocl/examples/xtext/serializer/SerializationBuilder.java
@@ -51,6 +51,16 @@
 	public static final @NonNull String POP = new String("pop");
 
 	/**
+	 * The virtual character/string to emit standard ostfix comments from the Node model.
+	 */
+	public static final @NonNull String POST_COMMENT = new String("post-comment");
+
+	/**
+	 * The virtual character/string to emit standard prefix comments from the Node model.
+	 */
+	public static final @NonNull String PRE_COMMENT = new String("pre-comment");
+
+	/**
 	 * The virtual character/string to push a standard indentation on the stack.
 	 */
 	public static final @NonNull String PUSH = new String("push");