瀏覽代碼

Added feature type and parameter type scoping to GenModel
Added some duplicate validation detection

Andreas Mülder 13 年之前
父節點
當前提交
34b0cb1c6c
共有 13 個文件被更改,包括 543 次插入430 次删除
  1. 11 7
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi
  2. 28 38
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g
  3. 6 8
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens
  4. 132 166
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java
  5. 124 144
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java
  6. 3 3
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java
  7. 39 47
      plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java
  8. 3 3
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext
  9. 81 0
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/resource/FeatureResourceDescription.java
  10. 2 7
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenGlobalScopeProvider.java
  11. 53 0
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java
  12. 49 7
      plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java
  13. 12 0
      plugins/org.yakindu.sct.generator.genmodel/xtend-gen/org/yakindu/sct/generator/genmodel/generator/SGenGenerator.java

+ 11 - 7
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/SGen.xmi

@@ -50,6 +50,11 @@
         <classifier xsi:type="ecore:EClass" href="http://www.yakindu.org/sct/statechart/SGen#//FeatureConfiguration"/>
       </type>
       <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="/0/@metamodelDeclarations.1">
+            <classifier xsi:type="ecore:EClass" href="http://www.yakindu.org/sct/statechart/SGen#//FeatureConfiguration"/>
+          </type>
+        </elements>
         <elements xsi:type="xtext:Assignment" feature="type" operator="=">
           <terminal xsi:type="xtext:CrossReference">
             <type metamodel="/0/@metamodelDeclarations.1">
@@ -59,15 +64,9 @@
           </terminal>
         </elements>
         <elements xsi:type="xtext:Keyword" value="{"/>
-        <elements xsi:type="xtext:Assignment" feature="parameterValues" operator="+=">
+        <elements xsi:type="xtext:Assignment" cardinality="+" feature="parameterValues" operator="+=">
           <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
         </elements>
-        <elements xsi:type="xtext:Group" cardinality="*">
-          <elements xsi:type="xtext:Keyword" value=","/>
-          <elements xsi:type="xtext:Assignment" feature="parameterValues" operator="+=">
-            <terminal xsi:type="xtext:RuleCall" rule="/0/@rules.3"/>
-          </elements>
-        </elements>
         <elements xsi:type="xtext:Keyword" value="}"/>
       </alternatives>
     </rules>
@@ -76,6 +75,11 @@
         <classifier xsi:type="ecore:EClass" href="http://www.yakindu.org/sct/statechart/SGen#//FeatureParameterValue"/>
       </type>
       <alternatives xsi:type="xtext:Group">
+        <elements xsi:type="xtext:Action">
+          <type metamodel="/0/@metamodelDeclarations.1">
+            <classifier xsi:type="ecore:EClass" href="http://www.yakindu.org/sct/statechart/SGen#//FeatureParameterValue"/>
+          </type>
+        </elements>
         <elements xsi:type="xtext:Assignment" feature="parameter" operator="=">
           <terminal xsi:type="xtext:CrossReference">
             <type metamodel="/0/@metamodelDeclarations.1">

+ 28 - 38
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g

@@ -215,65 +215,49 @@ ruleFeatureConfiguration returns [EObject current=null]
     }
     @after { leaveRule(); }:
 ((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getFeatureConfigurationAccess().getFeatureConfigurationAction_0(),
+            $current);
+    }
+)(
 (
 		{
 			if ($current==null) {
 	            $current = createModelElement(grammarAccess.getFeatureConfigurationRule());
 	        }
         }
-	otherlv_0=RULE_ID
+	otherlv_1=RULE_ID
 	{
-		newLeafNode(otherlv_0, grammarAccess.getFeatureConfigurationAccess().getTypeFeatureTypeCrossReference_0_0()); 
+		newLeafNode(otherlv_1, grammarAccess.getFeatureConfigurationAccess().getTypeFeatureTypeCrossReference_1_0()); 
 	}
 
 )
-)	otherlv_1='{' 
-    {
-    	newLeafNode(otherlv_1, grammarAccess.getFeatureConfigurationAccess().getLeftCurlyBracketKeyword_1());
-    }
-(
-(
-		{ 
-	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_2_0()); 
-	    }
-		lv_parameterValues_2_0=ruleFeatureParameterValue		{
-	        if ($current==null) {
-	            $current = createModelElementForParent(grammarAccess.getFeatureConfigurationRule());
-	        }
-       		add(
-       			$current, 
-       			"parameterValues",
-        		lv_parameterValues_2_0, 
-        		"FeatureParameterValue");
-	        afterParserOrEnumRuleCall();
-	    }
-
-)
-)(	otherlv_3=',' 
+)	otherlv_2='{' 
     {
-    	newLeafNode(otherlv_3, grammarAccess.getFeatureConfigurationAccess().getCommaKeyword_3_0());
+    	newLeafNode(otherlv_2, grammarAccess.getFeatureConfigurationAccess().getLeftCurlyBracketKeyword_2());
     }
 (
 (
 		{ 
-	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_3_1_0()); 
+	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_3_0()); 
 	    }
-		lv_parameterValues_4_0=ruleFeatureParameterValue		{
+		lv_parameterValues_3_0=ruleFeatureParameterValue		{
 	        if ($current==null) {
 	            $current = createModelElementForParent(grammarAccess.getFeatureConfigurationRule());
 	        }
        		add(
        			$current, 
        			"parameterValues",
-        		lv_parameterValues_4_0, 
+        		lv_parameterValues_3_0, 
         		"FeatureParameterValue");
 	        afterParserOrEnumRuleCall();
 	    }
 
 )
-))*	otherlv_5='}' 
+)+	otherlv_4='}' 
     {
-    	newLeafNode(otherlv_5, grammarAccess.getFeatureConfigurationAccess().getRightCurlyBracketKeyword_4());
+    	newLeafNode(otherlv_4, grammarAccess.getFeatureConfigurationAccess().getRightCurlyBracketKeyword_4());
     }
 )
 ;
@@ -297,27 +281,33 @@ ruleFeatureParameterValue returns [EObject current=null]
     }
     @after { leaveRule(); }:
 ((
+    {
+        $current = forceCreateModelElement(
+            grammarAccess.getFeatureParameterValueAccess().getFeatureParameterValueAction_0(),
+            $current);
+    }
+)(
 (
 		{
 			if ($current==null) {
 	            $current = createModelElement(grammarAccess.getFeatureParameterValueRule());
 	        }
         }
-	otherlv_0=RULE_ID
+	otherlv_1=RULE_ID
 	{
-		newLeafNode(otherlv_0, grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterCrossReference_0_0()); 
+		newLeafNode(otherlv_1, grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterCrossReference_1_0()); 
 	}
 
 )
-)	otherlv_1='=' 
+)	otherlv_2='=' 
     {
-    	newLeafNode(otherlv_1, grammarAccess.getFeatureParameterValueAccess().getEqualsSignKeyword_1());
+    	newLeafNode(otherlv_2, grammarAccess.getFeatureParameterValueAccess().getEqualsSignKeyword_2());
     }
 (
 (
-		lv_value_2_0=RULE_STRING
+		lv_value_3_0=RULE_STRING
 		{
-			newLeafNode(lv_value_2_0, grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_2_0()); 
+			newLeafNode(lv_value_3_0, grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_3_0()); 
 		}
 		{
 	        if ($current==null) {
@@ -326,7 +316,7 @@ ruleFeatureParameterValue returns [EObject current=null]
        		setWithLastConsumed(
        			$current, 
        			"value",
-        		lv_value_2_0, 
+        		lv_value_3_0, 
         		"STRING");
 	    }
 

+ 6 - 8
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.tokens

@@ -1,8 +1,4 @@
 RULE_ID=4
-RULE_ANY_OTHER=10
-RULE_SL_COMMENT=8
-RULE_ML_COMMENT=7
-T__19=19
 RULE_STRING=5
 T__16=16
 T__15=15
@@ -12,14 +8,16 @@ T__12=12
 T__11=11
 T__14=14
 T__13=13
+RULE_ANY_OTHER=10
 RULE_INT=6
 RULE_WS=9
+RULE_SL_COMMENT=8
+RULE_ML_COMMENT=7
 '}'=14
-'='=17
+'='=16
 'for'=12
 'GeneratorModel'=11
-'::'=18
+'::'=17
 'statechart'=15
-','=16
-'.'=19
+'.'=18
 '{'=13

+ 132 - 166
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenLexer.java

@@ -13,11 +13,6 @@ import java.util.ArrayList;
 @SuppressWarnings("all")
 public class InternalSGenLexer extends Lexer {
     public static final int RULE_ID=4;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int EOF=-1;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
     public static final int RULE_STRING=5;
     public static final int T__16=16;
     public static final int T__15=15;
@@ -27,8 +22,12 @@ public class InternalSGenLexer extends Lexer {
     public static final int T__11=11;
     public static final int T__14=14;
     public static final int T__13=13;
+    public static final int RULE_ANY_OTHER=10;
     public static final int RULE_INT=6;
     public static final int RULE_WS=9;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=7;
 
     // delegates
     // delegators
@@ -151,10 +150,10 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = T__16;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:16:7: ( ',' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:16:9: ','
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:16:7: ( '=' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:16:9: '='
             {
-            match(','); 
+            match('='); 
 
             }
 
@@ -171,10 +170,11 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = T__17;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:17:7: ( '=' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:17:9: '='
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:17:7: ( '::' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:17:9: '::'
             {
-            match('='); 
+            match("::"); 
+
 
             }
 
@@ -191,29 +191,8 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = T__18;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:18:7: ( '::' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:18:9: '::'
-            {
-            match("::"); 
-
-
-            }
-
-            state.type = _type;
-            state.channel = _channel;
-        }
-        finally {
-        }
-    }
-    // $ANTLR end "T__18"
-
-    // $ANTLR start "T__19"
-    public final void mT__19() throws RecognitionException {
-        try {
-            int _type = T__19;
-            int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:19:7: ( '.' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:19:9: '.'
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:18:7: ( '.' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:18:9: '.'
             {
             match('.'); 
 
@@ -225,17 +204,17 @@ public class InternalSGenLexer extends Lexer {
         finally {
         }
     }
-    // $ANTLR end "T__19"
+    // $ANTLR end "T__18"
 
     // $ANTLR start "RULE_ID"
     public final void mRULE_ID() throws RecognitionException {
         try {
             int _type = RULE_ID;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:379:9: ( ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )* )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:379:11: ( '^' )? ( 'a' .. 'z' | 'A' .. 'Z' | '_' ) ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:11: ( '^' )?
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:379:11: ( '^' )?
             int alt1=2;
             int LA1_0 = input.LA(1);
 
@@ -244,7 +223,7 @@ public class InternalSGenLexer extends Lexer {
             }
             switch (alt1) {
                 case 1 :
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:11: '^'
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:379:11: '^'
                     {
                     match('^'); 
 
@@ -262,7 +241,7 @@ public class InternalSGenLexer extends Lexer {
                 recover(mse);
                 throw mse;}
 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:379:40: ( 'a' .. 'z' | 'A' .. 'Z' | '_' | '0' .. '9' )*
             loop2:
             do {
                 int alt2=2;
@@ -311,10 +290,10 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_INT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:10: ( ( '0' .. '9' )+ )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:12: ( '0' .. '9' )+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:381:10: ( ( '0' .. '9' )+ )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:381:12: ( '0' .. '9' )+
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:12: ( '0' .. '9' )+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:381:12: ( '0' .. '9' )+
             int cnt3=0;
             loop3:
             do {
@@ -328,7 +307,7 @@ public class InternalSGenLexer extends Lexer {
 
                 switch (alt3) {
             	case 1 :
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:13: '0' .. '9'
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:381:13: '0' .. '9'
             	    {
             	    matchRange('0','9'); 
 
@@ -360,10 +339,10 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_STRING;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:13: ( ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:15: ( '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"' | '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\'' )
             int alt6=2;
             int LA6_0 = input.LA(1);
 
@@ -381,10 +360,10 @@ public class InternalSGenLexer extends Lexer {
             }
             switch (alt6) {
                 case 1 :
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:16: '\"' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )* '\"'
                     {
                     match('\"'); 
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:20: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\"' ) ) )*
                     loop4:
                     do {
                         int alt4=3;
@@ -400,7 +379,7 @@ public class InternalSGenLexer extends Lexer {
 
                         switch (alt4) {
                     	case 1 :
-                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:21: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                     	    {
                     	    match('\\'); 
                     	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -416,7 +395,7 @@ public class InternalSGenLexer extends Lexer {
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:66: ~ ( ( '\\\\' | '\"' ) )
+                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:66: ~ ( ( '\\\\' | '\"' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='!')||(input.LA(1)>='#' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -441,10 +420,10 @@ public class InternalSGenLexer extends Lexer {
                     }
                     break;
                 case 2 :
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:86: '\\'' ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )* '\\''
                     {
                     match('\''); 
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:91: ( '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' ) | ~ ( ( '\\\\' | '\\'' ) ) )*
                     loop5:
                     do {
                         int alt5=3;
@@ -460,7 +439,7 @@ public class InternalSGenLexer extends Lexer {
 
                         switch (alt5) {
                     	case 1 :
-                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
+                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:92: '\\\\' ( 'b' | 't' | 'n' | 'f' | 'r' | 'u' | '\"' | '\\'' | '\\\\' )
                     	    {
                     	    match('\\'); 
                     	    if ( input.LA(1)=='\"'||input.LA(1)=='\''||input.LA(1)=='\\'||input.LA(1)=='b'||input.LA(1)=='f'||input.LA(1)=='n'||input.LA(1)=='r'||(input.LA(1)>='t' && input.LA(1)<='u') ) {
@@ -476,7 +455,7 @@ public class InternalSGenLexer extends Lexer {
                     	    }
                     	    break;
                     	case 2 :
-                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:393:137: ~ ( ( '\\\\' | '\\'' ) )
+                    	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:383:137: ~ ( ( '\\\\' | '\\'' ) )
                     	    {
                     	    if ( (input.LA(1)>='\u0000' && input.LA(1)<='&')||(input.LA(1)>='(' && input.LA(1)<='[')||(input.LA(1)>=']' && input.LA(1)<='\uFFFF') ) {
                     	        input.consume();
@@ -519,12 +498,12 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_ML_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:395:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:395:19: '/*' ( options {greedy=false; } : . )* '*/'
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:385:17: ( '/*' ( options {greedy=false; } : . )* '*/' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:385:19: '/*' ( options {greedy=false; } : . )* '*/'
             {
             match("/*"); 
 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:395:24: ( options {greedy=false; } : . )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:385:24: ( options {greedy=false; } : . )*
             loop7:
             do {
                 int alt7=2;
@@ -549,7 +528,7 @@ public class InternalSGenLexer extends Lexer {
 
                 switch (alt7) {
             	case 1 :
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:395:52: .
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:385:52: .
             	    {
             	    matchAny(); 
 
@@ -579,12 +558,12 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_SL_COMMENT;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:17: ( '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )? )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:19: '//' (~ ( ( '\\n' | '\\r' ) ) )* ( ( '\\r' )? '\\n' )?
             {
             match("//"); 
 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:24: (~ ( ( '\\n' | '\\r' ) ) )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:24: (~ ( ( '\\n' | '\\r' ) ) )*
             loop8:
             do {
                 int alt8=2;
@@ -597,7 +576,7 @@ public class InternalSGenLexer extends Lexer {
 
                 switch (alt8) {
             	case 1 :
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:24: ~ ( ( '\\n' | '\\r' ) )
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387: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();
@@ -617,7 +596,7 @@ public class InternalSGenLexer extends Lexer {
                 }
             } while (true);
 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:40: ( ( '\\r' )? '\\n' )?
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:40: ( ( '\\r' )? '\\n' )?
             int alt10=2;
             int LA10_0 = input.LA(1);
 
@@ -626,9 +605,9 @@ public class InternalSGenLexer extends Lexer {
             }
             switch (alt10) {
                 case 1 :
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:41: ( '\\r' )? '\\n'
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:41: ( '\\r' )? '\\n'
                     {
-                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:41: ( '\\r' )?
+                    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:41: ( '\\r' )?
                     int alt9=2;
                     int LA9_0 = input.LA(1);
 
@@ -637,7 +616,7 @@ public class InternalSGenLexer extends Lexer {
                     }
                     switch (alt9) {
                         case 1 :
-                            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:397:41: '\\r'
+                            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:387:41: '\\r'
                             {
                             match('\r'); 
 
@@ -669,10 +648,10 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_WS;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:399:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:399:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:9: ( ( ' ' | '\\t' | '\\r' | '\\n' )+ )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:399:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:389:11: ( ' ' | '\\t' | '\\r' | '\\n' )+
             int cnt11=0;
             loop11:
             do {
@@ -726,8 +705,8 @@ public class InternalSGenLexer extends Lexer {
         try {
             int _type = RULE_ANY_OTHER;
             int _channel = DEFAULT_TOKEN_CHANNEL;
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:401:16: ( . )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:401:18: .
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:16: ( . )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:391:18: .
             {
             matchAny(); 
 
@@ -742,8 +721,8 @@ public class InternalSGenLexer extends Lexer {
     // $ANTLR end "RULE_ANY_OTHER"
 
     public void mTokens() throws RecognitionException {
-        // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | T__19 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
-        int alt12=16;
+        // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:8: ( T__11 | T__12 | T__13 | T__14 | T__15 | T__16 | T__17 | T__18 | RULE_ID | RULE_INT | RULE_STRING | RULE_ML_COMMENT | RULE_SL_COMMENT | RULE_WS | RULE_ANY_OTHER )
+        int alt12=15;
         alt12 = dfa12.predict(input);
         switch (alt12) {
             case 1 :
@@ -803,56 +782,49 @@ public class InternalSGenLexer extends Lexer {
                 }
                 break;
             case 9 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:58: T__19
-                {
-                mT__19(); 
-
-                }
-                break;
-            case 10 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:64: RULE_ID
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:58: RULE_ID
                 {
                 mRULE_ID(); 
 
                 }
                 break;
-            case 11 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:72: RULE_INT
+            case 10 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:66: RULE_INT
                 {
                 mRULE_INT(); 
 
                 }
                 break;
-            case 12 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:81: RULE_STRING
+            case 11 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:75: RULE_STRING
                 {
                 mRULE_STRING(); 
 
                 }
                 break;
-            case 13 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:93: RULE_ML_COMMENT
+            case 12 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:87: RULE_ML_COMMENT
                 {
                 mRULE_ML_COMMENT(); 
 
                 }
                 break;
-            case 14 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:109: RULE_SL_COMMENT
+            case 13 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:103: RULE_SL_COMMENT
                 {
                 mRULE_SL_COMMENT(); 
 
                 }
                 break;
-            case 15 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:125: RULE_WS
+            case 14 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:119: RULE_WS
                 {
                 mRULE_WS(); 
 
                 }
                 break;
-            case 16 :
-                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:133: RULE_ANY_OTHER
+            case 15 :
+                // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:1:127: RULE_ANY_OTHER
                 {
                 mRULE_ANY_OTHER(); 
 
@@ -866,59 +838,55 @@ public class InternalSGenLexer extends Lexer {
 
     protected DFA12 dfa12 = new DFA12(this);
     static final String DFA12_eotS =
-        "\1\uffff\2\23\2\uffff\1\23\2\uffff\1\21\1\uffff\1\21\2\uffff\3"+
-        "\21\2\uffff\1\23\1\uffff\1\23\2\uffff\1\23\11\uffff\1\23\1\45\2"+
-        "\23\1\uffff\14\23\1\64\1\23\1\uffff\2\23\1\70\1\uffff";
+        "\1\uffff\2\22\2\uffff\1\22\1\uffff\1\20\1\uffff\1\20\2\uffff\3"+
+        "\20\2\uffff\1\22\1\uffff\1\22\2\uffff\1\22\10\uffff\1\22\1\43\2"+
+        "\22\1\uffff\14\22\1\62\1\22\1\uffff\2\22\1\66\1\uffff";
     static final String DFA12_eofS =
-        "\71\uffff";
+        "\67\uffff";
     static final String DFA12_minS =
-        "\1\0\1\145\1\157\2\uffff\1\164\2\uffff\1\72\1\uffff\1\101\2\uffff"+
-        "\2\0\1\52\2\uffff\1\156\1\uffff\1\162\2\uffff\1\141\11\uffff\1\145"+
+        "\1\0\1\145\1\157\2\uffff\1\164\1\uffff\1\72\1\uffff\1\101\2\uffff"+
+        "\2\0\1\52\2\uffff\1\156\1\uffff\1\162\2\uffff\1\141\10\uffff\1\145"+
         "\1\60\1\164\1\162\1\uffff\1\145\1\141\1\143\1\164\1\150\1\157\1"+
         "\141\2\162\1\115\1\164\1\157\1\60\1\144\1\uffff\1\145\1\154\1\60"+
         "\1\uffff";
     static final String DFA12_maxS =
-        "\1\uffff\1\145\1\157\2\uffff\1\164\2\uffff\1\72\1\uffff\1\172\2"+
-        "\uffff\2\uffff\1\57\2\uffff\1\156\1\uffff\1\162\2\uffff\1\141\11"+
+        "\1\uffff\1\145\1\157\2\uffff\1\164\1\uffff\1\72\1\uffff\1\172\2"+
+        "\uffff\2\uffff\1\57\2\uffff\1\156\1\uffff\1\162\2\uffff\1\141\10"+
         "\uffff\1\145\1\172\1\164\1\162\1\uffff\1\145\1\141\1\143\1\164\1"+
         "\150\1\157\1\141\2\162\1\115\1\164\1\157\1\172\1\144\1\uffff\1\145"+
         "\1\154\1\172\1\uffff";
     static final String DFA12_acceptS =
-        "\3\uffff\1\3\1\4\1\uffff\1\6\1\7\1\uffff\1\11\1\uffff\1\12\1\13"+
-        "\3\uffff\1\17\1\20\1\uffff\1\12\1\uffff\1\3\1\4\1\uffff\1\6\1\7"+
-        "\1\10\1\11\1\13\1\14\1\15\1\16\1\17\4\uffff\1\2\16\uffff\1\5\3\uffff"+
-        "\1\1";
+        "\3\uffff\1\3\1\4\1\uffff\1\6\1\uffff\1\10\1\uffff\1\11\1\12\3\uffff"+
+        "\1\16\1\17\1\uffff\1\11\1\uffff\1\3\1\4\1\uffff\1\6\1\7\1\10\1\12"+
+        "\1\13\1\14\1\15\1\16\4\uffff\1\2\16\uffff\1\5\3\uffff\1\1";
     static final String DFA12_specialS =
-        "\1\0\14\uffff\1\2\1\1\52\uffff}>";
+        "\1\2\13\uffff\1\1\1\0\51\uffff}>";
     static final String[] DFA12_transitionS = {
-            "\11\21\2\20\2\21\1\20\22\21\1\20\1\21\1\15\4\21\1\16\4\21\1"+
-            "\6\1\21\1\11\1\17\12\14\1\10\2\21\1\7\3\21\6\13\1\1\23\13\3"+
-            "\21\1\12\1\13\1\21\5\13\1\2\14\13\1\5\7\13\1\3\1\21\1\4\uff82"+
-            "\21",
-            "\1\22",
-            "\1\24",
-            "",
+            "\11\20\2\17\2\20\1\17\22\20\1\17\1\20\1\14\4\20\1\15\6\20\1"+
+            "\10\1\16\12\13\1\7\2\20\1\6\3\20\6\12\1\1\23\12\3\20\1\11\1"+
+            "\12\1\20\5\12\1\2\14\12\1\5\7\12\1\3\1\20\1\4\uff82\20",
+            "\1\21",
+            "\1\23",
             "",
-            "\1\27",
             "",
+            "\1\26",
             "",
-            "\1\32",
+            "\1\30",
             "",
-            "\32\23\4\uffff\1\23\1\uffff\32\23",
+            "\32\22\4\uffff\1\22\1\uffff\32\22",
             "",
             "",
-            "\0\35",
-            "\0\35",
-            "\1\36\4\uffff\1\37",
+            "\0\33",
+            "\0\33",
+            "\1\34\4\uffff\1\35",
             "",
             "",
-            "\1\41",
-            "",
-            "\1\42",
+            "\1\37",
             "",
+            "\1\40",
             "",
-            "\1\43",
             "",
+            "\1\41",
             "",
             "",
             "",
@@ -927,11 +895,13 @@ public class InternalSGenLexer extends Lexer {
             "",
             "",
             "",
+            "\1\42",
+            "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22",
             "\1\44",
-            "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23",
+            "\1\45",
+            "",
             "\1\46",
             "\1\47",
-            "",
             "\1\50",
             "\1\51",
             "\1\52",
@@ -942,14 +912,12 @@ public class InternalSGenLexer extends Lexer {
             "\1\57",
             "\1\60",
             "\1\61",
-            "\1\62",
+            "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22",
             "\1\63",
-            "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23",
-            "\1\65",
             "",
-            "\1\66",
-            "\1\67",
-            "\12\23\7\uffff\32\23\4\uffff\1\23\1\uffff\32\23",
+            "\1\64",
+            "\1\65",
+            "\12\22\7\uffff\32\22\4\uffff\1\22\1\uffff\32\22",
             ""
     };
 
@@ -983,69 +951,67 @@ public class InternalSGenLexer extends Lexer {
             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 | 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 | 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_0 = input.LA(1);
+                        int LA12_13 = input.LA(1);
 
                         s = -1;
-                        if ( (LA12_0=='G') ) {s = 1;}
+                        if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 27;}
 
-                        else if ( (LA12_0=='f') ) {s = 2;}
+                        else s = 16;
 
-                        else if ( (LA12_0=='{') ) {s = 3;}
-
-                        else if ( (LA12_0=='}') ) {s = 4;}
+                        if ( s>=0 ) return s;
+                        break;
+                    case 1 : 
+                        int LA12_12 = input.LA(1);
 
-                        else if ( (LA12_0=='s') ) {s = 5;}
+                        s = -1;
+                        if ( ((LA12_12>='\u0000' && LA12_12<='\uFFFF')) ) {s = 27;}
 
-                        else if ( (LA12_0==',') ) {s = 6;}
+                        else s = 16;
 
-                        else if ( (LA12_0=='=') ) {s = 7;}
+                        if ( s>=0 ) return s;
+                        break;
+                    case 2 : 
+                        int LA12_0 = input.LA(1);
 
-                        else if ( (LA12_0==':') ) {s = 8;}
+                        s = -1;
+                        if ( (LA12_0=='G') ) {s = 1;}
 
-                        else if ( (LA12_0=='.') ) {s = 9;}
+                        else if ( (LA12_0=='f') ) {s = 2;}
 
-                        else if ( (LA12_0=='^') ) {s = 10;}
+                        else if ( (LA12_0=='{') ) {s = 3;}
 
-                        else if ( ((LA12_0>='A' && LA12_0<='F')||(LA12_0>='H' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='e')||(LA12_0>='g' && LA12_0<='r')||(LA12_0>='t' && LA12_0<='z')) ) {s = 11;}
+                        else if ( (LA12_0=='}') ) {s = 4;}
 
-                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 12;}
+                        else if ( (LA12_0=='s') ) {s = 5;}
 
-                        else if ( (LA12_0=='\"') ) {s = 13;}
+                        else if ( (LA12_0=='=') ) {s = 6;}
 
-                        else if ( (LA12_0=='\'') ) {s = 14;}
+                        else if ( (LA12_0==':') ) {s = 7;}
 
-                        else if ( (LA12_0=='/') ) {s = 15;}
+                        else if ( (LA12_0=='.') ) {s = 8;}
 
-                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 16;}
+                        else if ( (LA12_0=='^') ) {s = 9;}
 
-                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='+')||LA12_0=='-'||(LA12_0>=';' && LA12_0<='<')||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 17;}
+                        else if ( ((LA12_0>='A' && LA12_0<='F')||(LA12_0>='H' && LA12_0<='Z')||LA12_0=='_'||(LA12_0>='a' && LA12_0<='e')||(LA12_0>='g' && LA12_0<='r')||(LA12_0>='t' && LA12_0<='z')) ) {s = 10;}
 
-                        if ( s>=0 ) return s;
-                        break;
-                    case 1 : 
-                        int LA12_14 = input.LA(1);
+                        else if ( ((LA12_0>='0' && LA12_0<='9')) ) {s = 11;}
 
-                        s = -1;
-                        if ( ((LA12_14>='\u0000' && LA12_14<='\uFFFF')) ) {s = 29;}
+                        else if ( (LA12_0=='\"') ) {s = 12;}
 
-                        else s = 17;
+                        else if ( (LA12_0=='\'') ) {s = 13;}
 
-                        if ( s>=0 ) return s;
-                        break;
-                    case 2 : 
-                        int LA12_13 = input.LA(1);
+                        else if ( (LA12_0=='/') ) {s = 14;}
 
-                        s = -1;
-                        if ( ((LA12_13>='\u0000' && LA12_13<='\uFFFF')) ) {s = 29;}
+                        else if ( ((LA12_0>='\t' && LA12_0<='\n')||LA12_0=='\r'||LA12_0==' ') ) {s = 15;}
 
-                        else s = 17;
+                        else if ( ((LA12_0>='\u0000' && LA12_0<='\b')||(LA12_0>='\u000B' && LA12_0<='\f')||(LA12_0>='\u000E' && LA12_0<='\u001F')||LA12_0=='!'||(LA12_0>='#' && LA12_0<='&')||(LA12_0>='(' && LA12_0<='-')||(LA12_0>=';' && LA12_0<='<')||(LA12_0>='>' && LA12_0<='@')||(LA12_0>='[' && LA12_0<=']')||LA12_0=='`'||LA12_0=='|'||(LA12_0>='~' && LA12_0<='\uFFFF')) ) {s = 16;}
 
                         if ( s>=0 ) return s;
                         break;

+ 124 - 144
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGenParser.java

@@ -21,14 +21,9 @@ import java.util.ArrayList;
 @SuppressWarnings("all")
 public class InternalSGenParser 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", "'GeneratorModel'", "'for'", "'{'", "'}'", "'statechart'", "','", "'='", "'::'", "'.'"
+        "<invalid>", "<EOR>", "<DOWN>", "<UP>", "RULE_ID", "RULE_STRING", "RULE_INT", "RULE_ML_COMMENT", "RULE_SL_COMMENT", "RULE_WS", "RULE_ANY_OTHER", "'GeneratorModel'", "'for'", "'{'", "'}'", "'statechart'", "'='", "'::'", "'.'"
     };
     public static final int RULE_ID=4;
-    public static final int RULE_ANY_OTHER=10;
-    public static final int EOF=-1;
-    public static final int RULE_SL_COMMENT=8;
-    public static final int RULE_ML_COMMENT=7;
-    public static final int T__19=19;
     public static final int RULE_STRING=5;
     public static final int T__16=16;
     public static final int T__15=15;
@@ -38,8 +33,12 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
     public static final int T__11=11;
     public static final int T__14=14;
     public static final int T__13=13;
+    public static final int RULE_ANY_OTHER=10;
     public static final int RULE_INT=6;
     public static final int RULE_WS=9;
+    public static final int RULE_SL_COMMENT=8;
+    public static final int EOF=-1;
+    public static final int RULE_ML_COMMENT=7;
 
     // delegates
     // delegators
@@ -455,42 +454,50 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFeatureConfiguration"
-    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:213:1: ruleFeatureConfiguration returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '{' ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) ) (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )* otherlv_5= '}' ) ;
+    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:213:1: ruleFeatureConfiguration returns [EObject current=null] : ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '{' ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+ otherlv_4= '}' ) ;
     public final EObject ruleFeatureConfiguration() throws RecognitionException {
         EObject current = null;
 
-        Token otherlv_0=null;
         Token otherlv_1=null;
-        Token otherlv_3=null;
-        Token otherlv_5=null;
-        EObject lv_parameterValues_2_0 = null;
-
-        EObject lv_parameterValues_4_0 = null;
+        Token otherlv_2=null;
+        Token otherlv_4=null;
+        EObject lv_parameterValues_3_0 = null;
 
 
          enterRule(); 
             
         try {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:216:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '{' ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) ) (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )* otherlv_5= '}' ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '{' ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) ) (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )* otherlv_5= '}' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:216:28: ( ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '{' ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+ otherlv_4= '}' ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:1: ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '{' ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+ otherlv_4= '}' )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '{' ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) ) (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )* otherlv_5= '}' )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= '{' ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) ) (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )* otherlv_5= '}'
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:1: ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '{' ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+ otherlv_4= '}' )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:2: () ( (otherlv_1= RULE_ID ) ) otherlv_2= '{' ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+ otherlv_4= '}'
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:2: ( (otherlv_0= RULE_ID ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:218:1: (otherlv_0= RULE_ID )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:217:2: ()
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:218:5: 
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:218:1: (otherlv_0= RULE_ID )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:219:3: otherlv_0= RULE_ID
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getFeatureConfigurationAccess().getFeatureConfigurationAction_0(),
+                        current);
+                
+
+            }
+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:223:2: ( (otherlv_1= RULE_ID ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:224:1: (otherlv_1= RULE_ID )
+            {
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:224:1: (otherlv_1= RULE_ID )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:225:3: otherlv_1= RULE_ID
             {
 
             			if (current==null) {
             	            current = createModelElement(grammarAccess.getFeatureConfigurationRule());
             	        }
                     
-            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureConfiguration441); 
+            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureConfiguration450); 
 
-            		newLeafNode(otherlv_0, grammarAccess.getFeatureConfigurationAccess().getTypeFeatureTypeCrossReference_0_0()); 
+            		newLeafNode(otherlv_1, grammarAccess.getFeatureConfigurationAccess().getTypeFeatureTypeCrossReference_1_0()); 
             	
 
             }
@@ -498,71 +505,34 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,13,FOLLOW_13_in_ruleFeatureConfiguration453); 
+            otherlv_2=(Token)match(input,13,FOLLOW_13_in_ruleFeatureConfiguration462); 
 
-                	newLeafNode(otherlv_1, grammarAccess.getFeatureConfigurationAccess().getLeftCurlyBracketKeyword_1());
+                	newLeafNode(otherlv_2, grammarAccess.getFeatureConfigurationAccess().getLeftCurlyBracketKeyword_2());
                 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:234:1: ( (lv_parameterValues_2_0= ruleFeatureParameterValue ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:235:1: (lv_parameterValues_2_0= ruleFeatureParameterValue )
-            {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:235:1: (lv_parameterValues_2_0= ruleFeatureParameterValue )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:236:3: lv_parameterValues_2_0= ruleFeatureParameterValue
-            {
-             
-            	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_2_0()); 
-            	    
-            pushFollow(FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration474);
-            lv_parameterValues_2_0=ruleFeatureParameterValue();
-
-            state._fsp--;
-
-
-            	        if (current==null) {
-            	            current = createModelElementForParent(grammarAccess.getFeatureConfigurationRule());
-            	        }
-                   		add(
-                   			current, 
-                   			"parameterValues",
-                    		lv_parameterValues_2_0, 
-                    		"FeatureParameterValue");
-            	        afterParserOrEnumRuleCall();
-            	    
-
-            }
-
-
-            }
-
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:252:2: (otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) ) )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:240:1: ( (lv_parameterValues_3_0= ruleFeatureParameterValue ) )+
+            int cnt3=0;
             loop3:
             do {
                 int alt3=2;
                 int LA3_0 = input.LA(1);
 
-                if ( (LA3_0==16) ) {
+                if ( (LA3_0==RULE_ID) ) {
                     alt3=1;
                 }
 
 
                 switch (alt3) {
             	case 1 :
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:252:4: otherlv_3= ',' ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) )
-            	    {
-            	    otherlv_3=(Token)match(input,16,FOLLOW_16_in_ruleFeatureConfiguration487); 
-
-            	        	newLeafNode(otherlv_3, grammarAccess.getFeatureConfigurationAccess().getCommaKeyword_3_0());
-            	        
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:256:1: ( (lv_parameterValues_4_0= ruleFeatureParameterValue ) )
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:257:1: (lv_parameterValues_4_0= ruleFeatureParameterValue )
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:241:1: (lv_parameterValues_3_0= ruleFeatureParameterValue )
             	    {
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:257:1: (lv_parameterValues_4_0= ruleFeatureParameterValue )
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:258:3: lv_parameterValues_4_0= ruleFeatureParameterValue
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:241:1: (lv_parameterValues_3_0= ruleFeatureParameterValue )
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:242:3: lv_parameterValues_3_0= ruleFeatureParameterValue
             	    {
             	     
-            	    	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_3_1_0()); 
+            	    	        newCompositeNode(grammarAccess.getFeatureConfigurationAccess().getParameterValuesFeatureParameterValueParserRuleCall_3_0()); 
             	    	    
-            	    pushFollow(FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration508);
-            	    lv_parameterValues_4_0=ruleFeatureParameterValue();
+            	    pushFollow(FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration483);
+            	    lv_parameterValues_3_0=ruleFeatureParameterValue();
 
             	    state._fsp--;
 
@@ -573,7 +543,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
             	           		add(
             	           			current, 
             	           			"parameterValues",
-            	            		lv_parameterValues_4_0, 
+            	            		lv_parameterValues_3_0, 
             	            		"FeatureParameterValue");
             	    	        afterParserOrEnumRuleCall();
             	    	    
@@ -581,20 +551,21 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
             	    }
 
 
-            	    }
-
-
             	    }
             	    break;
 
             	default :
-            	    break loop3;
+            	    if ( cnt3 >= 1 ) break loop3;
+                        EarlyExitException eee =
+                            new EarlyExitException(3, input);
+                        throw eee;
                 }
+                cnt3++;
             } while (true);
 
-            otherlv_5=(Token)match(input,14,FOLLOW_14_in_ruleFeatureConfiguration522); 
+            otherlv_4=(Token)match(input,14,FOLLOW_14_in_ruleFeatureConfiguration496); 
 
-                	newLeafNode(otherlv_5, grammarAccess.getFeatureConfigurationAccess().getRightCurlyBracketKeyword_4());
+                	newLeafNode(otherlv_4, grammarAccess.getFeatureConfigurationAccess().getRightCurlyBracketKeyword_4());
                 
 
             }
@@ -617,7 +588,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleFeatureParameterValue"
-    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:286:1: entryRuleFeatureParameterValue returns [EObject current=null] : iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF ;
+    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:270:1: entryRuleFeatureParameterValue returns [EObject current=null] : iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF ;
     public final EObject entryRuleFeatureParameterValue() throws RecognitionException {
         EObject current = null;
 
@@ -625,17 +596,17 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:287:2: (iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:288:2: iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:271:2: (iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:272:2: iv_ruleFeatureParameterValue= ruleFeatureParameterValue EOF
             {
              newCompositeNode(grammarAccess.getFeatureParameterValueRule()); 
-            pushFollow(FOLLOW_ruleFeatureParameterValue_in_entryRuleFeatureParameterValue558);
+            pushFollow(FOLLOW_ruleFeatureParameterValue_in_entryRuleFeatureParameterValue532);
             iv_ruleFeatureParameterValue=ruleFeatureParameterValue();
 
             state._fsp--;
 
              current =iv_ruleFeatureParameterValue; 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleFeatureParameterValue568); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleFeatureParameterValue542); 
 
             }
 
@@ -653,37 +624,48 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleFeatureParameterValue"
-    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:295:1: ruleFeatureParameterValue returns [EObject current=null] : ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) ) ;
+    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:279:1: ruleFeatureParameterValue returns [EObject current=null] : ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '=' ( (lv_value_3_0= RULE_STRING ) ) ) ;
     public final EObject ruleFeatureParameterValue() throws RecognitionException {
         EObject current = null;
 
-        Token otherlv_0=null;
         Token otherlv_1=null;
-        Token lv_value_2_0=null;
+        Token otherlv_2=null;
+        Token lv_value_3_0=null;
 
          enterRule(); 
             
         try {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:298:28: ( ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:299:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:282:28: ( ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '=' ( (lv_value_3_0= RULE_STRING ) ) ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:283:1: ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '=' ( (lv_value_3_0= RULE_STRING ) ) )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:299:1: ( ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:299:2: ( (otherlv_0= RULE_ID ) ) otherlv_1= '=' ( (lv_value_2_0= RULE_STRING ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:283:1: ( () ( (otherlv_1= RULE_ID ) ) otherlv_2= '=' ( (lv_value_3_0= RULE_STRING ) ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:283:2: () ( (otherlv_1= RULE_ID ) ) otherlv_2= '=' ( (lv_value_3_0= RULE_STRING ) )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:299:2: ( (otherlv_0= RULE_ID ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:300:1: (otherlv_0= RULE_ID )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:283:2: ()
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:284:5: 
+            {
+
+                    current = forceCreateModelElement(
+                        grammarAccess.getFeatureParameterValueAccess().getFeatureParameterValueAction_0(),
+                        current);
+                
+
+            }
+
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:289:2: ( (otherlv_1= RULE_ID ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:290:1: (otherlv_1= RULE_ID )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:300:1: (otherlv_0= RULE_ID )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:301:3: otherlv_0= RULE_ID
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:290:1: (otherlv_1= RULE_ID )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:291:3: otherlv_1= RULE_ID
             {
 
             			if (current==null) {
             	            current = createModelElement(grammarAccess.getFeatureParameterValueRule());
             	        }
                     
-            otherlv_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureParameterValue613); 
+            otherlv_1=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleFeatureParameterValue596); 
 
-            		newLeafNode(otherlv_0, grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterCrossReference_0_0()); 
+            		newLeafNode(otherlv_1, grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterCrossReference_1_0()); 
             	
 
             }
@@ -691,19 +673,19 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
             }
 
-            otherlv_1=(Token)match(input,17,FOLLOW_17_in_ruleFeatureParameterValue625); 
+            otherlv_2=(Token)match(input,16,FOLLOW_16_in_ruleFeatureParameterValue608); 
 
-                	newLeafNode(otherlv_1, grammarAccess.getFeatureParameterValueAccess().getEqualsSignKeyword_1());
+                	newLeafNode(otherlv_2, grammarAccess.getFeatureParameterValueAccess().getEqualsSignKeyword_2());
                 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:316:1: ( (lv_value_2_0= RULE_STRING ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:317:1: (lv_value_2_0= RULE_STRING )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:306:1: ( (lv_value_3_0= RULE_STRING ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:307:1: (lv_value_3_0= RULE_STRING )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:317:1: (lv_value_2_0= RULE_STRING )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:318:3: lv_value_2_0= RULE_STRING
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:307:1: (lv_value_3_0= RULE_STRING )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:308:3: lv_value_3_0= RULE_STRING
             {
-            lv_value_2_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleFeatureParameterValue642); 
+            lv_value_3_0=(Token)match(input,RULE_STRING,FOLLOW_RULE_STRING_in_ruleFeatureParameterValue625); 
 
-            			newLeafNode(lv_value_2_0, grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_2_0()); 
+            			newLeafNode(lv_value_3_0, grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_3_0()); 
             		
 
             	        if (current==null) {
@@ -712,7 +694,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
                    		setWithLastConsumed(
                    			current, 
                    			"value",
-                    		lv_value_2_0, 
+                    		lv_value_3_0, 
                     		"STRING");
             	    
 
@@ -742,7 +724,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "entryRuleQID"
-    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:342:1: entryRuleQID returns [String current=null] : iv_ruleQID= ruleQID EOF ;
+    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:332:1: entryRuleQID returns [String current=null] : iv_ruleQID= ruleQID EOF ;
     public final String entryRuleQID() throws RecognitionException {
         String current = null;
 
@@ -750,17 +732,17 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
         try {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:343:2: (iv_ruleQID= ruleQID EOF )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:344:2: iv_ruleQID= ruleQID EOF
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:333:2: (iv_ruleQID= ruleQID EOF )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:334:2: iv_ruleQID= ruleQID EOF
             {
              newCompositeNode(grammarAccess.getQIDRule()); 
-            pushFollow(FOLLOW_ruleQID_in_entryRuleQID684);
+            pushFollow(FOLLOW_ruleQID_in_entryRuleQID667);
             iv_ruleQID=ruleQID();
 
             state._fsp--;
 
              current =iv_ruleQID.getText(); 
-            match(input,EOF,FOLLOW_EOF_in_entryRuleQID695); 
+            match(input,EOF,FOLLOW_EOF_in_entryRuleQID678); 
 
             }
 
@@ -778,7 +760,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
 
     // $ANTLR start "ruleQID"
-    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:351:1: ruleQID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* ) ;
+    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:341:1: ruleQID returns [AntlrDatatypeRuleToken current=new AntlrDatatypeRuleToken()] : (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* ) ;
     public final AntlrDatatypeRuleToken ruleQID() throws RecognitionException {
         AntlrDatatypeRuleToken current = new AntlrDatatypeRuleToken();
 
@@ -789,42 +771,42 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
          enterRule(); 
             
         try {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:354:28: ( (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* ) )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:355:1: (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:344:28: ( (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* ) )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:345:1: (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* )
             {
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:355:1: (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* )
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:355:6: this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:345:1: (this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )* )
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:345:6: this_ID_0= RULE_ID ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )*
             {
-            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID735); 
+            this_ID_0=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID718); 
 
             		current.merge(this_ID_0);
                 
              
                 newLeafNode(this_ID_0, grammarAccess.getQIDAccess().getIDTerminalRuleCall_0()); 
                 
-            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:362:1: ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )*
+            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:352:1: ( (kw= '::' | kw= '.' ) this_ID_3= RULE_ID )*
             loop5:
             do {
                 int alt5=2;
                 int LA5_0 = input.LA(1);
 
-                if ( ((LA5_0>=18 && LA5_0<=19)) ) {
+                if ( ((LA5_0>=17 && LA5_0<=18)) ) {
                     alt5=1;
                 }
 
 
                 switch (alt5) {
             	case 1 :
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:362:2: (kw= '::' | kw= '.' ) this_ID_3= RULE_ID
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:352:2: (kw= '::' | kw= '.' ) this_ID_3= RULE_ID
             	    {
-            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:362:2: (kw= '::' | kw= '.' )
+            	    // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:352:2: (kw= '::' | kw= '.' )
             	    int alt4=2;
             	    int LA4_0 = input.LA(1);
 
-            	    if ( (LA4_0==18) ) {
+            	    if ( (LA4_0==17) ) {
             	        alt4=1;
             	    }
-            	    else if ( (LA4_0==19) ) {
+            	    else if ( (LA4_0==18) ) {
             	        alt4=2;
             	    }
             	    else {
@@ -835,9 +817,9 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
             	    }
             	    switch (alt4) {
             	        case 1 :
-            	            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:363:2: kw= '::'
+            	            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:353:2: kw= '::'
             	            {
-            	            kw=(Token)match(input,18,FOLLOW_18_in_ruleQID755); 
+            	            kw=(Token)match(input,17,FOLLOW_17_in_ruleQID738); 
 
             	                    current.merge(kw);
             	                    newLeafNode(kw, grammarAccess.getQIDAccess().getColonColonKeyword_1_0_0()); 
@@ -846,9 +828,9 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
             	            }
             	            break;
             	        case 2 :
-            	            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:370:2: kw= '.'
+            	            // ../org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/parser/antlr/internal/InternalSGen.g:360:2: kw= '.'
             	            {
-            	            kw=(Token)match(input,19,FOLLOW_19_in_ruleQID774); 
+            	            kw=(Token)match(input,18,FOLLOW_18_in_ruleQID757); 
 
             	                    current.merge(kw);
             	                    newLeafNode(kw, grammarAccess.getQIDAccess().getFullStopKeyword_1_0_1()); 
@@ -859,7 +841,7 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
 
             	    }
 
-            	    this_ID_3=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID790); 
+            	    this_ID_3=(Token)match(input,RULE_ID,FOLLOW_RULE_ID_in_ruleQID773); 
 
             	    		current.merge(this_ID_3);
             	        
@@ -916,22 +898,20 @@ public class InternalSGenParser extends AbstractInternalAntlrParser {
     public static final BitSet FOLLOW_14_in_ruleGeneratorEntry350 = new BitSet(new long[]{0x0000000000000002L});
     public static final BitSet FOLLOW_ruleFeatureConfiguration_in_entryRuleFeatureConfiguration386 = new BitSet(new long[]{0x0000000000000000L});
     public static final BitSet FOLLOW_EOF_in_entryRuleFeatureConfiguration396 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureConfiguration441 = new BitSet(new long[]{0x0000000000002000L});
-    public static final BitSet FOLLOW_13_in_ruleFeatureConfiguration453 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration474 = new BitSet(new long[]{0x0000000000014000L});
-    public static final BitSet FOLLOW_16_in_ruleFeatureConfiguration487 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration508 = new BitSet(new long[]{0x0000000000014000L});
-    public static final BitSet FOLLOW_14_in_ruleFeatureConfiguration522 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleFeatureParameterValue_in_entryRuleFeatureParameterValue558 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleFeatureParameterValue568 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureParameterValue613 = new BitSet(new long[]{0x0000000000020000L});
-    public static final BitSet FOLLOW_17_in_ruleFeatureParameterValue625 = new BitSet(new long[]{0x0000000000000020L});
-    public static final BitSet FOLLOW_RULE_STRING_in_ruleFeatureParameterValue642 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_ruleQID_in_entryRuleQID684 = new BitSet(new long[]{0x0000000000000000L});
-    public static final BitSet FOLLOW_EOF_in_entryRuleQID695 = new BitSet(new long[]{0x0000000000000002L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleQID735 = new BitSet(new long[]{0x00000000000C0002L});
-    public static final BitSet FOLLOW_18_in_ruleQID755 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_19_in_ruleQID774 = new BitSet(new long[]{0x0000000000000010L});
-    public static final BitSet FOLLOW_RULE_ID_in_ruleQID790 = new BitSet(new long[]{0x00000000000C0002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureConfiguration450 = new BitSet(new long[]{0x0000000000002000L});
+    public static final BitSet FOLLOW_13_in_ruleFeatureConfiguration462 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_ruleFeatureParameterValue_in_ruleFeatureConfiguration483 = new BitSet(new long[]{0x0000000000004010L});
+    public static final BitSet FOLLOW_14_in_ruleFeatureConfiguration496 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleFeatureParameterValue_in_entryRuleFeatureParameterValue532 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleFeatureParameterValue542 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleFeatureParameterValue596 = new BitSet(new long[]{0x0000000000010000L});
+    public static final BitSet FOLLOW_16_in_ruleFeatureParameterValue608 = new BitSet(new long[]{0x0000000000000020L});
+    public static final BitSet FOLLOW_RULE_STRING_in_ruleFeatureParameterValue625 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_ruleQID_in_entryRuleQID667 = new BitSet(new long[]{0x0000000000000000L});
+    public static final BitSet FOLLOW_EOF_in_entryRuleQID678 = new BitSet(new long[]{0x0000000000000002L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleQID718 = new BitSet(new long[]{0x0000000000060002L});
+    public static final BitSet FOLLOW_17_in_ruleQID738 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_18_in_ruleQID757 = new BitSet(new long[]{0x0000000000000010L});
+    public static final BitSet FOLLOW_RULE_ID_in_ruleQID773 = new BitSet(new long[]{0x0000000000060002L});
 
 }

+ 3 - 3
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/serializer/AbstractSGenSemanticSequencer.java

@@ -78,7 +78,7 @@ public class AbstractSGenSemanticSequencer extends AbstractSemanticSequencer {
 	
 	/**
 	 * Constraint:
-	 *     (type=[FeatureType|ID] parameterValues+=FeatureParameterValue parameterValues+=FeatureParameterValue*)
+	 *     (type=[FeatureType|ID] parameterValues+=FeatureParameterValue+)
 	 *
 	 * Features:
 	 *    type[1, 1]
@@ -106,8 +106,8 @@ public class AbstractSGenSemanticSequencer extends AbstractSemanticSequencer {
 		}
 		INodesForEObjectProvider nodes = createNodeProvider(semanticObject);
 		SequenceFeeder feeder = createSequencerFeeder(semanticObject, nodes);
-		feeder.accept(grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterIDTerminalRuleCall_0_0_1(), semanticObject.getParameter());
-		feeder.accept(grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_2_0(), semanticObject.getValue());
+		feeder.accept(grammarAccess.getFeatureParameterValueAccess().getParameterFeatureParameterIDTerminalRuleCall_1_0_1(), semanticObject.getParameter());
+		feeder.accept(grammarAccess.getFeatureParameterValueAccess().getValueSTRINGTerminalRuleCall_3_0(), semanticObject.getValue());
 		feeder.finish();
 	}
 	

+ 39 - 47
plugins/org.yakindu.sct.generator.genmodel/src-gen/org/yakindu/sct/generator/genmodel/services/SGenGrammarAccess.java

@@ -110,54 +110,42 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	public class FeatureConfigurationElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FeatureConfiguration");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Assignment cTypeAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final CrossReference cTypeFeatureTypeCrossReference_0_0 = (CrossReference)cTypeAssignment_0.eContents().get(0);
-		private final RuleCall cTypeFeatureTypeIDTerminalRuleCall_0_0_1 = (RuleCall)cTypeFeatureTypeCrossReference_0_0.eContents().get(1);
-		private final Keyword cLeftCurlyBracketKeyword_1 = (Keyword)cGroup.eContents().get(1);
-		private final Assignment cParameterValuesAssignment_2 = (Assignment)cGroup.eContents().get(2);
-		private final RuleCall cParameterValuesFeatureParameterValueParserRuleCall_2_0 = (RuleCall)cParameterValuesAssignment_2.eContents().get(0);
-		private final Group cGroup_3 = (Group)cGroup.eContents().get(3);
-		private final Keyword cCommaKeyword_3_0 = (Keyword)cGroup_3.eContents().get(0);
-		private final Assignment cParameterValuesAssignment_3_1 = (Assignment)cGroup_3.eContents().get(1);
-		private final RuleCall cParameterValuesFeatureParameterValueParserRuleCall_3_1_0 = (RuleCall)cParameterValuesAssignment_3_1.eContents().get(0);
+		private final Action cFeatureConfigurationAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cTypeAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final CrossReference cTypeFeatureTypeCrossReference_1_0 = (CrossReference)cTypeAssignment_1.eContents().get(0);
+		private final RuleCall cTypeFeatureTypeIDTerminalRuleCall_1_0_1 = (RuleCall)cTypeFeatureTypeCrossReference_1_0.eContents().get(1);
+		private final Keyword cLeftCurlyBracketKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cParameterValuesAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cParameterValuesFeatureParameterValueParserRuleCall_3_0 = (RuleCall)cParameterValuesAssignment_3.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
 		//FeatureConfiguration returns gen::FeatureConfiguration:
-		//	type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue ("," parameterValues+=FeatureParameterValue)* "}";
+		//	{gen::FeatureConfiguration} type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue+ "}";
 		public ParserRule getRule() { return rule; }
 
-		//type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue ("," parameterValues+=FeatureParameterValue)* "}"
+		//{gen::FeatureConfiguration} type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue+ "}"
 		public Group getGroup() { return cGroup; }
 
+		//{gen::FeatureConfiguration}
+		public Action getFeatureConfigurationAction_0() { return cFeatureConfigurationAction_0; }
+
 		//type=[gen::FeatureType]
-		public Assignment getTypeAssignment_0() { return cTypeAssignment_0; }
+		public Assignment getTypeAssignment_1() { return cTypeAssignment_1; }
 
 		//[gen::FeatureType]
-		public CrossReference getTypeFeatureTypeCrossReference_0_0() { return cTypeFeatureTypeCrossReference_0_0; }
+		public CrossReference getTypeFeatureTypeCrossReference_1_0() { return cTypeFeatureTypeCrossReference_1_0; }
 
 		//ID
-		public RuleCall getTypeFeatureTypeIDTerminalRuleCall_0_0_1() { return cTypeFeatureTypeIDTerminalRuleCall_0_0_1; }
+		public RuleCall getTypeFeatureTypeIDTerminalRuleCall_1_0_1() { return cTypeFeatureTypeIDTerminalRuleCall_1_0_1; }
 
 		//"{"
-		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
-
-		//parameterValues+=FeatureParameterValue
-		public Assignment getParameterValuesAssignment_2() { return cParameterValuesAssignment_2; }
-
-		//FeatureParameterValue
-		public RuleCall getParameterValuesFeatureParameterValueParserRuleCall_2_0() { return cParameterValuesFeatureParameterValueParserRuleCall_2_0; }
-
-		//("," parameterValues+=FeatureParameterValue)*
-		public Group getGroup_3() { return cGroup_3; }
-
-		//","
-		public Keyword getCommaKeyword_3_0() { return cCommaKeyword_3_0; }
+		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 
-		//parameterValues+=FeatureParameterValue
-		public Assignment getParameterValuesAssignment_3_1() { return cParameterValuesAssignment_3_1; }
+		//parameterValues+=FeatureParameterValue+
+		public Assignment getParameterValuesAssignment_3() { return cParameterValuesAssignment_3; }
 
 		//FeatureParameterValue
-		public RuleCall getParameterValuesFeatureParameterValueParserRuleCall_3_1_0() { return cParameterValuesFeatureParameterValueParserRuleCall_3_1_0; }
+		public RuleCall getParameterValuesFeatureParameterValueParserRuleCall_3_0() { return cParameterValuesFeatureParameterValueParserRuleCall_3_0; }
 
 		//"}"
 		public Keyword getRightCurlyBracketKeyword_4() { return cRightCurlyBracketKeyword_4; }
@@ -166,37 +154,41 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	public class FeatureParameterValueElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "FeatureParameterValue");
 		private final Group cGroup = (Group)rule.eContents().get(1);
-		private final Assignment cParameterAssignment_0 = (Assignment)cGroup.eContents().get(0);
-		private final CrossReference cParameterFeatureParameterCrossReference_0_0 = (CrossReference)cParameterAssignment_0.eContents().get(0);
-		private final RuleCall cParameterFeatureParameterIDTerminalRuleCall_0_0_1 = (RuleCall)cParameterFeatureParameterCrossReference_0_0.eContents().get(1);
-		private final Keyword cEqualsSignKeyword_1 = (Keyword)cGroup.eContents().get(1);
-		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
-		private final RuleCall cValueSTRINGTerminalRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
+		private final Action cFeatureParameterValueAction_0 = (Action)cGroup.eContents().get(0);
+		private final Assignment cParameterAssignment_1 = (Assignment)cGroup.eContents().get(1);
+		private final CrossReference cParameterFeatureParameterCrossReference_1_0 = (CrossReference)cParameterAssignment_1.eContents().get(0);
+		private final RuleCall cParameterFeatureParameterIDTerminalRuleCall_1_0_1 = (RuleCall)cParameterFeatureParameterCrossReference_1_0.eContents().get(1);
+		private final Keyword cEqualsSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
+		private final Assignment cValueAssignment_3 = (Assignment)cGroup.eContents().get(3);
+		private final RuleCall cValueSTRINGTerminalRuleCall_3_0 = (RuleCall)cValueAssignment_3.eContents().get(0);
 		
 		//FeatureParameterValue returns gen::FeatureParameterValue:
-		//	parameter=[gen::FeatureParameter] "=" value=STRING;
+		//	{gen::FeatureParameterValue} parameter=[gen::FeatureParameter] "=" value=STRING;
 		public ParserRule getRule() { return rule; }
 
-		//parameter=[gen::FeatureParameter] "=" value=STRING
+		//{gen::FeatureParameterValue} parameter=[gen::FeatureParameter] "=" value=STRING
 		public Group getGroup() { return cGroup; }
 
+		//{gen::FeatureParameterValue}
+		public Action getFeatureParameterValueAction_0() { return cFeatureParameterValueAction_0; }
+
 		//parameter=[gen::FeatureParameter]
-		public Assignment getParameterAssignment_0() { return cParameterAssignment_0; }
+		public Assignment getParameterAssignment_1() { return cParameterAssignment_1; }
 
 		//[gen::FeatureParameter]
-		public CrossReference getParameterFeatureParameterCrossReference_0_0() { return cParameterFeatureParameterCrossReference_0_0; }
+		public CrossReference getParameterFeatureParameterCrossReference_1_0() { return cParameterFeatureParameterCrossReference_1_0; }
 
 		//ID
-		public RuleCall getParameterFeatureParameterIDTerminalRuleCall_0_0_1() { return cParameterFeatureParameterIDTerminalRuleCall_0_0_1; }
+		public RuleCall getParameterFeatureParameterIDTerminalRuleCall_1_0_1() { return cParameterFeatureParameterIDTerminalRuleCall_1_0_1; }
 
 		//"="
-		public Keyword getEqualsSignKeyword_1() { return cEqualsSignKeyword_1; }
+		public Keyword getEqualsSignKeyword_2() { return cEqualsSignKeyword_2; }
 
 		//value=STRING
-		public Assignment getValueAssignment_2() { return cValueAssignment_2; }
+		public Assignment getValueAssignment_3() { return cValueAssignment_3; }
 
 		//STRING
-		public RuleCall getValueSTRINGTerminalRuleCall_2_0() { return cValueSTRINGTerminalRuleCall_2_0; }
+		public RuleCall getValueSTRINGTerminalRuleCall_3_0() { return cValueSTRINGTerminalRuleCall_3_0; }
 	}
 
 	public class QIDElements extends AbstractParserRuleElementFinder {
@@ -286,7 +278,7 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//FeatureConfiguration returns gen::FeatureConfiguration:
-	//	type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue ("," parameterValues+=FeatureParameterValue)* "}";
+	//	{gen::FeatureConfiguration} type=[gen::FeatureType] "{" parameterValues+=FeatureParameterValue+ "}";
 	public FeatureConfigurationElements getFeatureConfigurationAccess() {
 		return (pFeatureConfiguration != null) ? pFeatureConfiguration : (pFeatureConfiguration = new FeatureConfigurationElements());
 	}
@@ -296,7 +288,7 @@ public class SGenGrammarAccess extends AbstractGrammarElementFinder {
 	}
 
 	//FeatureParameterValue returns gen::FeatureParameterValue:
-	//	parameter=[gen::FeatureParameter] "=" value=STRING;
+	//	{gen::FeatureParameterValue} parameter=[gen::FeatureParameter] "=" value=STRING;
 	public FeatureParameterValueElements getFeatureParameterValueAccess() {
 		return (pFeatureParameterValue != null) ? pFeatureParameterValue : (pFeatureParameterValue = new FeatureParameterValueElements());
 	}

+ 3 - 3
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/SGen.xtext

@@ -16,12 +16,12 @@ GeneratorEntry returns gen::GeneratorEntry:
 	'}';
 
 FeatureConfiguration returns gen::FeatureConfiguration:
-	type=[gen::FeatureType] '{'
-	parameterValues+=FeatureParameterValue (',' parameterValues+=FeatureParameterValue)*
+	{gen::FeatureConfiguration} type=[gen::FeatureType] '{'
+	(parameterValues+=FeatureParameterValue)+
 	'}';
 
 FeatureParameterValue returns gen::FeatureParameterValue:
-	parameter=[gen::FeatureParameter] '=' value=STRING;
+	{gen::FeatureParameterValue} parameter=[gen::FeatureParameter] '=' value=STRING;
 
 QID:
 	ID (('::' | '.') ID)*; 

+ 81 - 0
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/resource/FeatureResourceDescription.java

@@ -0,0 +1,81 @@
+package org.yakindu.sct.generator.genmodel.resource;
+
+import java.util.HashMap;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.naming.IQualifiedNameProvider;
+import org.eclipse.xtext.naming.QualifiedName;
+import org.eclipse.xtext.resource.EObjectDescription;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.resource.IReferenceDescription;
+import org.eclipse.xtext.resource.IResourceDescription;
+import org.eclipse.xtext.resource.impl.AbstractResourceDescription;
+import org.yakindu.sct.model.sgen.FeatureParameter;
+
+import com.google.common.collect.Lists;
+import com.google.inject.Inject;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
+public class FeatureResourceDescription extends AbstractResourceDescription
+		implements IResourceDescription {
+
+	public static final String FEATURE_CONTAINER = "featureContainer";
+
+	private final Resource resource;
+
+	private final URI uri;
+
+	@Inject
+	IQualifiedNameProvider qualifiedNameProvider;
+
+	public FeatureResourceDescription(Resource resource) {
+		this.resource = resource;
+		this.uri = getNormalizedURI(resource);
+	}
+
+	@Override
+	protected List<IEObjectDescription> computeExportedObjects() {
+		Iterator<EObject> contents = resource.getAllContents();
+		List<IEObjectDescription> result = Lists.newArrayList();
+		while (contents.hasNext()) {
+			EObject eObject = contents.next();
+			QualifiedName qualifiedName = qualifiedNameProvider.apply(eObject);
+			if (qualifiedName != null) {
+				Map<String, String> userData = new HashMap<String, String>();
+				if (eObject instanceof FeatureParameter) {
+					userData.put(FEATURE_CONTAINER, getFqName(eObject));
+				}
+				result.add(new EObjectDescription(qualifiedName, eObject,
+						userData));
+			}
+		}
+		return result;
+	}
+
+	private String getFqName(EObject eObject) {
+		return qualifiedNameProvider.getFullyQualifiedName(
+				((FeatureParameter) eObject).getFeatureType()).toString();
+	}
+
+	public URI getURI() {
+		return uri;
+	}
+
+	public Iterable<QualifiedName> getImportedNames() {
+		return Lists.newArrayList();
+	}
+
+	public Iterable<IReferenceDescription> getReferenceDescriptions() {
+		return Lists.newArrayList();
+	}
+
+}

+ 2 - 7
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenGlobalScopeProvider.java

@@ -3,14 +3,13 @@ package org.yakindu.sct.generator.genmodel.scoping;
 import org.eclipse.emf.ecore.EClass;
 import org.eclipse.emf.ecore.resource.Resource;
 import org.eclipse.emf.ecore.resource.ResourceSet;
-import org.eclipse.xtext.resource.IDefaultResourceDescriptionStrategy;
 import org.eclipse.xtext.resource.IEObjectDescription;
-import org.eclipse.xtext.resource.impl.DefaultResourceDescription;
 import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.DefaultGlobalScopeProvider;
 import org.eclipse.xtext.scoping.impl.SimpleScope;
 import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions;
 import org.yakindu.sct.generator.genmodel.extensions.LibraryExtensions.LibraryDescriptor;
+import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
 
 import com.google.common.base.Predicate;
 import com.google.common.collect.Iterables;
@@ -30,9 +29,6 @@ public class SGenGlobalScopeProvider extends DefaultGlobalScopeProvider {
 	@Inject
 	private Injector injector;
 
-	@Inject
-	private IDefaultResourceDescriptionStrategy resourceDescriptionStrategy;
-
 	@Override
 	protected IScope getScope(Resource resource, boolean ignoreCase,
 			final EClass type, Predicate<IEObjectDescription> filter) {
@@ -44,8 +40,7 @@ public class SGenGlobalScopeProvider extends DefaultGlobalScopeProvider {
 				.getLibraryDescriptor();
 		for (LibraryDescriptor desc : libraryDescriptor) {
 			Resource library = resourceSet.getResource(desc.getURI(), true);
-			DefaultResourceDescription description = new DefaultResourceDescription(
-					library, resourceDescriptionStrategy);
+			FeatureResourceDescription description = new FeatureResourceDescription(library);
 			injector.injectMembers(description);
 			allElements = Iterables.concat(allElements,
 					description.getExportedObjectsByType(type));

+ 53 - 0
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/scoping/SGenScopeProvider.java

@@ -1,6 +1,59 @@
 package org.yakindu.sct.generator.genmodel.scoping;
 
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.EReference;
+import org.eclipse.xtext.resource.IEObjectDescription;
+import org.eclipse.xtext.scoping.IScope;
 import org.eclipse.xtext.scoping.impl.AbstractDeclarativeScopeProvider;
+import org.eclipse.xtext.scoping.impl.FilteringScope;
+import org.yakindu.sct.generator.genmodel.resource.FeatureResourceDescription;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
 
+import com.google.common.base.Predicate;
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class SGenScopeProvider extends AbstractDeclarativeScopeProvider {
+
+
+	/**
+	 * Only allow references to FeatureParameters defined by enclosing Feature
+	 */
+	public IScope scope_FeatureParameterValue_parameter(
+			final FeatureParameterValue context, EReference reference) {
+		FilteringScope filteringScope = new FilteringScope(getDelegate()
+				.getScope(context, reference),
+				new Predicate<IEObjectDescription>() {
+					@Override
+					public boolean apply(IEObjectDescription input) {
+						FeatureConfiguration featureConfig = (FeatureConfiguration) context
+								.eContainer();
+						String featureName = featureConfig.getType().getName();
+						return featureName.equals(input
+								.getUserData(FeatureResourceDescription.FEATURE_CONTAINER));
+					}
+				});
+		return filteringScope;
+	}
+
+	/**
+	 * Only allow references to FeatureParameters defined by enclosing Feature
+	 */
+	public IScope scope_FeatureParameterValue_parameter(
+			final FeatureConfiguration context, EReference reference) {
+		FilteringScope filteringScope = new FilteringScope(getDelegate()
+				.getScope(context, reference),
+				new Predicate<IEObjectDescription>() {
+					@Override
+					public boolean apply(IEObjectDescription input) {
+						String featureName = context.getType().getName();
+						return featureName.equals(input
+								.getUserData(FeatureResourceDescription.FEATURE_CONTAINER));
+					}
+				});
+		return filteringScope;
+	}
 }

+ 49 - 7
plugins/org.yakindu.sct.generator.genmodel/src/org/yakindu/sct/generator/genmodel/validation/SGenJavaValidator.java

@@ -1,13 +1,55 @@
 package org.yakindu.sct.generator.genmodel.validation;
- 
 
+import org.eclipse.xtext.validation.Check;
+import org.yakindu.sct.model.sgen.FeatureConfiguration;
+import org.yakindu.sct.model.sgen.FeatureParameterValue;
+import org.yakindu.sct.model.sgen.GeneratorEntry;
+import org.yakindu.sct.model.sgen.SGenPackage;
+
+import com.google.common.base.Predicate;
+import com.google.common.collect.Iterables;
+
+/**
+ * 
+ * @author andreas muelder - Initial contribution and API
+ * 
+ */
 public class SGenJavaValidator extends AbstractSGenJavaValidator {
 
-//	@Check
-//	public void checkGreetingStartsWithCapital(Greeting greeting) {
-//		if (!Character.isUpperCase(greeting.getName().charAt(0))) {
-//			warning("Name should start with a capital", MyDslPackage.Literals.GREETING__NAME);
-//		}
-//	}
+	@Check
+	public void checkDuplicateGeneratorEntryFeature(
+			final FeatureConfiguration config) {
+		GeneratorEntry entry = (GeneratorEntry) config.eContainer();
+		Iterable<FeatureConfiguration> filter = Iterables.filter(
+				entry.getFeatures(), new Predicate<FeatureConfiguration>() {
+					@Override
+					public boolean apply(FeatureConfiguration input) {
+						return (input.getType().getName().equals(config
+								.getType().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error("Duplicate feature!",
+					SGenPackage.Literals.FEATURE_CONFIGURATION__TYPE);
+		}
+
+	}
 
+	@Check
+	public void checkDuplicateFeatureParameter(final FeatureParameterValue value) {
+		FeatureConfiguration entry = (FeatureConfiguration) value.eContainer();
+		Iterable<FeatureParameterValue> filter = Iterables.filter(
+				entry.getParameterValues(),
+				new Predicate<FeatureParameterValue>() {
+					@Override
+					public boolean apply(FeatureParameterValue input) {
+						return (input.getParameter().getName().equals(value
+								.getParameter().getName()));
+					}
+				});
+		if (Iterables.size(filter) > 1) {
+			error("Duplicate parameter!",
+					SGenPackage.Literals.FEATURE_PARAMETER_VALUE__PARAMETER);
+		}
+	}
 }

+ 12 - 0
plugins/org.yakindu.sct.generator.genmodel/xtend-gen/org/yakindu/sct/generator/genmodel/generator/SGenGenerator.java

@@ -0,0 +1,12 @@
+package org.yakindu.sct.generator.genmodel.generator;
+
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.xtext.generator.IFileSystemAccess;
+import org.eclipse.xtext.generator.IGenerator;
+
+@SuppressWarnings("all")
+public class SGenGenerator implements IGenerator {
+  
+  public void doGenerate(final Resource resource, final IFileSystemAccess fsa) {
+  }
+}