diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/.classpath b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/.classpath
index 0215967..901d118 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/.classpath
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="output" path="bin"/>
+	<classpathentry kind="src" path="src2/"/>
+	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/META-INF/MANIFEST.MF b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/META-INF/MANIFEST.MF
index c3c737a..2e5c2b4 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/META-INF/MANIFEST.MF
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph/META-INF/MANIFEST.MF
@@ -9,11 +9,7 @@
  org.eclipse.core.resources,
  org.eclipse.efm.formalml.ecore,
  org.eclipse.ui.workbench
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Automatic-Module-Name: org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph
 Bundle-ActivationPolicy: lazy
 Bundle-Vendor: %providerName
-Export-Package: org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.generator,
- org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.mocc.xlia,
- org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.test,
- org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph.test.publi
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/.classpath b/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/.classpath
index b862a29..ca3785c 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/.classpath
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/META-INF/MANIFEST.MF b/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/META-INF/MANIFEST.MF
index 9a1b976..4b3cfad 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/META-INF/MANIFEST.MF
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.test.sd/META-INF/MANIFEST.MF
@@ -3,4 +3,4 @@
 Bundle-Name: Sd
 Bundle-SymbolicName: org.eclipse.efm.modeling.codegen.xlia.test.sd
 Bundle-Version: 1.0.0.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.classpath b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.classpath
index 2f5ffb2..e769fec 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.classpath
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="src" path="xtend-gen"/>
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.settings/org.eclipse.jdt.core.prefs
index 0c68a61..7adc0fb 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/META-INF/MANIFEST.MF b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/META-INF/MANIFEST.MF
index 0b08875..77e81f2 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/META-INF/MANIFEST.MF
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia.ui/META-INF/MANIFEST.MF
@@ -21,6 +21,6 @@
  org.eclipse.papyrus.designer.languages.common.base,
  org.eclipse.papyrus.designer.languages.common.extensionpoints,
  org.eclipse.efm.ui
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.efm.formalml.xtext.generator
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia/.classpath b/codegen/org.eclipse.efm.modeling.codegen.xlia/.classpath
index f538363..4bf9079 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia/.classpath
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia/.classpath
@@ -1,7 +1,7 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry excluding="org/eclipse/efm/modeling/codegen/xlia/interaction/TransformConstraint.java|org/eclipse/efm/modeling/codegen/xlia/interaction/SdUtil.java|org/eclipse/efm/modeling/codegen/xlia/interaction/SdSystemBehavior.java" kind="src" path="src"/>
+	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia/.settings/org.eclipse.jdt.core.prefs b/codegen/org.eclipse.efm.modeling.codegen.xlia/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia/.settings/org.eclipse.jdt.core.prefs
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/codegen/org.eclipse.efm.modeling.codegen.xlia/META-INF/MANIFEST.MF b/codegen/org.eclipse.efm.modeling.codegen.xlia/META-INF/MANIFEST.MF
index 9f5f8f8..0c72bd7 100644
--- a/codegen/org.eclipse.efm.modeling.codegen.xlia/META-INF/MANIFEST.MF
+++ b/codegen/org.eclipse.efm.modeling.codegen.xlia/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.uml2.uml,
  org.eclipse.efm.formalml,
  org.eclipse.efm.formalml.ecore
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.efm.modeling.codegen.scxml,
  org.eclipse.efm.modeling.codegen.xlia.core,
diff --git a/core/org.eclipse.efm.formalml.service.types/.settings/org.eclipse.jdt.core.prefs b/core/org.eclipse.efm.formalml.service.types/.settings/org.eclipse.jdt.core.prefs
index 295926d..e2860e9 100644
--- a/core/org.eclipse.efm.formalml.service.types/.settings/org.eclipse.jdt.core.prefs
+++ b/core/org.eclipse.efm.formalml.service.types/.settings/org.eclipse.jdt.core.prefs
@@ -4,4 +4,5 @@
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/core/org.eclipse.efm.formalml.service.types/META-INF/MANIFEST.MF b/core/org.eclipse.efm.formalml.service.types/META-INF/MANIFEST.MF
index eb03170..e01cc93 100644
--- a/core/org.eclipse.efm.formalml.service.types/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.efm.formalml.service.types/META-INF/MANIFEST.MF
@@ -3,9 +3,12 @@
 Bundle-Name: Types
 Bundle-SymbolicName: org.eclipse.efm.formalml.service.types;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.papyrus.infra.types.core,
  org.eclipse.papyrus.views.properties,
  org.eclipse.papyrus.infra.newchild,
  org.eclipse.uml2.uml;bundle-version="5.2.0",
  org.eclipse.efm.formalml
+Import-Package: org.eclipse.gmf.runtime.common.core.command,
+ org.eclipse.gmf.runtime.emf.type.core.edithelper,
+ org.eclipse.gmf.runtime.emf.type.core.requests
diff --git a/core/org.eclipse.efm.formalml.tests/.classpath b/core/org.eclipse.efm.formalml.tests/.classpath
index 95f1f75..3b3f47c 100644
--- a/core/org.eclipse.efm.formalml.tests/.classpath
+++ b/core/org.eclipse.efm.formalml.tests/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src">
 		<attributes>
diff --git a/core/org.eclipse.efm.formalml.tests/.settings/org.eclipse.jdt.core.prefs b/core/org.eclipse.efm.formalml.tests/.settings/org.eclipse.jdt.core.prefs
index 0c68a61..7adc0fb 100644
--- a/core/org.eclipse.efm.formalml.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/core/org.eclipse.efm.formalml.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/core/org.eclipse.efm.formalml.tests/META-INF/MANIFEST.MF b/core/org.eclipse.efm.formalml.tests/META-INF/MANIFEST.MF
index 343cbcb..eebdd0a 100644
--- a/core/org.eclipse.efm.formalml.tests/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.efm.formalml.tests/META-INF/MANIFEST.MF
@@ -13,6 +13,5 @@
  org.eclipse.ui.workbench,
  org.eclipse.osgi,
  org.eclipse.core.runtime;bundle-version="3.12.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
-Import-Package: org.eclipse.pde.internal.core.plugin
diff --git a/core/org.eclipse.efm.formalml/.classpath b/core/org.eclipse.efm.formalml/.classpath
index b6058b8..8ad9193 100644
--- a/core/org.eclipse.efm.formalml/.classpath
+++ b/core/org.eclipse.efm.formalml/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/core/org.eclipse.efm.formalml/.settings/org.eclipse.jdt.core.prefs b/core/org.eclipse.efm.formalml/.settings/org.eclipse.jdt.core.prefs
index a698e59..a58ebdc 100644
--- a/core/org.eclipse.efm.formalml/.settings/org.eclipse.jdt.core.prefs
+++ b/core/org.eclipse.efm.formalml/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,15 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/core/org.eclipse.efm.formalml/META-INF/MANIFEST.MF b/core/org.eclipse.efm.formalml/META-INF/MANIFEST.MF
index 9e7abd2..f140c36 100644
--- a/core/org.eclipse.efm.formalml/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.efm.formalml/META-INF/MANIFEST.MF
@@ -6,7 +6,7 @@
 Bundle-ClassPath: .
 Bundle-Vendor: CEA LIST
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.modeling.formalml,
  org.eclipse.efm.modeling.formalml.helpers,
  org.eclipse.efm.modeling.formalml.impl,
diff --git a/core/org.eclipse.efm.modeling/.classpath b/core/org.eclipse.efm.modeling/.classpath
index 8c8a32c..d0b112c 100644
--- a/core/org.eclipse.efm.modeling/.classpath
+++ b/core/org.eclipse.efm.modeling/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src-gen/"/>
 	<classpathentry kind="src" path="src/main/java"/>
diff --git a/core/org.eclipse.efm.modeling/.settings/org.eclipse.jdt.core.prefs b/core/org.eclipse.efm.modeling/.settings/org.eclipse.jdt.core.prefs
index a698e59..a58ebdc 100644
--- a/core/org.eclipse.efm.modeling/.settings/org.eclipse.jdt.core.prefs
+++ b/core/org.eclipse.efm.modeling/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,15 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/core/org.eclipse.efm.modeling/META-INF/MANIFEST.MF b/core/org.eclipse.efm.modeling/META-INF/MANIFEST.MF
index 58d844b..9e22ac5 100644
--- a/core/org.eclipse.efm.modeling/META-INF/MANIFEST.MF
+++ b/core/org.eclipse.efm.modeling/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.uml2.types;visibility:=reexport;bundle-version="[2.0.0,3.0.0)",
  org.eclipse.uml2.uml;visibility:=reexport;bundle-version="[5.1.0,6.0.0)",
  org.eclipse.uml2.uml.resources;bundle-version="[5.1.0,6.0.0)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.modeling
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
diff --git a/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/.settings/org.eclipse.jdt.core.prefs b/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/.settings/org.eclipse.jdt.core.prefs
index 295926d..e2860e9 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/.settings/org.eclipse.jdt.core.prefs
+++ b/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/.settings/org.eclipse.jdt.core.prefs
@@ -4,4 +4,5 @@
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/META-INF/MANIFEST.MF b/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/META-INF/MANIFEST.MF
index a403a51..60d3235 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/META-INF/MANIFEST.MF
+++ b/diagram/org.eclipse.efm.modeling.diagram.blockdefinition/META-INF/MANIFEST.MF
@@ -10,5 +10,5 @@
  org.eclipse.efm.formalml.service.types;bundle-version="[0.0.1,1.0.0)",
  org.eclipse.papyrus.uml.service.types;bundle-version="2.0.0",
  org.eclipse.papyrus.uml.diagram.composite;bundle-version="2.0.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/diagram/org.eclipse.efm.modeling.diagram.common/.settings/org.eclipse.jdt.core.prefs b/diagram/org.eclipse.efm.modeling.diagram.common/.settings/org.eclipse.jdt.core.prefs
index 295926d..e2860e9 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.common/.settings/org.eclipse.jdt.core.prefs
+++ b/diagram/org.eclipse.efm.modeling.diagram.common/.settings/org.eclipse.jdt.core.prefs
@@ -4,4 +4,5 @@
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/diagram/org.eclipse.efm.modeling.diagram.common/META-INF/MANIFEST.MF b/diagram/org.eclipse.efm.modeling.diagram.common/META-INF/MANIFEST.MF
index 077a150..af03a78 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.common/META-INF/MANIFEST.MF
+++ b/diagram/org.eclipse.efm.modeling.diagram.common/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.efm.modeling.diagram.common
 Bundle-Version: 0.0.1.qualifier
 Bundle-Vendor: CEA - LIST
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.eclipse.core.runtime,
  org.eclipse.emf.common.util,
  org.eclipse.emf.ecore,
diff --git a/diagram/org.eclipse.efm.modeling.diagram.internalblock/.settings/org.eclipse.jdt.core.prefs b/diagram/org.eclipse.efm.modeling.diagram.internalblock/.settings/org.eclipse.jdt.core.prefs
index 295926d..e2860e9 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.internalblock/.settings/org.eclipse.jdt.core.prefs
+++ b/diagram/org.eclipse.efm.modeling.diagram.internalblock/.settings/org.eclipse.jdt.core.prefs
@@ -4,4 +4,5 @@
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/diagram/org.eclipse.efm.modeling.diagram.internalblock/META-INF/MANIFEST.MF b/diagram/org.eclipse.efm.modeling.diagram.internalblock/META-INF/MANIFEST.MF
index 3157ca6..72f8574 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.internalblock/META-INF/MANIFEST.MF
+++ b/diagram/org.eclipse.efm.modeling.diagram.internalblock/META-INF/MANIFEST.MF
@@ -10,5 +10,5 @@
  org.eclipse.efm.formalml.service.types;bundle-version="[0.0.1,1.0.0)",
  org.eclipse.papyrus.uml.service.types;bundle-version="2.0.0",
  org.eclipse.papyrus.uml.diagram.composite;bundle-version="2.0.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/diagram/org.eclipse.efm.modeling.diagram.statemachine/.settings/org.eclipse.jdt.core.prefs b/diagram/org.eclipse.efm.modeling.diagram.statemachine/.settings/org.eclipse.jdt.core.prefs
index 295926d..e2860e9 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.statemachine/.settings/org.eclipse.jdt.core.prefs
+++ b/diagram/org.eclipse.efm.modeling.diagram.statemachine/.settings/org.eclipse.jdt.core.prefs
@@ -4,4 +4,5 @@
 org.eclipse.jdt.core.compiler.compliance=1.8
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.release=disabled
 org.eclipse.jdt.core.compiler.source=1.8
diff --git a/diagram/org.eclipse.efm.modeling.diagram.statemachine/META-INF/MANIFEST.MF b/diagram/org.eclipse.efm.modeling.diagram.statemachine/META-INF/MANIFEST.MF
index fb69ab4..e0fac97 100644
--- a/diagram/org.eclipse.efm.modeling.diagram.statemachine/META-INF/MANIFEST.MF
+++ b/diagram/org.eclipse.efm.modeling.diagram.statemachine/META-INF/MANIFEST.MF
@@ -11,9 +11,8 @@
  org.eclipse.papyrus.uml.service.types;bundle-version="2.0.0",
  org.eclipse.papyrus.uml.xtext.integration.ui,
  org.eclipse.papyrus.uml.diagram.statemachine;bundle-version="2.0.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.efm.modeling.diagram.common.factory,
  org.eclipse.efm.modeling.formalml.helpers,
- org.eclipse.papyrus.uml.diagram.clazz.part,
- org.eclipse.papyrus.uml.diagram.statemachine.part
+ org.eclipse.papyrus.uml.diagram.clazz.part
diff --git a/doc/org.eclipse.efm.modeling.doc.architecture/.classpath b/doc/org.eclipse.efm.modeling.doc.architecture/.classpath
index 54f561c..f656d57 100644
--- a/doc/org.eclipse.efm.modeling.doc.architecture/.classpath
+++ b/doc/org.eclipse.efm.modeling.doc.architecture/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/doc/org.eclipse.efm.modeling.doc.architecture/.settings/org.eclipse.jdt.core.prefs b/doc/org.eclipse.efm.modeling.doc.architecture/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/doc/org.eclipse.efm.modeling.doc.architecture/.settings/org.eclipse.jdt.core.prefs
+++ b/doc/org.eclipse.efm.modeling.doc.architecture/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/doc/org.eclipse.efm.modeling.doc.architecture/META-INF/MANIFEST.MF b/doc/org.eclipse.efm.modeling.doc.architecture/META-INF/MANIFEST.MF
index f6b824a..9401d13 100644
--- a/doc/org.eclipse.efm.modeling.doc.architecture/META-INF/MANIFEST.MF
+++ b/doc/org.eclipse.efm.modeling.doc.architecture/META-INF/MANIFEST.MF
@@ -3,6 +3,6 @@
 Bundle-Name: Architecture
 Bundle-SymbolicName: org.eclipse.efm.modeling.doc.architecture
 Bundle-Version: 0.0.1.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.core.runtime;bundle-version="3.12.0",
  org.eclipse.ui.workbench
diff --git a/doc/org.eclipse.efm.modeling.doc.helpcontents/.classpath b/doc/org.eclipse.efm.modeling.doc.helpcontents/.classpath
index 54f561c..f656d57 100644
--- a/doc/org.eclipse.efm.modeling.doc.helpcontents/.classpath
+++ b/doc/org.eclipse.efm.modeling.doc.helpcontents/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/doc/org.eclipse.efm.modeling.doc.helpcontents/.settings/org.eclipse.jdt.core.prefs b/doc/org.eclipse.efm.modeling.doc.helpcontents/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/doc/org.eclipse.efm.modeling.doc.helpcontents/.settings/org.eclipse.jdt.core.prefs
+++ b/doc/org.eclipse.efm.modeling.doc.helpcontents/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/doc/org.eclipse.efm.modeling.doc.helpcontents/META-INF/MANIFEST.MF b/doc/org.eclipse.efm.modeling.doc.helpcontents/META-INF/MANIFEST.MF
index 87f1d70..18f1612 100644
--- a/doc/org.eclipse.efm.modeling.doc.helpcontents/META-INF/MANIFEST.MF
+++ b/doc/org.eclipse.efm.modeling.doc.helpcontents/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: %pluginName
 Bundle-SymbolicName: org.eclipse.efm.modeling.doc.helpcontents;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Import-Package: org.eclipse.ui.plugin
 Require-Bundle: org.eclipse.core.runtime
 Bundle-Vendor: %pluginVendor
diff --git a/doc/org.eclipse.efm.modeling.doc.xlia/.classpath b/doc/org.eclipse.efm.modeling.doc.xlia/.classpath
index b862a29..ca3785c 100644
--- a/doc/org.eclipse.efm.modeling.doc.xlia/.classpath
+++ b/doc/org.eclipse.efm.modeling.doc.xlia/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/doc/org.eclipse.efm.modeling.doc.xlia/META-INF/MANIFEST.MF b/doc/org.eclipse.efm.modeling.doc.xlia/META-INF/MANIFEST.MF
index ab0c1d2..ebf50eb 100644
--- a/doc/org.eclipse.efm.modeling.doc.xlia/META-INF/MANIFEST.MF
+++ b/doc/org.eclipse.efm.modeling.doc.xlia/META-INF/MANIFEST.MF
@@ -7,5 +7,5 @@
 Bundle-Vendor: %providerName
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/editor/sew/org.eclipse.efm.sew.ecore/.classpath b/editor/sew/org.eclipse.efm.sew.ecore/.classpath
index e9b9bf7..7a8d12e 100644
--- a/editor/sew/org.eclipse.efm.sew.ecore/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.ecore/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen"/>
diff --git a/editor/sew/org.eclipse.efm.sew.ecore/.settings/org.eclipse.jdt.core.prefs b/editor/sew/org.eclipse.efm.sew.ecore/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/sew/org.eclipse.efm.sew.ecore/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/sew/org.eclipse.efm.sew.ecore/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/sew/org.eclipse.efm.sew.ecore/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.ecore/META-INF/MANIFEST.MF
index c4281e5..9b91fdf 100644
--- a/editor/sew/org.eclipse.efm.sew.ecore/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.ecore/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.core.runtime,
  org.eclipse.emf.ecore;visibility:=reexport,
  org.eclipse.efm.sew.ecore;visibility:=reexport
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.ecore.sew,
  org.eclipse.efm.ecore.sew.expression,
  org.eclipse.efm.ecore.sew.expression.impl,
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/.classpath b/editor/sew/org.eclipse.efm.sew.xtext.ide/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/.settings/org.eclipse.jdt.core.prefs b/editor/sew/org.eclipse.efm.sew.xtext.ide/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.xtext.ide/META-INF/MANIFEST.MF
index 5d1eb49..c5c7027 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.xtext.ide,
  org.eclipse.xtext.xbase.ide,
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.sew.xtext.ide.contentassist.antlr.internal,
  org.eclipse.efm.sew.xtext.ide.contentassist.antlr
 Automatic-Module-Name: org.eclipse.efm.sew.xtext.ide
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/AbstractSEWIdeModule.java b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/AbstractSEWIdeModule.java
index a00d78f..3d7645e 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/AbstractSEWIdeModule.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/AbstractSEWIdeModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ide;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/PartialSEWContentAssistParser.java b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/PartialSEWContentAssistParser.java
index 8d850a9..e4c9fb5 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/PartialSEWContentAssistParser.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/PartialSEWContentAssistParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ide.contentassist.antlr;
 
@@ -20,10 +20,9 @@
 import org.eclipse.xtext.AbstractRule;
 import org.eclipse.xtext.ide.editor.contentassist.antlr.FollowElement;
 import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-import org.eclipse.xtext.ide.editor.partialEditing.IPartialEditingContentAssistParser;
 import org.eclipse.xtext.util.PolymorphicDispatcher;
 
-public class PartialSEWContentAssistParser extends SEWParser implements IPartialEditingContentAssistParser {
+public class PartialSEWContentAssistParser extends SEWParser {
 
 	private AbstractRule rule;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/SEWParser.java b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/SEWParser.java
index ad7c58e..55ef8c9 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/SEWParser.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/SEWParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ide.contentassist.antlr;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEW.g b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEW.g
index 838e408..d029a72 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEW.g
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEW.g
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 grammar InternalSEW;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEWParser.java b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEWParser.java
index 8884363..7ad9929 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEWParser.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ide/src-gen/org/eclipse/efm/sew/xtext/ide/contentassist/antlr/internal/InternalSEWParser.java
@@ -33,7 +33,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 @SuppressWarnings("all")
 public class InternalSEWParser extends AbstractInternalContentAssistParser {
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.tests/.classpath b/editor/sew/org.eclipse.efm.sew.xtext.tests/.classpath
index c461527..9a77662 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.tests/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.xtext.tests/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/">
 		<attributes>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.tests/.settings/org.eclipse.jdt.core.prefs b/editor/sew/org.eclipse.efm.sew.xtext.tests/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/sew/org.eclipse.efm.sew.xtext.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.tests/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.xtext.tests/META-INF/MANIFEST.MF
index 7ed1c7f..99654ce 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.tests/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.xtext.tests/META-INF/MANIFEST.MF
@@ -13,7 +13,7 @@
  org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
  org.eclipse.xtext.testing,
  org.eclipse.xtext.xbase.testing
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.sew.xtext.tests;x-internal=true
 Import-Package: org.hamcrest.core,
  org.junit;version="4.5.0",
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.tests/src-gen/org/eclipse/efm/sew/xtext/tests/SEWInjectorProvider.java b/editor/sew/org.eclipse.efm.sew.xtext.tests/src-gen/org/eclipse/efm/sew/xtext/tests/SEWInjectorProvider.java
index d1f72a2..73ed940 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.tests/src-gen/org/eclipse/efm/sew/xtext/tests/SEWInjectorProvider.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.tests/src-gen/org/eclipse/efm/sew/xtext/tests/SEWInjectorProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.tests;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/.classpath b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/.classpath
index c461527..c7f7faa 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/.classpath
@@ -1,18 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src/">
+	<classpathentry kind="src" path="src">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="src" path="src-gen/">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="xtend-gen/">
+	<classpathentry kind="src" path="src-gen">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/META-INF/MANIFEST.MF
index 6a33fb3..a6e134a 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/META-INF/MANIFEST.MF
@@ -15,7 +15,7 @@
  org.eclipse.xtext.testing,
  org.eclipse.xtext.xbase.testing,
  org.eclipse.xtext.ui.testing
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.sew.xtext.ui.tests;x-internal=true
 Import-Package: org.hamcrest.core,
  org.junit;version="4.5.0",
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/src-gen/org/eclipse/efm/sew/xtext/ui/tests/SEWUiInjectorProvider.java b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/src-gen/org/eclipse/efm/sew/xtext/ui/tests/SEWUiInjectorProvider.java
index ee2f322..6fccd25 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/src-gen/org/eclipse/efm/sew/xtext/ui/tests/SEWUiInjectorProvider.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui.tests/src-gen/org/eclipse/efm/sew/xtext/ui/tests/SEWUiInjectorProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ui.tests;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/.classpath b/editor/sew/org.eclipse.efm.sew.xtext.ui/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/.settings/org.eclipse.jdt.core.prefs b/editor/sew/org.eclipse.efm.sew.xtext.ui/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.xtext.ui/META-INF/MANIFEST.MF
index 567e5ab..f3008e3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/META-INF/MANIFEST.MF
@@ -19,7 +19,7 @@
  org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional,
  org.eclipse.xtext.xbase.lib;bundle-version="2.14.0"
 Import-Package: org.apache.log4j
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.sew.xtext.ui.internal,
  org.eclipse.efm.sew.xtext.ui.quickfix,
  org.eclipse.efm.sew.xtext.ui.contentassist
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/plugin.xml_gen b/editor/sew/org.eclipse.efm.sew.xtext.ui/plugin.xml_gen
index a81863b..0c13f6e 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/plugin.xml_gen
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/plugin.xml_gen
@@ -313,7 +313,7 @@
 	<!-- Quick Outline -->
 	<extension
 		point="org.eclipse.ui.handlers">
-		<handler 
+		<handler
 			class="org.eclipse.efm.sew.xtext.ui.SEWExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
 			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
 			<activeWhen>
@@ -373,7 +373,7 @@
 	</extension>
 	<!-- Rename Refactoring -->
 	<extension point="org.eclipse.ui.handlers">
-		<handler 
+		<handler
 			class="org.eclipse.efm.sew.xtext.ui.SEWExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
 			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
 			<activeWhen>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/AbstractSEWUiModule.java b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/AbstractSEWUiModule.java
index 86d75aa..1c02325 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/AbstractSEWUiModule.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/AbstractSEWUiModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ui;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/SEWExecutableExtensionFactory.java b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/SEWExecutableExtensionFactory.java
index 3016972..a9a561b 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/SEWExecutableExtensionFactory.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/SEWExecutableExtensionFactory.java
@@ -11,15 +11,15 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ui;
 
 import com.google.inject.Injector;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.efm.sew.xtext.ui.internal.XtextActivator;
 import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 /**
  * This class was generated. Customizations should only happen in a newly
@@ -29,7 +29,7 @@
 
 	@Override
 	protected Bundle getBundle() {
-		return Platform.getBundle(XtextActivator.PLUGIN_ID);
+		return FrameworkUtil.getBundle(XtextActivator.class);
 	}
 	
 	@Override
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/contentassist/AbstractSEWProposalProvider.java b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/contentassist/AbstractSEWProposalProvider.java
index 829b3f5..d270d9a 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/contentassist/AbstractSEWProposalProvider.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/contentassist/AbstractSEWProposalProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ui.contentassist;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/internal/XtextActivator.java b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/internal/XtextActivator.java
index c02c4dd..d69e9ac 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/internal/XtextActivator.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext.ui/src-gen/org/eclipse/efm/sew/xtext/ui/internal/XtextActivator.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.ui.internal;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/.classpath b/editor/sew/org.eclipse.efm.sew.xtext/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/.classpath
+++ b/editor/sew/org.eclipse.efm.sew.xtext/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/.settings/org.eclipse.jdt.core.prefs b/editor/sew/org.eclipse.efm.sew.xtext/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/sew/org.eclipse.efm.sew.xtext/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/META-INF/MANIFEST.MF b/editor/sew/org.eclipse.efm.sew.xtext/META-INF/MANIFEST.MF
index 777a978..bcbe87d 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/META-INF/MANIFEST.MF
+++ b/editor/sew/org.eclipse.efm.sew.xtext/META-INF/MANIFEST.MF
@@ -13,7 +13,7 @@
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
  org.eclipse.xtext.util,
  org.eclipse.xtend.lib;bundle-version="2.14.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.sew.xtext.services,
  org.eclipse.efm.sew.xtext.parser.antlr.internal,
  org.eclipse.efm.sew.xtext,
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/AbstractSEWRuntimeModule.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/AbstractSEWRuntimeModule.java
index b3dda5d..751e59d 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/AbstractSEWRuntimeModule.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/AbstractSEWRuntimeModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/SEWStandaloneSetupGenerated.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/SEWStandaloneSetupGenerated.java
index 586f716..df7bebf 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/SEWStandaloneSetupGenerated.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/SEWStandaloneSetupGenerated.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWAntlrTokenFileProvider.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWAntlrTokenFileProvider.java
index c6e392d..e48ae85 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWAntlrTokenFileProvider.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWAntlrTokenFileProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.parser.antlr;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWParser.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWParser.java
index d6e25a4..7bf0629 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWParser.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/SEWParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.parser.antlr;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEW.g b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEW.g
index 592d56e..dce5362 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEW.g
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEW.g
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 grammar InternalSEW;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEWParser.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEWParser.java
index 0dec6bd..18c33d9 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEWParser.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/parser/antlr/internal/InternalSEWParser.java
@@ -32,7 +32,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 @SuppressWarnings("all")
 public class InternalSEWParser extends AbstractInternalAntlrParser {
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/scoping/AbstractSEWScopeProvider.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/scoping/AbstractSEWScopeProvider.java
index 379f420..9d19260 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/scoping/AbstractSEWScopeProvider.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/scoping/AbstractSEWScopeProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.scoping;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSemanticSequencer.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSemanticSequencer.java
index 0e8822d..06d34a3 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSemanticSequencer.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSemanticSequencer.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.serializer;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSyntacticSequencer.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSyntacticSequencer.java
index 631643b..9f257e6 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSyntacticSequencer.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/serializer/SEWSyntacticSequencer.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.serializer;
 
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/services/SEWGrammarAccess.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/services/SEWGrammarAccess.java
index a71142d..b4c3078 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/services/SEWGrammarAccess.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/services/SEWGrammarAccess.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.services;
 
@@ -30,11 +30,11 @@
 import org.eclipse.xtext.RuleCall;
 import org.eclipse.xtext.TerminalRule;
 import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
-import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
+import org.eclipse.xtext.service.AbstractElementFinder;
 import org.eclipse.xtext.service.GrammarProvider;
 
 @Singleton
-public class SEWGrammarAccess extends AbstractGrammarElementFinder {
+public class SEWGrammarAccess extends AbstractElementFinder.AbstractGrammarElementFinder {
 	
 	public class WorkflowElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.sew.xtext.SEW.Workflow");
@@ -67,41 +67,65 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Symbolic Execution Workflow Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//Workflow sew::SEWorkflow:
-		//	{sew::SEWorkflow} Prolog? (type=('workflow' | 'symbex-workflow') name=UFI? description=EString?
-		//	'{'
-		//	element+=(Object | Property)*
-		//	'}'
-		//	// for Xtext Embeded Editor
-		//	| element+=(Object | Property)*
-		//	// Deprecated Object as FAVM Workflow
-		//	| element+=DeprecatedObject);
+		//Workflow returns sew::SEWorkflow
+		//: {sew::SEWorkflow}
+		//    ( Prolog )?
+		//    ( type=( 'workflow' | 'symbex-workflow' )
+		//        ( name=UFI )?  ( description=EString )?
+		//        '{'
+		//            ( element+=( Object | Property ) )*
+		//        '}'
+		//    // for Xtext Embeded Editor
+		//    | ( element+=( Object | Property ) )*
+		//    // Deprecated Object as FAVM Workflow
+		//    | element+=DeprecatedObject
+		//    )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::SEWorkflow} Prolog? (type=('workflow' | 'symbex-workflow') name=UFI? description=EString? '{' element+=(Object |
-		//Property)* '}' // for Xtext Embeded Editor
-		//| element+=(Object | Property)* // Deprecated Object as FAVM Workflow
-		//| element+=DeprecatedObject)
+		//{sew::SEWorkflow}
+		//   ( Prolog )?
+		//   ( type=( 'workflow' | 'symbex-workflow' )
+		//       ( name=UFI )?  ( description=EString )?
+		//       '{'
+		//           ( element+=( Object | Property ) )*
+		//       '}'
+		//   // for Xtext Embeded Editor
+		//   | ( element+=( Object | Property ) )*
+		//   // Deprecated Object as FAVM Workflow
+		//   | element+=DeprecatedObject
+		//   )
 		public Group getGroup() { return cGroup; }
 		
 		//{sew::SEWorkflow}
 		public Action getSEWorkflowAction_0() { return cSEWorkflowAction_0; }
 		
-		//Prolog?
+		//( Prolog )?
 		public RuleCall getPrologParserRuleCall_1() { return cPrologParserRuleCall_1; }
 		
-		//(type=('workflow' | 'symbex-workflow') name=UFI? description=EString? '{' element+=(Object | Property)* '}' // for Xtext Embeded Editor
-		//| element+=(Object | Property)* // Deprecated Object as FAVM Workflow
-		//| element+=DeprecatedObject)
+		//( type=( 'workflow' | 'symbex-workflow' )
+		//    ( name=UFI )?  ( description=EString )?
+		//    '{'
+		//        ( element+=( Object | Property ) )*
+		//    '}'
+		//// for Xtext Embeded Editor
+		//| ( element+=( Object | Property ) )*
+		//// Deprecated Object as FAVM Workflow
+		//| element+=DeprecatedObject
+		//)
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//type=('workflow' | 'symbex-workflow') name=UFI? description=EString? '{' element+=(Object | Property)* '}'
+		//type=( 'workflow' | 'symbex-workflow' )
+		//       ( name=UFI )?  ( description=EString )?
+		//       '{'
+		//           ( element+=( Object | Property ) )*
+		//       '}'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
-		//type=('workflow' | 'symbex-workflow')
+		//type=( 'workflow' | 'symbex-workflow' )
 		public Assignment getTypeAssignment_2_0_0() { return cTypeAssignment_2_0_0; }
 		
-		//('workflow' | 'symbex-workflow')
+		//( 'workflow' | 'symbex-workflow' )
 		public Alternatives getTypeAlternatives_2_0_0_0() { return cTypeAlternatives_2_0_0_0; }
 		
 		//'workflow'
@@ -110,13 +134,13 @@
 		//'symbex-workflow'
 		public Keyword getTypeSymbexWorkflowKeyword_2_0_0_0_1() { return cTypeSymbexWorkflowKeyword_2_0_0_0_1; }
 		
-		//name=UFI?
+		//( name=UFI )?
 		public Assignment getNameAssignment_2_0_1() { return cNameAssignment_2_0_1; }
 		
 		//UFI
 		public RuleCall getNameUFIParserRuleCall_2_0_1_0() { return cNameUFIParserRuleCall_2_0_1_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_2_0_2() { return cDescriptionAssignment_2_0_2; }
 		
 		//EString
@@ -125,10 +149,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2_0_3() { return cLeftCurlyBracketKeyword_2_0_3; }
 		
-		//element+=(Object | Property)*
+		//( element+=( Object | Property ) )*
 		public Assignment getElementAssignment_2_0_4() { return cElementAssignment_2_0_4; }
 		
-		//(Object | Property)
+		//( Object | Property )
 		public Alternatives getElementAlternatives_2_0_4_0() { return cElementAlternatives_2_0_4_0; }
 		
 		//Object
@@ -140,10 +164,10 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_2_0_5() { return cRightCurlyBracketKeyword_2_0_5; }
 		
-		//element+=(Object | Property)*
+		//( element+=( Object | Property ) )*
 		public Assignment getElementAssignment_2_1() { return cElementAssignment_2_1; }
 		
-		//(Object | Property)
+		//( Object | Property )
 		public Alternatives getElementAlternatives_2_1_0() { return cElementAlternatives_2_1_0; }
 		
 		//Object
@@ -177,14 +201,19 @@
 		private final RuleCall cEStringParserRuleCall_3_2 = (RuleCall)cAlternatives_3.eContents().get(2);
 		private final Keyword cGreaterThanSignColonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//Prolog:
-		//	('@sew' | '@favm') '<' ('workflow' | 'sew') (',' 'version:'? EDouble | UFI | EString)? '>:';
+		//Prolog
+		//: ( '@sew' | '@favm' ) '<'
+		//    ( 'workflow' | 'sew' )
+		//    ( ',' ( 'version:' )?  EDouble | UFI | EString )? '>:'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//('@sew' | '@favm') '<' ('workflow' | 'sew') (',' 'version:'? EDouble | UFI | EString)? '>:'
+		//( '@sew' | '@favm' ) '<'
+		//   ( 'workflow' | 'sew' )
+		//   ( ',' ( 'version:' )?  EDouble | UFI | EString )? '>:'
 		public Group getGroup() { return cGroup; }
 		
-		//('@sew' | '@favm')
+		//( '@sew' | '@favm' )
 		public Alternatives getAlternatives_0() { return cAlternatives_0; }
 		
 		//'@sew'
@@ -196,7 +225,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_1() { return cLessThanSignKeyword_1; }
 		
-		//('workflow' | 'sew')
+		//( 'workflow' | 'sew' )
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
 		//'workflow'
@@ -205,16 +234,16 @@
 		//'sew'
 		public Keyword getSewKeyword_2_1() { return cSewKeyword_2_1; }
 		
-		//(',' 'version:'? EDouble | UFI | EString)?
+		//( ',' ( 'version:' )?  EDouble | UFI | EString )?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//',' 'version:'? EDouble
+		//',' ( 'version:' )?  EDouble
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//','
 		public Keyword getCommaKeyword_3_0_0() { return cCommaKeyword_3_0_0; }
 		
-		//'version:'?
+		//( 'version:' )?
 		public Keyword getVersionKeyword_3_0_1() { return cVersionKeyword_3_0_1; }
 		
 		//EDouble
@@ -239,13 +268,15 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// [ Qualified ] Identifier
 		//////////////////////////////////////////////////////////////////////////////////
-		//ReservedWord:
-		//	'workflow' | 'sew'
-		//	// Deprecated
-		//	| DeprecatedReservedWord;
+		// ReservedWord
+		//: 'workflow' | 'sew'
+		//// Deprecated
+		//| DeprecatedReservedWord
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'workflow' | 'sew' // Deprecated
+		// 'workflow' | 'sew'
+		//// Deprecated
 		//| DeprecatedReservedWord
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
@@ -264,8 +295,9 @@
 		private final RuleCall cReservedWordParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cXIDENDIFIERTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//XID:
-		//	ReservedWord | XIDENDIFIER;
+		//XID returns ecore::EString
+		//: ReservedWord | XIDENDIFIER
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//ReservedWord | XIDENDIFIER
@@ -287,20 +319,21 @@
 		private final Keyword cFullStopKeyword_1_0_1 = (Keyword)cAlternatives_1_0.eContents().get(1);
 		private final RuleCall cXIDParserRuleCall_1_1 = (RuleCall)cGroup_1.eContents().get(1);
 		
-		//UFI:
-		//	XID (('::' | '.') XID)*;
+		//UFI returns ecore::EString
+		//: XID ( ( '::' | '.' ) XID )*
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//XID (('::' | '.') XID)*
+		//XID ( ( '::' | '.' ) XID )*
 		public Group getGroup() { return cGroup; }
 		
 		//XID
 		public RuleCall getXIDParserRuleCall_0() { return cXIDParserRuleCall_0; }
 		
-		//(('::' | '.') XID)*
+		//( ( '::' | '.' ) XID )*
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//('::' | '.')
+		//( '::' | '.' )
 		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
 		
 		//'::'
@@ -351,22 +384,37 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Object Configuration Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//Object sew::WObject:
-		//	{sew::WObject} type=UFI name=UFI? description=EString?
-		//	'{'
-		//	element+=(Object | Property)*
-		//	'}'
-		//	| {sew::WObject} name=UFI (':=' | '+:=') (type=UFI description=EString?)?
-		//	'{'
-		//	element+=(Object | Property)*
-		//	'}';
+		//Object returns sew::WObject
+		//: {sew::WObject}
+		//    type=UFI  ( name=UFI )?  ( description=EString )?
+		//    '{'
+		//        ( element+=( Object | Property ) )*
+		//    '}'
+		//| {sew::WObject}
+		//    name=UFI  ( ':=' | '+:=' )  ( type=UFI  ( description=EString )? )?
+		//    '{'
+		//        ( element+=( Object | Property ) )*
+		//    '}'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::WObject} type=UFI name=UFI? description=EString? '{' element+=(Object | Property)* '}' | {sew::WObject} name=UFI
-		//(':=' | '+:=') (type=UFI description=EString?)? '{' element+=(Object | Property)* '}'
+		// {sew::WObject}
+		//    type=UFI  ( name=UFI )?  ( description=EString )?
+		//    '{'
+		//        ( element+=( Object | Property ) )*
+		//    '}'
+		//| {sew::WObject}
+		//    name=UFI  ( ':=' | '+:=' )  ( type=UFI  ( description=EString )? )?
+		//    '{'
+		//        ( element+=( Object | Property ) )*
+		//    '}'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{sew::WObject} type=UFI name=UFI? description=EString? '{' element+=(Object | Property)* '}'
+		//{sew::WObject}
+		//   type=UFI  ( name=UFI )?  ( description=EString )?
+		//   '{'
+		//       ( element+=( Object | Property ) )*
+		//   '}'
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{sew::WObject}
@@ -378,13 +426,13 @@
 		//UFI
 		public RuleCall getTypeUFIParserRuleCall_0_1_0() { return cTypeUFIParserRuleCall_0_1_0; }
 		
-		//name=UFI?
+		//( name=UFI )?
 		public Assignment getNameAssignment_0_2() { return cNameAssignment_0_2; }
 		
 		//UFI
 		public RuleCall getNameUFIParserRuleCall_0_2_0() { return cNameUFIParserRuleCall_0_2_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_0_3() { return cDescriptionAssignment_0_3; }
 		
 		//EString
@@ -393,10 +441,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_0_4() { return cLeftCurlyBracketKeyword_0_4; }
 		
-		//element+=(Object | Property)*
+		//( element+=( Object | Property ) )*
 		public Assignment getElementAssignment_0_5() { return cElementAssignment_0_5; }
 		
-		//(Object | Property)
+		//( Object | Property )
 		public Alternatives getElementAlternatives_0_5_0() { return cElementAlternatives_0_5_0; }
 		
 		//Object
@@ -408,7 +456,11 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_0_6() { return cRightCurlyBracketKeyword_0_6; }
 		
-		//{sew::WObject} name=UFI (':=' | '+:=') (type=UFI description=EString?)? '{' element+=(Object | Property)* '}'
+		//{sew::WObject}
+		//   name=UFI  ( ':=' | '+:=' )  ( type=UFI  ( description=EString )? )?
+		//   '{'
+		//       ( element+=( Object | Property ) )*
+		//   '}'
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{sew::WObject}
@@ -420,7 +472,7 @@
 		//UFI
 		public RuleCall getNameUFIParserRuleCall_1_1_0() { return cNameUFIParserRuleCall_1_1_0; }
 		
-		//(':=' | '+:=')
+		//( ':=' | '+:=' )
 		public Alternatives getAlternatives_1_2() { return cAlternatives_1_2; }
 		
 		//':='
@@ -429,7 +481,7 @@
 		//'+:='
 		public Keyword getPlusSignColonEqualsSignKeyword_1_2_1() { return cPlusSignColonEqualsSignKeyword_1_2_1; }
 		
-		//(type=UFI description=EString?)?
+		//( type=UFI  ( description=EString )? )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//type=UFI
@@ -438,7 +490,7 @@
 		//UFI
 		public RuleCall getTypeUFIParserRuleCall_1_3_0_0() { return cTypeUFIParserRuleCall_1_3_0_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_1_3_1() { return cDescriptionAssignment_1_3_1; }
 		
 		//EString
@@ -447,10 +499,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_4() { return cLeftCurlyBracketKeyword_1_4; }
 		
-		//element+=(Object | Property)*
+		//( element+=( Object | Property ) )*
 		public Assignment getElementAssignment_1_5() { return cElementAssignment_1_5; }
 		
-		//(Object | Property)
+		//( Object | Property )
 		public Alternatives getElementAlternatives_1_5_0() { return cElementAlternatives_1_5_0; }
 		
 		//Object
@@ -471,12 +523,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Property Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//Property sew::WProperty:
-		//	Section
-		//	| Attribute;
+		//Property returns sew::WProperty
+		//: Section
+		//| Attribute
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//Section | Attribute
+		// Section
+		//| Attribute
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//Section
@@ -507,12 +561,18 @@
 		private final RuleCall cElementObjectParserRuleCall_2_1_1_0_0 = (RuleCall)cElementAlternatives_2_1_1_0.eContents().get(0);
 		private final RuleCall cElementAttributeParserRuleCall_2_1_1_0_1 = (RuleCall)cElementAlternatives_2_1_1_0.eContents().get(1);
 		
-		//Section sew::WSection:
-		//	name=XID description=EString? ('[' element+=(Object | Attribute)* ']'
-		//	| ':' element+=(Object | Attribute)*);
+		//Section returns sew::WSection
+		//: name=XID  ( description=EString )?
+		//    ( '[' ( element+=( Object | Attribute ) )* ']'
+		//    | ':' ( element+=( Object | Attribute ) )*
+		//    )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=XID description=EString? ('[' element+=(Object | Attribute)* ']' | ':' element+=(Object | Attribute)*)
+		//name=XID  ( description=EString )?
+		//   ( '[' ( element+=( Object | Attribute ) )* ']'
+		//   | ':' ( element+=( Object | Attribute ) )*
+		//   )
 		public Group getGroup() { return cGroup; }
 		
 		//name=XID
@@ -521,25 +581,27 @@
 		//XID
 		public RuleCall getNameXIDParserRuleCall_0_0() { return cNameXIDParserRuleCall_0_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_1() { return cDescriptionAssignment_1; }
 		
 		//EString
 		public RuleCall getDescriptionEStringParserRuleCall_1_0() { return cDescriptionEStringParserRuleCall_1_0; }
 		
-		//('[' element+=(Object | Attribute)* ']' | ':' element+=(Object | Attribute)*)
+		//( '[' ( element+=( Object | Attribute ) )* ']'
+		//| ':' ( element+=( Object | Attribute ) )*
+		//)
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//'[' element+=(Object | Attribute)* ']'
+		//'[' ( element+=( Object | Attribute ) )* ']'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//'['
 		public Keyword getLeftSquareBracketKeyword_2_0_0() { return cLeftSquareBracketKeyword_2_0_0; }
 		
-		//element+=(Object | Attribute)*
+		//( element+=( Object | Attribute ) )*
 		public Assignment getElementAssignment_2_0_1() { return cElementAssignment_2_0_1; }
 		
-		//(Object | Attribute)
+		//( Object | Attribute )
 		public Alternatives getElementAlternatives_2_0_1_0() { return cElementAlternatives_2_0_1_0; }
 		
 		//Object
@@ -551,16 +613,16 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_2_0_2() { return cRightSquareBracketKeyword_2_0_2; }
 		
-		//':' element+=(Object | Attribute)*
+		//':' ( element+=( Object | Attribute ) )*
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//':'
 		public Keyword getColonKeyword_2_1_0() { return cColonKeyword_2_1_0; }
 		
-		//element+=(Object | Attribute)*
+		//( element+=( Object | Attribute ) )*
 		public Assignment getElementAssignment_2_1_1() { return cElementAssignment_2_1_1; }
 		
-		//(Object | Attribute)
+		//( Object | Attribute )
 		public Alternatives getElementAlternatives_2_1_1_0() { return cElementAlternatives_2_1_1_0; }
 		
 		//Object
@@ -580,11 +642,14 @@
 		private final RuleCall cValueValueSpecificationParserRuleCall_3_0 = (RuleCall)cValueAssignment_3.eContents().get(0);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//Attribute sew::WAttribute:
-		//	{sew::WAttribute} name=XID '=' value=ValueSpecification ';'?;
+		//Attribute returns sew::WAttribute
+		//: {sew::WAttribute}
+		//    name=XID  '='  value=ValueSpecification  ( ';' )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::WAttribute} name=XID '=' value=ValueSpecification ';'?
+		//{sew::WAttribute}
+		//   name=XID  '='  value=ValueSpecification  ( ';' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{sew::WAttribute}
@@ -605,7 +670,7 @@
 		//ValueSpecification
 		public RuleCall getValueValueSpecificationParserRuleCall_3_0() { return cValueValueSpecificationParserRuleCall_3_0; }
 		
-		//';'?
+		//( ';' )?
 		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
 	}
 	public class ValueSpecificationElements extends AbstractParserRuleElementFinder {
@@ -615,8 +680,9 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Value Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//ValueSpecification sew::WValueSpecification:
-		//	Expression;
+		//ValueSpecification returns sew::WValueSpecification
+		//: Expression
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//Expression
@@ -631,13 +697,15 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Expression Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//Expression sew::WValueSpecification:
-		//	conditionalExpression
-		//	// Deprecated
-		//	| DeprecatedExpression;
+		//Expression returns sew::WValueSpecification
+		//: conditionalExpression
+		//// Deprecated
+		//| DeprecatedExpression
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//conditionalExpression // Deprecated
+		// conditionalExpression
+		//// Deprecated
 		//| DeprecatedExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
@@ -661,19 +729,26 @@
 		private final Assignment cOperandAssignment_1_4 = (Assignment)cGroup_1.eContents().get(4);
 		private final RuleCall cOperandExpressionParserRuleCall_1_4_0 = (RuleCall)cOperandAssignment_1_4.eContents().get(0);
 		
-		//conditionalExpression sew::WValueSpecification:
-		//	conditionalOrExpression ({expression::Expression.operand+=current} operator='?' operand+=Expression ':'
-		//	operand+=Expression)?;
+		//conditionalExpression returns sew::WValueSpecification
+		//: conditionalOrExpression
+		//    ( {expression::Expression.operand+=current}
+		//        operator='?' operand+=Expression ':' operand+=Expression
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//conditionalOrExpression ({expression::Expression.operand+=current} operator='?' operand+=Expression ':'
-		//operand+=Expression)?
+		//conditionalOrExpression
+		//   ( {expression::Expression.operand+=current}
+		//       operator='?' operand+=Expression ':' operand+=Expression
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//conditionalOrExpression
 		public RuleCall getConditionalOrExpressionParserRuleCall_0() { return cConditionalOrExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator='?' operand+=Expression ':' operand+=Expression)?
+		//( {expression::Expression.operand+=current}
+		//    operator='?' operand+=Expression ':' operand+=Expression
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
@@ -719,29 +794,38 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandConditionalAndExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//conditionalOrExpression sew::WValueSpecification:
-		//	conditionalAndExpression ({expression::Expression.operand+=current} operator=('||' | 'or')
-		//	operand+=conditionalAndExpression (('||' | 'or') operand+=conditionalAndExpression)*)?;
+		//conditionalOrExpression returns sew::WValueSpecification
+		//: conditionalAndExpression
+		//    ( {expression::Expression.operand+=current}
+		//        operator=( '||' | 'or' ) operand+=conditionalAndExpression
+		//        ( ( '||' | 'or' ) operand+=conditionalAndExpression )*
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//conditionalAndExpression ({expression::Expression.operand+=current} operator=('||' | 'or')
-		//operand+=conditionalAndExpression (('||' | 'or') operand+=conditionalAndExpression)*)?
+		//conditionalAndExpression
+		//   ( {expression::Expression.operand+=current}
+		//       operator=( '||' | 'or' ) operand+=conditionalAndExpression
+		//       ( ( '||' | 'or' ) operand+=conditionalAndExpression )*
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//conditionalAndExpression
 		public RuleCall getConditionalAndExpressionParserRuleCall_0() { return cConditionalAndExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator=('||' | 'or') operand+=conditionalAndExpression (('||' | 'or')
-		//operand+=conditionalAndExpression)*)?
+		//( {expression::Expression.operand+=current}
+		//    operator=( '||' | 'or' ) operand+=conditionalAndExpression
+		//    ( ( '||' | 'or' ) operand+=conditionalAndExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
 		public Action getExpressionOperandAction_1_0() { return cExpressionOperandAction_1_0; }
 		
-		//operator=('||' | 'or')
+		//operator=( '||' | 'or' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('||' | 'or')
+		//( '||' | 'or' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'||'
@@ -756,10 +840,10 @@
 		//conditionalAndExpression
 		public RuleCall getOperandConditionalAndExpressionParserRuleCall_1_2_0() { return cOperandConditionalAndExpressionParserRuleCall_1_2_0; }
 		
-		//(('||' | 'or') operand+=conditionalAndExpression)*
+		//( ( '||' | 'or' ) operand+=conditionalAndExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
-		//('||' | 'or')
+		//( '||' | 'or' )
 		public Alternatives getAlternatives_1_3_0() { return cAlternatives_1_3_0; }
 		
 		//'||'
@@ -793,29 +877,38 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandEqualityExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//conditionalAndExpression sew::WValueSpecification:
-		//	equalityExpression ({expression::Expression.operand+=current} operator=('&&' | 'and') operand+=equalityExpression
-		//	(('&&' | 'and') operand+=equalityExpression)*)?;
+		//conditionalAndExpression returns sew::WValueSpecification
+		//: equalityExpression
+		//    ( {expression::Expression.operand+=current}
+		//        operator=( '&&' | 'and' ) operand+=equalityExpression
+		//        ( ( '&&' | 'and' ) operand+=equalityExpression )*
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//equalityExpression ({expression::Expression.operand+=current} operator=('&&' | 'and') operand+=equalityExpression (('&&'
-		//| 'and') operand+=equalityExpression)*)?
+		//equalityExpression
+		//   ( {expression::Expression.operand+=current}
+		//       operator=( '&&' | 'and' ) operand+=equalityExpression
+		//       ( ( '&&' | 'and' ) operand+=equalityExpression )*
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//equalityExpression
 		public RuleCall getEqualityExpressionParserRuleCall_0() { return cEqualityExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator=('&&' | 'and') operand+=equalityExpression (('&&' | 'and')
-		//operand+=equalityExpression)*)?
+		//( {expression::Expression.operand+=current}
+		//    operator=( '&&' | 'and' ) operand+=equalityExpression
+		//    ( ( '&&' | 'and' ) operand+=equalityExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
 		public Action getExpressionOperandAction_1_0() { return cExpressionOperandAction_1_0; }
 		
-		//operator=('&&' | 'and')
+		//operator=( '&&' | 'and' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('&&' | 'and')
+		//( '&&' | 'and' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'&&'
@@ -830,10 +923,10 @@
 		//equalityExpression
 		public RuleCall getOperandEqualityExpressionParserRuleCall_1_2_0() { return cOperandEqualityExpressionParserRuleCall_1_2_0; }
 		
-		//(('&&' | 'and') operand+=equalityExpression)*
+		//( ( '&&' | 'and' ) operand+=equalityExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
-		//('&&' | 'and')
+		//( '&&' | 'and' )
 		public Alternatives getAlternatives_1_3_0() { return cAlternatives_1_3_0; }
 		
 		//'&&'
@@ -864,29 +957,38 @@
 		private final Assignment cOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
 		private final RuleCall cOperandRelationalExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandAssignment_1_2.eContents().get(0);
 		
-		//equalityExpression sew::WValueSpecification:
-		//	relationalExpression ({expression::Expression.operand+=current} operator=('==' | '!=' | '===' | '=!=' | '=/=')
-		//	operand+=relationalExpression)?;
+		//equalityExpression returns sew::WValueSpecification
+		//: relationalExpression
+		//    ( {expression::Expression.operand+=current}
+		//        operator=( '==' | '!=' | '===' | '=!=' | '=/=' )
+		//        operand+=relationalExpression
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//relationalExpression ({expression::Expression.operand+=current} operator=('==' | '!=' | '===' | '=!=' | '=/=')
-		//operand+=relationalExpression)?
+		//relationalExpression
+		//   ( {expression::Expression.operand+=current}
+		//       operator=( '==' | '!=' | '===' | '=!=' | '=/=' )
+		//       operand+=relationalExpression
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//relationalExpression
 		public RuleCall getRelationalExpressionParserRuleCall_0() { return cRelationalExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator=('==' | '!=' | '===' | '=!=' | '=/=')
-		//operand+=relationalExpression)?
+		//( {expression::Expression.operand+=current}
+		//    operator=( '==' | '!=' | '===' | '=!=' | '=/=' )
+		//    operand+=relationalExpression
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
 		public Action getExpressionOperandAction_1_0() { return cExpressionOperandAction_1_0; }
 		
-		//operator=('==' | '!=' | '===' | '=!=' | '=/=')
+		//operator=( '==' | '!=' | '===' | '=!=' | '=/=' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('==' | '!=' | '===' | '=!=' | '=/=')
+		//( '==' | '!=' | '===' | '=!=' | '=/=' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'=='
@@ -925,28 +1027,38 @@
 		private final Assignment cOperandAssignment_1_2 = (Assignment)cGroup_1.eContents().get(2);
 		private final RuleCall cOperandAdditiveExpressionParserRuleCall_1_2_0 = (RuleCall)cOperandAssignment_1_2.eContents().get(0);
 		
-		//relationalExpression sew::WValueSpecification:
-		//	additiveExpression ({expression::Expression.operand+=current} operator=('<' | '<=' | '>' | '>=')
-		//	operand+=additiveExpression)?;
+		//relationalExpression returns sew::WValueSpecification
+		//: additiveExpression
+		//    ( {expression::Expression.operand+=current}
+		//        operator=( '<' | '<=' | '>' | '>=' )
+		//        operand+=additiveExpression
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//additiveExpression ({expression::Expression.operand+=current} operator=('<' | '<=' | '>' | '>=')
-		//operand+=additiveExpression)?
+		//additiveExpression
+		//   ( {expression::Expression.operand+=current}
+		//       operator=( '<' | '<=' | '>' | '>=' )
+		//       operand+=additiveExpression
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//additiveExpression
 		public RuleCall getAdditiveExpressionParserRuleCall_0() { return cAdditiveExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator=('<' | '<=' | '>' | '>=') operand+=additiveExpression)?
+		//( {expression::Expression.operand+=current}
+		//    operator=( '<' | '<=' | '>' | '>=' )
+		//    operand+=additiveExpression
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
 		public Action getExpressionOperandAction_1_0() { return cExpressionOperandAction_1_0; }
 		
-		//operator=('<' | '<=' | '>' | '>=')
+		//operator=( '<' | '<=' | '>' | '>=' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('<' | '<=' | '>' | '>=')
+		//( '<' | '<=' | '>' | '>=' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'<'
@@ -982,20 +1094,38 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandMultiplicativeExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//additiveExpression sew::WValueSpecification:
-		//	multiplicativeExpression ({expression::Expression.operand+=current} operator='+' operand+=multiplicativeExpression
-		//	('+' operand+=multiplicativeExpression)*)?;
+		//additiveExpression returns sew::WValueSpecification
+		//: multiplicativeExpression
+		//    ( ( {expression::Expression.operand+=current}
+		//        operator='+' operand+=multiplicativeExpression
+		//        ( '+' operand+=multiplicativeExpression )* )
+		////    | ( {expression::Expression.operand+=current}
+		////        operator='-' operand+=multiplicativeExpression
+		////        ( '-' operand+=multiplicativeExpression )* )
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//multiplicativeExpression ({expression::Expression.operand+=current} operator='+' operand+=multiplicativeExpression ('+'
-		//operand+=multiplicativeExpression)*)?
+		// multiplicativeExpression
+		//    ( ( {expression::Expression.operand+=current}
+		//        operator='+' operand+=multiplicativeExpression
+		//        ( '+' operand+=multiplicativeExpression )* )
+		////    | ( {expression::Expression.operand+=current}
+		////        operator='-' operand+=multiplicativeExpression
+		////        ( '-' operand+=multiplicativeExpression )* )
+		//    )?
 		public Group getGroup() { return cGroup; }
 		
 		//multiplicativeExpression
 		public RuleCall getMultiplicativeExpressionParserRuleCall_0() { return cMultiplicativeExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator='+' operand+=multiplicativeExpression ('+'
-		//operand+=multiplicativeExpression)*)?
+		//    ( ( {expression::Expression.operand+=current}
+		//        operator='+' operand+=multiplicativeExpression
+		//        ( '+' operand+=multiplicativeExpression )* )
+		////    | ( {expression::Expression.operand+=current}
+		////        operator='-' operand+=multiplicativeExpression
+		////        ( '-' operand+=multiplicativeExpression )* )
+		//    )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{expression::Expression.operand+=current}
@@ -1013,7 +1143,7 @@
 		//multiplicativeExpression
 		public RuleCall getOperandMultiplicativeExpressionParserRuleCall_1_2_0() { return cOperandMultiplicativeExpressionParserRuleCall_1_2_0; }
 		
-		//('+' operand+=multiplicativeExpression)*
+		//( '+' operand+=multiplicativeExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'+'
@@ -1071,31 +1201,61 @@
 		private final Assignment cOperandAssignment_1_3_3_1 = (Assignment)cGroup_1_3_3.eContents().get(1);
 		private final RuleCall cOperandPrimaryExpressionParserRuleCall_1_3_3_1_0 = (RuleCall)cOperandAssignment_1_3_3_1.eContents().get(0);
 		
-		//multiplicativeExpression sew::WValueSpecification:
-		//	primaryExpression ({expression::Expression.operand+=current} operator='*' operand+=primaryExpression ('*'
-		//	operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='**' operand+=primaryExpression
-		//	('**' operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='/' operand+=primaryExpression
-		//	('/' operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='%' operand+=primaryExpression
-		//	('%' operand+=primaryExpression)*)?;
+		//multiplicativeExpression returns sew::WValueSpecification
+		//: primaryExpression
+		//    ( ( {expression::Expression.operand+=current}
+		//        operator='*' operand+=primaryExpression
+		//        ( '*' operand+=primaryExpression )* )
+		//    | ( {expression::Expression.operand+=current}
+		//        operator='**' operand+=primaryExpression
+		//        ( '**' operand+=primaryExpression )* )
+		//    | ( {expression::Expression.operand+=current}
+		//        operator='/' operand+=primaryExpression
+		//        ( '/' operand+=primaryExpression )* )
+		//    | ( {expression::Expression.operand+=current}
+		//        operator='%' operand+=primaryExpression
+		//        ( '%' operand+=primaryExpression )* )
+		//    )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//primaryExpression ({expression::Expression.operand+=current} operator='*' operand+=primaryExpression ('*'
-		//operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='**' operand+=primaryExpression ('**'
-		//operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='/' operand+=primaryExpression ('/'
-		//operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='%' operand+=primaryExpression ('%'
-		//operand+=primaryExpression)*)?
+		//primaryExpression
+		//   ( ( {expression::Expression.operand+=current}
+		//       operator='*' operand+=primaryExpression
+		//       ( '*' operand+=primaryExpression )* )
+		//   | ( {expression::Expression.operand+=current}
+		//       operator='**' operand+=primaryExpression
+		//       ( '**' operand+=primaryExpression )* )
+		//   | ( {expression::Expression.operand+=current}
+		//       operator='/' operand+=primaryExpression
+		//       ( '/' operand+=primaryExpression )* )
+		//   | ( {expression::Expression.operand+=current}
+		//       operator='%' operand+=primaryExpression
+		//       ( '%' operand+=primaryExpression )* )
+		//   )?
 		public Group getGroup() { return cGroup; }
 		
 		//primaryExpression
 		public RuleCall getPrimaryExpressionParserRuleCall_0() { return cPrimaryExpressionParserRuleCall_0; }
 		
-		//({expression::Expression.operand+=current} operator='*' operand+=primaryExpression ('*' operand+=primaryExpression)* |
-		//{expression::Expression.operand+=current} operator='**' operand+=primaryExpression ('**' operand+=primaryExpression)* |
-		//{expression::Expression.operand+=current} operator='/' operand+=primaryExpression ('/' operand+=primaryExpression)* |
-		//{expression::Expression.operand+=current} operator='%' operand+=primaryExpression ('%' operand+=primaryExpression)*)?
+		//( ( {expression::Expression.operand+=current}
+		//    operator='*' operand+=primaryExpression
+		//    ( '*' operand+=primaryExpression )* )
+		//| ( {expression::Expression.operand+=current}
+		//    operator='**' operand+=primaryExpression
+		//    ( '**' operand+=primaryExpression )* )
+		//| ( {expression::Expression.operand+=current}
+		//    operator='/' operand+=primaryExpression
+		//    ( '/' operand+=primaryExpression )* )
+		//| ( {expression::Expression.operand+=current}
+		//    operator='%' operand+=primaryExpression
+		//    ( '%' operand+=primaryExpression )* )
+		//)?
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//{expression::Expression.operand+=current} operator='*' operand+=primaryExpression ('*' operand+=primaryExpression)*
+		//( {expression::Expression.operand+=current}
+		//       operator='*' operand+=primaryExpression
+		//       ( '*' operand+=primaryExpression )* )
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//{expression::Expression.operand+=current}
@@ -1113,7 +1273,7 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_0_2_0() { return cOperandPrimaryExpressionParserRuleCall_1_0_2_0; }
 		
-		//('*' operand+=primaryExpression)*
+		//( '*' operand+=primaryExpression )*
 		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
 		
 		//'*'
@@ -1125,7 +1285,9 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_0_3_1_0() { return cOperandPrimaryExpressionParserRuleCall_1_0_3_1_0; }
 		
-		//{expression::Expression.operand+=current} operator='**' operand+=primaryExpression ('**' operand+=primaryExpression)*
+		//( {expression::Expression.operand+=current}
+		//       operator='**' operand+=primaryExpression
+		//       ( '**' operand+=primaryExpression )* )
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//{expression::Expression.operand+=current}
@@ -1143,7 +1305,7 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_1_2_0() { return cOperandPrimaryExpressionParserRuleCall_1_1_2_0; }
 		
-		//('**' operand+=primaryExpression)*
+		//( '**' operand+=primaryExpression )*
 		public Group getGroup_1_1_3() { return cGroup_1_1_3; }
 		
 		//'**'
@@ -1155,7 +1317,9 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_1_3_1_0() { return cOperandPrimaryExpressionParserRuleCall_1_1_3_1_0; }
 		
-		//{expression::Expression.operand+=current} operator='/' operand+=primaryExpression ('/' operand+=primaryExpression)*
+		//( {expression::Expression.operand+=current}
+		//       operator='/' operand+=primaryExpression
+		//       ( '/' operand+=primaryExpression )* )
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//{expression::Expression.operand+=current}
@@ -1173,7 +1337,7 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_2_2_0() { return cOperandPrimaryExpressionParserRuleCall_1_2_2_0; }
 		
-		//('/' operand+=primaryExpression)*
+		//( '/' operand+=primaryExpression )*
 		public Group getGroup_1_2_3() { return cGroup_1_2_3; }
 		
 		//'/'
@@ -1185,7 +1349,9 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_2_3_1_0() { return cOperandPrimaryExpressionParserRuleCall_1_2_3_1_0; }
 		
-		//{expression::Expression.operand+=current} operator='%' operand+=primaryExpression ('%' operand+=primaryExpression)*
+		//( {expression::Expression.operand+=current}
+		//       operator='%' operand+=primaryExpression
+		//       ( '%' operand+=primaryExpression )* )
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//{expression::Expression.operand+=current}
@@ -1203,7 +1369,7 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_3_2_0() { return cOperandPrimaryExpressionParserRuleCall_1_3_2_0; }
 		
-		//('%' operand+=primaryExpression)*
+		//( '%' operand+=primaryExpression )*
 		public Group getGroup_1_3_3() { return cGroup_1_3_3; }
 		
 		//'%'
@@ -1243,15 +1409,20 @@
 		private final Keyword cRightParenthesisKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
 		private final RuleCall cLiteralExpressionParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
 		
-		//primaryExpression sew::WValueSpecification:
-		//	'+' primaryExpression
-		//	| {expression::Expression} (operator='-' operand+=primaryExpression) | {expression::Expression} (operator=('!' |
-		//	'not') operand+=primaryExpression) | '(' Expression ')'
-		//	| LiteralExpression;
+		//primaryExpression returns sew::WValueSpecification
+		//: '+' primaryExpression
+		//| { expression::Expression }( operator='-' operand+=primaryExpression )
+		//| { expression::Expression }( operator=( '!' | 'not' ) operand+=primaryExpression )
+		//| '(' Expression ')'
+		//| LiteralExpression
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'+' primaryExpression | {expression::Expression} (operator='-' operand+=primaryExpression) | {expression::Expression}
-		//(operator=('!' | 'not') operand+=primaryExpression) | '(' Expression ')' | LiteralExpression
+		// '+' primaryExpression
+		//| { expression::Expression }( operator='-' operand+=primaryExpression )
+		//| { expression::Expression }( operator=( '!' | 'not' ) operand+=primaryExpression )
+		//| '(' Expression ')'
+		//| LiteralExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'+' primaryExpression
@@ -1263,13 +1434,13 @@
 		//primaryExpression
 		public RuleCall getPrimaryExpressionParserRuleCall_0_1() { return cPrimaryExpressionParserRuleCall_0_1; }
 		
-		//{expression::Expression} (operator='-' operand+=primaryExpression)
+		//{ expression::Expression }( operator='-' operand+=primaryExpression )
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{expression::Expression}
+		//{ expression::Expression }
 		public Action getExpressionAction_1_0() { return cExpressionAction_1_0; }
 		
-		//(operator='-' operand+=primaryExpression)
+		//( operator='-' operand+=primaryExpression )
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//operator='-'
@@ -1284,19 +1455,19 @@
 		//primaryExpression
 		public RuleCall getOperandPrimaryExpressionParserRuleCall_1_1_1_0() { return cOperandPrimaryExpressionParserRuleCall_1_1_1_0; }
 		
-		//{expression::Expression} (operator=('!' | 'not') operand+=primaryExpression)
+		//{ expression::Expression }( operator=( '!' | 'not' ) operand+=primaryExpression )
 		public Group getGroup_2() { return cGroup_2; }
 		
-		//{expression::Expression}
+		//{ expression::Expression }
 		public Action getExpressionAction_2_0() { return cExpressionAction_2_0; }
 		
-		//(operator=('!' | 'not') operand+=primaryExpression)
+		//( operator=( '!' | 'not' ) operand+=primaryExpression )
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
-		//operator=('!' | 'not')
+		//operator=( '!' | 'not' )
 		public Assignment getOperatorAssignment_2_1_0() { return cOperatorAssignment_2_1_0; }
 		
-		//('!' | 'not')
+		//( '!' | 'not' )
 		public Alternatives getOperatorAlternatives_2_1_0_0() { return cOperatorAlternatives_2_1_0_0; }
 		
 		//'!'
@@ -1341,24 +1512,34 @@
 		private final RuleCall cLiteralVariableReferenceParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
 		private final RuleCall cLiteralInstanceReferenceParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
 		
-		//LiteralExpression sew::WValueSpecification:
-		//	LiteralBooleanValue
-		//	| LiteralCharacterValue
-		//	| LiteralIntegerValue
-		//	| LiteralRationalValue
-		//	| LiteralFloatValue
-		//	//| LiteralRealValue
-		//	| LiteralStringValue
-		//	| LiteralNullValue
-		//	| LiteralArrayValue
-		//	| LiteralObjectReference
-		//	| LiteralVariableReference
-		//	| LiteralInstanceReference;
+		//LiteralExpression returns sew::WValueSpecification
+		//: LiteralBooleanValue
+		//| LiteralCharacterValue
+		//| LiteralIntegerValue
+		//| LiteralRationalValue
+		//| LiteralFloatValue
+		////| LiteralRealValue
+		//| LiteralStringValue
+		//| LiteralNullValue
+		//| LiteralArrayValue
+		//| LiteralObjectReference
+		//| LiteralVariableReference
+		//| LiteralInstanceReference
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralBooleanValue | LiteralCharacterValue | LiteralIntegerValue | LiteralRationalValue | LiteralFloatValue //| LiteralRealValue
-		//| LiteralStringValue | LiteralNullValue | LiteralArrayValue | LiteralObjectReference | LiteralVariableReference |
-		//LiteralInstanceReference
+		// LiteralBooleanValue
+		//| LiteralCharacterValue
+		//| LiteralIntegerValue
+		//| LiteralRationalValue
+		//| LiteralFloatValue
+		////| LiteralRealValue
+		//| LiteralStringValue
+		//| LiteralNullValue
+		//| LiteralArrayValue
+		//| LiteralObjectReference
+		//| LiteralVariableReference
+		//| LiteralInstanceReference
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralBooleanValue
@@ -1411,13 +1592,22 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Array of Literal Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralArrayValue expression::LiteralArrayValue:
-		//	{expression::LiteralArrayValue}
-		//	'[' (values+=ValueSpecification (',' values+=ValueSpecification)*)?
-		//	']';
+		//LiteralArrayValue  returns expression::LiteralArrayValue
+		//: {expression::LiteralArrayValue}
+		//    '['
+		//        ( values+=ValueSpecification
+		//            ( ',' values+=ValueSpecification )*
+		//        )?
+		//    ']'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralArrayValue} '[' (values+=ValueSpecification (',' values+=ValueSpecification)*)? ']'
+		//{expression::LiteralArrayValue}
+		//   '['
+		//       ( values+=ValueSpecification
+		//           ( ',' values+=ValueSpecification )*
+		//       )?
+		//   ']'
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralArrayValue}
@@ -1426,7 +1616,9 @@
 		//'['
 		public Keyword getLeftSquareBracketKeyword_1() { return cLeftSquareBracketKeyword_1; }
 		
-		//(values+=ValueSpecification (',' values+=ValueSpecification)*)?
+		//( values+=ValueSpecification
+		//    ( ',' values+=ValueSpecification )*
+		//)?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//values+=ValueSpecification
@@ -1435,7 +1627,7 @@
 		//ValueSpecification
 		public RuleCall getValuesValueSpecificationParserRuleCall_2_0_0() { return cValuesValueSpecificationParserRuleCall_2_0_0; }
 		
-		//(',' values+=ValueSpecification)*
+		//( ',' values+=ValueSpecification )*
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//','
@@ -1464,17 +1656,18 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Object Reference Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralObjectReference expression::LiteralObjectReference:
-		//	'&'? (object=[sew::WObject|UFI] | symbol=UFI);
+		//LiteralObjectReference returns expression::LiteralObjectReference
+		//: ( '&' )? ( object=[sew::WObject|UFI] | symbol=UFI )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'&'? (object=[sew::WObject|UFI] | symbol=UFI)
+		//( '&' )? ( object=[sew::WObject|UFI] | symbol=UFI )
 		public Group getGroup() { return cGroup; }
 		
-		//'&'?
+		//( '&' )?
 		public Keyword getAmpersandKeyword_0() { return cAmpersandKeyword_0; }
 		
-		//(object=[sew::WObject|UFI] | symbol=UFI)
+		//( object=[sew::WObject|UFI] | symbol=UFI )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//object=[sew::WObject|UFI]
@@ -1500,8 +1693,9 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralBooleanValue expression::LiteralBooleanValue:
-		//	value=EBoolean;
+		//LiteralBooleanValue  returns expression::LiteralBooleanValue
+		//: value=EBoolean
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=EBoolean
@@ -1515,8 +1709,9 @@
 		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cValueECharParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//LiteralCharacterValue expression::LiteralCharacterValue:
-		//	value=EChar;
+		//LiteralCharacterValue  returns expression::LiteralCharacterValue
+		//: value=EChar
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=EChar
@@ -1530,8 +1725,9 @@
 		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cValueELongParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//LiteralIntegerValue expression::LiteralIntegerValue:
-		//	value=ELong;
+		//LiteralIntegerValue  returns expression::LiteralIntegerValue
+		//: value=ELong
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=ELong
@@ -1549,8 +1745,9 @@
 		private final Assignment cDenominatorAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cDenominatorELongParserRuleCall_2_0 = (RuleCall)cDenominatorAssignment_2.eContents().get(0);
 		
-		//LiteralRationalValue expression::LiteralRationalValue:
-		//	numerator=ELong '/' denominator=ELong;
+		//LiteralRationalValue  returns expression::LiteralRationalValue
+		//: numerator=ELong '/' denominator=ELong
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//numerator=ELong '/' denominator=ELong
@@ -1576,8 +1773,9 @@
 		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cValueEDoubleParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//LiteralFloatValue expression::LiteralFloatValue:
-		//	value=EDouble;
+		//LiteralFloatValue  returns expression::LiteralFloatValue
+		//: value=EDouble
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=EDouble
@@ -1591,8 +1789,9 @@
 		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cValueEBigDecimalParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//LiteralRealValue expression::LiteralRealValue:
-		//	value=EBigDecimal;
+		//LiteralRealValue  returns expression::LiteralRealValue
+		//: value=EBigDecimal
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=EBigDecimal
@@ -1606,8 +1805,9 @@
 		private final Assignment cValueAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cValueEStringParserRuleCall_0 = (RuleCall)cValueAssignment.eContents().get(0);
 		
-		//LiteralStringValue expression::LiteralStringValue:
-		//	value=EString;
+		//LiteralStringValue  returns expression::LiteralStringValue
+		//: value=EString
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//value=EString
@@ -1627,12 +1827,14 @@
 		private final RuleCall cTypeXIDParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//LiteralNullValue expression::LiteralNullValue:
-		//	{expression::LiteralNullValue}
-		//	'null' ('<' type=XID '>')?;
+		//LiteralNullValue  returns expression::LiteralNullValue
+		//: {expression::LiteralNullValue}
+		//    'null' ( '<' type=XID '>' )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralNullValue} 'null' ('<' type=XID '>')?
+		//{expression::LiteralNullValue}
+		//   'null' ( '<' type=XID '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralNullValue}
@@ -1641,7 +1843,7 @@
 		//'null'
 		public Keyword getNullKeyword_1() { return cNullKeyword_1; }
 		
-		//('<' type=XID '>')?
+		//( '<' type=XID '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -1662,12 +1864,14 @@
 		private final RuleCall cLiteralTimeVariableParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cLiteralTimeDeltaVariableParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//LiteralVariableReference expression::LiteralReferenceValue:
-		//	LiteralTimeVariable
-		//	| LiteralTimeDeltaVariable;
+		//LiteralVariableReference returns expression::LiteralReferenceValue
+		//: LiteralTimeVariable
+		//| LiteralTimeDeltaVariable
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralTimeVariable | LiteralTimeDeltaVariable
+		// LiteralTimeVariable
+		//| LiteralTimeDeltaVariable
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralTimeVariable
@@ -1683,17 +1887,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolTimeKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralTimeVariable expression::LiteralTimeVariable:
-		//	{expression::LiteralTimeVariable} symbol='$time';
+		//LiteralTimeVariable returns expression::LiteralTimeVariable
+		//    : {expression::LiteralTimeVariable} ( symbol='$time' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralTimeVariable} symbol='$time'
+		//{expression::LiteralTimeVariable} ( symbol='$time' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralTimeVariable}
 		public Action getLiteralTimeVariableAction_0() { return cLiteralTimeVariableAction_0; }
 		
-		//symbol='$time'
+		//( symbol='$time' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$time'
@@ -1706,17 +1911,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolDeltaKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralTimeDeltaVariable expression::LiteralTimeDeltaVariable:
-		//	{expression::LiteralTimeDeltaVariable} symbol='$delta';
+		//LiteralTimeDeltaVariable returns expression::LiteralTimeDeltaVariable
+		//    : {expression::LiteralTimeDeltaVariable} ( symbol='$delta' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralTimeDeltaVariable} symbol='$delta'
+		//{expression::LiteralTimeDeltaVariable} ( symbol='$delta' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralTimeDeltaVariable}
 		public Action getLiteralTimeDeltaVariableAction_0() { return cLiteralTimeDeltaVariableAction_0; }
 		
-		//symbol='$delta'
+		//( symbol='$delta' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$delta'
@@ -1732,17 +1938,22 @@
 		private final RuleCall cLiteralSystemInstanceParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
 		private final RuleCall cLiteralEnvInstanceParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
 		
-		//LiteralInstanceReference expression::LiteralReferenceValue:
-		//	LiteralThisInstance
-		//	| LiteralSelfInstance
-		//	| LiteralParentInstance
-		//	| LiteralSuperInstance
-		//	| LiteralSystemInstance
-		//	| LiteralEnvInstance;
+		//LiteralInstanceReference returns expression::LiteralReferenceValue
+		//: LiteralThisInstance
+		//| LiteralSelfInstance
+		//| LiteralParentInstance
+		//| LiteralSuperInstance
+		//| LiteralSystemInstance
+		//| LiteralEnvInstance
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralThisInstance | LiteralSelfInstance | LiteralParentInstance | LiteralSuperInstance | LiteralSystemInstance |
-		//LiteralEnvInstance
+		// LiteralThisInstance
+		//| LiteralSelfInstance
+		//| LiteralParentInstance
+		//| LiteralSuperInstance
+		//| LiteralSystemInstance
+		//| LiteralEnvInstance
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralThisInstance
@@ -1770,17 +1981,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolThisKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralThisInstance expression::LiteralThisInstance:
-		//	{expression::LiteralThisInstance} symbol='$this';
+		//LiteralThisInstance returns expression::LiteralThisInstance
+		//: {expression::LiteralThisInstance} ( symbol='$this' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralThisInstance} symbol='$this'
+		//{expression::LiteralThisInstance} ( symbol='$this' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralThisInstance}
 		public Action getLiteralThisInstanceAction_0() { return cLiteralThisInstanceAction_0; }
 		
-		//symbol='$this'
+		//( symbol='$this' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$this'
@@ -1793,17 +2005,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolSelfKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralSelfInstance expression::LiteralSelfInstance:
-		//	{expression::LiteralSelfInstance} symbol='$self';
+		//LiteralSelfInstance returns expression::LiteralSelfInstance
+		//: {expression::LiteralSelfInstance} ( symbol='$self' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralSelfInstance} symbol='$self'
+		//{expression::LiteralSelfInstance} ( symbol='$self' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralSelfInstance}
 		public Action getLiteralSelfInstanceAction_0() { return cLiteralSelfInstanceAction_0; }
 		
-		//symbol='$self'
+		//( symbol='$self' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$self'
@@ -1816,17 +2029,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolParentKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralParentInstance expression::LiteralParentInstance:
-		//	{expression::LiteralParentInstance} symbol='$parent';
+		//LiteralParentInstance returns expression::LiteralParentInstance
+		//: {expression::LiteralParentInstance} ( symbol='$parent' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralParentInstance} symbol='$parent'
+		//{expression::LiteralParentInstance} ( symbol='$parent' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralParentInstance}
 		public Action getLiteralParentInstanceAction_0() { return cLiteralParentInstanceAction_0; }
 		
-		//symbol='$parent'
+		//( symbol='$parent' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$parent'
@@ -1839,17 +2053,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolSuperKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralSuperInstance expression::LiteralSuperInstance:
-		//	{expression::LiteralSuperInstance} symbol='$super';
+		//LiteralSuperInstance returns expression::LiteralSuperInstance
+		//: {expression::LiteralSuperInstance} ( symbol='$super' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralSuperInstance} symbol='$super'
+		//{expression::LiteralSuperInstance} ( symbol='$super' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralSuperInstance}
 		public Action getLiteralSuperInstanceAction_0() { return cLiteralSuperInstanceAction_0; }
 		
-		//symbol='$super'
+		//( symbol='$super' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$super'
@@ -1862,17 +2077,18 @@
 		private final Assignment cSymbolAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final Keyword cSymbolSystemKeyword_1_0 = (Keyword)cSymbolAssignment_1.eContents().get(0);
 		
-		//LiteralSystemInstance expression::LiteralSystemInstance:
-		//	{expression::LiteralSystemInstance} symbol='$system';
+		//LiteralSystemInstance returns expression::LiteralSystemInstance
+		//: {expression::LiteralSystemInstance} ( symbol='$system' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralSystemInstance} symbol='$system'
+		//{expression::LiteralSystemInstance} ( symbol='$system' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralSystemInstance}
 		public Action getLiteralSystemInstanceAction_0() { return cLiteralSystemInstanceAction_0; }
 		
-		//symbol='$system'
+		//( symbol='$system' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
 		//'$system'
@@ -1887,20 +2103,21 @@
 		private final Keyword cSymbolEnvKeyword_1_0_0 = (Keyword)cSymbolAlternatives_1_0.eContents().get(0);
 		private final Keyword cSymbolEnvKeyword_1_0_1 = (Keyword)cSymbolAlternatives_1_0.eContents().get(1);
 		
-		//LiteralEnvInstance expression::LiteralEnvInstance:
-		//	{expression::LiteralEnvInstance} symbol=('$env' | 'env');
+		//LiteralEnvInstance returns expression::LiteralEnvInstance
+		//: {expression::LiteralEnvInstance} symbol=( '$env' | 'env' )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::LiteralEnvInstance} symbol=('$env' | 'env')
+		//{expression::LiteralEnvInstance} symbol=( '$env' | 'env' )
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::LiteralEnvInstance}
 		public Action getLiteralEnvInstanceAction_0() { return cLiteralEnvInstanceAction_0; }
 		
-		//symbol=('$env' | 'env')
+		//symbol=( '$env' | 'env' )
 		public Assignment getSymbolAssignment_1() { return cSymbolAssignment_1; }
 		
-		//('$env' | 'env')
+		//( '$env' | 'env' )
 		public Alternatives getSymbolAlternatives_1_0() { return cSymbolAlternatives_1_0; }
 		
 		//'$env'
@@ -1918,12 +2135,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Terminal Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//EBoolean ecore::EBoolean:
-		//	'true'
-		//	| 'false';
+		//EBoolean returns ecore::EBoolean
+		//: 'true'
+		//| 'false'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'true' | 'false'
+		// 'true'
+		//| 'false'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'true'
@@ -1936,8 +2155,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.sew.xtext.SEW.EChar");
 		private final RuleCall cCHARACTERTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//EChar ecore::EChar:
-		//	CHARACTER;
+		//EChar returns ecore::EChar
+		//: CHARACTER
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//CHARACTER
@@ -1949,8 +2169,8 @@
 		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
 		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
 		
-		//ELong ecore::ELong:
-		//	'-'? INT;
+		//ELong returns ecore::ELong:
+		//    '-'? INT;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'-'? INT
@@ -1970,8 +2190,8 @@
 		private final Keyword cFullStopKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		private final RuleCall cINTTerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
 		
-		//EDouble ecore::EDouble:
-		//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+		//EDouble returns ecore::EDouble
+		//: '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
 		//;
 		@Override public ParserRule getRule() { return rule; }
 		
@@ -1997,8 +2217,9 @@
 		private final Keyword cFullStopKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		private final RuleCall cINTTerminalRuleCall_2 = (RuleCall)cGroup.eContents().get(2);
 		
-		//EBigDecimal ecore::EBigDecimal:
-		//	INT? '.' INT;
+		//EBigDecimal returns ecore::EBigDecimal
+		//: INT? '.' INT
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//INT? '.' INT
@@ -2017,8 +2238,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.sew.xtext.SEW.EString");
 		private final RuleCall cSTRINGTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//EString:
-		//	STRING;
+		//EString returns ecore::EString
+		//: STRING
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//STRING
@@ -2037,13 +2259,16 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// @DEPRECATED Diversity Configuration Specification
 		//////////////////////////////////////////////////////////////////////////////////
-		//DeprecatedReservedWord:
-		//	'form' | 'endform'
-		//	| 'prototype' | 'endprototype'
-		//	| 'section' | 'endsection';
+		//DeprecatedReservedWord
+		//: 'form'      | 'endform'
+		//| 'prototype' | 'endprototype'
+		//| 'section'   | 'endsection'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'form' | 'endform' | 'prototype' | 'endprototype' | 'section' | 'endsection'
+		// 'form'      | 'endform'
+		//| 'prototype' | 'endprototype'
+		//| 'section'   | 'endsection'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'form'
@@ -2098,25 +2323,37 @@
 		private final RuleCall cElementDeprecatedPropertyParserRuleCall_1_8_0 = (RuleCall)cElementAssignment_1_8.eContents().get(0);
 		private final Keyword cEndprototypeKeyword_1_9 = (Keyword)cGroup_1.eContents().get(9);
 		
-		//DeprecatedObject sew::WObject:
-		//	{sew::WObject}
-		//	'form'
-		//	name=UFI description=EString? 'as' '&'? type=UFI 'is'
-		//	element+=DeprecatedProperty*
-		//	'endform'
-		//	| {sew::WObject}
-		//	'prototype'
-		//	name=UFI description=EString? 'as' '&'? type=UFI 'is'
-		//	element+=DeprecatedProperty*
-		//	'endprototype';
+		//DeprecatedObject returns sew::WObject
+		//: {sew::WObject}
+		//    'form'
+		//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//        ( element+=DeprecatedProperty )*
+		//    'endform'
+		//| {sew::WObject}
+		//    'prototype'
+		//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//        ( element+=DeprecatedProperty )*
+		//    'endprototype'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::WObject} 'form' name=UFI description=EString? 'as' '&'? type=UFI 'is' element+=DeprecatedProperty* 'endform' |
-		//{sew::WObject} 'prototype' name=UFI description=EString? 'as' '&'? type=UFI 'is' element+=DeprecatedProperty*
-		//'endprototype'
+		// {sew::WObject}
+		//    'form'
+		//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//        ( element+=DeprecatedProperty )*
+		//    'endform'
+		//| {sew::WObject}
+		//    'prototype'
+		//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//        ( element+=DeprecatedProperty )*
+		//    'endprototype'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{sew::WObject} 'form' name=UFI description=EString? 'as' '&'? type=UFI 'is' element+=DeprecatedProperty* 'endform'
+		//{sew::WObject}
+		//   'form'
+		//       name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//       ( element+=DeprecatedProperty )*
+		//   'endform'
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{sew::WObject}
@@ -2131,7 +2368,7 @@
 		//UFI
 		public RuleCall getNameUFIParserRuleCall_0_2_0() { return cNameUFIParserRuleCall_0_2_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_0_3() { return cDescriptionAssignment_0_3; }
 		
 		//EString
@@ -2140,7 +2377,7 @@
 		//'as'
 		public Keyword getAsKeyword_0_4() { return cAsKeyword_0_4; }
 		
-		//'&'?
+		//( '&' )?
 		public Keyword getAmpersandKeyword_0_5() { return cAmpersandKeyword_0_5; }
 		
 		//type=UFI
@@ -2152,7 +2389,7 @@
 		//'is'
 		public Keyword getIsKeyword_0_7() { return cIsKeyword_0_7; }
 		
-		//element+=DeprecatedProperty*
+		//( element+=DeprecatedProperty )*
 		public Assignment getElementAssignment_0_8() { return cElementAssignment_0_8; }
 		
 		//DeprecatedProperty
@@ -2161,8 +2398,11 @@
 		//'endform'
 		public Keyword getEndformKeyword_0_9() { return cEndformKeyword_0_9; }
 		
-		//{sew::WObject} 'prototype' name=UFI description=EString? 'as' '&'? type=UFI 'is' element+=DeprecatedProperty*
-		//'endprototype'
+		//{sew::WObject}
+		//   'prototype'
+		//       name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+		//       ( element+=DeprecatedProperty )*
+		//   'endprototype'
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{sew::WObject}
@@ -2177,7 +2417,7 @@
 		//UFI
 		public RuleCall getNameUFIParserRuleCall_1_2_0() { return cNameUFIParserRuleCall_1_2_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_1_3() { return cDescriptionAssignment_1_3; }
 		
 		//EString
@@ -2186,7 +2426,7 @@
 		//'as'
 		public Keyword getAsKeyword_1_4() { return cAsKeyword_1_4; }
 		
-		//'&'?
+		//( '&' )?
 		public Keyword getAmpersandKeyword_1_5() { return cAmpersandKeyword_1_5; }
 		
 		//type=UFI
@@ -2198,7 +2438,7 @@
 		//'is'
 		public Keyword getIsKeyword_1_7() { return cIsKeyword_1_7; }
 		
-		//element+=DeprecatedProperty*
+		//( element+=DeprecatedProperty )*
 		public Assignment getElementAssignment_1_8() { return cElementAssignment_1_8; }
 		
 		//DeprecatedProperty
@@ -2213,12 +2453,14 @@
 		private final RuleCall cDeprecatedSectionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cDeprecatedAttributeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//DeprecatedProperty sew::WProperty:
-		//	DeprecatedSection
-		//	| DeprecatedAttribute;
+		//DeprecatedProperty returns sew::WProperty
+		//: DeprecatedSection
+		//| DeprecatedAttribute
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//DeprecatedSection | DeprecatedAttribute
+		// DeprecatedSection
+		//| DeprecatedAttribute
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//DeprecatedSection
@@ -2264,24 +2506,35 @@
 		private final RuleCall cElementDeprecatedObjectParserRuleCall_1_2_1_1_0_1 = (RuleCall)cElementAlternatives_1_2_1_1_0.eContents().get(1);
 		private final RuleCall cElementObjectParserRuleCall_1_2_1_1_0_2 = (RuleCall)cElementAlternatives_1_2_1_1_0.eContents().get(2);
 		
-		//DeprecatedSection sew::WSection:
-		//	{sew::WSection}
-		//	'section' name=XID
-		//	//		( element+=( Object | Attribute  ) )*
-		//	element+=(DeprecatedAttribute | DeprecatedObject | Object)*
-		//	'endsection' XID?
-		//	| name=XID description=EString? ('[' element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']'
-		//	| ':' element+=(DeprecatedAttribute | DeprecatedObject | Object)*);
+		//DeprecatedSection returns sew::WSection
+		//: {sew::WSection}
+		//    'section'  name=XID
+		////        ( element+=( Object | Attribute  ) )*
+		//        ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//    'endsection'  ( XID )?
+		//| name=XID  ( description=EString )?
+		//    ( '[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
+		//    | ':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//    )
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::WSection} 'section' name=XID //		( element+=( Object | Attribute  ) )*
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)* 'endsection' XID? | name=XID description=EString? ('['
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']' | ':' element+=(DeprecatedAttribute | DeprecatedObject
-		//| Object)*)
+		// {sew::WSection}
+		//    'section'  name=XID
+		////        ( element+=( Object | Attribute  ) )*
+		//        ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//    'endsection'  ( XID )?
+		//| name=XID  ( description=EString )?
+		//    ( '[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
+		//    | ':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//    )
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{sew::WSection} 'section' name=XID //		( element+=( Object | Attribute  ) )*
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)* 'endsection' XID?
+		// {sew::WSection}
+		//    'section'  name=XID
+		////        ( element+=( Object | Attribute  ) )*
+		//        ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//    'endsection'  ( XID )?
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{sew::WSection}
@@ -2296,11 +2549,11 @@
 		//XID
 		public RuleCall getNameXIDParserRuleCall_0_2_0() { return cNameXIDParserRuleCall_0_2_0; }
 		
-		////		( element+=( Object | Attribute  ) )*
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)*
+		////        ( element+=( Object | Attribute  ) )*
+		//        ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
 		public Assignment getElementAssignment_0_3() { return cElementAssignment_0_3; }
 		
-		//(DeprecatedAttribute | DeprecatedObject | Object)
+		//( DeprecatedAttribute | DeprecatedObject | Object )
 		public Alternatives getElementAlternatives_0_3_0() { return cElementAlternatives_0_3_0; }
 		
 		//DeprecatedAttribute
@@ -2315,11 +2568,13 @@
 		//'endsection'
 		public Keyword getEndsectionKeyword_0_4() { return cEndsectionKeyword_0_4; }
 		
-		//XID?
+		//( XID )?
 		public RuleCall getXIDParserRuleCall_0_5() { return cXIDParserRuleCall_0_5; }
 		
-		//name=XID description=EString? ('[' element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']' | ':'
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)*)
+		//name=XID  ( description=EString )?
+		//   ( '[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
+		//   | ':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//   )
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//name=XID
@@ -2328,26 +2583,27 @@
 		//XID
 		public RuleCall getNameXIDParserRuleCall_1_0_0() { return cNameXIDParserRuleCall_1_0_0; }
 		
-		//description=EString?
+		//( description=EString )?
 		public Assignment getDescriptionAssignment_1_1() { return cDescriptionAssignment_1_1; }
 		
 		//EString
 		public RuleCall getDescriptionEStringParserRuleCall_1_1_0() { return cDescriptionEStringParserRuleCall_1_1_0; }
 		
-		//('[' element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']' | ':' element+=(DeprecatedAttribute |
-		//DeprecatedObject | Object)*)
+		//( '[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
+		//| ':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+		//)
 		public Alternatives getAlternatives_1_2() { return cAlternatives_1_2; }
 		
-		//'[' element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']'
+		//'[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
 		public Group getGroup_1_2_0() { return cGroup_1_2_0; }
 		
 		//'['
 		public Keyword getLeftSquareBracketKeyword_1_2_0_0() { return cLeftSquareBracketKeyword_1_2_0_0; }
 		
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)*
+		//( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
 		public Assignment getElementAssignment_1_2_0_1() { return cElementAssignment_1_2_0_1; }
 		
-		//(DeprecatedAttribute | DeprecatedObject | Object)
+		//( DeprecatedAttribute | DeprecatedObject | Object )
 		public Alternatives getElementAlternatives_1_2_0_1_0() { return cElementAlternatives_1_2_0_1_0; }
 		
 		//DeprecatedAttribute
@@ -2362,16 +2618,16 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_1_2_0_2() { return cRightSquareBracketKeyword_1_2_0_2; }
 		
-		//':' element+=(DeprecatedAttribute | DeprecatedObject | Object)*
+		//':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
 		public Group getGroup_1_2_1() { return cGroup_1_2_1; }
 		
 		//':'
 		public Keyword getColonKeyword_1_2_1_0() { return cColonKeyword_1_2_1_0; }
 		
-		//element+=(DeprecatedAttribute | DeprecatedObject | Object)*
+		//( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
 		public Assignment getElementAssignment_1_2_1_1() { return cElementAssignment_1_2_1_1; }
 		
-		//(DeprecatedAttribute | DeprecatedObject | Object)
+		//( DeprecatedAttribute | DeprecatedObject | Object )
 		public Alternatives getElementAlternatives_1_2_1_1_0() { return cElementAlternatives_1_2_1_1_0; }
 		
 		//DeprecatedAttribute
@@ -2394,11 +2650,14 @@
 		private final RuleCall cValueValueSpecificationParserRuleCall_3_0 = (RuleCall)cValueAssignment_3.eContents().get(0);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//DeprecatedAttribute sew::WAttribute:
-		//	{sew::WAttribute} name=DeprecatedAttributeID '=' value=ValueSpecification ';'?;
+		//DeprecatedAttribute returns sew::WAttribute
+		//: {sew::WAttribute}
+		//    name=DeprecatedAttributeID  '='  value=ValueSpecification  ( ';' )?
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{sew::WAttribute} name=DeprecatedAttributeID '=' value=ValueSpecification ';'?
+		//{sew::WAttribute}
+		//   name=DeprecatedAttributeID  '='  value=ValueSpecification  ( ';' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{sew::WAttribute}
@@ -2419,7 +2678,7 @@
 		//ValueSpecification
 		public RuleCall getValueValueSpecificationParserRuleCall_3_0() { return cValueValueSpecificationParserRuleCall_3_0; }
 		
-		//';'?
+		//( ';' )?
 		public Keyword getSemicolonKeyword_4() { return cSemicolonKeyword_4; }
 	}
 	public class DeprecatedAttributeIDElements extends AbstractParserRuleElementFinder {
@@ -2428,12 +2687,14 @@
 		private final RuleCall cXIDParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cAT_IDENTIFIERTerminalRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//DeprecatedAttributeID:
-		//	XID
-		//	| AT_IDENTIFIER;
+		//DeprecatedAttributeID
+		//: XID
+		//| AT_IDENTIFIER
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//XID | AT_IDENTIFIER
+		// XID
+		//| AT_IDENTIFIER
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//XID
@@ -2455,14 +2716,20 @@
 		private final RuleCall cOperandValueSpecificationParserRuleCall_3_0 = (RuleCall)cOperandAssignment_3.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//DeprecatedExpression sew::WValueSpecification:
-		//	{expression::Expression}
-		//	'${'
-		//	operator=('|;|' | '|i|') operand+=ValueSpecification*
-		//	'}';
+		//DeprecatedExpression returns sew::WValueSpecification
+		//: {expression::Expression}
+		//    '${'
+		//        operator=( '|;|' | '|i|' )
+		//        ( operand+=ValueSpecification )*
+		//    '}'
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{expression::Expression} '${' operator=('|;|' | '|i|') operand+=ValueSpecification* '}'
+		//{expression::Expression}
+		//   '${'
+		//       operator=( '|;|' | '|i|' )
+		//       ( operand+=ValueSpecification )*
+		//   '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{expression::Expression}
@@ -2471,10 +2738,10 @@
 		//'${'
 		public Keyword getDollarSignLeftCurlyBracketKeyword_1() { return cDollarSignLeftCurlyBracketKeyword_1; }
 		
-		//operator=('|;|' | '|i|')
+		//operator=( '|;|' | '|i|' )
 		public Assignment getOperatorAssignment_2() { return cOperatorAssignment_2; }
 		
-		//('|;|' | '|i|')
+		//( '|;|' | '|i|' )
 		public Alternatives getOperatorAlternatives_2_0() { return cOperatorAlternatives_2_0; }
 		
 		//'|;|'
@@ -2483,7 +2750,7 @@
 		//'|i|'
 		public Keyword getOperatorIKeyword_2_0_1() { return cOperatorIKeyword_2_0_1; }
 		
-		//operand+=ValueSpecification*
+		//( operand+=ValueSpecification )*
 		public Assignment getOperandAssignment_3() { return cOperandAssignment_3; }
 		
 		//ValueSpecification
@@ -2648,15 +2915,20 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Symbolic Execution Workflow Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//Workflow sew::SEWorkflow:
-	//	{sew::SEWorkflow} Prolog? (type=('workflow' | 'symbex-workflow') name=UFI? description=EString?
-	//	'{'
-	//	element+=(Object | Property)*
-	//	'}'
-	//	// for Xtext Embeded Editor
-	//	| element+=(Object | Property)*
-	//	// Deprecated Object as FAVM Workflow
-	//	| element+=DeprecatedObject);
+	//Workflow returns sew::SEWorkflow
+	//: {sew::SEWorkflow}
+	//    ( Prolog )?
+	//    ( type=( 'workflow' | 'symbex-workflow' )
+	//        ( name=UFI )?  ( description=EString )?
+	//        '{'
+	//            ( element+=( Object | Property ) )*
+	//        '}'
+	//    // for Xtext Embeded Editor
+	//    | ( element+=( Object | Property ) )*
+	//    // Deprecated Object as FAVM Workflow
+	//    | element+=DeprecatedObject
+	//    )
+	//;
 	public WorkflowElements getWorkflowAccess() {
 		return pWorkflow;
 	}
@@ -2665,8 +2937,11 @@
 		return getWorkflowAccess().getRule();
 	}
 	
-	//Prolog:
-	//	('@sew' | '@favm') '<' ('workflow' | 'sew') (',' 'version:'? EDouble | UFI | EString)? '>:';
+	//Prolog
+	//: ( '@sew' | '@favm' ) '<'
+	//    ( 'workflow' | 'sew' )
+	//    ( ',' ( 'version:' )?  EDouble | UFI | EString )? '>:'
+	//;
 	public PrologElements getPrologAccess() {
 		return pProlog;
 	}
@@ -2678,10 +2953,11 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// [ Qualified ] Identifier
 	//////////////////////////////////////////////////////////////////////////////////
-	//ReservedWord:
-	//	'workflow' | 'sew'
-	//	// Deprecated
-	//	| DeprecatedReservedWord;
+	// ReservedWord
+	//: 'workflow' | 'sew'
+	//// Deprecated
+	//| DeprecatedReservedWord
+	//;
 	public ReservedWordElements getReservedWordAccess() {
 		return pReservedWord;
 	}
@@ -2690,20 +2966,23 @@
 		return getReservedWordAccess().getRule();
 	}
 	
-	//terminal XIDENDIFIER:
-	//	('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '#')*;
+	//terminal XIDENDIFIER
+	//: ('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'#')*
+	//;
 	public TerminalRule getXIDENDIFIERRule() {
 		return tXIDENDIFIER;
 	}
 	
-	//terminal AT_IDENTIFIER:
-	//	'@' XIDENDIFIER;
+	//terminal AT_IDENTIFIER
+	//: '@' XIDENDIFIER
+	//;
 	public TerminalRule getAT_IDENTIFIERRule() {
 		return tAT_IDENTIFIER;
 	}
 	
-	//XID:
-	//	ReservedWord | XIDENDIFIER;
+	//XID returns ecore::EString
+	//: ReservedWord | XIDENDIFIER
+	//;
 	public XIDElements getXIDAccess() {
 		return pXID;
 	}
@@ -2712,8 +2991,9 @@
 		return getXIDAccess().getRule();
 	}
 	
-	//UFI:
-	//	XID (('::' | '.') XID)*;
+	//UFI returns ecore::EString
+	//: XID ( ( '::' | '.' ) XID )*
+	//;
 	public UFIElements getUFIAccess() {
 		return pUFI;
 	}
@@ -2725,15 +3005,18 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Object Configuration Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//Object sew::WObject:
-	//	{sew::WObject} type=UFI name=UFI? description=EString?
-	//	'{'
-	//	element+=(Object | Property)*
-	//	'}'
-	//	| {sew::WObject} name=UFI (':=' | '+:=') (type=UFI description=EString?)?
-	//	'{'
-	//	element+=(Object | Property)*
-	//	'}';
+	//Object returns sew::WObject
+	//: {sew::WObject}
+	//    type=UFI  ( name=UFI )?  ( description=EString )?
+	//    '{'
+	//        ( element+=( Object | Property ) )*
+	//    '}'
+	//| {sew::WObject}
+	//    name=UFI  ( ':=' | '+:=' )  ( type=UFI  ( description=EString )? )?
+	//    '{'
+	//        ( element+=( Object | Property ) )*
+	//    '}'
+	//;
 	public ObjectElements getObjectAccess() {
 		return pObject;
 	}
@@ -2745,9 +3028,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Property Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//Property sew::WProperty:
-	//	Section
-	//	| Attribute;
+	//Property returns sew::WProperty
+	//: Section
+	//| Attribute
+	//;
 	public PropertyElements getPropertyAccess() {
 		return pProperty;
 	}
@@ -2756,9 +3040,12 @@
 		return getPropertyAccess().getRule();
 	}
 	
-	//Section sew::WSection:
-	//	name=XID description=EString? ('[' element+=(Object | Attribute)* ']'
-	//	| ':' element+=(Object | Attribute)*);
+	//Section returns sew::WSection
+	//: name=XID  ( description=EString )?
+	//    ( '[' ( element+=( Object | Attribute ) )* ']'
+	//    | ':' ( element+=( Object | Attribute ) )*
+	//    )
+	//;
 	public SectionElements getSectionAccess() {
 		return pSection;
 	}
@@ -2767,8 +3054,10 @@
 		return getSectionAccess().getRule();
 	}
 	
-	//Attribute sew::WAttribute:
-	//	{sew::WAttribute} name=XID '=' value=ValueSpecification ';'?;
+	//Attribute returns sew::WAttribute
+	//: {sew::WAttribute}
+	//    name=XID  '='  value=ValueSpecification  ( ';' )?
+	//;
 	public AttributeElements getAttributeAccess() {
 		return pAttribute;
 	}
@@ -2780,8 +3069,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Value Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//ValueSpecification sew::WValueSpecification:
-	//	Expression;
+	//ValueSpecification returns sew::WValueSpecification
+	//: Expression
+	//;
 	public ValueSpecificationElements getValueSpecificationAccess() {
 		return pValueSpecification;
 	}
@@ -2793,10 +3083,11 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Expression Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//Expression sew::WValueSpecification:
-	//	conditionalExpression
-	//	// Deprecated
-	//	| DeprecatedExpression;
+	//Expression returns sew::WValueSpecification
+	//: conditionalExpression
+	//// Deprecated
+	//| DeprecatedExpression
+	//;
 	public ExpressionElements getExpressionAccess() {
 		return pExpression;
 	}
@@ -2805,9 +3096,12 @@
 		return getExpressionAccess().getRule();
 	}
 	
-	//conditionalExpression sew::WValueSpecification:
-	//	conditionalOrExpression ({expression::Expression.operand+=current} operator='?' operand+=Expression ':'
-	//	operand+=Expression)?;
+	//conditionalExpression returns sew::WValueSpecification
+	//: conditionalOrExpression
+	//    ( {expression::Expression.operand+=current}
+	//        operator='?' operand+=Expression ':' operand+=Expression
+	//    )?
+	//;
 	public ConditionalExpressionElements getConditionalExpressionAccess() {
 		return pConditionalExpression;
 	}
@@ -2816,9 +3110,13 @@
 		return getConditionalExpressionAccess().getRule();
 	}
 	
-	//conditionalOrExpression sew::WValueSpecification:
-	//	conditionalAndExpression ({expression::Expression.operand+=current} operator=('||' | 'or')
-	//	operand+=conditionalAndExpression (('||' | 'or') operand+=conditionalAndExpression)*)?;
+	//conditionalOrExpression returns sew::WValueSpecification
+	//: conditionalAndExpression
+	//    ( {expression::Expression.operand+=current}
+	//        operator=( '||' | 'or' ) operand+=conditionalAndExpression
+	//        ( ( '||' | 'or' ) operand+=conditionalAndExpression )*
+	//    )?
+	//;
 	public ConditionalOrExpressionElements getConditionalOrExpressionAccess() {
 		return pConditionalOrExpression;
 	}
@@ -2827,9 +3125,13 @@
 		return getConditionalOrExpressionAccess().getRule();
 	}
 	
-	//conditionalAndExpression sew::WValueSpecification:
-	//	equalityExpression ({expression::Expression.operand+=current} operator=('&&' | 'and') operand+=equalityExpression
-	//	(('&&' | 'and') operand+=equalityExpression)*)?;
+	//conditionalAndExpression returns sew::WValueSpecification
+	//: equalityExpression
+	//    ( {expression::Expression.operand+=current}
+	//        operator=( '&&' | 'and' ) operand+=equalityExpression
+	//        ( ( '&&' | 'and' ) operand+=equalityExpression )*
+	//    )?
+	//;
 	public ConditionalAndExpressionElements getConditionalAndExpressionAccess() {
 		return pConditionalAndExpression;
 	}
@@ -2838,9 +3140,13 @@
 		return getConditionalAndExpressionAccess().getRule();
 	}
 	
-	//equalityExpression sew::WValueSpecification:
-	//	relationalExpression ({expression::Expression.operand+=current} operator=('==' | '!=' | '===' | '=!=' | '=/=')
-	//	operand+=relationalExpression)?;
+	//equalityExpression returns sew::WValueSpecification
+	//: relationalExpression
+	//    ( {expression::Expression.operand+=current}
+	//        operator=( '==' | '!=' | '===' | '=!=' | '=/=' )
+	//        operand+=relationalExpression
+	//    )?
+	//;
 	public EqualityExpressionElements getEqualityExpressionAccess() {
 		return pEqualityExpression;
 	}
@@ -2849,9 +3155,13 @@
 		return getEqualityExpressionAccess().getRule();
 	}
 	
-	//relationalExpression sew::WValueSpecification:
-	//	additiveExpression ({expression::Expression.operand+=current} operator=('<' | '<=' | '>' | '>=')
-	//	operand+=additiveExpression)?;
+	//relationalExpression returns sew::WValueSpecification
+	//: additiveExpression
+	//    ( {expression::Expression.operand+=current}
+	//        operator=( '<' | '<=' | '>' | '>=' )
+	//        operand+=additiveExpression
+	//    )?
+	//;
 	public RelationalExpressionElements getRelationalExpressionAccess() {
 		return pRelationalExpression;
 	}
@@ -2860,9 +3170,16 @@
 		return getRelationalExpressionAccess().getRule();
 	}
 	
-	//additiveExpression sew::WValueSpecification:
-	//	multiplicativeExpression ({expression::Expression.operand+=current} operator='+' operand+=multiplicativeExpression
-	//	('+' operand+=multiplicativeExpression)*)?;
+	//additiveExpression returns sew::WValueSpecification
+	//: multiplicativeExpression
+	//    ( ( {expression::Expression.operand+=current}
+	//        operator='+' operand+=multiplicativeExpression
+	//        ( '+' operand+=multiplicativeExpression )* )
+	////    | ( {expression::Expression.operand+=current}
+	////        operator='-' operand+=multiplicativeExpression
+	////        ( '-' operand+=multiplicativeExpression )* )
+	//    )?
+	//;
 	public AdditiveExpressionElements getAdditiveExpressionAccess() {
 		return pAdditiveExpression;
 	}
@@ -2871,12 +3188,22 @@
 		return getAdditiveExpressionAccess().getRule();
 	}
 	
-	//multiplicativeExpression sew::WValueSpecification:
-	//	primaryExpression ({expression::Expression.operand+=current} operator='*' operand+=primaryExpression ('*'
-	//	operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='**' operand+=primaryExpression
-	//	('**' operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='/' operand+=primaryExpression
-	//	('/' operand+=primaryExpression)* | {expression::Expression.operand+=current} operator='%' operand+=primaryExpression
-	//	('%' operand+=primaryExpression)*)?;
+	//multiplicativeExpression returns sew::WValueSpecification
+	//: primaryExpression
+	//    ( ( {expression::Expression.operand+=current}
+	//        operator='*' operand+=primaryExpression
+	//        ( '*' operand+=primaryExpression )* )
+	//    | ( {expression::Expression.operand+=current}
+	//        operator='**' operand+=primaryExpression
+	//        ( '**' operand+=primaryExpression )* )
+	//    | ( {expression::Expression.operand+=current}
+	//        operator='/' operand+=primaryExpression
+	//        ( '/' operand+=primaryExpression )* )
+	//    | ( {expression::Expression.operand+=current}
+	//        operator='%' operand+=primaryExpression
+	//        ( '%' operand+=primaryExpression )* )
+	//    )?
+	//;
 	public MultiplicativeExpressionElements getMultiplicativeExpressionAccess() {
 		return pMultiplicativeExpression;
 	}
@@ -2885,11 +3212,13 @@
 		return getMultiplicativeExpressionAccess().getRule();
 	}
 	
-	//primaryExpression sew::WValueSpecification:
-	//	'+' primaryExpression
-	//	| {expression::Expression} (operator='-' operand+=primaryExpression) | {expression::Expression} (operator=('!' |
-	//	'not') operand+=primaryExpression) | '(' Expression ')'
-	//	| LiteralExpression;
+	//primaryExpression returns sew::WValueSpecification
+	//: '+' primaryExpression
+	//| { expression::Expression }( operator='-' operand+=primaryExpression )
+	//| { expression::Expression }( operator=( '!' | 'not' ) operand+=primaryExpression )
+	//| '(' Expression ')'
+	//| LiteralExpression
+	//;
 	public PrimaryExpressionElements getPrimaryExpressionAccess() {
 		return pPrimaryExpression;
 	}
@@ -2898,19 +3227,20 @@
 		return getPrimaryExpressionAccess().getRule();
 	}
 	
-	//LiteralExpression sew::WValueSpecification:
-	//	LiteralBooleanValue
-	//	| LiteralCharacterValue
-	//	| LiteralIntegerValue
-	//	| LiteralRationalValue
-	//	| LiteralFloatValue
-	//	//| LiteralRealValue
-	//	| LiteralStringValue
-	//	| LiteralNullValue
-	//	| LiteralArrayValue
-	//	| LiteralObjectReference
-	//	| LiteralVariableReference
-	//	| LiteralInstanceReference;
+	//LiteralExpression returns sew::WValueSpecification
+	//: LiteralBooleanValue
+	//| LiteralCharacterValue
+	//| LiteralIntegerValue
+	//| LiteralRationalValue
+	//| LiteralFloatValue
+	////| LiteralRealValue
+	//| LiteralStringValue
+	//| LiteralNullValue
+	//| LiteralArrayValue
+	//| LiteralObjectReference
+	//| LiteralVariableReference
+	//| LiteralInstanceReference
+	//;
 	public LiteralExpressionElements getLiteralExpressionAccess() {
 		return pLiteralExpression;
 	}
@@ -2922,10 +3252,14 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Array of Literal Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralArrayValue expression::LiteralArrayValue:
-	//	{expression::LiteralArrayValue}
-	//	'[' (values+=ValueSpecification (',' values+=ValueSpecification)*)?
-	//	']';
+	//LiteralArrayValue  returns expression::LiteralArrayValue
+	//: {expression::LiteralArrayValue}
+	//    '['
+	//        ( values+=ValueSpecification
+	//            ( ',' values+=ValueSpecification )*
+	//        )?
+	//    ']'
+	//;
 	public LiteralArrayValueElements getLiteralArrayValueAccess() {
 		return pLiteralArrayValue;
 	}
@@ -2937,8 +3271,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Object Reference Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralObjectReference expression::LiteralObjectReference:
-	//	'&'? (object=[sew::WObject|UFI] | symbol=UFI);
+	//LiteralObjectReference returns expression::LiteralObjectReference
+	//: ( '&' )? ( object=[sew::WObject|UFI] | symbol=UFI )
+	//;
 	public LiteralObjectReferenceElements getLiteralObjectReferenceAccess() {
 		return pLiteralObjectReference;
 	}
@@ -2950,8 +3285,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralBooleanValue expression::LiteralBooleanValue:
-	//	value=EBoolean;
+	//LiteralBooleanValue  returns expression::LiteralBooleanValue
+	//: value=EBoolean
+	//;
 	public LiteralBooleanValueElements getLiteralBooleanValueAccess() {
 		return pLiteralBooleanValue;
 	}
@@ -2960,8 +3296,9 @@
 		return getLiteralBooleanValueAccess().getRule();
 	}
 	
-	//LiteralCharacterValue expression::LiteralCharacterValue:
-	//	value=EChar;
+	//LiteralCharacterValue  returns expression::LiteralCharacterValue
+	//: value=EChar
+	//;
 	public LiteralCharacterValueElements getLiteralCharacterValueAccess() {
 		return pLiteralCharacterValue;
 	}
@@ -2970,8 +3307,9 @@
 		return getLiteralCharacterValueAccess().getRule();
 	}
 	
-	//LiteralIntegerValue expression::LiteralIntegerValue:
-	//	value=ELong;
+	//LiteralIntegerValue  returns expression::LiteralIntegerValue
+	//: value=ELong
+	//;
 	public LiteralIntegerValueElements getLiteralIntegerValueAccess() {
 		return pLiteralIntegerValue;
 	}
@@ -2980,8 +3318,9 @@
 		return getLiteralIntegerValueAccess().getRule();
 	}
 	
-	//LiteralRationalValue expression::LiteralRationalValue:
-	//	numerator=ELong '/' denominator=ELong;
+	//LiteralRationalValue  returns expression::LiteralRationalValue
+	//: numerator=ELong '/' denominator=ELong
+	//;
 	public LiteralRationalValueElements getLiteralRationalValueAccess() {
 		return pLiteralRationalValue;
 	}
@@ -2990,8 +3329,9 @@
 		return getLiteralRationalValueAccess().getRule();
 	}
 	
-	//LiteralFloatValue expression::LiteralFloatValue:
-	//	value=EDouble;
+	//LiteralFloatValue  returns expression::LiteralFloatValue
+	//: value=EDouble
+	//;
 	public LiteralFloatValueElements getLiteralFloatValueAccess() {
 		return pLiteralFloatValue;
 	}
@@ -3000,8 +3340,9 @@
 		return getLiteralFloatValueAccess().getRule();
 	}
 	
-	//LiteralRealValue expression::LiteralRealValue:
-	//	value=EBigDecimal;
+	//LiteralRealValue  returns expression::LiteralRealValue
+	//: value=EBigDecimal
+	//;
 	public LiteralRealValueElements getLiteralRealValueAccess() {
 		return pLiteralRealValue;
 	}
@@ -3010,8 +3351,9 @@
 		return getLiteralRealValueAccess().getRule();
 	}
 	
-	//LiteralStringValue expression::LiteralStringValue:
-	//	value=EString;
+	//LiteralStringValue  returns expression::LiteralStringValue
+	//: value=EString
+	//;
 	public LiteralStringValueElements getLiteralStringValueAccess() {
 		return pLiteralStringValue;
 	}
@@ -3020,9 +3362,10 @@
 		return getLiteralStringValueAccess().getRule();
 	}
 	
-	//LiteralNullValue expression::LiteralNullValue:
-	//	{expression::LiteralNullValue}
-	//	'null' ('<' type=XID '>')?;
+	//LiteralNullValue  returns expression::LiteralNullValue
+	//: {expression::LiteralNullValue}
+	//    'null' ( '<' type=XID '>' )?
+	//;
 	public LiteralNullValueElements getLiteralNullValueAccess() {
 		return pLiteralNullValue;
 	}
@@ -3031,9 +3374,10 @@
 		return getLiteralNullValueAccess().getRule();
 	}
 	
-	//LiteralVariableReference expression::LiteralReferenceValue:
-	//	LiteralTimeVariable
-	//	| LiteralTimeDeltaVariable;
+	//LiteralVariableReference returns expression::LiteralReferenceValue
+	//: LiteralTimeVariable
+	//| LiteralTimeDeltaVariable
+	//;
 	public LiteralVariableReferenceElements getLiteralVariableReferenceAccess() {
 		return pLiteralVariableReference;
 	}
@@ -3042,8 +3386,9 @@
 		return getLiteralVariableReferenceAccess().getRule();
 	}
 	
-	//LiteralTimeVariable expression::LiteralTimeVariable:
-	//	{expression::LiteralTimeVariable} symbol='$time';
+	//LiteralTimeVariable returns expression::LiteralTimeVariable
+	//    : {expression::LiteralTimeVariable} ( symbol='$time' )
+	//    ;
 	public LiteralTimeVariableElements getLiteralTimeVariableAccess() {
 		return pLiteralTimeVariable;
 	}
@@ -3052,8 +3397,9 @@
 		return getLiteralTimeVariableAccess().getRule();
 	}
 	
-	//LiteralTimeDeltaVariable expression::LiteralTimeDeltaVariable:
-	//	{expression::LiteralTimeDeltaVariable} symbol='$delta';
+	//LiteralTimeDeltaVariable returns expression::LiteralTimeDeltaVariable
+	//    : {expression::LiteralTimeDeltaVariable} ( symbol='$delta' )
+	//    ;
 	public LiteralTimeDeltaVariableElements getLiteralTimeDeltaVariableAccess() {
 		return pLiteralTimeDeltaVariable;
 	}
@@ -3062,13 +3408,14 @@
 		return getLiteralTimeDeltaVariableAccess().getRule();
 	}
 	
-	//LiteralInstanceReference expression::LiteralReferenceValue:
-	//	LiteralThisInstance
-	//	| LiteralSelfInstance
-	//	| LiteralParentInstance
-	//	| LiteralSuperInstance
-	//	| LiteralSystemInstance
-	//	| LiteralEnvInstance;
+	//LiteralInstanceReference returns expression::LiteralReferenceValue
+	//: LiteralThisInstance
+	//| LiteralSelfInstance
+	//| LiteralParentInstance
+	//| LiteralSuperInstance
+	//| LiteralSystemInstance
+	//| LiteralEnvInstance
+	//;
 	public LiteralInstanceReferenceElements getLiteralInstanceReferenceAccess() {
 		return pLiteralInstanceReference;
 	}
@@ -3077,8 +3424,9 @@
 		return getLiteralInstanceReferenceAccess().getRule();
 	}
 	
-	//LiteralThisInstance expression::LiteralThisInstance:
-	//	{expression::LiteralThisInstance} symbol='$this';
+	//LiteralThisInstance returns expression::LiteralThisInstance
+	//: {expression::LiteralThisInstance} ( symbol='$this' )
+	//;
 	public LiteralThisInstanceElements getLiteralThisInstanceAccess() {
 		return pLiteralThisInstance;
 	}
@@ -3087,8 +3435,9 @@
 		return getLiteralThisInstanceAccess().getRule();
 	}
 	
-	//LiteralSelfInstance expression::LiteralSelfInstance:
-	//	{expression::LiteralSelfInstance} symbol='$self';
+	//LiteralSelfInstance returns expression::LiteralSelfInstance
+	//: {expression::LiteralSelfInstance} ( symbol='$self' )
+	//;
 	public LiteralSelfInstanceElements getLiteralSelfInstanceAccess() {
 		return pLiteralSelfInstance;
 	}
@@ -3097,8 +3446,9 @@
 		return getLiteralSelfInstanceAccess().getRule();
 	}
 	
-	//LiteralParentInstance expression::LiteralParentInstance:
-	//	{expression::LiteralParentInstance} symbol='$parent';
+	//LiteralParentInstance returns expression::LiteralParentInstance
+	//: {expression::LiteralParentInstance} ( symbol='$parent' )
+	//;
 	public LiteralParentInstanceElements getLiteralParentInstanceAccess() {
 		return pLiteralParentInstance;
 	}
@@ -3107,8 +3457,9 @@
 		return getLiteralParentInstanceAccess().getRule();
 	}
 	
-	//LiteralSuperInstance expression::LiteralSuperInstance:
-	//	{expression::LiteralSuperInstance} symbol='$super';
+	//LiteralSuperInstance returns expression::LiteralSuperInstance
+	//: {expression::LiteralSuperInstance} ( symbol='$super' )
+	//;
 	public LiteralSuperInstanceElements getLiteralSuperInstanceAccess() {
 		return pLiteralSuperInstance;
 	}
@@ -3117,8 +3468,9 @@
 		return getLiteralSuperInstanceAccess().getRule();
 	}
 	
-	//LiteralSystemInstance expression::LiteralSystemInstance:
-	//	{expression::LiteralSystemInstance} symbol='$system';
+	//LiteralSystemInstance returns expression::LiteralSystemInstance
+	//: {expression::LiteralSystemInstance} ( symbol='$system' )
+	//;
 	public LiteralSystemInstanceElements getLiteralSystemInstanceAccess() {
 		return pLiteralSystemInstance;
 	}
@@ -3127,8 +3479,9 @@
 		return getLiteralSystemInstanceAccess().getRule();
 	}
 	
-	//LiteralEnvInstance expression::LiteralEnvInstance:
-	//	{expression::LiteralEnvInstance} symbol=('$env' | 'env');
+	//LiteralEnvInstance returns expression::LiteralEnvInstance
+	//: {expression::LiteralEnvInstance} symbol=( '$env' | 'env' )
+	//;
 	public LiteralEnvInstanceElements getLiteralEnvInstanceAccess() {
 		return pLiteralEnvInstance;
 	}
@@ -3140,9 +3493,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Terminal Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//EBoolean ecore::EBoolean:
-	//	'true'
-	//	| 'false';
+	//EBoolean returns ecore::EBoolean
+	//: 'true'
+	//| 'false'
+	//;
 	public EBooleanElements getEBooleanAccess() {
 		return pEBoolean;
 	}
@@ -3151,14 +3505,16 @@
 		return getEBooleanAccess().getRule();
 	}
 	
-	//terminal CHARACTER:
-	//	"'" . "'";
+	//terminal CHARACTER
+	//: "'" . "'"
+	//;
 	public TerminalRule getCHARACTERRule() {
 		return tCHARACTER;
 	}
 	
-	//EChar ecore::EChar:
-	//	CHARACTER;
+	//EChar returns ecore::EChar
+	//: CHARACTER
+	//;
 	public ECharElements getECharAccess() {
 		return pEChar;
 	}
@@ -3167,8 +3523,8 @@
 		return getECharAccess().getRule();
 	}
 	
-	//ELong ecore::ELong:
-	//	'-'? INT;
+	//ELong returns ecore::ELong:
+	//    '-'? INT;
 	public ELongElements getELongAccess() {
 		return pELong;
 	}
@@ -3177,8 +3533,8 @@
 		return getELongAccess().getRule();
 	}
 	
-	//EDouble ecore::EDouble:
-	//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+	//EDouble returns ecore::EDouble
+	//: '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
 	//;
 	public EDoubleElements getEDoubleAccess() {
 		return pEDouble;
@@ -3188,8 +3544,9 @@
 		return getEDoubleAccess().getRule();
 	}
 	
-	//EBigDecimal ecore::EBigDecimal:
-	//	INT? '.' INT;
+	//EBigDecimal returns ecore::EBigDecimal
+	//: INT? '.' INT
+	//;
 	public EBigDecimalElements getEBigDecimalAccess() {
 		return pEBigDecimal;
 	}
@@ -3198,8 +3555,9 @@
 		return getEBigDecimalAccess().getRule();
 	}
 	
-	//EString:
-	//	STRING;
+	//EString returns ecore::EString
+	//: STRING
+	//;
 	public EStringElements getEStringAccess() {
 		return pEString;
 	}
@@ -3211,10 +3569,11 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// @DEPRECATED Diversity Configuration Specification
 	//////////////////////////////////////////////////////////////////////////////////
-	//DeprecatedReservedWord:
-	//	'form' | 'endform'
-	//	| 'prototype' | 'endprototype'
-	//	| 'section' | 'endsection';
+	//DeprecatedReservedWord
+	//: 'form'      | 'endform'
+	//| 'prototype' | 'endprototype'
+	//| 'section'   | 'endsection'
+	//;
 	public DeprecatedReservedWordElements getDeprecatedReservedWordAccess() {
 		return pDeprecatedReservedWord;
 	}
@@ -3223,17 +3582,18 @@
 		return getDeprecatedReservedWordAccess().getRule();
 	}
 	
-	//DeprecatedObject sew::WObject:
-	//	{sew::WObject}
-	//	'form'
-	//	name=UFI description=EString? 'as' '&'? type=UFI 'is'
-	//	element+=DeprecatedProperty*
-	//	'endform'
-	//	| {sew::WObject}
-	//	'prototype'
-	//	name=UFI description=EString? 'as' '&'? type=UFI 'is'
-	//	element+=DeprecatedProperty*
-	//	'endprototype';
+	//DeprecatedObject returns sew::WObject
+	//: {sew::WObject}
+	//    'form'
+	//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+	//        ( element+=DeprecatedProperty )*
+	//    'endform'
+	//| {sew::WObject}
+	//    'prototype'
+	//        name=UFI  ( description=EString )?  'as'  ( '&' )?  type=UFI  'is'
+	//        ( element+=DeprecatedProperty )*
+	//    'endprototype'
+	//;
 	public DeprecatedObjectElements getDeprecatedObjectAccess() {
 		return pDeprecatedObject;
 	}
@@ -3242,9 +3602,10 @@
 		return getDeprecatedObjectAccess().getRule();
 	}
 	
-	//DeprecatedProperty sew::WProperty:
-	//	DeprecatedSection
-	//	| DeprecatedAttribute;
+	//DeprecatedProperty returns sew::WProperty
+	//: DeprecatedSection
+	//| DeprecatedAttribute
+	//;
 	public DeprecatedPropertyElements getDeprecatedPropertyAccess() {
 		return pDeprecatedProperty;
 	}
@@ -3253,14 +3614,17 @@
 		return getDeprecatedPropertyAccess().getRule();
 	}
 	
-	//DeprecatedSection sew::WSection:
-	//	{sew::WSection}
-	//	'section' name=XID
-	//	//		( element+=( Object | Attribute  ) )*
-	//	element+=(DeprecatedAttribute | DeprecatedObject | Object)*
-	//	'endsection' XID?
-	//	| name=XID description=EString? ('[' element+=(DeprecatedAttribute | DeprecatedObject | Object)* ']'
-	//	| ':' element+=(DeprecatedAttribute | DeprecatedObject | Object)*);
+	//DeprecatedSection returns sew::WSection
+	//: {sew::WSection}
+	//    'section'  name=XID
+	////        ( element+=( Object | Attribute  ) )*
+	//        ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+	//    'endsection'  ( XID )?
+	//| name=XID  ( description=EString )?
+	//    ( '[' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )* ']'
+	//    | ':' ( element+=( DeprecatedAttribute | DeprecatedObject | Object ) )*
+	//    )
+	//;
 	public DeprecatedSectionElements getDeprecatedSectionAccess() {
 		return pDeprecatedSection;
 	}
@@ -3269,8 +3633,10 @@
 		return getDeprecatedSectionAccess().getRule();
 	}
 	
-	//DeprecatedAttribute sew::WAttribute:
-	//	{sew::WAttribute} name=DeprecatedAttributeID '=' value=ValueSpecification ';'?;
+	//DeprecatedAttribute returns sew::WAttribute
+	//: {sew::WAttribute}
+	//    name=DeprecatedAttributeID  '='  value=ValueSpecification  ( ';' )?
+	//;
 	public DeprecatedAttributeElements getDeprecatedAttributeAccess() {
 		return pDeprecatedAttribute;
 	}
@@ -3279,9 +3645,10 @@
 		return getDeprecatedAttributeAccess().getRule();
 	}
 	
-	//DeprecatedAttributeID:
-	//	XID
-	//	| AT_IDENTIFIER;
+	//DeprecatedAttributeID
+	//: XID
+	//| AT_IDENTIFIER
+	//;
 	public DeprecatedAttributeIDElements getDeprecatedAttributeIDAccess() {
 		return pDeprecatedAttributeID;
 	}
@@ -3290,11 +3657,13 @@
 		return getDeprecatedAttributeIDAccess().getRule();
 	}
 	
-	//DeprecatedExpression sew::WValueSpecification:
-	//	{expression::Expression}
-	//	'${'
-	//	operator=('|;|' | '|i|') operand+=ValueSpecification*
-	//	'}';
+	//DeprecatedExpression returns sew::WValueSpecification
+	//: {expression::Expression}
+	//    '${'
+	//        operator=( '|;|' | '|i|' )
+	//        ( operand+=ValueSpecification )*
+	//    '}'
+	//;
 	public DeprecatedExpressionElements getDeprecatedExpressionAccess() {
 		return pDeprecatedExpression;
 	}
@@ -3303,45 +3672,40 @@
 		return getDeprecatedExpressionAccess().getRule();
 	}
 	
-	//terminal ID:
-	//	'^'? ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
+	//terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 	public TerminalRule getIDRule() {
 		return gaTerminals.getIDRule();
 	}
 	
-	//terminal INT returns ecore::EInt:
-	//	'0'..'9'+;
+	//terminal INT returns ecore::EInt: ('0'..'9')+;
 	public TerminalRule getINTRule() {
 		return gaTerminals.getINTRule();
 	}
 	
 	//terminal STRING:
-	//	'"' ('\\' . | !('\\' | '"'))* '"' |
-	//	"'" ('\\' . | !('\\' | "'"))* "'";
+	//            '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"' |
+	//            "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
+	//        ;
 	public TerminalRule getSTRINGRule() {
 		return gaTerminals.getSTRINGRule();
 	}
 	
-	//terminal ML_COMMENT:
-	//	'/*'->'*/';
+	//terminal ML_COMMENT : '/*' -> '*/';
 	public TerminalRule getML_COMMENTRule() {
 		return gaTerminals.getML_COMMENTRule();
 	}
 	
-	//terminal SL_COMMENT:
-	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
+	//terminal SL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
 	public TerminalRule getSL_COMMENTRule() {
 		return gaTerminals.getSL_COMMENTRule();
 	}
 	
-	//terminal WS:
-	//	' ' | '\t' | '\r' | '\n'+;
+	//terminal WS         : (' '|'\t'|'\r'|'\n')+;
 	public TerminalRule getWSRule() {
 		return gaTerminals.getWSRule();
 	}
 	
-	//terminal ANY_OTHER:
-	//	.;
+	//terminal ANY_OTHER: .;
 	public TerminalRule getANY_OTHERRule() {
 		return gaTerminals.getANY_OTHERRule();
 	}
diff --git a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/validation/AbstractSEWValidator.java b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/validation/AbstractSEWValidator.java
index 6324d4f..9d74920 100644
--- a/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/validation/AbstractSEWValidator.java
+++ b/editor/sew/org.eclipse.efm.sew.xtext/src-gen/org/eclipse/efm/sew/xtext/validation/AbstractSEWValidator.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.sew.xtext.validation;
 
diff --git a/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ide/META-INF/MANIFEST.MF b/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ide/META-INF/MANIFEST.MF
index 5c000a3..475d0f1 100644
--- a/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ide/META-INF/MANIFEST.MF
+++ b/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ide/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
 Require-Bundle: org.eclipse.efm.papyrus.xtext.transition,
  org.eclipse.xtext.ide,
  org.eclipse.xtext.xbase.ide
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.papyrus.xtext.ide.contentassist.antlr,
  org.eclipse.efm.papyrus.xtext.ide.contentassist.antlr.internal
 
diff --git a/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ui/META-INF/MANIFEST.MF b/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ui/META-INF/MANIFEST.MF
index 955150b..689539a 100644
--- a/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ui/META-INF/MANIFEST.MF
+++ b/editor/transition/org.eclipse.efm.papyrus.xtext.transition.ui/META-INF/MANIFEST.MF
@@ -23,9 +23,14 @@
  org.eclipse.papyrus.infra.emf,
  org.eclipse.papyrus.infra.core;bundle-version="1.1.3",
  org.eclipse.efm.formalml;bundle-version="[0.0.1,1.0.0)",
- org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors
-Import-Package: org.apache.log4j
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+ org.eclipse.papyrus.infra.gmfdiag.extensionpoints.editors,
+ org.eclipse.gmf.runtime.common.core,
+ org.eclipse.emf.transaction,
+ org.eclipse.gmf.runtime.diagram.ui;bundle-version="1.9.0"
+Import-Package: org.apache.log4j,
+ org.eclipse.emf.workspace,
+ org.eclipse.gmf.runtime.emf.commands.core.command
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.papyrus.xtext.ui.quickfix,
  org.eclipse.efm.papyrus.xtext.transition.ui.internal,
  org.eclipse.efm.papyrus.xtext.ui.contentassist
diff --git a/editor/transition/org.eclipse.efm.papyrus.xtext.transition/META-INF/MANIFEST.MF b/editor/transition/org.eclipse.efm.papyrus.xtext.transition/META-INF/MANIFEST.MF
index 26b41ea..352d69d 100644
--- a/editor/transition/org.eclipse.efm.papyrus.xtext.transition/META-INF/MANIFEST.MF
+++ b/editor/transition/org.eclipse.efm.papyrus.xtext.transition/META-INF/MANIFEST.MF
@@ -16,7 +16,7 @@
  org.eclipse.xtext.util,
  org.eclipse.xtend.lib,
  org.eclipse.emf.common
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.papyrus.xtext.transition,
  org.eclipse.efm.papyrus.xtext.services,
  org.eclipse.efm.papyrus.xtext.transition.util,
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/.classpath b/editor/xlia/org.eclipse.efm.formalml.ecore/.classpath
index 3cab749..26abbfa 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/.classpath
@@ -1,13 +1,13 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="src" path="ecore-gen"/>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
 		<attributes>
 			<attribute name="module" value="true"/>
 		</attributes>
 	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="src" path="xtend-gen"/>
+	<classpathentry kind="src" path="src/"/>
+	<classpathentry kind="src" path="ecore-gen/"/>
+	<classpathentry kind="src" path="xtend-gen/"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.ecore/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.ecore/META-INF/MANIFEST.MF
index ecca70c..405d30c 100644
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.ecore/META-INF/MANIFEST.MF
@@ -16,7 +16,7 @@
  org.eclipse.xtend.lib,
  org.eclipse.xtend.lib.macro,
  org.eclipse.efm.formalml.ecore;visibility:=reexport
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.ecore.formalml.common,
  org.eclipse.efm.ecore.formalml.common.impl,
  org.eclipse.efm.ecore.formalml.common.util,
@@ -42,4 +42,3 @@
  org.eclipse.efm.formalml.ecore.factory
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.efm.formalml.ecore
-Import-Package: org.eclipse.jdt.internal.compiler.ast
diff --git a/editor/xlia/org.eclipse.efm.formalml.ecore/xtend-gen/org/eclipse/efm/formalml/ecore/factory/.XLIAGenerator.xtendbin b/editor/xlia/org.eclipse.efm.formalml.ecore/xtend-gen/org/eclipse/efm/formalml/ecore/factory/.XLIAGenerator.xtendbin
deleted file mode 100644
index 87ccabf..0000000
--- a/editor/xlia/org.eclipse.efm.formalml.ecore/xtend-gen/org/eclipse/efm/formalml/ecore/factory/.XLIAGenerator.xtendbin
+++ /dev/null
Binary files differ
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/.classpath b/editor/xlia/org.eclipse.efm.formalml.plantuml/.classpath
new file mode 100644
index 0000000..e423b03
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/.classpath
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry excluding="org/eclipse/efm/formalml/plantuml/SysMLDiagramTextProvider.java" kind="src" path="src"/>
+	<classpathentry kind="output" path="bin"/>
+</classpath>
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/.project b/editor/xlia/org.eclipse.efm.formalml.plantuml/.project
new file mode 100644
index 0000000..b57a88a
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/.project
@@ -0,0 +1,28 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<projectDescription>
+	<name>org.eclipse.efm.formalml.plantuml</name>
+	<comment></comment>
+	<projects>
+	</projects>
+	<buildSpec>
+		<buildCommand>
+			<name>org.eclipse.jdt.core.javabuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.ManifestBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
+			<name>org.eclipse.pde.SchemaBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+	</buildSpec>
+	<natures>
+		<nature>org.eclipse.pde.PluginNature</nature>
+		<nature>org.eclipse.jdt.core.javanature</nature>
+	</natures>
+</projectDescription>
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.plantuml/.settings/org.eclipse.jdt.core.prefs
new file mode 100644
index 0000000..bd1095b
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/.settings/org.eclipse.jdt.core.prefs
@@ -0,0 +1,9 @@
+eclipse.preferences.version=1
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
+org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
+org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.plantuml/META-INF/MANIFEST.MF
new file mode 100644
index 0000000..28dbabf
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/META-INF/MANIFEST.MF
@@ -0,0 +1,33 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Name: FML to Plantuml
+Bundle-SymbolicName: org.eclipse.efm.formalml.plantuml;singleton:=true
+Bundle-Version: 0.0.1.qualifier
+Bundle-Activator: org.eclipse.efm.formalml.plantuml.Activator
+Bundle-Vendor: CEA-LIST
+Require-Bundle: org.eclipse.ui,
+ org.eclipse.core.runtime,
+ org.eclipse.emf.ecore,
+ org.eclipse.ui.navigator,
+ org.eclipse.core.resources
+Bundle-RequiredExecutionEnvironment: JavaSE-11
+Automatic-Module-Name: org.eclipse.efm.formalml.plantuml
+Bundle-ActivationPolicy: lazy
+Import-Package: com.google.common.collect;version="30.1.0",
+ net.sourceforge.plantuml.eclipse.utils,
+ org.eclipse.core.resources,
+ org.eclipse.efm.ecore.formalml.infrastructure,
+ org.eclipse.efm.ecore.formalml.specification,
+ org.eclipse.efm.formalml.xtext.generator,
+ org.eclipse.emf.common.util,
+ org.eclipse.jface.text,
+ org.eclipse.ui.ide,
+ org.eclipse.ui.navigator.resources,
+ org.eclipse.ui.part,
+ org.eclipse.ui.texteditor,
+ org.eclipse.xtext.nodemodel,
+ org.eclipse.xtext.nodemodel.util,
+ org.eclipse.xtext.resource,
+ org.eclipse.xtext.ui.editor,
+ org.eclipse.xtext.ui.editor.model,
+ org.eclipse.xtext.util.concurrent
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/about.html b/editor/xlia/org.eclipse.efm.formalml.plantuml/about.html
new file mode 100644
index 0000000..d35d5ae
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/about.html
@@ -0,0 +1,28 @@
+<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
+    "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
+<html xmlns="http://www.w3.org/1999/xhtml">
+<head>
+<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1"/>
+<title>About</title>
+</head>
+<body lang="EN-US">
+<h2>About This Content</h2>
+ 
+<p>June 5, 2007</p>	
+<h3>License</h3>
+
+<p>The Eclipse Foundation makes available all content in this plug-in (&quot;Content&quot;).  Unless otherwise 
+indicated below, the Content is provided to you under the terms and conditions of the
+Eclipse Public License Version 1.0 (&quot;EPL&quot;).  A copy of the EPL is available 
+at <a href="http://www.eclipse.org/legal/epl-v10.html">http://www.eclipse.org/legal/epl-v10.html</a>.
+For purposes of the EPL, &quot;Program&quot; will mean the Content.</p>
+
+<p>If you did not receive this Content directly from the Eclipse Foundation, the Content is 
+being redistributed by another party (&quot;Redistributor&quot;) and different terms and conditions may
+apply to your use of any object code in the Content.  Check the Redistributor's license that was 
+provided with the Content.  If no such license exists, contact the Redistributor.  Unless otherwise
+indicated below, the terms and conditions of the EPL still apply to any source code in the Content
+and such source code may be obtained at <a href="http://www.eclipse.org/">http://www.eclipse.org</a>.</p>
+
+</body>
+</html>
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/build.properties b/editor/xlia/org.eclipse.efm.formalml.plantuml/build.properties
new file mode 100644
index 0000000..6f20375
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/build.properties
@@ -0,0 +1,5 @@
+source.. = src/
+output.. = bin/
+bin.includes = META-INF/,\
+               .,\
+               plugin.xml
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/plugin.xml b/editor/xlia/org.eclipse.efm.formalml.plantuml/plugin.xml
new file mode 100644
index 0000000..bb115c5
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/plugin.xml
@@ -0,0 +1,20 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<?eclipse version="3.4"?>
+<plugin>
+   <extension
+         point="net.sourceforge.plantuml.eclipse.diagramTextProvider">
+      <diagramTextProvider
+            id="org.eclipse.efm.formalml.plantuml.FormalMLDiagramTextProvider"
+            label="Diagrams generated from FormalML models"
+            priority="100"
+            providerClass="org.eclipse.efm.formalml.plantuml.FormalMLDiagramTextProvider">
+      </diagramTextProvider>
+   </extension>
+   <extension
+         point="net.sourceforge.plantuml.eclipse.linkOpener">
+      <linkOpener
+            linkOpenerClass="org.eclipse.efm.formalml.plantuml.FormalMLDiagramLinkOpener">
+      </linkOpener>
+   </extension>
+
+</plugin>
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/pom.xml b/editor/xlia/org.eclipse.efm.formalml.plantuml/pom.xml
new file mode 100644
index 0000000..2089656
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.efm</groupId>
+		<artifactId>org.eclipse.efm.modeling.editor.xlia</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.efm.formalml.plantuml</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>org.eclipse.efm.formalml.plantuml</name>
+	<description>This plug-in contains PlantUML's extension for graphical xLIA model visualization.</description>
+</project>
\ No newline at end of file
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/Activator.java b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/Activator.java
new file mode 100644
index 0000000..37bf885
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/Activator.java
@@ -0,0 +1,88 @@
+/*****************************************************************************
+* Copyright (c) 2021 CEA LIST.
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
+*  - Initial API and implementation
+*****************************************************************************/
+package org.eclipse.efm.formalml.plantuml;
+
+import java.util.Map;
+import java.util.UUID;
+
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.ui.plugin.AbstractUIPlugin;
+import org.osgi.framework.BundleContext;
+
+import com.google.common.collect.BiMap;
+import com.google.common.collect.HashBiMap;
+
+/**
+ * The activator class controls the plug-in life cycle
+ */
+public class Activator extends AbstractUIPlugin {
+
+	// The plug-in ID
+	public static final String PLUGIN_ID = "org.eclipse.efm.formalml.plantuml"; //$NON-NLS-1$
+
+	// The shared instance
+	private static Activator plugin;
+
+	/**
+	 * The constructor
+	 */
+	public Activator() {
+	}
+
+	@Override
+	public void start(final BundleContext context) throws Exception {
+		super.start(context);
+		plugin = this;
+	}
+
+	@Override
+	public void stop(final BundleContext context) throws Exception {
+		plugin = null;
+		super.stop(context);
+	}
+
+	/**
+	 * Returns the shared instance
+	 *
+	 * @return the shared instance
+	 */
+	public static Activator getDefault() {
+		return plugin;
+	}
+
+
+    private final BiMap<UUID, EObject> elementsMap = HashBiMap.create();
+
+    private synchronized EObject get(final UUID uuid) {
+        return elementsMap.get(uuid);
+    }
+
+    private synchronized UUID register(final EObject eObj) {
+        final Map<EObject, UUID> map = elementsMap.inverse();
+        UUID uuid = map.get(eObj);
+        if (uuid != null) return uuid;
+        uuid = UUID.randomUUID();
+        elementsMap.put(uuid, eObj);
+        return uuid;
+    }
+
+    public static EObject findEObject(final UUID uuid) {
+        return getDefault().get(uuid);
+    }
+
+    public static UUID registerEObject(final EObject eObj) {
+        return getDefault().register(eObj);
+    }
+
+
+}
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FML2PlantUMLText.java b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FML2PlantUMLText.java
new file mode 100644
index 0000000..d259d2f
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FML2PlantUMLText.java
@@ -0,0 +1,141 @@
+/*****************************************************************************
+* Copyright (c) 2021 CEA LIST.
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
+*  - Initial API and implementation
+*****************************************************************************/
+package org.eclipse.efm.formalml.plantuml;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.eclipse.efm.ecore.formalml.infrastructure.Machine;
+import org.eclipse.efm.ecore.formalml.specification.XliaModel;
+import org.eclipse.efm.formalml.xtext.generator.FormalMLGenerator;
+import org.eclipse.emf.ecore.EObject;
+
+import net.sourceforge.plantuml.eclipse.utils.PlantumlConstants;
+
+public class FML2PlantUMLText {
+
+	public final static String DEFAULT_PUML_TEXT =
+			PlantumlConstants.START_UML + "\n"
+					+ "\nIViewPart -> FML2PUML: FML Diagram Text Request"
+					+ "\nFML2PUML --> IViewPart: FML Diagram Text Response"
+					+ "\n\n" + PlantumlConstants.END_UML;
+
+
+	public final static String DEFAULT_PUML_FML_STYLE_HEADER = ""
+			+ "\n\tskinparam backgroundColor White"
+
+			+ "\n\tskinparam state {"
+			+ "\n\t\tStartColor Green"
+			+ "\n\t\tEndColor Red"
+
+			+ "\n\t\t'Attribut pour les transitions"
+			+ "\n\t\tArrowColor Black"
+			+ "\n\t\tArrowColor<< Else >> Orange"
+
+			+ "\n\t\t'Attribut par défaut pour les états"
+			+ "\n\t\tBorderColor Gray"
+			+ "\n\t\tBackgroundColor Wheat"
+
+			+ "\n\t\t'Attribut pour les états composites"
+			+ "\n\t\tBackgroundColor<< System       >> Turquoise"
+			+ "\n\t\tBackgroundColor<< Statemachine >> DodgerBlue"
+			+ "\n\t\tBackgroundColor<< Machine      >> SpringGreen"
+			+ "\n\t\tBackgroundColor<< Instance     >> Orchid"
+			+ "\n\t\tBackgroundColor<< Composite    >> SpringGreen"
+
+			+ "\n\t\t'Attribut pour les états simples"
+			+ "\n\t\tBackgroundColor<< simple_hierarchic >> PaleTurquoise"
+			+ "\n\t\tBackgroundColor<< simple >> PaleTurquoise"
+			+ "\n\t\tBackgroundColor<< start  >> Green"
+			+ "\n\t\tBackgroundColor<< final >> Red"
+			+ "\n\t\tBackgroundColor<< sync   >> Aqua"
+
+			+ "\n\t\t'Attribut pour les pseudo-états"
+			+ "\n\t\tBackgroundColor<< pseudostate >> Lavender"
+			+ "\n\t\tBackgroundColor<< initial     >> GreenYellow"
+			+ "\n\t\tBackgroundColor<< junction    >> GreenYellow"
+			+ "\n\t\tBackgroundColor<< choice      >> Orange"
+			+ "\n\t\tBackgroundColor<< fork        >> SpringGreen"
+			+ "\n\t\tBackgroundColor<< junction    >> SpringGreen"
+			+ "\n\t\tBackgroundColor<< dhistory    >> SpringGreen"
+			+ "\n\t\tBackgroundColor<< shistory    >> SpringGreen"
+			+ "\n\t\tBackgroundColor<< return      >> OrangeRed"
+			+ "\n\t\tBackgroundColor<< terminal    >> Red"
+
+			+ "\n\t\tFontColor Black"
+			+ "\n\t\tFontName Times"
+			+ "\n\t\tFontSize 14"
+			+"\n\t}\n\n";
+
+
+
+	protected void addStyleHeader(final StringBuilder buffer) {
+		buffer.append(DEFAULT_PUML_FML_STYLE_HEADER);
+	}
+
+	public String FML2PUML(final List<? extends EObject> eObjs) {
+
+		final FormalMLGenerator fmlGen = new FormalMLGenerator();
+
+		final StringBuilder buffer = new StringBuilder(PlantumlConstants.START_UML + "\n\n");
+
+
+//		initStyle();
+//		Visitor v = initVisitor();
+//		v.setSysML2PlantUMLText(this);
+//
+		addStyleHeader(buffer);
+//
+//		initIdMap();
+//
+		for (final EObject eObj : eObjs) {
+			if (eObj instanceof Machine) {
+				buffer.append( fmlGen.generateMachineGraphic((Machine) eObj) );
+			}
+			else if (eObj instanceof XliaModel) {
+				buffer.append( fmlGen.generateMachineGraphic(((XliaModel) eObj).getSystem()) );
+			}
+		}
+
+
+//		buffer.append(v.getString());
+//		return buffer.toString();
+
+		if( buffer.length() > PlantumlConstants.START_UML.length() + 7) {
+			buffer.append("\n\n" + PlantumlConstants.END_UML);
+
+			return buffer.toString();
+		}
+
+		return DEFAULT_PUML_TEXT;
+	}
+
+
+	public List<? extends EObject> setupVisualizationEObjects(final EObject eObj) {
+		if (eObj != null) {
+			EObject eObjParent = eObj;
+			while (eObjParent != null && !((eObjParent instanceof Machine) || (eObjParent instanceof XliaModel))) {
+				eObjParent = eObjParent.eContainer();
+			}
+			if (eObjParent != null) {
+				final List<EObject> eObjs = new ArrayList<EObject>(1);
+				eObjs.add(eObjParent);
+
+				return eObjs;
+			}
+
+		}
+		return null;
+	}
+
+}
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramLinkOpener.java b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramLinkOpener.java
new file mode 100644
index 0000000..efcf395
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramLinkOpener.java
@@ -0,0 +1,119 @@
+/*****************************************************************************
+* Copyright (c) 2021 CEA LIST.
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
+*  - Initial API and implementation
+*****************************************************************************/
+package org.eclipse.efm.formalml.plantuml;
+
+import java.util.UUID;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.ResourcesPlugin;
+import org.eclipse.core.runtime.IPath;
+import org.eclipse.core.runtime.Path;
+import org.eclipse.emf.common.util.URI;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.emf.ecore.resource.Resource;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IWorkbenchPage;
+import org.eclipse.ui.PartInitException;
+import org.eclipse.ui.PlatformUI;
+import org.eclipse.ui.ide.IDE;
+import org.eclipse.xtext.nodemodel.ICompositeNode;
+import org.eclipse.xtext.nodemodel.util.NodeModelUtils;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+
+import net.sourceforge.plantuml.eclipse.utils.ILinkOpener;
+import net.sourceforge.plantuml.eclipse.utils.LinkData;
+
+public class FormalMLDiagramLinkOpener implements ILinkOpener {
+
+    public static final String FML_PLINK_SCHEME = "pfml";
+
+    private URI getURI(final LinkData link) {
+        try {
+            return URI.createURI(link.href);
+        } catch (final IllegalArgumentException e) {
+        }
+        return null;
+    }
+
+    public static URI getEObjectLink(final EObject eObj) {
+        final UUID uuid = Activator.registerEObject(eObj);
+        if (uuid == null) return null;
+        return URI.createGenericURI(FML_PLINK_SCHEME, uuid.toString(), null);
+    }
+
+
+    @Override
+    public int supportsLink(final LinkData link) {
+        final URI uri = getURI(link);
+        if ((uri != null) && (FML_PLINK_SCHEME.equals(uri.scheme()))) {
+            return CUSTOM_SUPPORT;
+        }
+        return NO_SUPPORT;
+    }
+
+
+    private IPath getPath(final EObject eObj) {
+        final Resource r = eObj.eResource();
+        if (r == null) return null;
+
+        URI uri = r.getURI();
+        uri = r.getResourceSet().getURIConverter().normalize(uri);
+        final int size = uri.segmentCount();
+        if ((size > 1)
+            && ("platform".equals(uri.scheme()))
+            && ("resource".equals(uri.segment(0)))) {
+            final StringBuilder path = new StringBuilder();
+            for (int i = 1; i < size; i++) {
+                path.append('/');
+                path.append(URI.decode(uri.segment(i)));
+            }
+            return new Path(path.toString());
+        } else {
+            return new Path(uri.devicePath());
+        }
+    }
+
+    private EObject getEObject(final URI uri) {
+        final String str = uri.opaquePart();
+        if (str == null) return null;
+        try {
+            final UUID uuid = UUID.fromString(str);
+            return Activator.findEObject(uuid);
+        } catch (final IllegalArgumentException e) {
+            return null;
+        }
+    }
+
+    @Override
+    public void openLink(final LinkData link) {
+        final URI uri = getURI(link);
+        if (uri == null) return;
+        final EObject eObj = getEObject(uri);
+        if (eObj == null) return;
+
+        try {
+            final IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+            final IPath path = getPath(eObj);
+            final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(path);
+            final IEditorPart editor = IDE.openEditor(page, file);
+            if (editor instanceof XtextEditor) {
+                final XtextEditor xeditor = (XtextEditor) editor;
+                final ICompositeNode node = NodeModelUtils.getNode(eObj);
+                xeditor.selectAndReveal(node.getOffset(), node.getLength());
+            }
+        } catch (final PartInitException e) {
+        }
+    }
+
+
+}
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramTextProvider.java b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramTextProvider.java
new file mode 100644
index 0000000..9c708da
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/FormalMLDiagramTextProvider.java
@@ -0,0 +1,212 @@
+/*****************************************************************************
+* Copyright (c) 2021 CEA LIST.
+*
+* All rights reserved. This program and the accompanying materials
+* are made available under the terms of the Eclipse Public License v1.0
+* which accompanies this distribution, and is available at
+* http://www.eclipse.org/legal/epl-v10.html
+*
+* Contributors:
+*  Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
+*  - Initial API and implementation
+*****************************************************************************/
+package org.eclipse.efm.formalml.plantuml;
+
+import java.io.IOException;
+import java.nio.file.Files;
+import java.nio.file.Path;
+import java.util.List;
+
+import org.eclipse.core.resources.IFile;
+import org.eclipse.core.resources.IResource;
+import org.eclipse.emf.ecore.EObject;
+import org.eclipse.jface.text.ITextSelection;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.ui.IEditorInput;
+import org.eclipse.ui.IEditorPart;
+import org.eclipse.ui.IViewPart;
+import org.eclipse.ui.navigator.resources.ProjectExplorer;
+import org.eclipse.ui.part.FileEditorInput;
+import org.eclipse.xtext.resource.EObjectAtOffsetHelper;
+import org.eclipse.xtext.resource.XtextResource;
+import org.eclipse.xtext.ui.editor.XtextEditor;
+import org.eclipse.xtext.util.concurrent.IUnitOfWork;
+
+import net.sourceforge.plantuml.eclipse.utils.DiagramTextProvider;
+import net.sourceforge.plantuml.eclipse.utils.PlantumlConstants;
+
+
+public class FormalMLDiagramTextProvider implements DiagramTextProvider {
+
+	public final static String DEFAULT_PUML_TEXT =
+			PlantumlConstants.START_UML + "\n"
+			+ "\nIEditorPart -> ITextSelection: getEditorTextSelection Request"
+			+ "\nITextSelection --> IEditorPart: getEditorTextSelection Response"
+
+			+ "\nIEditorPart -> ITextSelection: getEcoreObjectSelection Request"
+			+ "\nIEditorPart <-- ITextSelection: getEcoreObjectSelection Response\n"
+
+			+ "\nIEditorPart -> ITextSelection: getDiagramText Request"
+			+ "\nIEditorPart <-- ITextSelection: getDiagramText Response"
+			+ "\n\n" + PlantumlConstants.END_UML;
+
+	public final static String DEFAULT_PUML_TEXT_VIEW_PART =
+			PlantumlConstants.START_UML + "\n"
+			+ "\nIViewPart -> TreeSelection: getFilePath Request"
+			+ "\nTreeSelection --> IViewPart: getFilePath Response"
+			+ "\n\n" + PlantumlConstants.END_UML;
+
+
+    private final FML2PlantUMLText fml2PlantUMLText = new FML2PlantUMLText();
+
+    private final EObjectAtOffsetHelper eObjectAtOffsetHelper = new EObjectAtOffsetHelper();
+
+	public FormalMLDiagramTextProvider() {
+	}
+
+
+	protected String textFileContent(final String gvFilePath) {
+		String fileContent = "";
+		try {
+			fileContent = Files.readString(Path.of(gvFilePath));
+		} catch (final IOException e) {
+			fileContent = e.getMessage();
+		}
+
+		return fileContent;
+	}
+
+	protected String dotFileDiagramText(final String gvFilePath) {
+		final StringBuffer gvBuffer = new StringBuffer(PlantumlConstants.START_UML);
+		gvBuffer.append('\n')
+				.append(textFileContent(gvFilePath))
+				.append('\n')
+				.append(PlantumlConstants.END_UML);
+
+		return gvBuffer.toString();
+	}
+
+
+    public String fmlEcoreDiagramText(final IEditorPart editorPart, final ISelection selection) {
+        final XtextEditor xe = (XtextEditor) editorPart;
+        final XtextResource res = xe.getDocument().readOnly(new IUnitOfWork<XtextResource, XtextResource>() {
+            @Override
+            public XtextResource exec(final XtextResource st) {
+                return st;
+            }
+        });
+
+        if (selection instanceof ITextSelection) {
+            final ITextSelection its = (ITextSelection) selection;
+            final int offset = its.getOffset();
+            final EObject eObj = eObjectAtOffsetHelper.resolveElementAt(res, offset);
+            final List<? extends EObject> eObjs = fml2PlantUMLText.setupVisualizationEObjects(eObj);
+            if (eObjs != null) {
+                return fml2PlantUMLText.FML2PUML(eObjs);
+            }
+        }
+
+        return fml2PlantUMLText.FML2PUML(res.getContents());
+    }
+
+
+	@Override
+	public boolean supportsSelection(final ISelection selection) {
+		return selection instanceof ITextSelection;
+	}
+
+	@Override
+	public String getDiagramText(final IEditorPart editorPart, final ISelection selection) {
+//		return DEFAULT_PUML_TEXT;
+		final IEditorInput editorInput = editorPart.getEditorInput();
+		if( editorInput instanceof FileEditorInput )
+		{
+			final IFile file = ((FileEditorInput) editorInput).getFile();
+			if( "xlia".equals(file.getFileExtension())
+				|| "fml".equals(file.getFileExtension()) ) {
+				if( (editorPart instanceof XtextEditor) && (selection instanceof ITextSelection)) {
+					return fmlEcoreDiagramText(editorPart, selection);
+				}
+			}
+			else if( "gv".equals(file.getFileExtension()) ) {
+				return dotFileDiagramText(file.getLocation().toOSString());
+			}
+//			else if( "puml".equals(file.getFileExtension()) ) {
+//				return textFileContent(file.getLocation().toOSString());
+//			}
+		}
+		return DiagramTextProvider.super.getDiagramText(editorPart, selection);
+	}
+
+	@Override
+	public String getDiagramText(final IViewPart viewPart, final ISelection selection) {
+//		return DEFAULT_PUML_TEXT_VIEW_PART;
+
+		if( selection instanceof TreeSelection ) {
+			final TreeSelection treeSelection = (TreeSelection) selection;
+			if( ! treeSelection.isEmpty() ) {
+				final Object element = treeSelection.getFirstElement();
+				if( element instanceof IFile ) {
+					final IResource resource = (IFile) element;
+					if( "gv".equals(resource.getFileExtension()) ) {
+						return dotFileDiagramText(resource.getLocation().toOSString());
+					}
+					else if( "puml".equals(resource.getFileExtension()) ) {
+						return textFileContent(resource.getLocation().toOSString());
+					}
+				}
+			}
+		}
+		return DiagramTextProvider.super.getDiagramText(viewPart, selection);
+	}
+
+	@Override
+	public boolean supportsEditor(final IEditorPart editorPart) {
+		final IEditorInput editorInput = editorPart.getEditorInput();
+		if( editorInput instanceof FileEditorInput )
+		{
+			final IFile file = ((FileEditorInput) editorInput).getFile();
+			return( "xlia".equals(file.getFileExtension())
+				|| "fml".equals(file.getFileExtension())
+				|| "gv".equals(file.getFileExtension()) );
+		}
+
+		return DiagramTextProvider.super.supportsEditor(editorPart);
+	}
+
+	@Override
+	public boolean supportsView(final IViewPart viewPart) {
+		if( viewPart instanceof ProjectExplorer ) {
+			return true;
+		}
+
+		return DiagramTextProvider.super.supportsView(viewPart);
+	}
+
+//	@Override
+//	public boolean supportsPath(final IPath path) {
+//        return "xlia".equals(path.getFileExtension())
+//        		|| "fml".equals(path.getFileExtension())
+//        		|| "gv".equals(path.getFileExtension());
+//	}
+//
+//	@Override
+//	public String getDiagramText(final IEditorPart editorPart, final ISelection selection, final Map<String, Object> markerAttributes) {
+//		// TODO Auto-generated method stub
+//		return null;
+//	}
+//
+//	@Override
+//	public String getDiagramText(final IPath path) {
+//		if( "gv".equals(path.getFileExtension()) ) {
+//			return dotFileDiagramText(path.toOSString());
+//		}
+//		else if( "puml".equals(path.getFileExtension()) ) {
+//			return textFileContent(path.toOSString());
+//		}
+//		return null;
+//	}
+
+
+}
\ No newline at end of file
diff --git a/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/pom.xml b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/pom.xml
new file mode 100644
index 0000000..2089656
--- /dev/null
+++ b/editor/xlia/org.eclipse.efm.formalml.plantuml/src/org/eclipse/efm/formalml/plantuml/pom.xml
@@ -0,0 +1,14 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
+	xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
+	<modelVersion>4.0.0</modelVersion>
+	<parent>
+		<groupId>org.eclipse.efm</groupId>
+		<artifactId>org.eclipse.efm.modeling.editor.xlia</artifactId>
+		<version>0.0.1-SNAPSHOT</version>
+	</parent>
+	<artifactId>org.eclipse.efm.formalml.plantuml</artifactId>
+	<packaging>eclipse-plugin</packaging>
+	<name>org.eclipse.efm.formalml.plantuml</name>
+	<description>This plug-in contains PlantUML's extension for graphical xLIA model visualization.</description>
+</project>
\ No newline at end of file
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.classpath b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/META-INF/MANIFEST.MF
index 0419e94..18409b9 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/META-INF/MANIFEST.MF
@@ -10,7 +10,7 @@
  org.eclipse.xtext.ide,
  org.eclipse.xtext.xbase.ide,
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.formalml.xtext.ide.contentassist.antlr,
  org.eclipse.efm.formalml.xtext.ide.contentassist.antlr.internal
 Automatic-Module-Name: org.eclipse.efm.formalml.xtext.ide
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/AbstractFormalMLIdeModule.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/AbstractFormalMLIdeModule.java
index c8f1b41..c7eaec9 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/AbstractFormalMLIdeModule.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/AbstractFormalMLIdeModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ide;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/FormalMLParser.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/FormalMLParser.java
index 11f09ac..45a75a2 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/FormalMLParser.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/FormalMLParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ide.contentassist.antlr;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/PartialFormalMLContentAssistParser.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/PartialFormalMLContentAssistParser.java
index db7cf3c..e554b53 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/PartialFormalMLContentAssistParser.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/PartialFormalMLContentAssistParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ide.contentassist.antlr;
 
@@ -20,10 +20,9 @@
 import org.eclipse.xtext.AbstractRule;
 import org.eclipse.xtext.ide.editor.contentassist.antlr.FollowElement;
 import org.eclipse.xtext.ide.editor.contentassist.antlr.internal.AbstractInternalContentAssistParser;
-import org.eclipse.xtext.ide.editor.partialEditing.IPartialEditingContentAssistParser;
 import org.eclipse.xtext.util.PolymorphicDispatcher;
 
-public class PartialFormalMLContentAssistParser extends FormalMLParser implements IPartialEditingContentAssistParser {
+public class PartialFormalMLContentAssistParser extends FormalMLParser {
 
 	private AbstractRule rule;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalML.g b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalML.g
index bf6f890..1e031ea 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalML.g
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalML.g
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 grammar InternalFormalML;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalMLParser.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalMLParser.java
index 28b5f2e..3a14abd 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalMLParser.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ide/src-gen/org/eclipse/efm/formalml/xtext/ide/contentassist/antlr/internal/InternalFormalMLParser.java
@@ -33,7 +33,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 @SuppressWarnings("all")
 interface InternalFormalMLParserSignatures {
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.classpath b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.classpath
index c461527..9a77662 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/">
 		<attributes>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/META-INF/MANIFEST.MF
index d1bab03..6156aca 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/META-INF/MANIFEST.MF
@@ -13,7 +13,7 @@
  org.eclipse.xtext.xbase.lib;bundle-version="2.14.0",
  org.eclipse.xtext.testing,
  org.eclipse.xtext.xbase.testing
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.formalml.xtext.tests;x-internal=true
 Import-Package: org.hamcrest.core,
  org.junit;version="4.5.0",
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/src-gen/org/eclipse/efm/formalml/xtext/tests/FormalMLInjectorProvider.java b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/src-gen/org/eclipse/efm/formalml/xtext/tests/FormalMLInjectorProvider.java
index 514273f..2e659b6 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.tests/src-gen/org/eclipse/efm/formalml/xtext/tests/FormalMLInjectorProvider.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.tests/src-gen/org/eclipse/efm/formalml/xtext/tests/FormalMLInjectorProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.tests;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/.classpath b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/.classpath
index c461527..c7f7faa 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/.classpath
@@ -1,18 +1,17 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src/">
+	<classpathentry kind="src" path="src">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
 	</classpathentry>
-	<classpathentry kind="src" path="src-gen/">
-		<attributes>
-			<attribute name="test" value="true"/>
-		</attributes>
-	</classpathentry>
-	<classpathentry kind="src" path="xtend-gen/">
+	<classpathentry kind="src" path="src-gen">
 		<attributes>
 			<attribute name="test" value="true"/>
 		</attributes>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/META-INF/MANIFEST.MF
index accd26b..69d69e2 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/META-INF/MANIFEST.MF
@@ -15,7 +15,7 @@
  org.eclipse.xtext.testing,
  org.eclipse.xtext.xbase.testing,
  org.eclipse.xtext.ui.testing
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.formalml.xtext.ui.tests;x-internal=true
 Import-Package: org.hamcrest.core,
  org.junit;version="4.5.0",
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/build.properties b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/build.properties
index db8fe81..9e50af2 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/build.properties
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/build.properties
@@ -11,7 +11,6 @@
 #   - Initial API and Implementation
 ###############################################################################
 source.. = src/,\
-           src-gen/,\
-           xtend-gen/
+           src-gen/
 bin.includes = .,\
                META-INF/
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/src-gen/org/eclipse/efm/formalml/xtext/ui/tests/FormalMLUiInjectorProvider.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/src-gen/org/eclipse/efm/formalml/xtext/ui/tests/FormalMLUiInjectorProvider.java
index b264f20..62b2167 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/src-gen/org/eclipse/efm/formalml/xtext/ui/tests/FormalMLUiInjectorProvider.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui.tests/src-gen/org/eclipse/efm/formalml/xtext/ui/tests/FormalMLUiInjectorProvider.java
@@ -9,6 +9,9 @@
 * Contributors:
 *  Arnault Lapitre (CEA LIST) arnault.lapitre@cea.fr
 *  - Initial API and implementation
+*
+******************************************************************************
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ui.tests;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.classpath b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/META-INF/MANIFEST.MF
index 73fc98f..03d5b59 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/META-INF/MANIFEST.MF
@@ -19,7 +19,7 @@
  org.eclipse.xtend.lib;bundle-version="2.14.0";resolution:=optional,
  org.eclipse.xtext.xbase.lib;bundle-version="2.14.0"
 Import-Package: org.apache.log4j
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.formalml.xtext.ui.quickfix,
  org.eclipse.efm.formalml.xtext.ui.contentassist,
  org.eclipse.efm.formalml.xtext.ui.internal
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/plugin.xml_gen b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/plugin.xml_gen
index 8fb505a..4a1809a 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/plugin.xml_gen
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/plugin.xml_gen
@@ -339,7 +339,7 @@
 	<!-- Quick Outline -->
 	<extension
 		point="org.eclipse.ui.handlers">
-		<handler 
+		<handler
 			class="org.eclipse.efm.formalml.xtext.ui.FormalMLExecutableExtensionFactory:org.eclipse.xtext.ui.editor.outline.quickoutline.ShowQuickOutlineActionHandler"
 			commandId="org.eclipse.xtext.ui.editor.outline.QuickOutline">
 			<activeWhen>
@@ -399,7 +399,7 @@
 	</extension>
 	<!-- Rename Refactoring -->
 	<extension point="org.eclipse.ui.handlers">
-		<handler 
+		<handler
 			class="org.eclipse.efm.formalml.xtext.ui.FormalMLExecutableExtensionFactory:org.eclipse.xtext.ui.refactoring.ui.DefaultRenameElementHandler"
 			commandId="org.eclipse.xtext.ui.refactoring.RenameElement">
 			<activeWhen>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/AbstractFormalMLUiModule.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/AbstractFormalMLUiModule.java
index 8dc10b3..6265436 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/AbstractFormalMLUiModule.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/AbstractFormalMLUiModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ui;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/FormalMLExecutableExtensionFactory.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/FormalMLExecutableExtensionFactory.java
index 7463d56..aefaafc 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/FormalMLExecutableExtensionFactory.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/FormalMLExecutableExtensionFactory.java
@@ -11,15 +11,15 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ui;
 
 import com.google.inject.Injector;
-import org.eclipse.core.runtime.Platform;
 import org.eclipse.efm.formalml.xtext.ui.internal.XtextActivator;
 import org.eclipse.xtext.ui.guice.AbstractGuiceAwareExecutableExtensionFactory;
 import org.osgi.framework.Bundle;
+import org.osgi.framework.FrameworkUtil;
 
 /**
  * This class was generated. Customizations should only happen in a newly
@@ -29,7 +29,7 @@
 
 	@Override
 	protected Bundle getBundle() {
-		return Platform.getBundle(XtextActivator.PLUGIN_ID);
+		return FrameworkUtil.getBundle(XtextActivator.class);
 	}
 	
 	@Override
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/contentassist/AbstractFormalMLProposalProvider.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/contentassist/AbstractFormalMLProposalProvider.java
index 7e93c3f..bd517ec 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/contentassist/AbstractFormalMLProposalProvider.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/contentassist/AbstractFormalMLProposalProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ui.contentassist;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/internal/XtextActivator.java b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/internal/XtextActivator.java
index 248df90..463a35e 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/internal/XtextActivator.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext.ui/src-gen/org/eclipse/efm/formalml/xtext/ui/internal/XtextActivator.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.ui.internal;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/.classpath b/editor/xlia/org.eclipse.efm.formalml.xtext/.classpath
index 026e45b..d0c5d81 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/.classpath
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="src" path="src-gen/"/>
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/.settings/org.eclipse.jdt.core.prefs b/editor/xlia/org.eclipse.efm.formalml.xtext/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/.settings/org.eclipse.jdt.core.prefs
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/META-INF/MANIFEST.MF b/editor/xlia/org.eclipse.efm.formalml.xtext/META-INF/MANIFEST.MF
index 3cfbe59..e41ddb2 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/META-INF/MANIFEST.MF
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/META-INF/MANIFEST.MF
@@ -13,7 +13,7 @@
  org.antlr.runtime;bundle-version="[3.2.0,3.2.1)",
  org.eclipse.xtext.util,
  org.eclipse.xtend.lib;bundle-version="2.14.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.formalml.xtext,
  org.eclipse.efm.formalml.xtext.scoping,
  org.eclipse.efm.formalml.xtext.generator,
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/AbstractFormalMLRuntimeModule.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/AbstractFormalMLRuntimeModule.java
index e3b6b09..11b1ae2 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/AbstractFormalMLRuntimeModule.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/AbstractFormalMLRuntimeModule.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/FormalMLStandaloneSetupGenerated.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/FormalMLStandaloneSetupGenerated.java
index ceaab6f..3463db3 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/FormalMLStandaloneSetupGenerated.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/FormalMLStandaloneSetupGenerated.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLAntlrTokenFileProvider.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLAntlrTokenFileProvider.java
index 2c269e7..0e51c8e 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLAntlrTokenFileProvider.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLAntlrTokenFileProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.parser.antlr;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLParser.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLParser.java
index 6b9144b..9f862e6 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLParser.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/FormalMLParser.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.parser.antlr;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalML.g b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalML.g
index d9b218c..b7ed99d 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalML.g
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalML.g
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 grammar InternalFormalML;
 
@@ -1337,7 +1337,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getXliaSystemRule());
 										}
-										setWithLastConsumed($current, "timed", true, "timed");
+										setWithLastConsumed($current, "timed", lv_timed_2_0 != null, "timed");
 									}
 								)
 								))
@@ -1360,7 +1360,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getXliaSystemRule());
 										}
-										setWithLastConsumed($current, "dense_timed", true, "timed#dense");
+										setWithLastConsumed($current, "dense_timed", lv_dense_timed_3_0 != null, "timed#dense");
 									}
 								)
 								))
@@ -1383,7 +1383,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getXliaSystemRule());
 										}
-										setWithLastConsumed($current, "discrete_timed", true, "timed#discrete");
+										setWithLastConsumed($current, "discrete_timed", lv_discrete_timed_4_0 != null, "timed#discrete");
 									}
 								)
 								))
@@ -1406,7 +1406,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getXliaSystemRule());
 										}
-										setWithLastConsumed($current, "input_enabled", true, "input_enabled");
+										setWithLastConsumed($current, "input_enabled", lv_input_enabled_5_0 != null, "input_enabled");
 									}
 								)
 								))
@@ -1429,7 +1429,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getXliaSystemRule());
 										}
-										setWithLastConsumed($current, "unsafe", true, "unsafe");
+										setWithLastConsumed($current, "unsafe", lv_unsafe_6_0 != null, "unsafe");
 									}
 								)
 								))
@@ -3048,7 +3048,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getMachineBlockRule());
 										}
-										setWithLastConsumed($current, "timed", true, "timed");
+										setWithLastConsumed($current, "timed", lv_timed_2_0 != null, "timed");
 									}
 								)
 								))
@@ -3071,7 +3071,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getMachineBlockRule());
 										}
-										setWithLastConsumed($current, "dense_timed", true, "timed#dense");
+										setWithLastConsumed($current, "dense_timed", lv_dense_timed_3_0 != null, "timed#dense");
 									}
 								)
 								))
@@ -3094,7 +3094,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getMachineBlockRule());
 										}
-										setWithLastConsumed($current, "discrete_timed", true, "timed#discrete");
+										setWithLastConsumed($current, "discrete_timed", lv_discrete_timed_4_0 != null, "timed#discrete");
 									}
 								)
 								))
@@ -3117,7 +3117,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getMachineBlockRule());
 										}
-										setWithLastConsumed($current, "input_enabled", true, "input_enabled");
+										setWithLastConsumed($current, "input_enabled", lv_input_enabled_5_0 != null, "input_enabled");
 									}
 								)
 								))
@@ -3140,7 +3140,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getMachineBlockRule());
 										}
-										setWithLastConsumed($current, "lifeline", true, "lifeline");
+										setWithLastConsumed($current, "lifeline", lv_lifeline_6_0 != null, "lifeline");
 									}
 								)
 								))
@@ -6345,7 +6345,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getStatemachineRule());
 										}
-										setWithLastConsumed($current, "timed", true, "timed");
+										setWithLastConsumed($current, "timed", lv_timed_3_0 != null, "timed");
 									}
 								)
 								))
@@ -6368,7 +6368,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getStatemachineRule());
 										}
-										setWithLastConsumed($current, "dense_timed", true, "timed#dense");
+										setWithLastConsumed($current, "dense_timed", lv_dense_timed_4_0 != null, "timed#dense");
 									}
 								)
 								))
@@ -6391,7 +6391,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getStatemachineRule());
 										}
-										setWithLastConsumed($current, "discrete_timed", true, "timed#discrete");
+										setWithLastConsumed($current, "discrete_timed", lv_discrete_timed_5_0 != null, "timed#discrete");
 									}
 								)
 								))
@@ -6414,7 +6414,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getStatemachineRule());
 										}
-										setWithLastConsumed($current, "input_enabled", true, "input_enabled");
+										setWithLastConsumed($current, "input_enabled", lv_input_enabled_6_0 != null, "input_enabled");
 									}
 								)
 								))
@@ -6437,7 +6437,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getStatemachineRule());
 										}
-										setWithLastConsumed($current, "lifeline", true, "lifeline");
+										setWithLastConsumed($current, "lifeline", lv_lifeline_7_0 != null, "lifeline");
 									}
 								)
 								))
@@ -8391,7 +8391,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getCompositeStateRule());
 					}
-					setWithLastConsumed($current, "composite", true, "state");
+					setWithLastConsumed($current, "composite", lv_composite_1_0 != null, "state");
 				}
 			)
 		)
@@ -8421,7 +8421,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getCompositeStateRule());
 						}
-						setWithLastConsumed($current, "orthogonal", true, "and");
+						setWithLastConsumed($current, "orthogonal", lv_orthogonal_5_0 != null, "and");
 					}
 				)
 			)
@@ -9140,7 +9140,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getSimpleStateRule());
 					}
-					setWithLastConsumed($current, "simple", true, "state");
+					setWithLastConsumed($current, "simple", lv_simple_1_0 != null, "state");
 				}
 			)
 		)
@@ -9501,7 +9501,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getStartStateRule());
 							}
-							setWithLastConsumed($current, "simple", true, "state");
+							setWithLastConsumed($current, "simple", lv_simple_1_0 != null, "state");
 						}
 					)
 				)
@@ -9554,7 +9554,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getStartStateRule());
 						}
-						setWithLastConsumed($current, "simple", true, "#start");
+						setWithLastConsumed($current, "simple", lv_simple_7_0 != null, "#start");
 					}
 				)
 			)
@@ -9969,7 +9969,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getFinalStateRule());
 							}
-							setWithLastConsumed($current, "simple", true, "state");
+							setWithLastConsumed($current, "simple", lv_simple_1_0 != null, "state");
 						}
 					)
 				)
@@ -10022,7 +10022,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getFinalStateRule());
 						}
-						setWithLastConsumed($current, "simple", true, "#final");
+						setWithLastConsumed($current, "simple", lv_simple_7_0 != null, "#final");
 					}
 				)
 			)
@@ -11562,7 +11562,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getRoutineRule());
 					}
-					setWithLastConsumed($current, "macro", true, "macro");
+					setWithLastConsumed($current, "macro", lv_macro_1_0 != null, "macro");
 				}
 			)
 		)?
@@ -13639,7 +13639,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getOtherDataTypeDefinitionRule());
 					}
-					setWithLastConsumed($current, "typedef", true, "type");
+					setWithLastConsumed($current, "typedef", lv_typedef_2_0 != null, "type");
 				}
 			)
 		)
@@ -15069,7 +15069,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getPrimitiveTimeTypeRule());
 						}
-						setWithLastConsumed($current, "clock", true, "clock");
+						setWithLastConsumed($current, "clock", lv_clock_7_0 != null, "clock");
 					}
 				)
 			)
@@ -15606,7 +15606,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getIntervalTypeRule());
 						}
-						setWithLastConsumed($current, "lopen", true, "]");
+						setWithLastConsumed($current, "lopen", lv_lopen_4_0 != null, "]");
 					}
 				)
 			)
@@ -15674,7 +15674,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getIntervalTypeRule());
 						}
-						setWithLastConsumed($current, "ropen", true, "[");
+						setWithLastConsumed($current, "ropen", lv_ropen_10_0 != null, "[");
 					}
 				)
 			)
@@ -15811,7 +15811,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getIntervalTypeDefinitionRule());
 						}
-						setWithLastConsumed($current, "lopen", true, "]");
+						setWithLastConsumed($current, "lopen", lv_lopen_8_0 != null, "]");
 					}
 				)
 			)
@@ -15879,7 +15879,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getIntervalTypeDefinitionRule());
 						}
-						setWithLastConsumed($current, "ropen", true, "[");
+						setWithLastConsumed($current, "ropen", lv_ropen_14_0 != null, "[");
 					}
 				)
 			)
@@ -16000,7 +16000,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getCollectionTypeRule());
 								}
-								setWithLastConsumed($current, "unbounded", true, "*");
+								setWithLastConsumed($current, "unbounded", lv_unbounded_6_0 != null, "*");
 							}
 						)
 					)
@@ -16179,7 +16179,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getCollectionTypeDefinitionRule());
 							}
-							setWithLastConsumed($current, "unbounded", true, "*");
+							setWithLastConsumed($current, "unbounded", lv_unbounded_10_0 != null, "*");
 						}
 					)
 				)
@@ -16371,7 +16371,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getEnumerationTypeDefinitionRule());
 					}
-					setWithLastConsumed($current, "typedef", true, "type");
+					setWithLastConsumed($current, "typedef", lv_typedef_2_0 != null, "type");
 				}
 			)
 		)
@@ -16710,7 +16710,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getStructureTypeDefinitionRule());
 					}
-					setWithLastConsumed($current, "typedef", true, "type");
+					setWithLastConsumed($current, "typedef", lv_typedef_2_0 != null, "type");
 				}
 			)
 		)
@@ -16913,7 +16913,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getUnionTypeDefinitionRule());
 					}
-					setWithLastConsumed($current, "typedef", true, "type");
+					setWithLastConsumed($current, "typedef", lv_typedef_2_0 != null, "type");
 				}
 			)
 		)
@@ -17116,7 +17116,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getChoiceTypeDefinitionRule());
 					}
-					setWithLastConsumed($current, "typedef", true, "type");
+					setWithLastConsumed($current, "typedef", lv_typedef_2_0 != null, "type");
 				}
 			)
 		)
@@ -17255,7 +17255,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getModifierRule());
 										}
-										setWithLastConsumed($current, "static", true, "static");
+										setWithLastConsumed($current, "static", lv_static_2_0 != null, "static");
 									}
 								)
 								))
@@ -17278,7 +17278,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getModifierRule());
 										}
-										setWithLastConsumed($current, "final", true, "final");
+										setWithLastConsumed($current, "final", lv_final_3_0 != null, "final");
 									}
 								)
 								))
@@ -17301,7 +17301,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getModifierRule());
 										}
-										setWithLastConsumed($current, "volatile", true, "volatile");
+										setWithLastConsumed($current, "volatile", lv_volatile_4_0 != null, "volatile");
 									}
 								)
 								))
@@ -17324,7 +17324,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getModifierRule());
 										}
-										setWithLastConsumed($current, "transient", true, "transient");
+										setWithLastConsumed($current, "transient", lv_transient_5_0 != null, "transient");
 									}
 								)
 								))
@@ -17347,7 +17347,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getModifierRule());
 										}
-										setWithLastConsumed($current, "optional", true, "optional");
+										setWithLastConsumed($current, "optional", lv_optional_6_0 != null, "optional");
 									}
 								)
 								))
@@ -17986,7 +17986,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getVariableRule());
 						}
-						setWithLastConsumed($current, "const", true, "val");
+						setWithLastConsumed($current, "const", lv_const_4_0 != null, "val");
 					}
 				)
 			)
@@ -18003,7 +18003,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getVariableRule());
 								}
-								setWithLastConsumed($current, "const", true, "const");
+								setWithLastConsumed($current, "const", lv_const_5_0 != null, "const");
 							}
 						)
 					)
@@ -18018,7 +18018,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getVariableRule());
 								}
-								setWithLastConsumed($current, "const", true, "final");
+								setWithLastConsumed($current, "const", lv_const_6_0 != null, "final");
 							}
 						)
 					)
@@ -18033,7 +18033,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getVariableRule());
 							}
-							setWithLastConsumed($current, "macro", true, "macro");
+							setWithLastConsumed($current, "macro", lv_macro_7_0 != null, "macro");
 						}
 					)
 				)?
@@ -18056,7 +18056,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getVariableRule());
 							}
-							setWithLastConsumed($current, "macro", true, "macro");
+							setWithLastConsumed($current, "macro", lv_macro_9_0 != null, "macro");
 						}
 					)
 				)
@@ -18076,7 +18076,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getVariableRule());
 								}
-								setWithLastConsumed($current, "const", true, "val");
+								setWithLastConsumed($current, "const", lv_const_11_0 != null, "val");
 							}
 						)
 					)
@@ -18112,7 +18112,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getVariableRule());
 					}
-					setWithLastConsumed($current, "reference", true, "&");
+					setWithLastConsumed($current, "reference", lv_reference_13_0 != null, "&");
 				}
 			)
 		)?
@@ -18272,7 +18272,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getVariableImplRule());
 						}
-						setWithLastConsumed($current, "const", true, "val");
+						setWithLastConsumed($current, "const", lv_const_2_0 != null, "val");
 					}
 				)
 			)
@@ -18288,7 +18288,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getVariableImplRule());
 							}
-							setWithLastConsumed($current, "const", true, "const");
+							setWithLastConsumed($current, "const", lv_const_3_0 != null, "const");
 						}
 					)
 				)
@@ -18302,7 +18302,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getVariableImplRule());
 							}
-							setWithLastConsumed($current, "macro", true, "macro");
+							setWithLastConsumed($current, "macro", lv_macro_4_0 != null, "macro");
 						}
 					)
 				)?
@@ -18325,7 +18325,7 @@
 							if ($current==null) {
 								$current = createModelElement(grammarAccess.getVariableImplRule());
 							}
-							setWithLastConsumed($current, "macro", true, "macro");
+							setWithLastConsumed($current, "macro", lv_macro_6_0 != null, "macro");
 						}
 					)
 				)
@@ -18345,7 +18345,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getVariableImplRule());
 								}
-								setWithLastConsumed($current, "const", true, "val");
+								setWithLastConsumed($current, "const", lv_const_8_0 != null, "val");
 							}
 						)
 					)
@@ -18381,7 +18381,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getVariableImplRule());
 					}
-					setWithLastConsumed($current, "reference", true, "&");
+					setWithLastConsumed($current, "reference", lv_reference_10_0 != null, "&");
 				}
 			)
 		)?
@@ -19494,7 +19494,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getBufferContainerTypeRule());
 								}
-								setWithLastConsumed($current, "unbounded", true, "*");
+								setWithLastConsumed($current, "unbounded", lv_unbounded_5_0 != null, "*");
 							}
 						)
 					)
@@ -19549,7 +19549,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getBufferContainerTypeRule());
 								}
-								setWithLastConsumed($current, "unbounded", true, "*");
+								setWithLastConsumed($current, "unbounded", lv_unbounded_10_0 != null, "*");
 							}
 						)
 					)
@@ -21328,7 +21328,7 @@
 					if ($current==null) {
 						$current = createModelElement(grammarAccess.getTransitionRule());
 					}
-					setWithLastConsumed($current, "transient", true, "transient");
+					setWithLastConsumed($current, "transient", lv_transient_1_0 != null, "transient");
 				}
 			)
 		)?
@@ -21836,7 +21836,7 @@
 										if ($current==null) {
 											$current = createModelElement(grammarAccess.getTransitionMoeRule());
 										}
-										setWithLastConsumed($current, "isElse", true, "else");
+										setWithLastConsumed($current, "isElse", lv_isElse_4_0 != null, "else");
 									}
 								)
 							)
@@ -21853,7 +21853,7 @@
 								if ($current==null) {
 									$current = createModelElement(grammarAccess.getTransitionMoeRule());
 								}
-								setWithLastConsumed($current, "isElse", true, "else");
+								setWithLastConsumed($current, "isElse", lv_isElse_5_0 != null, "else");
 							}
 						)
 					)
@@ -24903,7 +24903,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getInvokeStatementRule());
 						}
-						setWithLastConsumed($current, "execRoutine", true, "(");
+						setWithLastConsumed($current, "execRoutine", lv_execRoutine_3_0 != null, "(");
 					}
 				)
 			)
@@ -25044,7 +25044,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getInvokeStatementRule());
 						}
-						setWithLastConsumed($current, "execRoutine", true, "exec");
+						setWithLastConsumed($current, "execRoutine", lv_execRoutine_16_0 != null, "exec");
 					}
 				)
 			)
@@ -25208,7 +25208,7 @@
 						if ($current==null) {
 							$current = createModelElement(grammarAccess.getInvokeStatementRule());
 						}
-						setWithLastConsumed($current, "callProcedure", true, "call");
+						setWithLastConsumed($current, "callProcedure", lv_callProcedure_31_0 != null, "call");
 					}
 				)
 			)
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalMLParser.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalMLParser.java
index c0cc577..27bec4f 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalMLParser.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/parser/antlr/internal/InternalFormalMLParser.java
@@ -34,7 +34,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 @SuppressWarnings("all")
 public class InternalFormalMLParser extends AbstractInternalAntlrParser {
@@ -4519,7 +4519,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getXliaSystemRule());
             	      										}
-            	      										setWithLastConsumed(current, "timed", true, "timed");
+            	      										setWithLastConsumed(current, "timed", lv_timed_2_0 != null, "timed");
             	      									
             	    }
 
@@ -4579,7 +4579,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getXliaSystemRule());
             	      										}
-            	      										setWithLastConsumed(current, "dense_timed", true, "timed#dense");
+            	      										setWithLastConsumed(current, "dense_timed", lv_dense_timed_3_0 != null, "timed#dense");
             	      									
             	    }
 
@@ -4639,7 +4639,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getXliaSystemRule());
             	      										}
-            	      										setWithLastConsumed(current, "discrete_timed", true, "timed#discrete");
+            	      										setWithLastConsumed(current, "discrete_timed", lv_discrete_timed_4_0 != null, "timed#discrete");
             	      									
             	    }
 
@@ -4699,7 +4699,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getXliaSystemRule());
             	      										}
-            	      										setWithLastConsumed(current, "input_enabled", true, "input_enabled");
+            	      										setWithLastConsumed(current, "input_enabled", lv_input_enabled_5_0 != null, "input_enabled");
             	      									
             	    }
 
@@ -4759,7 +4759,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getXliaSystemRule());
             	      										}
-            	      										setWithLastConsumed(current, "unsafe", true, "unsafe");
+            	      										setWithLastConsumed(current, "unsafe", lv_unsafe_6_0 != null, "unsafe");
             	      									
             	    }
 
@@ -9193,7 +9193,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getMachineBlockRule());
             	      										}
-            	      										setWithLastConsumed(current, "timed", true, "timed");
+            	      										setWithLastConsumed(current, "timed", lv_timed_2_0 != null, "timed");
             	      									
             	    }
 
@@ -9253,7 +9253,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getMachineBlockRule());
             	      										}
-            	      										setWithLastConsumed(current, "dense_timed", true, "timed#dense");
+            	      										setWithLastConsumed(current, "dense_timed", lv_dense_timed_3_0 != null, "timed#dense");
             	      									
             	    }
 
@@ -9313,7 +9313,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getMachineBlockRule());
             	      										}
-            	      										setWithLastConsumed(current, "discrete_timed", true, "timed#discrete");
+            	      										setWithLastConsumed(current, "discrete_timed", lv_discrete_timed_4_0 != null, "timed#discrete");
             	      									
             	    }
 
@@ -9373,7 +9373,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getMachineBlockRule());
             	      										}
-            	      										setWithLastConsumed(current, "input_enabled", true, "input_enabled");
+            	      										setWithLastConsumed(current, "input_enabled", lv_input_enabled_5_0 != null, "input_enabled");
             	      									
             	    }
 
@@ -9433,7 +9433,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getMachineBlockRule());
             	      										}
-            	      										setWithLastConsumed(current, "lifeline", true, "lifeline");
+            	      										setWithLastConsumed(current, "lifeline", lv_lifeline_6_0 != null, "lifeline");
             	      									
             	    }
 
@@ -18089,7 +18089,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getStatemachineRule());
             	      										}
-            	      										setWithLastConsumed(current, "timed", true, "timed");
+            	      										setWithLastConsumed(current, "timed", lv_timed_3_0 != null, "timed");
             	      									
             	    }
 
@@ -18149,7 +18149,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getStatemachineRule());
             	      										}
-            	      										setWithLastConsumed(current, "dense_timed", true, "timed#dense");
+            	      										setWithLastConsumed(current, "dense_timed", lv_dense_timed_4_0 != null, "timed#dense");
             	      									
             	    }
 
@@ -18209,7 +18209,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getStatemachineRule());
             	      										}
-            	      										setWithLastConsumed(current, "discrete_timed", true, "timed#discrete");
+            	      										setWithLastConsumed(current, "discrete_timed", lv_discrete_timed_5_0 != null, "timed#discrete");
             	      									
             	    }
 
@@ -18269,7 +18269,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getStatemachineRule());
             	      										}
-            	      										setWithLastConsumed(current, "input_enabled", true, "input_enabled");
+            	      										setWithLastConsumed(current, "input_enabled", lv_input_enabled_6_0 != null, "input_enabled");
             	      									
             	    }
 
@@ -18329,7 +18329,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getStatemachineRule());
             	      										}
-            	      										setWithLastConsumed(current, "lifeline", true, "lifeline");
+            	      										setWithLastConsumed(current, "lifeline", lv_lifeline_7_0 != null, "lifeline");
             	      									
             	    }
 
@@ -23837,7 +23837,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getCompositeStateRule());
               					}
-              					setWithLastConsumed(current, "composite", true, "state");
+              					setWithLastConsumed(current, "composite", lv_composite_1_0 != null, "state");
               				
             }
 
@@ -23925,7 +23925,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getCompositeStateRule());
                       						}
-                      						setWithLastConsumed(current, "orthogonal", true, "and");
+                      						setWithLastConsumed(current, "orthogonal", lv_orthogonal_5_0 != null, "and");
                       					
                     }
 
@@ -25974,7 +25974,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getSimpleStateRule());
               					}
-              					setWithLastConsumed(current, "simple", true, "state");
+              					setWithLastConsumed(current, "simple", lv_simple_1_0 != null, "state");
               				
             }
 
@@ -27035,7 +27035,7 @@
                       							if (current==null) {
                       								current = createModelElement(grammarAccess.getStartStateRule());
                       							}
-                      							setWithLastConsumed(current, "simple", true, "state");
+                      							setWithLastConsumed(current, "simple", lv_simple_1_0 != null, "state");
                       						
                     }
 
@@ -27146,7 +27146,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getStartStateRule());
                       						}
-                      						setWithLastConsumed(current, "simple", true, "#start");
+                      						setWithLastConsumed(current, "simple", lv_simple_7_0 != null, "#start");
                       					
                     }
 
@@ -28279,7 +28279,7 @@
                       							if (current==null) {
                       								current = createModelElement(grammarAccess.getFinalStateRule());
                       							}
-                      							setWithLastConsumed(current, "simple", true, "state");
+                      							setWithLastConsumed(current, "simple", lv_simple_1_0 != null, "state");
                       						
                     }
 
@@ -28390,7 +28390,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getFinalStateRule());
                       						}
-                      						setWithLastConsumed(current, "simple", true, "#final");
+                      						setWithLastConsumed(current, "simple", lv_simple_7_0 != null, "#final");
                       					
                     }
 
@@ -32924,7 +32924,7 @@
                       					if (current==null) {
                       						current = createModelElement(grammarAccess.getRoutineRule());
                       					}
-                      					setWithLastConsumed(current, "macro", true, "macro");
+                      					setWithLastConsumed(current, "macro", lv_macro_1_0 != null, "macro");
                       				
                     }
 
@@ -38755,7 +38755,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getOtherDataTypeDefinitionRule());
               					}
-              					setWithLastConsumed(current, "typedef", true, "type");
+              					setWithLastConsumed(current, "typedef", lv_typedef_2_0 != null, "type");
               				
             }
 
@@ -42807,7 +42807,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getPrimitiveTimeTypeRule());
                       						}
-                      						setWithLastConsumed(current, "clock", true, "clock");
+                      						setWithLastConsumed(current, "clock", lv_clock_7_0 != null, "clock");
                       					
                     }
 
@@ -44576,7 +44576,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getIntervalTypeRule());
                       						}
-                      						setWithLastConsumed(current, "lopen", true, "]");
+                      						setWithLastConsumed(current, "lopen", lv_lopen_4_0 != null, "]");
                       					
                     }
 
@@ -44729,7 +44729,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getIntervalTypeRule());
                       						}
-                      						setWithLastConsumed(current, "ropen", true, "[");
+                      						setWithLastConsumed(current, "ropen", lv_ropen_10_0 != null, "[");
                       					
                     }
 
@@ -45088,7 +45088,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getIntervalTypeDefinitionRule());
                       						}
-                      						setWithLastConsumed(current, "lopen", true, "]");
+                      						setWithLastConsumed(current, "lopen", lv_lopen_8_0 != null, "]");
                       					
                     }
 
@@ -45241,7 +45241,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getIntervalTypeDefinitionRule());
                       						}
-                      						setWithLastConsumed(current, "ropen", true, "[");
+                      						setWithLastConsumed(current, "ropen", lv_ropen_14_0 != null, "[");
                       					
                     }
 
@@ -45559,7 +45559,7 @@
                                       								if (current==null) {
                                       									current = createModelElement(grammarAccess.getCollectionTypeRule());
                                       								}
-                                      								setWithLastConsumed(current, "unbounded", true, "*");
+                                      								setWithLastConsumed(current, "unbounded", lv_unbounded_6_0 != null, "*");
                                       							
                                     }
 
@@ -46013,7 +46013,7 @@
                               							if (current==null) {
                               								current = createModelElement(grammarAccess.getCollectionTypeDefinitionRule());
                               							}
-                              							setWithLastConsumed(current, "unbounded", true, "*");
+                              							setWithLastConsumed(current, "unbounded", lv_unbounded_10_0 != null, "*");
                               						
                             }
 
@@ -46543,7 +46543,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getEnumerationTypeDefinitionRule());
               					}
-              					setWithLastConsumed(current, "typedef", true, "type");
+              					setWithLastConsumed(current, "typedef", lv_typedef_2_0 != null, "type");
               				
             }
 
@@ -47446,7 +47446,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getStructureTypeDefinitionRule());
               					}
-              					setWithLastConsumed(current, "typedef", true, "type");
+              					setWithLastConsumed(current, "typedef", lv_typedef_2_0 != null, "type");
               				
             }
 
@@ -48014,7 +48014,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getUnionTypeDefinitionRule());
               					}
-              					setWithLastConsumed(current, "typedef", true, "type");
+              					setWithLastConsumed(current, "typedef", lv_typedef_2_0 != null, "type");
               				
             }
 
@@ -48582,7 +48582,7 @@
               					if (current==null) {
               						current = createModelElement(grammarAccess.getChoiceTypeDefinitionRule());
               					}
-              					setWithLastConsumed(current, "typedef", true, "type");
+              					setWithLastConsumed(current, "typedef", lv_typedef_2_0 != null, "type");
               				
             }
 
@@ -48940,7 +48940,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getModifierRule());
             	      										}
-            	      										setWithLastConsumed(current, "static", true, "static");
+            	      										setWithLastConsumed(current, "static", lv_static_2_0 != null, "static");
             	      									
             	    }
 
@@ -49000,7 +49000,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getModifierRule());
             	      										}
-            	      										setWithLastConsumed(current, "final", true, "final");
+            	      										setWithLastConsumed(current, "final", lv_final_3_0 != null, "final");
             	      									
             	    }
 
@@ -49060,7 +49060,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getModifierRule());
             	      										}
-            	      										setWithLastConsumed(current, "volatile", true, "volatile");
+            	      										setWithLastConsumed(current, "volatile", lv_volatile_4_0 != null, "volatile");
             	      									
             	    }
 
@@ -49120,7 +49120,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getModifierRule());
             	      										}
-            	      										setWithLastConsumed(current, "transient", true, "transient");
+            	      										setWithLastConsumed(current, "transient", lv_transient_5_0 != null, "transient");
             	      									
             	    }
 
@@ -49180,7 +49180,7 @@
             	      										if (current==null) {
             	      											current = createModelElement(grammarAccess.getModifierRule());
             	      										}
-            	      										setWithLastConsumed(current, "optional", true, "optional");
+            	      										setWithLastConsumed(current, "optional", lv_optional_6_0 != null, "optional");
             	      									
             	    }
 
@@ -50957,7 +50957,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getVariableRule());
                       						}
-                      						setWithLastConsumed(current, "const", true, "val");
+                      						setWithLastConsumed(current, "const", lv_const_4_0 != null, "val");
                       					
                     }
 
@@ -51013,7 +51013,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getVariableRule());
                               								}
-                              								setWithLastConsumed(current, "const", true, "const");
+                              								setWithLastConsumed(current, "const", lv_const_5_0 != null, "const");
                               							
                             }
 
@@ -51045,7 +51045,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getVariableRule());
                               								}
-                              								setWithLastConsumed(current, "const", true, "final");
+                              								setWithLastConsumed(current, "const", lv_const_6_0 != null, "final");
                               							
                             }
 
@@ -51085,7 +51085,7 @@
                               							if (current==null) {
                               								current = createModelElement(grammarAccess.getVariableRule());
                               							}
-                              							setWithLastConsumed(current, "macro", true, "macro");
+                              							setWithLastConsumed(current, "macro", lv_macro_7_0 != null, "macro");
                               						
                             }
 
@@ -51149,7 +51149,7 @@
                       							if (current==null) {
                       								current = createModelElement(grammarAccess.getVariableRule());
                       							}
-                      							setWithLastConsumed(current, "macro", true, "macro");
+                      							setWithLastConsumed(current, "macro", lv_macro_9_0 != null, "macro");
                       						
                     }
 
@@ -51201,7 +51201,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getVariableRule());
                               								}
-                              								setWithLastConsumed(current, "const", true, "val");
+                              								setWithLastConsumed(current, "const", lv_const_11_0 != null, "val");
                               							
                             }
 
@@ -51285,7 +51285,7 @@
                       					if (current==null) {
                       						current = createModelElement(grammarAccess.getVariableRule());
                       					}
-                      					setWithLastConsumed(current, "reference", true, "&");
+                      					setWithLastConsumed(current, "reference", lv_reference_13_0 != null, "&");
                       				
                     }
 
@@ -51789,7 +51789,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getVariableImplRule());
                       						}
-                      						setWithLastConsumed(current, "const", true, "val");
+                      						setWithLastConsumed(current, "const", lv_const_2_0 != null, "val");
                       					
                     }
 
@@ -51824,7 +51824,7 @@
                       							if (current==null) {
                       								current = createModelElement(grammarAccess.getVariableImplRule());
                       							}
-                      							setWithLastConsumed(current, "const", true, "const");
+                      							setWithLastConsumed(current, "const", lv_const_3_0 != null, "const");
                       						
                     }
 
@@ -51858,7 +51858,7 @@
                               							if (current==null) {
                               								current = createModelElement(grammarAccess.getVariableImplRule());
                               							}
-                              							setWithLastConsumed(current, "macro", true, "macro");
+                              							setWithLastConsumed(current, "macro", lv_macro_4_0 != null, "macro");
                               						
                             }
 
@@ -51922,7 +51922,7 @@
                       							if (current==null) {
                       								current = createModelElement(grammarAccess.getVariableImplRule());
                       							}
-                      							setWithLastConsumed(current, "macro", true, "macro");
+                      							setWithLastConsumed(current, "macro", lv_macro_6_0 != null, "macro");
                       						
                     }
 
@@ -51974,7 +51974,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getVariableImplRule());
                               								}
-                              								setWithLastConsumed(current, "const", true, "val");
+                              								setWithLastConsumed(current, "const", lv_const_8_0 != null, "val");
                               							
                             }
 
@@ -52058,7 +52058,7 @@
                       					if (current==null) {
                       						current = createModelElement(grammarAccess.getVariableImplRule());
                       					}
-                      					setWithLastConsumed(current, "reference", true, "&");
+                      					setWithLastConsumed(current, "reference", lv_reference_10_0 != null, "&");
                       				
                     }
 
@@ -55202,7 +55202,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getBufferContainerTypeRule());
                               								}
-                              								setWithLastConsumed(current, "unbounded", true, "*");
+                              								setWithLastConsumed(current, "unbounded", lv_unbounded_5_0 != null, "*");
                               							
                             }
 
@@ -55342,7 +55342,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getBufferContainerTypeRule());
                               								}
-                              								setWithLastConsumed(current, "unbounded", true, "*");
+                              								setWithLastConsumed(current, "unbounded", lv_unbounded_10_0 != null, "*");
                               							
                             }
 
@@ -60485,7 +60485,7 @@
                       					if (current==null) {
                       						current = createModelElement(grammarAccess.getTransitionRule());
                       					}
-                      					setWithLastConsumed(current, "transient", true, "transient");
+                      					setWithLastConsumed(current, "transient", lv_transient_1_0 != null, "transient");
                       				
                     }
 
@@ -62295,7 +62295,7 @@
                                       										if (current==null) {
                                       											current = createModelElement(grammarAccess.getTransitionMoeRule());
                                       										}
-                                      										setWithLastConsumed(current, "isElse", true, "else");
+                                      										setWithLastConsumed(current, "isElse", lv_isElse_4_0 != null, "else");
                                       									
                                     }
 
@@ -62336,7 +62336,7 @@
                               								if (current==null) {
                               									current = createModelElement(grammarAccess.getTransitionMoeRule());
                               								}
-                              								setWithLastConsumed(current, "isElse", true, "else");
+                              								setWithLastConsumed(current, "isElse", lv_isElse_5_0 != null, "else");
                               							
                             }
 
@@ -70658,7 +70658,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getInvokeStatementRule());
                       						}
-                      						setWithLastConsumed(current, "execRoutine", true, "(");
+                      						setWithLastConsumed(current, "execRoutine", lv_execRoutine_3_0 != null, "(");
                       					
                     }
 
@@ -71014,7 +71014,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getInvokeStatementRule());
                       						}
-                      						setWithLastConsumed(current, "execRoutine", true, "exec");
+                      						setWithLastConsumed(current, "execRoutine", lv_execRoutine_16_0 != null, "exec");
                       					
                     }
 
@@ -71415,7 +71415,7 @@
                       						if (current==null) {
                       							current = createModelElement(grammarAccess.getInvokeStatementRule());
                       						}
-                      						setWithLastConsumed(current, "callProcedure", true, "call");
+                      						setWithLastConsumed(current, "callProcedure", lv_callProcedure_31_0 != null, "call");
                       					
                     }
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/scoping/AbstractFormalMLScopeProvider.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/scoping/AbstractFormalMLScopeProvider.java
index 9b3afb6..311a1d1 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/scoping/AbstractFormalMLScopeProvider.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/scoping/AbstractFormalMLScopeProvider.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.scoping;
 
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSemanticSequencer.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSemanticSequencer.java
index d98962f..e348a34 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSemanticSequencer.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSemanticSequencer.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.serializer;
 
@@ -3167,7 +3167,7 @@
 	 *     LiteralCollectionExpression returns LiteralCollectionExpression
 	 *
 	 * Constraint:
-	 *     (datatype=DataType? ((value+=Expression | value+=NamedExpression) value+=NamedExpression? (value+=Expression? value+=NamedExpression?)*)?)
+	 *     (datatype=DataType? ((value+=Expression | value+=NamedExpression) value+=Expression? (value+=NamedExpression? value+=Expression?)*)?)
 	 */
 	protected void sequence_LiteralCollectionExpression(ISerializationContext context, LiteralCollectionExpression semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -4181,17 +4181,17 @@
 	 *         )* 
 	 *         name=ESIdentifier 
 	 *         unrestrictedName=UnrestrictedName? 
-	 *         function+=Function? 
+	 *         buffer+=Buffer? 
 	 *         (
 	 *             (
 	 *                 port+=Port | 
 	 *                 signal+=Signal | 
-	 *                 buffer+=Buffer | 
 	 *                 channel+=Channel | 
 	 *                 typedef+=TypeDefinition | 
+	 *                 function+=Function | 
 	 *                 variable+=Variable
 	 *             )? 
-	 *             function+=Function?
+	 *             buffer+=Buffer?
 	 *         )* 
 	 *         (
 	 *             port+=Port | 
@@ -4223,11 +4223,11 @@
 	 *             function+=FunctionPrivate | 
 	 *             variable+=VariablePrivate
 	 *         )* 
-	 *         ((procedure+=Procedure? (routine+=Routine? procedure+=Procedure?)*) | (routine+=Routine? (procedure+=Procedure? routine+=Routine?)*)) 
+	 *         ((procedure+=Procedure? (routine+=Routine? procedure+=Procedure?)*) | (procedure+=Procedure? (routine+=Routine? procedure+=Procedure?)*)) 
 	 *         machine+=AnyMachineBlock? 
 	 *         ((machine+=AnyMachineBlock | instance+=InstanceMachine | machine+=AnyMachineBlock | instance+=InstanceMachine)? machine+=AnyMachineBlock?)* 
-	 *         behavior+=Statemachine? 
-	 *         (behavior+=Behavior? behavior+=Statemachine?)* 
+	 *         behavior+=Behavior? 
+	 *         (behavior+=Statemachine? behavior+=Behavior?)* 
 	 *         main=MoeBehavior
 	 *     )
 	 */
@@ -4255,7 +4255,7 @@
 	 *     MixTupleExpressionList returns MixTupleExpression
 	 *
 	 * Constraint:
-	 *     ((value+=Expression | value+=NamedExpression) value+=NamedExpression? (value+=Expression? value+=NamedExpression?)*)
+	 *     ((value+=Expression | value+=NamedExpression) value+=Expression? (value+=NamedExpression? value+=Expression?)*)
 	 */
 	protected void sequence_MixTupleExpressionList(ISerializationContext context, MixTupleExpression semanticObject) {
 		genericSequencer.createSequence(context, semanticObject);
@@ -5460,39 +5460,39 @@
 	 *         unrestrictedName=UnrestrictedName? 
 	 *         (
 	 *             (
-	 *                 parameter+=ParameterOutput? 
+	 *                 parameter+=ParameterInout? 
 	 *                 (
 	 *                     (
 	 *                         parameter+=ParameterInput | 
 	 *                         parameter+=ParameterInput | 
 	 *                         parameter+=ParameterInout | 
-	 *                         parameter+=ParameterInout | 
+	 *                         parameter+=ParameterOutput | 
 	 *                         parameter+=ParameterOutput | 
 	 *                         parameter+=ParameterReturn | 
 	 *                         parameter+=ParameterReturn
 	 *                     )? 
-	 *                     parameter+=ParameterOutput?
+	 *                     parameter+=ParameterInout?
 	 *                 )*
 	 *             ) | 
 	 *             (
-	 *                 port+=Port? 
+	 *                 variable+=Variable? 
 	 *                 (
 	 *                     (
+	 *                         port+=Port | 
 	 *                         signal+=Signal | 
 	 *                         buffer+=Buffer | 
 	 *                         channel+=Channel | 
 	 *                         typedef+=TypeDefinition | 
-	 *                         function+=Function | 
-	 *                         variable+=Variable
+	 *                         function+=Function
 	 *                     )? 
-	 *                     port+=Port?
+	 *                     variable+=Variable?
 	 *                 )*
 	 *             )
 	 *         ) 
 	 *         parameter+=ParameterInput? 
 	 *         ((parameter+=ParameterInout | parameter+=ParameterOutput | parameter+=ParameterReturn)? parameter+=ParameterInput?)* 
 	 *         (
-	 *             channel+=ChannelPublic? 
+	 *             channel+=ChannelProtected? 
 	 *             (
 	 *                 port+=Port | 
 	 *                 signal+=Signal | 
@@ -5504,13 +5504,13 @@
 	 *                 port+=PortPublic | 
 	 *                 signal+=SignalPublic | 
 	 *                 buffer+=BufferPublic | 
+	 *                 channel+=ChannelPublic | 
 	 *                 typedef+=TypeDefinition | 
 	 *                 function+=FunctionPublic | 
 	 *                 variable+=VariablePublic | 
 	 *                 port+=PortProtected | 
 	 *                 signal+=SignalProtected | 
 	 *                 buffer+=BufferProtected | 
-	 *                 channel+=ChannelProtected | 
 	 *                 typedef+=TypeDefinition | 
 	 *                 function+=FunctionProtected | 
 	 *                 variable+=VariableProtected | 
@@ -5525,21 +5525,21 @@
 	 *         )* 
 	 *         (
 	 *             (
-	 *                 channel+=ChannelPublic? 
-	 *                 (routine+=Routine? procedure+=Procedure?)* 
-	 *                 routine+=Routine? 
+	 *                 channel+=ChannelProtected? 
+	 *                 (procedure+=Procedure? routine+=Routine?)* 
+	 *                 procedure+=Procedure? 
 	 *                 (region+=StatemachineRegion | region+=StatemachineNamedRegion+ | region+=StatemachineRegionLite)?
 	 *             ) | 
 	 *             (
-	 *                 channel+=ChannelPublic? 
+	 *                 channel+=ChannelProtected? 
 	 *                 (routine+=Routine? procedure+=Procedure?)* 
 	 *                 routine+=Routine? 
 	 *                 (region+=StatemachineRegion | region+=StatemachineNamedRegion+ | region+=StatemachineRegionLite)?
 	 *             ) | 
 	 *             (
 	 *                 (
-	 *                     (channel+=ChannelPublic? (routine+=Routine? procedure+=Procedure?)* routine+=Routine? machine+=AnyMachineBlock?) | 
-	 *                     (channel+=ChannelPublic? (routine+=Routine? procedure+=Procedure?)* routine+=Routine? machine+=AnyMachineBlock?)
+	 *                     (channel+=ChannelProtected? (procedure+=Procedure? routine+=Routine?)* procedure+=Procedure? machine+=AnyMachineBlock?) | 
+	 *                     (channel+=ChannelProtected? (routine+=Routine? procedure+=Procedure?)* routine+=Routine? machine+=AnyMachineBlock?)
 	 *                 ) 
 	 *                 ((machine+=Statemachine | machine+=AnyMachineBlock | machine+=AnyMachineBlock | instance+=InstanceMachine)? machine+=AnyMachineBlock?)*
 	 *             )
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSyntacticSequencer.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSyntacticSequencer.java
index 88cf0e6..d3503c5 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSyntacticSequencer.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/serializer/FormalMLSyntacticSequencer.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.serializer;
 
@@ -108,8 +108,8 @@
 	protected AbstractElementAlias match_MachineBlock_ExecutableKeyword_1_1_or_MachineKeyword_1_0;
 	protected AbstractElementAlias match_MachineBlock_InstanceKeyword_9_3_0_q;
 	protected AbstractElementAlias match_MachineBlock_MacroKeyword_8_0_0_0_1_or_RoutineKeyword_8_0_0_0_0;
-	protected AbstractElementAlias match_MachineBlock_ModelKeyword_9_1_0_q;
 	protected AbstractElementAlias match_MachineBlock_ProcedureKeyword_8_0_1_0_q;
+	protected AbstractElementAlias match_MachineBlock_PrototypeKeyword_9_2_0_q;
 	protected AbstractElementAlias match_MachineBlock_StatemachineKeyword_10_1_0_q;
 	protected AbstractElementAlias match_MachineBlock___InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a;
 	protected AbstractElementAlias match_MachineBlock___LessThanSignKeyword_2_0___MocKeyword_2_1_0_q_ModelOfComputationKingParserRuleCall_2_1_1__q___InstanceKeyword_2_2_0_LeftSquareBracketKeyword_2_2_1___AsteriskKeyword_2_2_2_1_or_PlusSignKeyword_2_2_2_0_or___InitKeyword_2_2_2_2_0_EIntegerParserRuleCall_2_2_2_2_1_MaxKeyword_2_2_2_2_2_EIntegerParserRuleCall_2_2_2_2_3_____RightSquareBracketKeyword_2_2_3__q_GreaterThanSignKeyword_2_3__q;
@@ -117,10 +117,10 @@
 	protected AbstractElementAlias match_MachineBlock___PrivateKeyword_7_3_0_or_PropertyKeyword_7_0_0_or_ProtectedKeyword_7_2_0_or_PublicKeyword_7_1_0__a;
 	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__a;
 	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__p;
+	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__q_PrototypeKeyword_9_2_0_q__a;
 	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a___CompositeKeyword_9_0_0_0_or_MachineKeyword_9_0_0_1____q;
 	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__a;
 	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__p;
-	protected AbstractElementAlias match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__q_ModelKeyword_9_1_0_q__a;
 	protected AbstractElementAlias match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__a;
 	protected AbstractElementAlias match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__p;
 	protected AbstractElementAlias match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__q_InstanceKeyword_9_3_0_q__a;
@@ -231,11 +231,11 @@
 	protected AbstractElementAlias match_Statemachine_MacroKeyword_10_0_0_0_1_or_RoutineKeyword_10_0_0_0_0;
 	protected AbstractElementAlias match_Statemachine_ParameterKeyword_7_0_0_q;
 	protected AbstractElementAlias match_Statemachine_ProcedureKeyword_10_0_1_0_q;
-	protected AbstractElementAlias match_Statemachine_PropertyKeyword_9_0_0_q;
+	protected AbstractElementAlias match_Statemachine_ProtectedKeyword_9_2_0_q;
 	protected AbstractElementAlias match_Statemachine_PublicKeyword_9_1_0_q;
-	protected AbstractElementAlias match_Statemachine_ReturnKeyword_8_3_0_q;
 	protected AbstractElementAlias match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a;
 	protected AbstractElementAlias match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__p;
+	protected AbstractElementAlias match_Statemachine___InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a;
 	protected AbstractElementAlias match_Statemachine___LessThanSignKeyword_3_0_MocKeyword_3_1_q_ModelOfComputationKingParserRuleCall_3_2_GreaterThanSignKeyword_3_3__q;
 	protected AbstractElementAlias match_Statemachine___MacroKeyword_10_0_0_0_1_or_RoutineKeyword_10_0_0_0_0__q;
 	protected AbstractElementAlias match_Statemachine___PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a;
@@ -252,7 +252,6 @@
 	protected AbstractElementAlias match_Statemachine_____CompositeKeyword_11_0_1_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a_InstanceKeyword_11_0_4_0__p;
 	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__a;
 	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__p;
-	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__q_ReturnKeyword_8_3_0_q__a;
 	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__a;
 	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__p;
 	protected AbstractElementAlias match_Statemachine_____InoutKeyword_8_1_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a_InputKeyword_8_0_0__a;
@@ -267,9 +266,9 @@
 	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0__q_PublicKeyword_9_1_0_q__a;
 	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__a;
 	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__p;
+	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__q_ProtectedKeyword_9_2_0_q__a;
 	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__a;
 	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__p;
-	protected AbstractElementAlias match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__q_PropertyKeyword_9_0_0_q__a;
 	protected AbstractElementAlias match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__a;
 	protected AbstractElementAlias match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__p;
 	protected AbstractElementAlias match_StructureTypeDefinitionImpl_PropertyKeyword_5_q;
@@ -403,8 +402,8 @@
 		match_MachineBlock_ExecutableKeyword_1_1_or_MachineKeyword_1_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getExecutableKeyword_1_1()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getMachineKeyword_1_0()));
 		match_MachineBlock_InstanceKeyword_9_3_0_q = new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0());
 		match_MachineBlock_MacroKeyword_8_0_0_0_1_or_RoutineKeyword_8_0_0_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getMacroKeyword_8_0_0_0_1()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getRoutineKeyword_8_0_0_0_0()));
-		match_MachineBlock_ModelKeyword_9_1_0_q = new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0());
 		match_MachineBlock_ProcedureKeyword_8_0_1_0_q = new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getProcedureKeyword_8_0_1_0());
+		match_MachineBlock_PrototypeKeyword_9_2_0_q = new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0());
 		match_MachineBlock_StatemachineKeyword_10_1_0_q = new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getStatemachineKeyword_10_1_0());
 		match_MachineBlock___InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0()));
 		match_MachineBlock___LessThanSignKeyword_2_0___MocKeyword_2_1_0_q_ModelOfComputationKingParserRuleCall_2_1_1__q___InstanceKeyword_2_2_0_LeftSquareBracketKeyword_2_2_1___AsteriskKeyword_2_2_2_1_or_PlusSignKeyword_2_2_2_0_or___InitKeyword_2_2_2_2_0_EIntegerParserRuleCall_2_2_2_2_1_MaxKeyword_2_2_2_2_2_EIntegerParserRuleCall_2_2_2_2_3_____RightSquareBracketKeyword_2_2_3__q_GreaterThanSignKeyword_2_3__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getLessThanSignKeyword_2_0()), new GroupAlias(false, true, new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getMocKeyword_2_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelOfComputationKingParserRuleCall_2_1_1())), new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_2_2_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getLeftSquareBracketKeyword_2_2_1()), new AlternativeAlias(false, false, new GroupAlias(false, false, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInitKeyword_2_2_2_2_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getEIntegerParserRuleCall_2_2_2_2_1()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getMaxKeyword_2_2_2_2_2()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getEIntegerParserRuleCall_2_2_2_2_3())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getAsteriskKeyword_2_2_2_1()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPlusSignKeyword_2_2_2_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getRightSquareBracketKeyword_2_2_3())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getGreaterThanSignKeyword_2_3()));
@@ -412,10 +411,10 @@
 		match_MachineBlock___PrivateKeyword_7_3_0_or_PropertyKeyword_7_0_0_or_ProtectedKeyword_7_2_0_or_PublicKeyword_7_1_0__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrivateKeyword_7_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPropertyKeyword_7_0_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getProtectedKeyword_7_2_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPublicKeyword_7_1_0()));
 		match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0()));
 		match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0()));
+		match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__q_PrototypeKeyword_9_2_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0())), new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0()));
 		match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a___CompositeKeyword_9_0_0_0_or_MachineKeyword_9_0_0_1____q = new GroupAlias(false, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getCompositeKeyword_9_0_0_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getMachineKeyword_9_0_0_1())));
 		match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()));
 		match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()));
-		match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__q_ModelKeyword_9_1_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()));
 		match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()));
 		match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()));
 		match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__q_InstanceKeyword_9_3_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getModelKeyword_9_1_0()), new TokenAlias(false, false, grammarAccess.getMachineBlockAccess().getPrototypeKeyword_9_2_0())), new TokenAlias(false, true, grammarAccess.getMachineBlockAccess().getInstanceKeyword_9_3_0()));
@@ -526,11 +525,11 @@
 		match_Statemachine_MacroKeyword_10_0_0_0_1_or_RoutineKeyword_10_0_0_0_0 = new AlternativeAlias(false, false, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getMacroKeyword_10_0_0_0_1()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getRoutineKeyword_10_0_0_0_0()));
 		match_Statemachine_ParameterKeyword_7_0_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getParameterKeyword_7_0_0());
 		match_Statemachine_ProcedureKeyword_10_0_1_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getProcedureKeyword_10_0_1_0());
-		match_Statemachine_PropertyKeyword_9_0_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0());
+		match_Statemachine_ProtectedKeyword_9_2_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0());
 		match_Statemachine_PublicKeyword_9_1_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0());
-		match_Statemachine_ReturnKeyword_8_3_0_q = new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0());
 		match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getCompositeKeyword_11_0_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInstanceKeyword_11_0_4_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getModelKeyword_11_0_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrototypeKeyword_11_0_3_0()));
 		match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__p = new AlternativeAlias(true, false, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getCompositeKeyword_11_0_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInstanceKeyword_11_0_4_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getModelKeyword_11_0_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrototypeKeyword_11_0_3_0()));
+		match_Statemachine___InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0()));
 		match_Statemachine___LessThanSignKeyword_3_0_MocKeyword_3_1_q_ModelOfComputationKingParserRuleCall_3_2_GreaterThanSignKeyword_3_3__q = new GroupAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getLessThanSignKeyword_3_0()), new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getMocKeyword_3_1()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getModelOfComputationKingParserRuleCall_3_2()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getGreaterThanSignKeyword_3_3()));
 		match_Statemachine___MacroKeyword_10_0_0_0_1_or_RoutineKeyword_10_0_0_0_0__q = new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getMacroKeyword_10_0_0_0_1()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getRoutineKeyword_10_0_0_0_0()));
 		match_Statemachine___PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a = new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0()));
@@ -547,7 +546,6 @@
 		match_Statemachine_____CompositeKeyword_11_0_1_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a_InstanceKeyword_11_0_4_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getCompositeKeyword_11_0_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getModelKeyword_11_0_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrototypeKeyword_11_0_3_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInstanceKeyword_11_0_4_0()));
 		match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0()));
 		match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0()));
-		match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__q_ReturnKeyword_8_3_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0())), new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0()));
 		match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0()));
 		match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0()));
 		match_Statemachine_____InoutKeyword_8_1_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a_InputKeyword_8_0_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInoutKeyword_8_1_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getOutputKeyword_8_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getReturnKeyword_8_3_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getInputKeyword_8_0_0()));
@@ -562,9 +560,9 @@
 		match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0__q_PublicKeyword_9_1_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0())), new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0()));
 		match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()));
 		match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()));
+		match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__q_ProtectedKeyword_9_2_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()));
 		match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()));
 		match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()));
-		match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__q_PropertyKeyword_9_0_0_q__a = new GroupAlias(true, true, new AlternativeAlias(false, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, true, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()));
 		match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__a = new GroupAlias(true, true, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()));
 		match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__p = new GroupAlias(true, false, new AlternativeAlias(true, true, new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPropertyKeyword_9_0_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getProtectedKeyword_9_2_0()), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPublicKeyword_9_1_0())), new TokenAlias(false, false, grammarAccess.getStatemachineAccess().getPrivateKeyword_9_3_0()));
 		match_StructureTypeDefinitionImpl_PropertyKeyword_5_q = new TokenAlias(false, true, grammarAccess.getStructureTypeDefinitionImplAccess().getPropertyKeyword_5());
@@ -860,10 +858,10 @@
 				emit_MachineBlock_InstanceKeyword_9_3_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_MacroKeyword_8_0_0_0_1_or_RoutineKeyword_8_0_0_0_0.equals(syntax))
 				emit_MachineBlock_MacroKeyword_8_0_0_0_1_or_RoutineKeyword_8_0_0_0_0(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_MachineBlock_ModelKeyword_9_1_0_q.equals(syntax))
-				emit_MachineBlock_ModelKeyword_9_1_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_ProcedureKeyword_8_0_1_0_q.equals(syntax))
 				emit_MachineBlock_ProcedureKeyword_8_0_1_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if (match_MachineBlock_PrototypeKeyword_9_2_0_q.equals(syntax))
+				emit_MachineBlock_PrototypeKeyword_9_2_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_StatemachineKeyword_10_1_0_q.equals(syntax))
 				emit_MachineBlock_StatemachineKeyword_10_1_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock___InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a.equals(syntax))
@@ -878,14 +876,14 @@
 				emit_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__p.equals(syntax))
 				emit_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__a_PrototypeKeyword_9_2_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__q_PrototypeKeyword_9_2_0_q__a.equals(syntax))
+				emit_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__q_PrototypeKeyword_9_2_0_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a___CompositeKeyword_9_0_0_0_or_MachineKeyword_9_0_0_1____q.equals(syntax))
 				emit_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a___CompositeKeyword_9_0_0_0_or_MachineKeyword_9_0_0_1____q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__a.equals(syntax))
 				emit_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__p.equals(syntax))
 				emit_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__a_ModelKeyword_9_1_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__q_ModelKeyword_9_1_0_q__a.equals(syntax))
-				emit_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__q_ModelKeyword_9_1_0_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__a.equals(syntax))
 				emit_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_MachineBlock_____ModelKeyword_9_1_0_or_PrototypeKeyword_9_2_0__a_InstanceKeyword_9_3_0__p.equals(syntax))
@@ -1106,16 +1104,16 @@
 				emit_Statemachine_ParameterKeyword_7_0_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_ProcedureKeyword_10_0_1_0_q.equals(syntax))
 				emit_Statemachine_ProcedureKeyword_10_0_1_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_Statemachine_PropertyKeyword_9_0_0_q.equals(syntax))
-				emit_Statemachine_PropertyKeyword_9_0_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if (match_Statemachine_ProtectedKeyword_9_2_0_q.equals(syntax))
+				emit_Statemachine_ProtectedKeyword_9_2_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_PublicKeyword_9_1_0_q.equals(syntax))
 				emit_Statemachine_PublicKeyword_9_1_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_Statemachine_ReturnKeyword_8_3_0_q.equals(syntax))
-				emit_Statemachine_ReturnKeyword_8_3_0_q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a.equals(syntax))
 				emit_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__p.equals(syntax))
 				emit_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if (match_Statemachine___InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a.equals(syntax))
+				emit_Statemachine___InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine___LessThanSignKeyword_3_0_MocKeyword_3_1_q_ModelOfComputationKingParserRuleCall_3_2_GreaterThanSignKeyword_3_3__q.equals(syntax))
 				emit_Statemachine___LessThanSignKeyword_3_0_MocKeyword_3_1_q_ModelOfComputationKingParserRuleCall_3_2_GreaterThanSignKeyword_3_3__q(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine___MacroKeyword_10_0_0_0_1_or_RoutineKeyword_10_0_0_0_0__q.equals(syntax))
@@ -1148,8 +1146,6 @@
 				emit_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__p.equals(syntax))
 				emit_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__a_ReturnKeyword_8_3_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__q_ReturnKeyword_8_3_0_q__a.equals(syntax))
-				emit_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__q_ReturnKeyword_8_3_0_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__a.equals(syntax))
 				emit_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_ReturnKeyword_8_3_0__a_OutputKeyword_8_2_0__p.equals(syntax))
@@ -1178,12 +1174,12 @@
 				emit_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__p.equals(syntax))
 				emit_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__a_ProtectedKeyword_9_2_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
+			else if (match_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__q_ProtectedKeyword_9_2_0_q__a.equals(syntax))
+				emit_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__q_ProtectedKeyword_9_2_0_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__a.equals(syntax))
 				emit_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__p.equals(syntax))
 				emit_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PropertyKeyword_9_0_0__p(semanticObject, getLastNavigableState(), syntaxNodes);
-			else if (match_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__q_PropertyKeyword_9_0_0_q__a.equals(syntax))
-				emit_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__q_PropertyKeyword_9_0_0_q__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__a.equals(syntax))
 				emit_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__a(semanticObject, getLastNavigableState(), syntaxNodes);
 			else if (match_Statemachine_____PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__a_PrivateKeyword_9_3_0__p.equals(syntax))
@@ -2719,43 +2715,6 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     '@model:'?
-	 *
-	 * This ambiguous syntax occurs at:
-	 *     buffer+=Buffer ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     channel+=Channel ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     function+=Function ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     name=ESIdentifier '{' ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     port+=Port ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     port+=PortPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     port+=PortProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     port+=PortPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     signal+=Signal ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     typedef+=TypeDefinition ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     unrestrictedName=UnrestrictedName '{' ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     variable+=Variable ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     variable+=VariablePrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     variable+=VariableProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 *     variable+=VariablePublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@prototype:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
-	 */
-	protected void emit_MachineBlock_ModelKeyword_9_1_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Ambiguous syntax:
 	 *     '@procedure:'?
 	 *
 	 * This ambiguous syntax occurs at:
@@ -2767,6 +2726,43 @@
 	
 	/**
 	 * Ambiguous syntax:
+	 *     '@prototype:'?
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     buffer+=Buffer ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     channel+=Channel ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     function+=Function ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     name=ESIdentifier '{' ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     port+=Port ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     port+=PortPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     port+=PortProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     port+=PortPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     signal+=Signal ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     typedef+=TypeDefinition ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     unrestrictedName=UnrestrictedName '{' ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     variable+=Variable ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     variable+=VariablePrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     variable+=VariableProtected ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 *     variable+=VariablePublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) (('@model:' | '@instance:')? (ambiguity))* '@instance:' instance+=InstanceMachine
+	 */
+	protected void emit_MachineBlock_PrototypeKeyword_9_2_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Ambiguous syntax:
 	 *     '@statemachine:'?
 	 *
 	 * This ambiguous syntax occurs at:
@@ -2847,8 +2843,8 @@
 	 *     buffer+=Buffer (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     buffer+=Buffer (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     buffer+=Buffer (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     buffer+=Buffer (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=Buffer (ambiguity) '@procedure:' procedure+=Procedure
+	 *     buffer+=Buffer (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=Buffer (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     buffer+=Buffer (ambiguity) procedure+=Procedure
 	 *     buffer+=Buffer (ambiguity) routine+=Routine
@@ -2859,8 +2855,8 @@
 	 *     buffer+=BufferPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     buffer+=BufferPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     buffer+=BufferPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     buffer+=BufferPrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferPrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     buffer+=BufferPrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferPrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     buffer+=BufferPrivate (ambiguity) procedure+=Procedure
 	 *     buffer+=BufferPrivate (ambiguity) routine+=Routine
@@ -2871,8 +2867,8 @@
 	 *     buffer+=BufferProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     buffer+=BufferProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     buffer+=BufferProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     buffer+=BufferProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     buffer+=BufferProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     buffer+=BufferProtected (ambiguity) procedure+=Procedure
 	 *     buffer+=BufferProtected (ambiguity) routine+=Routine
@@ -2883,8 +2879,8 @@
 	 *     buffer+=BufferPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     buffer+=BufferPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     buffer+=BufferPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     buffer+=BufferPublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferPublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     buffer+=BufferPublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     buffer+=BufferPublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     buffer+=BufferPublic (ambiguity) procedure+=Procedure
 	 *     buffer+=BufferPublic (ambiguity) routine+=Routine
@@ -2895,8 +2891,8 @@
 	 *     channel+=Channel (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     channel+=Channel (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     channel+=Channel (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     channel+=Channel (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=Channel (ambiguity) '@procedure:' procedure+=Procedure
+	 *     channel+=Channel (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=Channel (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     channel+=Channel (ambiguity) procedure+=Procedure
 	 *     channel+=Channel (ambiguity) routine+=Routine
@@ -2907,8 +2903,8 @@
 	 *     channel+=ChannelPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     channel+=ChannelPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     channel+=ChannelPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     channel+=ChannelPrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelPrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     channel+=ChannelPrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelPrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     channel+=ChannelPrivate (ambiguity) procedure+=Procedure
 	 *     channel+=ChannelPrivate (ambiguity) routine+=Routine
@@ -2919,8 +2915,8 @@
 	 *     channel+=ChannelProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     channel+=ChannelProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     channel+=ChannelProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     channel+=ChannelProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     channel+=ChannelProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     channel+=ChannelProtected (ambiguity) procedure+=Procedure
 	 *     channel+=ChannelProtected (ambiguity) routine+=Routine
@@ -2931,8 +2927,8 @@
 	 *     channel+=ChannelPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     channel+=ChannelPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     channel+=ChannelPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     channel+=ChannelPublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelPublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     channel+=ChannelPublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     channel+=ChannelPublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     channel+=ChannelPublic (ambiguity) procedure+=Procedure
 	 *     channel+=ChannelPublic (ambiguity) routine+=Routine
@@ -2943,8 +2939,8 @@
 	 *     function+=Function (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     function+=Function (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     function+=Function (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     function+=Function (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=Function (ambiguity) '@procedure:' procedure+=Procedure
+	 *     function+=Function (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=Function (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     function+=Function (ambiguity) procedure+=Procedure
 	 *     function+=Function (ambiguity) routine+=Routine
@@ -2955,8 +2951,8 @@
 	 *     function+=FunctionPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     function+=FunctionPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     function+=FunctionPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     function+=FunctionPrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionPrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     function+=FunctionPrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionPrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     function+=FunctionPrivate (ambiguity) procedure+=Procedure
 	 *     function+=FunctionPrivate (ambiguity) routine+=Routine
@@ -2967,8 +2963,8 @@
 	 *     function+=FunctionProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     function+=FunctionProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     function+=FunctionProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     function+=FunctionProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     function+=FunctionProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     function+=FunctionProtected (ambiguity) procedure+=Procedure
 	 *     function+=FunctionProtected (ambiguity) routine+=Routine
@@ -2979,8 +2975,8 @@
 	 *     function+=FunctionPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     function+=FunctionPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     function+=FunctionPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     function+=FunctionPublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionPublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     function+=FunctionPublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     function+=FunctionPublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     function+=FunctionPublic (ambiguity) procedure+=Procedure
 	 *     function+=FunctionPublic (ambiguity) routine+=Routine
@@ -2991,8 +2987,8 @@
 	 *     name=ESIdentifier '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     name=ESIdentifier '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     name=ESIdentifier '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     name=ESIdentifier '{' (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     name=ESIdentifier '{' (ambiguity) '@procedure:' procedure+=Procedure
+	 *     name=ESIdentifier '{' (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     name=ESIdentifier '{' (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     name=ESIdentifier '{' (ambiguity) procedure+=Procedure
 	 *     name=ESIdentifier '{' (ambiguity) routine+=Routine
@@ -3003,8 +2999,8 @@
 	 *     port+=Port (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     port+=Port (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     port+=Port (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     port+=Port (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=Port (ambiguity) '@procedure:' procedure+=Procedure
+	 *     port+=Port (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=Port (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     port+=Port (ambiguity) procedure+=Procedure
 	 *     port+=Port (ambiguity) routine+=Routine
@@ -3015,8 +3011,8 @@
 	 *     port+=PortPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     port+=PortPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     port+=PortPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     port+=PortPrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortPrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     port+=PortPrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortPrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     port+=PortPrivate (ambiguity) procedure+=Procedure
 	 *     port+=PortPrivate (ambiguity) routine+=Routine
@@ -3027,8 +3023,8 @@
 	 *     port+=PortProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     port+=PortProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     port+=PortProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     port+=PortProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     port+=PortProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     port+=PortProtected (ambiguity) procedure+=Procedure
 	 *     port+=PortProtected (ambiguity) routine+=Routine
@@ -3039,8 +3035,8 @@
 	 *     port+=PortPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     port+=PortPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     port+=PortPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     port+=PortPublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortPublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     port+=PortPublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     port+=PortPublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     port+=PortPublic (ambiguity) procedure+=Procedure
 	 *     port+=PortPublic (ambiguity) routine+=Routine
@@ -3051,8 +3047,8 @@
 	 *     signal+=Signal (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     signal+=Signal (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     signal+=Signal (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     signal+=Signal (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=Signal (ambiguity) '@procedure:' procedure+=Procedure
+	 *     signal+=Signal (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=Signal (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     signal+=Signal (ambiguity) procedure+=Procedure
 	 *     signal+=Signal (ambiguity) routine+=Routine
@@ -3063,8 +3059,8 @@
 	 *     signal+=SignalPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     signal+=SignalPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     signal+=SignalPrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     signal+=SignalPrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalPrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     signal+=SignalPrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalPrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     signal+=SignalPrivate (ambiguity) procedure+=Procedure
 	 *     signal+=SignalPrivate (ambiguity) routine+=Routine
@@ -3075,8 +3071,8 @@
 	 *     signal+=SignalProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     signal+=SignalProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     signal+=SignalProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     signal+=SignalProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     signal+=SignalProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     signal+=SignalProtected (ambiguity) procedure+=Procedure
 	 *     signal+=SignalProtected (ambiguity) routine+=Routine
@@ -3087,8 +3083,8 @@
 	 *     signal+=SignalPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     signal+=SignalPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     signal+=SignalPublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     signal+=SignalPublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalPublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     signal+=SignalPublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     signal+=SignalPublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     signal+=SignalPublic (ambiguity) procedure+=Procedure
 	 *     signal+=SignalPublic (ambiguity) routine+=Routine
@@ -3099,8 +3095,8 @@
 	 *     typedef+=TypeDefinition (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     typedef+=TypeDefinition (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     typedef+=TypeDefinition (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     typedef+=TypeDefinition (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     typedef+=TypeDefinition (ambiguity) '@procedure:' procedure+=Procedure
+	 *     typedef+=TypeDefinition (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     typedef+=TypeDefinition (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     typedef+=TypeDefinition (ambiguity) procedure+=Procedure
 	 *     typedef+=TypeDefinition (ambiguity) routine+=Routine
@@ -3111,8 +3107,8 @@
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@procedure:' procedure+=Procedure
+	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) procedure+=Procedure
 	 *     unrestrictedName=UnrestrictedName '{' (ambiguity) routine+=Routine
@@ -3123,8 +3119,8 @@
 	 *     variable+=Variable (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     variable+=Variable (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     variable+=Variable (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     variable+=Variable (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=Variable (ambiguity) '@procedure:' procedure+=Procedure
+	 *     variable+=Variable (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=Variable (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     variable+=Variable (ambiguity) procedure+=Procedure
 	 *     variable+=Variable (ambiguity) routine+=Routine
@@ -3135,8 +3131,8 @@
 	 *     variable+=VariablePrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     variable+=VariablePrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     variable+=VariablePrivate (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     variable+=VariablePrivate (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariablePrivate (ambiguity) '@procedure:' procedure+=Procedure
+	 *     variable+=VariablePrivate (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariablePrivate (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     variable+=VariablePrivate (ambiguity) procedure+=Procedure
 	 *     variable+=VariablePrivate (ambiguity) routine+=Routine
@@ -3147,8 +3143,8 @@
 	 *     variable+=VariableProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     variable+=VariableProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     variable+=VariableProtected (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     variable+=VariableProtected (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariableProtected (ambiguity) '@procedure:' procedure+=Procedure
+	 *     variable+=VariableProtected (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariableProtected (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     variable+=VariableProtected (ambiguity) procedure+=Procedure
 	 *     variable+=VariableProtected (ambiguity) routine+=Routine
@@ -3159,8 +3155,8 @@
 	 *     variable+=VariablePublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') instance+=InstanceMachine
 	 *     variable+=VariablePublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* ('@composite:' | '@machine:') machine+=AnyMachineBlock
 	 *     variable+=VariablePublic (ambiguity) '@instance:'? (('@model:' | '@prototype:')? '@instance:'?)* main=MoeBehavior
-	 *     variable+=VariablePublic (ambiguity) '@model:'? (('@prototype:' | '@instance:')? '@model:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariablePublic (ambiguity) '@procedure:' procedure+=Procedure
+	 *     variable+=VariablePublic (ambiguity) '@prototype:'? (('@model:' | '@instance:')? '@prototype:'?)* '@instance:' instance+=InstanceMachine
 	 *     variable+=VariablePublic (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     variable+=VariablePublic (ambiguity) procedure+=Procedure
 	 *     variable+=VariablePublic (ambiguity) routine+=Routine
@@ -3196,6 +3192,43 @@
 	
 	/**
 	 * Ambiguous syntax:
+	 *     (('@model:' | '@instance:')? '@prototype:'?)*
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     buffer+=Buffer ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     buffer+=BufferPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     channel+=Channel ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     channel+=ChannelPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     function+=Function ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     function+=FunctionPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     name=ESIdentifier '{' ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     port+=Port ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     port+=PortPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     port+=PortProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     port+=PortPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     signal+=Signal ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     signal+=SignalPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     typedef+=TypeDefinition ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     unrestrictedName=UnrestrictedName '{' ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     variable+=Variable ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     variable+=VariablePrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     variable+=VariableProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 *     variable+=VariablePublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@prototype:'? (ambiguity) '@instance:' instance+=InstanceMachine
+	 */
+	protected void emit_MachineBlock_____InstanceKeyword_9_3_0_or_ModelKeyword_9_1_0__q_PrototypeKeyword_9_2_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Ambiguous syntax:
 	 *     (('@model:' | '@prototype:' | '@instance:')* ('@composite:' | '@machine:'))?
 	 *
 	 * This ambiguous syntax occurs at:
@@ -3235,43 +3268,6 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     (('@prototype:' | '@instance:')? '@model:'?)*
-	 *
-	 * This ambiguous syntax occurs at:
-	 *     buffer+=Buffer ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     buffer+=BufferPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     channel+=Channel ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     channel+=ChannelPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     function+=Function ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     function+=FunctionPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     name=ESIdentifier '{' ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     port+=Port ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     port+=PortPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     port+=PortProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     port+=PortPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     signal+=Signal ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     signal+=SignalPublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     typedef+=TypeDefinition ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     unrestrictedName=UnrestrictedName '{' ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     variable+=Variable ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     variable+=VariablePrivate ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     variable+=VariableProtected ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 *     variable+=VariablePublic ('@property:' | '@public:' | '@protected:' | '@private:')* '@model:'? (ambiguity) '@instance:' instance+=InstanceMachine
-	 */
-	protected void emit_MachineBlock_____InstanceKeyword_9_3_0_or_PrototypeKeyword_9_2_0__q_ModelKeyword_9_1_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Ambiguous syntax:
 	 *     (('@model:' | '@prototype:')* '@instance:')*
 	 *
 	 * This ambiguous syntax occurs at:
@@ -12913,8 +12909,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -12923,8 +12919,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -12933,8 +12929,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -12942,8 +12938,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -12951,8 +12947,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -12960,8 +12956,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -12969,8 +12965,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -12978,8 +12974,8 @@
 	 *         buffer+=Buffer 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -12987,8 +12983,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -12997,8 +12993,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13007,8 +13003,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13016,8 +13012,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13025,8 +13021,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13034,8 +13030,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13043,8 +13039,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13052,8 +13048,8 @@
 	 *         channel+=Channel 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13061,8 +13057,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13071,8 +13067,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13081,8 +13077,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13090,8 +13086,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13099,8 +13095,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13108,8 +13104,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13117,8 +13113,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13126,8 +13122,8 @@
 	 *         function+=Function 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13137,8 +13133,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13149,8 +13145,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13161,8 +13157,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13172,8 +13168,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13183,8 +13179,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13194,8 +13190,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13205,8 +13201,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13216,8 +13212,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13226,8 +13222,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13237,8 +13233,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13248,8 +13244,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13258,8 +13254,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13268,8 +13264,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13278,8 +13274,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13288,8 +13284,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13298,8 +13294,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13307,8 +13303,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13317,8 +13313,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13327,8 +13323,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13336,8 +13332,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13345,8 +13341,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13354,8 +13350,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13363,8 +13359,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13372,8 +13368,8 @@
 	 *         parameter+=ParameterInout 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13382,8 +13378,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13393,8 +13389,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13404,8 +13400,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13414,8 +13410,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13424,8 +13420,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13434,8 +13430,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13444,8 +13440,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13454,8 +13450,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13463,8 +13459,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13473,8 +13469,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13483,8 +13479,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13492,8 +13488,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13501,8 +13497,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13510,8 +13506,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13519,8 +13515,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13528,8 +13524,8 @@
 	 *         parameter+=ParameterInput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13538,8 +13534,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13549,8 +13545,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13560,8 +13556,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13570,8 +13566,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13580,8 +13576,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13590,8 +13586,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13600,8 +13596,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13610,8 +13606,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13619,8 +13615,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13629,8 +13625,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13639,8 +13635,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13648,8 +13644,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13657,8 +13653,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13666,8 +13662,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13675,8 +13671,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13684,8 +13680,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13694,8 +13690,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13705,8 +13701,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13716,8 +13712,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13726,8 +13722,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13736,8 +13732,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13746,8 +13742,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13756,8 +13752,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13766,8 +13762,8 @@
 	 *         '}' 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13775,8 +13771,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13785,8 +13781,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13795,8 +13791,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13804,8 +13800,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13813,8 +13809,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13822,8 +13818,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13831,8 +13827,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13840,8 +13836,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13849,8 +13845,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13859,8 +13855,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13869,8 +13865,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13878,8 +13874,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13887,8 +13883,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13896,8 +13892,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13905,8 +13901,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13914,8 +13910,8 @@
 	 *         port+=Port 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13923,8 +13919,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -13933,8 +13929,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -13943,8 +13939,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -13952,8 +13948,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -13961,8 +13957,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13970,8 +13966,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -13979,8 +13975,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13988,8 +13984,8 @@
 	 *         signal+=Signal 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -13997,8 +13993,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -14007,8 +14003,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -14017,8 +14013,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -14026,8 +14022,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -14035,8 +14031,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14044,8 +14040,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -14053,8 +14049,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14062,8 +14058,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14073,8 +14069,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -14085,8 +14081,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -14097,8 +14093,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -14108,8 +14104,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -14119,8 +14115,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14130,8 +14126,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -14141,8 +14137,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14152,8 +14148,8 @@
 	 *         '@parameter:'? 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14199,8 +14195,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -14209,8 +14205,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -14219,8 +14215,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -14228,8 +14224,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -14237,8 +14233,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14246,8 +14242,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -14255,8 +14251,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14264,8 +14260,8 @@
 	 *         variable+=Variable 
 	 *         (ambiguity) 
 	 *         (('@inout:' | '@output:' | '@return:')? (ambiguity))* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14887,17 +14883,17 @@
 	 *     function+=FunctionPublic ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) routine+=Routine
 	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     port+=Port ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
 	 *     port+=PortPrivate ('@property:' | '@public:' | '@protected:' | '@private:')* (ambiguity) routine+=Routine
@@ -14933,8 +14929,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -14945,8 +14941,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -14957,8 +14953,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -14968,8 +14964,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -14979,8 +14975,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -14990,8 +14986,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -15001,8 +14997,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -15012,8 +15008,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -15023,8 +15019,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -15035,8 +15031,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -15047,8 +15043,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -15058,8 +15054,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -15069,8 +15065,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -15080,8 +15076,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -15091,8 +15087,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -15102,8 +15098,8 @@
 	 *         (ambiguity) 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -15212,507 +15208,1645 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     '@property:'?
+	 *     '@protected:'?
 	 *
 	 * This ambiguous syntax occurs at:
 	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         buffer+=Buffer 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         channel+=Channel 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
 	 *         (ambiguity) 
-	 *         (('@public:' | '@protected:' | '@private:')? (ambiguity))* 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=Function (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=Port (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic (ambiguity) (('@public:' | '@protected:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         signal+=Signal 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         (ambiguity) 
+	 *         (('@property:' | '@public:' | '@private:')? (ambiguity))* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=Function (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' channel+=Channel
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' function+=Function
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' port+=Port
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' signal+=Signal
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' variable+=Variable
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' port+=PortPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* procedure+=Procedure
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegion
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegionLite
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* routine+=Routine
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' channel+=Channel
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' function+=Function
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' port+=Port
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' signal+=Signal
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' variable+=Variable
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' port+=PortPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* procedure+=Procedure
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegion
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegionLite
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* routine+=Routine
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' channel+=Channel
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' function+=Function
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' port+=Port
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' signal+=Signal
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' variable+=Variable
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' port+=PortPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* procedure+=Procedure
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegion
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegionLite
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* routine+=Routine
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' channel+=Channel
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' function+=Function
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' port+=Port
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' signal+=Signal
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@property:' variable+=Variable
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' port+=PortPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* procedure+=Procedure
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegion
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* region+=StatemachineRegionLite
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* routine+=Routine
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=Port (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic (ambiguity) (('@property:' | '@public:' | '@private:')? (ambiguity))* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 */
-	protected void emit_Statemachine_PropertyKeyword_9_0_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+	protected void emit_Statemachine_ProtectedKeyword_9_2_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
 	}
 	
@@ -15721,1328 +16855,34 @@
 	 *     '@public:'?
 	 *
 	 * This ambiguous syntax occurs at:
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         buffer+=Buffer 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         channel+=Channel 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         function+=Function 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         port+=Port 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         signal+=Signal 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         variable+=Variable 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         (ambiguity) 
-	 *         (('@property:' | '@protected:' | '@private:')? (ambiguity))* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* (ambiguity) (('@property:' | '@protected:' | '@private:')? (ambiguity))* '@protected:' variable+=VariableProtected
 	 */
 	protected void emit_Statemachine_PublicKeyword_9_1_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -17050,463 +16890,27 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     '@return:'?
-	 *
-	 * This ambiguous syntax occurs at:
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         (ambiguity) 
-	 *         (('@input:' | '@inout:' | '@output:')? (ambiguity))* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn (ambiguity) (('@input:' | '@inout:' | '@output:')? (ambiguity))* (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 */
-	protected void emit_Statemachine_ReturnKeyword_8_3_0_q(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Ambiguous syntax:
 	 *     ('@composite:' | '@model:' | '@prototype:' | '@instance:')*
 	 *
 	 * This ambiguous syntax occurs at:
 	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
 	 *         name=ESIdentifier 
 	 *         '{' 
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17515,18 +16919,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
-	 *         (ambiguity) 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17536,8 +16930,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17546,18 +16940,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
-	 *         (ambiguity) 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17567,8 +16951,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17577,18 +16961,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
-	 *         (ambiguity) 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17598,8 +16972,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17608,18 +16982,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
-	 *         (ambiguity) 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17629,8 +16993,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17639,8 +17003,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -17651,27 +17015,36 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
 	 *     instance+=InstanceMachine (ambiguity) '@statemachine:' machine+=Statemachine
 	 *     instance+=InstanceMachine (ambiguity) '}' (rule end)
 	 *     instance+=InstanceMachine (ambiguity) execution=ModelOfExecution
@@ -17683,24 +17056,23 @@
 	 *     machine+=Statemachine (ambiguity) '}' (rule end)
 	 *     machine+=Statemachine (ambiguity) execution=ModelOfExecution
 	 *     machine+=Statemachine (ambiguity) interaction=ModelOfInteraction
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
 	 *     procedure+=Procedure (ambiguity) '@statemachine:' machine+=Statemachine
 	 *     routine+=Routine (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '@statemachine:' machine+=Statemachine
 	 */
 	protected void emit_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -17717,8 +17089,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -17728,17 +17100,17 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -17747,17 +17119,27 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -17766,17 +17148,27 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -17785,17 +17177,27 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
 	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -17804,8 +17206,18 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -17815,8 +17227,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         '}' 
 	 *         (rule end)
@@ -17827,8 +17239,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -17838,142 +17250,126 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         interaction=ModelOfInteraction
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
 	 *     procedure+=Procedure (ambiguity) '}' (rule end)
 	 *     procedure+=Procedure (ambiguity) execution=ModelOfExecution
 	 *     procedure+=Procedure (ambiguity) interaction=ModelOfInteraction
 	 *     routine+=Routine (ambiguity) '}' (rule end)
 	 *     routine+=Routine (ambiguity) execution=ModelOfExecution
 	 *     routine+=Routine (ambiguity) interaction=ModelOfInteraction
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) '}' (rule end)
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) execution=ModelOfExecution
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) '}' (rule end)
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) execution=ModelOfExecution
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) '}' (rule end)
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) execution=ModelOfExecution
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) interaction=ModelOfInteraction
 	 */
 	protected void emit_Statemachine___CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -17981,6 +17377,156 @@
 	
 	/**
 	 * Ambiguous syntax:
+	 *     ('@input:' | '@inout:' | '@output:' | '@return:')*
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' channel+=Channel
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' function+=Function
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' port+=Port
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' signal+=Signal
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' variable+=Variable
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' port+=PortPublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* procedure+=Procedure
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegion
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegionLite
+	 *     parameter+=ParameterInout (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* routine+=Routine
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' channel+=Channel
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' function+=Function
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' port+=Port
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' signal+=Signal
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' variable+=Variable
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' port+=PortPublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* procedure+=Procedure
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegion
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegionLite
+	 *     parameter+=ParameterInput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* routine+=Routine
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' channel+=Channel
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' function+=Function
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' port+=Port
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' signal+=Signal
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' variable+=Variable
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' port+=PortPublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* procedure+=Procedure
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegion
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegionLite
+	 *     parameter+=ParameterOutput (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* routine+=Routine
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' port+=PortPrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' buffer+=Buffer
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' channel+=Channel
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' function+=Function
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' port+=Port
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' signal+=Signal
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@property:' variable+=Variable
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' port+=PortPublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* procedure+=Procedure
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineNamedRegion
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegion
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* region+=StatemachineRegionLite
+	 *     parameter+=ParameterReturn (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* routine+=Routine
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' port+=PortProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* '@protected:' variable+=VariableProtected
+	 */
+	protected void emit_Statemachine___InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0_or_ReturnKeyword_8_3_0__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Ambiguous syntax:
 	 *     ('<' 'moc:'? ModelOfComputationKing '>')?
 	 *
 	 * This ambiguous syntax occurs at:
@@ -18132,13 +17678,6 @@
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegion
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegionLite
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) procedure+=Procedure
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegion
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegionLite
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) procedure+=Procedure
@@ -18153,13 +17692,6 @@
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegion
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegionLite
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) procedure+=Procedure
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegion
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegionLite
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) procedure+=Procedure
@@ -18174,13 +17706,6 @@
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegion
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegionLite
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) procedure+=Procedure
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineNamedRegion
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegion
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegionLite
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) procedure+=Procedure
@@ -18195,13 +17720,6 @@
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegion
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) region+=StatemachineRegionLite
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) routine+=Routine
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) procedure+=Procedure
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineNamedRegion
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegion
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) region+=StatemachineRegionLite
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) routine+=Routine
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) procedure+=Procedure
@@ -18406,8 +17924,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -18417,60 +17935,56 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     instance+=InstanceMachine (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=AnyMachineBlock (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=Statemachine (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     procedure+=Procedure (ambiguity) machine+=AnyMachineBlock
 	 *     routine+=Routine (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 */
 	protected void emit_Statemachine_____CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0__a_PrototypeKeyword_11_0_3_0__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -18509,8 +18023,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -18520,60 +18034,56 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     instance+=InstanceMachine (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=AnyMachineBlock (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=Statemachine (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     procedure+=Procedure (ambiguity) machine+=AnyMachineBlock
 	 *     routine+=Routine (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 */
 	protected void emit_Statemachine_____CompositeKeyword_11_0_1_0_or_InstanceKeyword_11_0_4_0_or_PrototypeKeyword_11_0_3_0__a_ModelKeyword_11_0_2_0__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -18601,8 +18111,28 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (ambiguity) 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -18612,59 +18142,53 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         instance+=InstanceMachine
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
 	 *     machine+=AnyMachineBlock (ambiguity) instance+=InstanceMachine
 	 *     machine+=Statemachine (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
 	 *     procedure+=Procedure (ambiguity) instance+=InstanceMachine
 	 *     routine+=Routine (ambiguity) instance+=InstanceMachine
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) instance+=InstanceMachine
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) instance+=InstanceMachine
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) instance+=InstanceMachine
 	 */
 	protected void emit_Statemachine_____CompositeKeyword_11_0_1_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a_InstanceKeyword_11_0_4_0__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -18710,416 +18234,6 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     (('@input:' | '@inout:' | '@output:')? '@return:'?)*
-	 *
-	 * This ambiguous syntax occurs at:
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (ambiguity) 
-	 *         '@property:'? 
-	 *         (('@public:' | '@protected:' | '@private:')? '@property:'?)* 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineNamedRegion
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegion
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* region+=StatemachineRegionLite
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* routine+=Routine
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ buffer+=BufferPublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ channel+=ChannelPublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ function+=FunctionPublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ port+=PortPublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ signal+=SignalPublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@protected:' | '@private:')* '@public:')+ variable+=VariablePublic
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ buffer+=BufferProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ channel+=ChannelProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ function+=FunctionProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ port+=PortProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ signal+=SignalProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@private:')* '@protected:')+ variable+=VariableProtected
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ buffer+=BufferPrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ channel+=ChannelPrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ function+=FunctionPrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ port+=PortPrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ signal+=SignalPrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@property:' | '@public:' | '@protected:')* '@private:')+ variable+=VariablePrivate
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ buffer+=Buffer
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ channel+=Channel
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ function+=Function
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ port+=Port
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 */
-	protected void emit_Statemachine_____InoutKeyword_8_1_0_or_InputKeyword_8_0_0_or_OutputKeyword_8_2_0__q_ReturnKeyword_8_3_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Ambiguous syntax:
 	 *     (('@input:' | '@inout:' | '@return:')* '@output:')*
 	 *
 	 * This ambiguous syntax occurs at:
@@ -19203,8 +18317,8 @@
 	 *         buffer+=Buffer 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19213,8 +18327,8 @@
 	 *         channel+=Channel 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19223,8 +18337,29 @@
 	 *         function+=Function 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19235,11 +18370,11 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
 	 *     )
 	 *     (
 	 *         name=ESIdentifier 
@@ -19247,8 +18382,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19258,8 +18393,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19269,8 +18404,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19280,8 +18415,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19291,8 +18426,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19302,8 +18437,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19311,8 +18446,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19321,8 +18456,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19330,8 +18465,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19339,8 +18474,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19348,8 +18483,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19357,8 +18492,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19366,8 +18501,8 @@
 	 *         parameter+=ParameterInout 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19376,8 +18511,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19387,8 +18522,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19397,8 +18532,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19407,8 +18542,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19417,8 +18552,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19427,8 +18562,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19437,8 +18572,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19446,8 +18581,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19456,8 +18591,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19465,8 +18600,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19474,8 +18609,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19483,8 +18618,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19492,8 +18627,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19501,8 +18636,8 @@
 	 *         parameter+=ParameterInput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19511,8 +18646,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19522,8 +18657,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19532,8 +18667,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19542,8 +18677,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19552,8 +18687,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19562,8 +18697,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19572,8 +18707,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19581,8 +18716,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19591,8 +18726,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19600,8 +18735,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19609,8 +18744,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19618,8 +18753,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19627,8 +18762,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19636,8 +18771,8 @@
 	 *         parameter+=ParameterOutput 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19646,8 +18781,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19657,8 +18792,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19667,8 +18802,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19677,8 +18812,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19687,8 +18822,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19697,8 +18832,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19707,8 +18842,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19716,8 +18851,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19726,8 +18861,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19735,8 +18870,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19744,8 +18879,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19753,8 +18888,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19762,8 +18897,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19771,8 +18906,8 @@
 	 *         parameter+=ParameterReturn 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19781,8 +18916,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19792,8 +18927,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19802,8 +18937,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19812,8 +18947,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19822,8 +18957,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19832,8 +18967,8 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19842,17 +18977,27 @@
 	 *         '}' 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
 	 *     (
+	 *         port+=Port 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
 	 *         signal+=Signal 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19861,8 +19006,8 @@
 	 *         typedef+=TypeDefinition 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19871,19 +19016,64 @@
 	 *         typedef+=TypeDefinition 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
 	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
 	 *         unrestrictedName=UnrestrictedName 
 	 *         '{' 
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
@@ -19894,8 +19084,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         '}' 
 	 *         (rule end)
@@ -19906,8 +19096,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         execution=ModelOfExecution
 	 *     )
@@ -19917,8 +19107,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
 	 *         interaction=ModelOfInteraction
 	 *     )
@@ -19928,8 +19118,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19939,8 +19129,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
 	 *         instance+=InstanceMachine
 	 *     )
@@ -19950,8 +19140,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19961,8 +19151,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -19970,19 +19160,28 @@
 	 *         variable+=Variable 
 	 *         '@input:'? 
 	 *         (ambiguity) 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
 	 *         '@statemachine:' 
 	 *         machine+=Statemachine
 	 *     )
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (ambiguity) 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     buffer+=Buffer '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     buffer+=Buffer '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     buffer+=Buffer '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20018,13 +19217,13 @@
 	 *     buffer+=Buffer '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     buffer+=Buffer '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     buffer+=Buffer '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     channel+=Channel '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     channel+=Channel '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     channel+=Channel '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20060,13 +19259,12 @@
 	 *     channel+=Channel '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     channel+=Channel '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     channel+=Channel '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     function+=Function '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     function+=Function '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     function+=Function '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20102,7 +19300,6 @@
 	 *     function+=Function '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     function+=Function '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     function+=Function '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20138,7 +19335,7 @@
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInout '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInout '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20174,7 +19371,7 @@
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20210,7 +19407,7 @@
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInput '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInput '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20246,7 +19443,7 @@
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20282,7 +19479,7 @@
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterOutput '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterOutput '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20318,7 +19515,7 @@
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20354,7 +19551,7 @@
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterReturn '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterReturn '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20390,7 +19587,7 @@
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20426,14 +19623,13 @@
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '}' '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     port+=Port '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     port+=Port '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     port+=Port '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20469,13 +19665,13 @@
 	 *     port+=Port '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     port+=Port '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     port+=Port '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     signal+=Signal '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     signal+=Signal '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     signal+=Signal '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20511,12 +19707,7 @@
 	 *     signal+=Signal '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     signal+=Signal '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     signal+=Signal '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
 	 *     typedef+=TypeDefinition '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     typedef+=TypeDefinition '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     typedef+=TypeDefinition '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20587,13 +19778,12 @@
 	 *     unrestrictedName=UnrestrictedName '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ signal+=Signal
 	 *     unrestrictedName=UnrestrictedName '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ typedef+=TypeDefinition
 	 *     unrestrictedName=UnrestrictedName '{' '@parameter:'? '@input:'? (ambiguity) (('@public:' | '@protected:' | '@private:')* '@property:')+ variable+=Variable
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (ambiguity) '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (ambiguity) '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
 	 *     variable+=Variable '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* '@procedure:' procedure+=Procedure
 	 *     variable+=Variable '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* ('@routine:' | '@macro:') routine+=Routine
 	 *     variable+=Variable '@input:'? (ambiguity) ('@property:' | '@public:' | '@protected:' | '@private:')* procedure+=Procedure
@@ -20694,8 +19884,8 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
@@ -20705,60 +19895,56 @@
 	 *         '@parameter:'? 
 	 *         '@input:'? 
 	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (('@property:' | '@protected:' | '@private:')? '@public:'?)* 
+	 *         '@protected:'? 
+	 *         (('@property:' | '@public:' | '@private:')? '@protected:'?)* 
 	 *         (ambiguity) 
 	 *         machine+=AnyMachineBlock
 	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     instance+=InstanceMachine (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=AnyMachineBlock (ambiguity) machine+=AnyMachineBlock
 	 *     machine+=Statemachine (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 *     procedure+=Procedure (ambiguity) machine+=AnyMachineBlock
 	 *     routine+=Routine (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (('@property:' | '@protected:' | '@private:')? '@public:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (('@public:' | '@protected:' | '@private:')? '@property:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (('@property:' | '@public:' | '@private:')? '@protected:'?)* (ambiguity) machine+=AnyMachineBlock
 	 */
 	protected void emit_Statemachine_____InstanceKeyword_11_0_4_0_or_ModelKeyword_11_0_2_0_or_PrototypeKeyword_11_0_3_0__a_CompositeKeyword_11_0_1_0__p(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -20926,13 +20112,6 @@
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPublic
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPublic
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePublic
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPublic
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPublic
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPublic
@@ -20947,13 +20126,6 @@
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPublic
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPublic
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePublic
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPublic
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPublic
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPublic
@@ -20968,13 +20140,6 @@
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPublic
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPublic
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePublic
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPublic
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPublic
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPublic
@@ -20989,13 +20154,6 @@
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPublic
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPublic
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePublic
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPublic
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPublic
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPublic
@@ -21118,416 +20276,34 @@
 	 *     (('@property:' | '@protected:' | '@private:')? '@public:'?)*
 	 *
 	 * This ambiguous syntax occurs at:
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         name=ESIdentifier 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '}' 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         typedef+=TypeDefinition 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         '}' 
-	 *         (rule end)
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         execution=ModelOfExecution
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
-	 *         instance+=InstanceMachine
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     (
-	 *         unrestrictedName=UnrestrictedName 
-	 *         '{' 
-	 *         '@parameter:'? 
-	 *         '@input:'? 
-	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
-	 *         '@public:'? 
-	 *         (ambiguity) 
-	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
-	 *         machine+=AnyMachineBlock
-	 *     )
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@public:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' port+=PortProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' port+=PortProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' variable+=VariableProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' buffer+=BufferProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' channel+=ChannelProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' function+=FunctionProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' port+=PortProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' signal+=SignalProtected
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@public:'? (ambiguity) '@protected:' variable+=VariableProtected
 	 */
 	protected void emit_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_ProtectedKeyword_9_2_0__q_PublicKeyword_9_1_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
 		acceptNodes(transition, nodes);
@@ -21695,13 +20471,6 @@
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalProtected
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariableProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalProtected
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariableProtected
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferProtected
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelProtected
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionProtected
@@ -21716,13 +20485,6 @@
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalProtected
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariableProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalProtected
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariableProtected
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferProtected
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelProtected
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionProtected
@@ -21737,13 +20499,6 @@
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalProtected
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariableProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalProtected
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariableProtected
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferProtected
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelProtected
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionProtected
@@ -21758,13 +20513,6 @@
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalProtected
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariableProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalProtected
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariableProtected
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferProtected
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelProtected
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionProtected
@@ -21884,6 +20632,824 @@
 	
 	/**
 	 * Ambiguous syntax:
+	 *     (('@property:' | '@public:' | '@private:')? '@protected:'?)*
+	 *
+	 * This ambiguous syntax occurs at:
+	 *     (
+	 *         function+=Function 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         name=ESIdentifier 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInout 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterInput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterOutput 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         parameter+=ParameterReturn 
+	 *         '}' 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         typedef+=TypeDefinition 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         '}' 
+	 *         (rule end)
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         execution=ModelOfExecution
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
+	 *         interaction=ModelOfInteraction
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ 
+	 *         instance+=InstanceMachine
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         unrestrictedName=UnrestrictedName 
+	 *         '{' 
+	 *         '@parameter:'? 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ 
+	 *         machine+=AnyMachineBlock
+	 *     )
+	 *     (
+	 *         variable+=Variable 
+	 *         '@input:'? 
+	 *         (('@inout:' | '@output:' | '@return:')? '@input:'?)* 
+	 *         '@protected:'? 
+	 *         (ambiguity) 
+	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
+	 *         '@statemachine:' 
+	 *         machine+=Statemachine
+	 *     )
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=Buffer '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=Buffer '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=Buffer '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=Buffer '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=Buffer '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=Buffer '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     buffer+=BufferPublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=Channel '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=Channel '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=Channel '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=Channel '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=Channel '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=Channel '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     channel+=ChannelPublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=Function '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=Function '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=Function '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=Function '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=Function '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=Function '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     function+=FunctionPublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     name=ESIdentifier '{' '@parameter:'? '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' channel+=Channel
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' function+=Function
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' port+=Port
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' signal+=Signal
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' variable+=Variable
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' port+=PortPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) procedure+=Procedure
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegion
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegionLite
+	 *     parameter+=ParameterInout ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) routine+=Routine
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' port+=PortPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' buffer+=Buffer
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' channel+=Channel
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' function+=Function
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' port+=Port
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' signal+=Signal
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' variable+=Variable
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' port+=PortPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) procedure+=Procedure
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineNamedRegion
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegion
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegionLite
+	 *     parameter+=ParameterInput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) routine+=Routine
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' port+=PortPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' buffer+=Buffer
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' channel+=Channel
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' function+=Function
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' port+=Port
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' signal+=Signal
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' variable+=Variable
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' port+=PortPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) procedure+=Procedure
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineNamedRegion
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegion
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegionLite
+	 *     parameter+=ParameterOutput ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) routine+=Routine
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' buffer+=BufferPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' channel+=ChannelPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' function+=FunctionPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' port+=PortPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' signal+=SignalPrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@private:' variable+=VariablePrivate
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@procedure:' procedure+=Procedure
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' buffer+=Buffer
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' channel+=Channel
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' function+=Function
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' port+=Port
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' signal+=Signal
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@property:' variable+=Variable
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' buffer+=BufferPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' channel+=ChannelPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' function+=FunctionPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' port+=PortPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' signal+=SignalPublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' typedef+=TypeDefinition
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) '@public:' variable+=VariablePublic
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) ('@routine:' | '@macro:') routine+=Routine
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) procedure+=Procedure
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineNamedRegion
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegion
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) region+=StatemachineRegionLite
+	 *     parameter+=ParameterReturn ('@input:' | '@inout:' | '@output:' | '@return:')* '@protected:'? (ambiguity) routine+=Routine
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=Port '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=Port '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=Port '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=Port '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=Port '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=Port '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortPrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortPrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     port+=PortPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     port+=PortPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     port+=PortPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     port+=PortPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     port+=PortPublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     port+=PortPublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=Signal '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=Signal '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=Signal '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=Signal '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=Signal '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=Signal '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     signal+=SignalPublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     typedef+=TypeDefinition '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=Variable '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=Variable '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=Variable '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=Variable '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=Variable '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=Variable '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePrivate '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariableProtected '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
+	 *     variable+=VariablePublic '@protected:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
+	 */
+	protected void emit_Statemachine_____PrivateKeyword_9_3_0_or_PropertyKeyword_9_0_0_or_PublicKeyword_9_1_0__q_ProtectedKeyword_9_2_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
+		acceptNodes(transition, nodes);
+	}
+	
+	/**
+	 * Ambiguous syntax:
 	 *     (('@public:' | '@protected:' | '@private:')* '@property:')*
 	 *
 	 * This ambiguous syntax occurs at:
@@ -22044,13 +21610,6 @@
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=Signal
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=Variable
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=Buffer
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=Channel
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=Function
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=Port
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=Signal
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=Variable
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=Buffer
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=Channel
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=Function
@@ -22065,13 +21624,6 @@
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=Signal
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=Variable
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=Buffer
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=Channel
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=Function
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=Port
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=Signal
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=Variable
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=Buffer
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=Channel
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=Function
@@ -22086,13 +21638,6 @@
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=Signal
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=Variable
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=Buffer
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=Channel
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=Function
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=Port
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=Signal
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=Variable
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=Buffer
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=Channel
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=Function
@@ -22107,13 +21652,6 @@
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=Signal
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=Variable
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=Buffer
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=Channel
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=Function
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=Port
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=Signal
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=Variable
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=Buffer
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=Channel
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=Function
@@ -22233,316 +21771,6 @@
 	
 	/**
 	 * Ambiguous syntax:
-	 *     (('@public:' | '@protected:' | '@private:')? '@property:'?)*
-	 *
-	 * This ambiguous syntax occurs at:
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInout 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterInput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterOutput 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')* 
-	 *         '@statemachine:' 
-	 *         machine+=Statemachine
-	 *     )
-	 *     (
-	 *         parameter+=ParameterReturn 
-	 *         '@return:'? 
-	 *         (('@input:' | '@inout:' | '@output:')? '@return:'?)* 
-	 *         '@property:'? 
-	 *         (ambiguity) 
-	 *         ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ 
-	 *         interaction=ModelOfInteraction
-	 *     )
-	 *     buffer+=Buffer '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=Buffer '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=Buffer '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=Buffer '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=Buffer '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=Buffer '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=Buffer '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     buffer+=BufferPublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=Channel '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=Channel '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=Channel '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=Channel '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=Channel '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=Channel '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     channel+=ChannelPublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=Function '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=Function '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=Function '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=Function '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=Function '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=Function '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     function+=FunctionPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     function+=FunctionPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     function+=FunctionPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     function+=FunctionPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     function+=FunctionPublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     function+=FunctionPublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=Port '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=Port '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=Port '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=Port '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=Port '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=Port '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortPrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortPrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     port+=PortPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     port+=PortPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     port+=PortPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     port+=PortPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     port+=PortPublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     port+=PortPublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=Signal '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=Signal '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=Signal '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=Signal '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=Signal '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=Signal '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     signal+=SignalPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     signal+=SignalPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     signal+=SignalPublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     signal+=SignalPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     signal+=SignalPublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     signal+=SignalPublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     typedef+=TypeDefinition '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=Variable '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=Variable '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=Variable '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=Variable '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=Variable '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=Variable '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePrivate '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariableProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariableProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariableProtected '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariableProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariableProtected '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariableProtected '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')* '@statemachine:' machine+=Statemachine
-	 *     variable+=VariablePublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ '}' (rule end)
-	 *     variable+=VariablePublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ execution=ModelOfExecution
-	 *     variable+=VariablePublic '@property:'? (ambiguity) ('@composite:' | '@model:' | '@prototype:' | '@instance:')+ interaction=ModelOfInteraction
-	 *     variable+=VariablePublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@instance:')* '@prototype:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (ambiguity) (('@composite:' | '@model:' | '@prototype:')* '@instance:')+ instance+=InstanceMachine
-	 *     variable+=VariablePublic '@property:'? (ambiguity) (('@composite:' | '@prototype:' | '@instance:')* '@model:')+ machine+=AnyMachineBlock
-	 *     variable+=VariablePublic '@property:'? (ambiguity) (('@model:' | '@prototype:' | '@instance:')* '@composite:')+ machine+=AnyMachineBlock
-	 */
-	protected void emit_Statemachine_____PrivateKeyword_9_3_0_or_ProtectedKeyword_9_2_0_or_PublicKeyword_9_1_0__q_PropertyKeyword_9_0_0_q__a(EObject semanticObject, ISynNavigable transition, List<INode> nodes) {
-		acceptNodes(transition, nodes);
-	}
-	
-	/**
-	 * Ambiguous syntax:
 	 *     (('@property:' | '@public:' | '@protected:')* '@private:')*
 	 *
 	 * This ambiguous syntax occurs at:
@@ -22703,13 +21931,6 @@
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPrivate
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInout '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPrivate
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInout '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePrivate
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPrivate
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPrivate
 	 *     parameter+=ParameterInout '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPrivate
@@ -22724,13 +21945,6 @@
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPrivate
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterInput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPrivate
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterInput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePrivate
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPrivate
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPrivate
 	 *     parameter+=ParameterInput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPrivate
@@ -22745,13 +21959,6 @@
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPrivate
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterOutput '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPrivate
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterOutput '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePrivate
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPrivate
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPrivate
 	 *     parameter+=ParameterOutput '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPrivate
@@ -22766,13 +21973,6 @@
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) signal+=SignalPrivate
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) typedef+=TypeDefinition
 	 *     parameter+=ParameterReturn '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) variable+=VariablePrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) buffer+=BufferPrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) channel+=ChannelPrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) function+=FunctionPrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) port+=PortPrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) signal+=SignalPrivate
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) typedef+=TypeDefinition
-	 *     parameter+=ParameterReturn '@return:'? (('@input:' | '@inout:' | '@output:')? '@return:'?)* (ambiguity) variable+=VariablePrivate
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) buffer+=BufferPrivate
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) channel+=ChannelPrivate
 	 *     parameter+=ParameterReturn '}' '@input:'? (('@inout:' | '@output:' | '@return:')? '@input:'?)* (ambiguity) function+=FunctionPrivate
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/services/FormalMLGrammarAccess.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/services/FormalMLGrammarAccess.java
index f8b5aa1..95558e9 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/services/FormalMLGrammarAccess.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/services/FormalMLGrammarAccess.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.services;
 
@@ -33,12 +33,11 @@
 import org.eclipse.xtext.TerminalRule;
 import org.eclipse.xtext.UnorderedGroup;
 import org.eclipse.xtext.common.services.TerminalsGrammarAccess;
-import org.eclipse.xtext.service.AbstractElementFinder.AbstractEnumRuleElementFinder;
-import org.eclipse.xtext.service.AbstractElementFinder.AbstractGrammarElementFinder;
+import org.eclipse.xtext.service.AbstractElementFinder;
 import org.eclipse.xtext.service.GrammarProvider;
 
 @Singleton
-public class FormalMLGrammarAccess extends AbstractGrammarElementFinder {
+public class FormalMLGrammarAccess extends AbstractElementFinder.AbstractGrammarElementFinder {
 	
 	public class XliaElements extends AbstractParserRuleElementFinder {
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.Xlia");
@@ -51,21 +50,23 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Main Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Xlia fmlSpec::XliaModel:
-		//	prolog=XliaPrologObject
-		//	system=XliaSystem;
+		//Xlia returns fmlSpec::XliaModel
+		//    : prolog = XliaPrologObject
+		//          system = XliaSystem
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//prolog=XliaPrologObject system=XliaSystem
+		//prolog = XliaPrologObject
+		//         system = XliaSystem
 		public Group getGroup() { return cGroup; }
 		
-		//prolog=XliaPrologObject
+		//prolog = XliaPrologObject
 		public Assignment getPrologAssignment_0() { return cPrologAssignment_0; }
 		
 		//XliaPrologObject
 		public RuleCall getPrologXliaPrologObjectParserRuleCall_0_0() { return cPrologXliaPrologObjectParserRuleCall_0_0; }
 		
-		//system=XliaSystem
+		//system = XliaSystem
 		public Assignment getSystemAssignment_1() { return cSystemAssignment_1; }
 		
 		//XliaSystem
@@ -89,21 +90,28 @@
 		private final Assignment cElementsAssignment_4 = (Assignment)cGroup.eContents().get(4);
 		private final RuleCall cElementsXliaOptionObjectParserRuleCall_4_0 = (RuleCall)cElementsAssignment_4.eContents().get(0);
 		
-		//XliaPrologObject fmlSpec::XliaObject:
-		//	name=('@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity')
-		//	'<'
-		//	elements+=XliaPrologAttribute '>:'
-		//	elements+=XliaOptionObject?;
+		//XliaPrologObject returns fmlSpec::XliaObject
+		//    : name=( '@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity' )
+		//        '<'
+		//        ( elements+=XliaPrologAttribute )
+		////        ( ',' elements+=XliaPrologAttribute )+
+		//        '>:'
+		//        ( elements += XliaOptionObject )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=('@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity') '<' elements+=XliaPrologAttribute '>:'
-		//elements+=XliaOptionObject?
+		// name=( '@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity' )
+		//        '<'
+		//        ( elements+=XliaPrologAttribute )
+		////        ( ',' elements+=XliaPrologAttribute )+
+		//        '>:'
+		//        ( elements += XliaOptionObject )?
 		public Group getGroup() { return cGroup; }
 		
-		//name=('@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity')
+		//name=( '@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity' )
 		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
 		
-		//('@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity')
+		//( '@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity' )
 		public Alternatives getNameAlternatives_0_0() { return cNameAlternatives_0_0; }
 		
 		//'@FormalML'
@@ -127,17 +135,17 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_1() { return cLessThanSignKeyword_1; }
 		
-		//elements+=XliaPrologAttribute
+		//( elements+=XliaPrologAttribute )
 		public Assignment getElementsAssignment_2() { return cElementsAssignment_2; }
 		
 		//XliaPrologAttribute
 		public RuleCall getElementsXliaPrologAttributeParserRuleCall_2_0() { return cElementsXliaPrologAttributeParserRuleCall_2_0; }
 		
-		////		( ',' elements+=XliaPrologAttribute )+
-		//'>:'
+		////        ( ',' elements+=XliaPrologAttribute )+
+		//        '>:'
 		public Keyword getGreaterThanSignColonKeyword_3() { return cGreaterThanSignColonKeyword_3; }
 		
-		//elements+=XliaOptionObject?
+		//( elements += XliaOptionObject )?
 		public Assignment getElementsAssignment_4() { return cElementsAssignment_4; }
 		
 		//XliaOptionObject
@@ -158,18 +166,24 @@
 		private final RuleCall cValueLiteralFloatExpressionParserRuleCall_1_2_0_0 = (RuleCall)cValueAlternatives_1_2_0.eContents().get(0);
 		private final RuleCall cValueLiteralStringExpressionParserRuleCall_1_2_0_1 = (RuleCall)cValueAlternatives_1_2_0.eContents().get(1);
 		
-		//XliaPrologAttribute fmlSpec::XliaAttribute:
-		//	name=('system' | 'package') (',' 'version:'?
-		//	value=(LiteralFloatExpression | LiteralStringExpression))?;
+		//XliaPrologAttribute returns fmlSpec::XliaAttribute
+		//    : name=( 'system' | 'package' )
+		//        ( ',' ( 'version:' )?
+		//            value=( LiteralFloatExpression | LiteralStringExpression )
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=('system' | 'package') (',' 'version:'? value=(LiteralFloatExpression | LiteralStringExpression))?
+		//name=( 'system' | 'package' )
+		//       ( ',' ( 'version:' )?
+		//           value=( LiteralFloatExpression | LiteralStringExpression )
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//name=('system' | 'package')
+		//name=( 'system' | 'package' )
 		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
 		
-		//('system' | 'package')
+		//( 'system' | 'package' )
 		public Alternatives getNameAlternatives_0_0() { return cNameAlternatives_0_0; }
 		
 		//'system'
@@ -178,19 +192,21 @@
 		//'package'
 		public Keyword getNamePackageKeyword_0_0_1() { return cNamePackageKeyword_0_0_1; }
 		
-		//(',' 'version:'? value=(LiteralFloatExpression | LiteralStringExpression))?
+		//( ',' ( 'version:' )?
+		//    value=( LiteralFloatExpression | LiteralStringExpression )
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//','
 		public Keyword getCommaKeyword_1_0() { return cCommaKeyword_1_0; }
 		
-		//'version:'?
+		//( 'version:' )?
 		public Keyword getVersionKeyword_1_1() { return cVersionKeyword_1_1; }
 		
-		//value=(LiteralFloatExpression | LiteralStringExpression)
+		//value=( LiteralFloatExpression | LiteralStringExpression )
 		public Assignment getValueAssignment_1_2() { return cValueAssignment_1_2; }
 		
-		//(LiteralFloatExpression | LiteralStringExpression)
+		//( LiteralFloatExpression | LiteralStringExpression )
 		public Alternatives getValueAlternatives_1_2_0() { return cValueAlternatives_1_2_0; }
 		
 		//LiteralFloatExpression
@@ -210,21 +226,24 @@
 		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
 		////XliaPrologAttribute returns XliaAttribute
-		////	: (name = 'model')?    value=XliaModelKind
-		////	| (name = 'version')?
-		////		value=( LiteralFloatExpression | LiteralStringExpression )
-		////	;
+		////    : (name = 'model')?    value=XliaModelKind
+		////    | (name = 'version')?
+		////        value=( LiteralFloatExpression | LiteralStringExpression )
+		////    ;
 		////
 		////XliaModelKind returns fmlExpr::LiteralStringExpression
-		////	: value=( 'system' | 'package' )
-		////	;
-		//XliaOptionObject fmlSpec::XliaObject:
-		//	name='@option' '{'
-		//	elements+=XliaNamedElement*
-		//	'}';
+		////    : value=( 'system' | 'package' )
+		////    ;
+		//XliaOptionObject returns fmlSpec::XliaObject
+		//    : name='@option'  '{'
+		//        ( elements+=XliaNamedElement )*
+		//      '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name='@option' '{' elements+=XliaNamedElement* '}'
+		//name='@option'  '{'
+		//       ( elements+=XliaNamedElement )*
+		//     '}'
 		public Group getGroup() { return cGroup; }
 		
 		//name='@option'
@@ -236,7 +255,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
 		
-		//elements+=XliaNamedElement*
+		//( elements+=XliaNamedElement )*
 		public Assignment getElementsAssignment_2() { return cElementsAssignment_2; }
 		
 		//XliaNamedElement
@@ -252,13 +271,16 @@
 		private final RuleCall cXliaSectionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		private final RuleCall cXliaAttributeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
-		//XliaNamedElement fmlSpec::XliaNamedElement:
-		//	XliaObject
-		//	| XliaSection
-		//	| XliaAttribute;
+		//XliaNamedElement returns fmlSpec::XliaNamedElement
+		//    : XliaObject
+		//    | XliaSection
+		//    | XliaAttribute
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//XliaObject | XliaSection | XliaAttribute
+		//XliaObject
+		//   | XliaSection
+		//   | XliaAttribute
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//XliaObject
@@ -280,13 +302,16 @@
 		private final RuleCall cElementsXliaNamedElementParserRuleCall_2_0 = (RuleCall)cElementsAssignment_2.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
-		//XliaObject fmlSpec::XliaObject:
-		//	name=XLIA_ID '{'
-		//	elements+=XliaNamedElement*
-		//	'}';
+		//XliaObject returns fmlSpec::XliaObject
+		//    : name=XLIA_ID '{'
+		//        ( elements+=XliaNamedElement )*
+		//      '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=XLIA_ID '{' elements+=XliaNamedElement* '}'
+		//name=XLIA_ID '{'
+		//       ( elements+=XliaNamedElement )*
+		//     '}'
 		public Group getGroup() { return cGroup; }
 		
 		//name=XLIA_ID
@@ -298,7 +323,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
 		
-		//elements+=XliaNamedElement*
+		//( elements+=XliaNamedElement )*
 		public Assignment getElementsAssignment_2() { return cElementsAssignment_2; }
 		
 		//XliaNamedElement
@@ -317,13 +342,16 @@
 		private final RuleCall cElementsXliaAttributeParserRuleCall_2_0 = (RuleCall)cElementsAssignment_2.eContents().get(0);
 		private final Keyword cRightSquareBracketKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
-		//XliaSection fmlSpec::XliaSection:
-		//	name=XLIA_ID '['
-		//	elements+=XliaAttribute*
-		//	']';
+		//XliaSection returns fmlSpec::XliaSection
+		//    : name=XLIA_ID '['
+		//        ( elements+=XliaAttribute )*
+		//      ']'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=XLIA_ID '[' elements+=XliaAttribute* ']'
+		//name=XLIA_ID '['
+		//       ( elements+=XliaAttribute )*
+		//     ']'
 		public Group getGroup() { return cGroup; }
 		
 		//name=XLIA_ID
@@ -335,7 +363,7 @@
 		//'['
 		public Keyword getLeftSquareBracketKeyword_1() { return cLeftSquareBracketKeyword_1; }
 		
-		//elements+=XliaAttribute*
+		//( elements+=XliaAttribute )*
 		public Assignment getElementsAssignment_2() { return cElementsAssignment_2; }
 		
 		//XliaAttribute
@@ -354,8 +382,9 @@
 		private final RuleCall cValueExpressionParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
 		private final Keyword cSemicolonKeyword_3 = (Keyword)cGroup.eContents().get(3);
 		
-		//XliaAttribute fmlSpec::XliaAttribute:
-		//	name=XLIA_ID '=' value=Expression ';';
+		//XliaAttribute returns fmlSpec::XliaAttribute
+		//    : name=XLIA_ID '=' value=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//name=XLIA_ID '=' value=Expression ';'
@@ -388,8 +417,9 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Primitive Value
 		//////////////////////////////////////////////////////////////////////////////////
-		//EBoolean ecore::EBoolean:
-		//	'true' | 'false';
+		//EBoolean returns ecore::EBoolean
+		//    : 'true' | 'false'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'true' | 'false'
@@ -407,8 +437,9 @@
 		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
 		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
 		
-		//EInt ecore::EInt:
-		//	'-'? INT;
+		//EInt returns ecore::EInt
+		//    : '-'? INT
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'-'? INT
@@ -426,8 +457,9 @@
 		private final Keyword cHyphenMinusKeyword_0 = (Keyword)cGroup.eContents().get(0);
 		private final RuleCall cINTTerminalRuleCall_1 = (RuleCall)cGroup.eContents().get(1);
 		
-		//EInteger ecore::ELong:
-		//	'-'? INT;
+		//EInteger returns ecore::ELong
+		//    : '-'? INT
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'-'? INT
@@ -447,9 +479,9 @@
 		private final Keyword cFullStopKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		private final RuleCall cINTTerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
 		
-		//EFloat ecore::EFloat:
-		//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
-		//;
+		//EFloat returns ecore::EFloat
+		//    : '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'-'? INT? '.' INT
@@ -475,9 +507,9 @@
 		private final Keyword cFullStopKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		private final RuleCall cINTTerminalRuleCall_3 = (RuleCall)cGroup.eContents().get(3);
 		
-		//EDouble ecore::EDouble:
-		//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
-		//;
+		//EDouble returns ecore::EDouble
+		//    : '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'-'? INT? '.' INT
@@ -499,8 +531,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ECharacter");
 		private final RuleCall cCHARACTERTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ECharacter ecore::EChar:
-		//	CHARACTER;
+		//ECharacter returns ecore::EChar
+		//    : CHARACTER
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//CHARACTER
@@ -510,8 +543,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.EString");
 		private final RuleCall cSTRINGTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//EString:
-		//	STRING;
+		//EString returns ecore::EString
+		//    : STRING
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//STRING
@@ -521,8 +555,8 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.EOffset");
 		private final RuleCall cOFFSETTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//EOffset:
-		//	OFFSET;
+		//EOffset returns ecore::EString
+		//    : OFFSET ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//OFFSET
@@ -668,75 +702,112 @@
 		private final Keyword cDynamicPrototypeKeyword_134 = (Keyword)cAlternatives.eContents().get(134);
 		
 		////QualifiedName returns ecore::EString
-		////	: ID ( '[' ID ']' )? '.' ID ( '[' ID ']' )? | ID
-		////	;
-		//ReservedKeyWord:
-		//	'package' | 'system' | 'machine' | 'executable'
-		//	| 'vertex' | 'pseudostate'
-		//	| 'state' | 'statemachine'
-		//	| 'macro' | 'routine'
-		//	| 'procedure' | 'transition'
-		//	| 'public' | 'private' | 'protected'
-		//	| 'static' | 'final'
-		//	| 'volatile' | 'transient'
-		//	| 'model' | 'prototype' | 'instance'
-		//	| 'timed' | 'timed#dense' | 'timed#discrete'
-		//	| 'unsafe' | 'input_enabled'
-		//	| 'port' | 'signal' | 'message'
-		//	| 'buffer' | 'channel' | 'via'
-		//	| 'var' | 'val' | 'const'
-		//	| 'input' | 'in' | 'inout'
-		//	| 'output' | 'out' | 'return'
-		//	| 'simple' | 'start' | 'final'
-		//	| 'initial' | 'terminal' | 'junction'
-		//	| 'choice' | 'fork' | 'join'
-		//	| 'dhistory' | 'shistory'
-		//	| 'route' | 'connector' | 'connect'
-		//	| 'env' | 'rdv' | 'multirdv'
-		//	| 'buffer' | 'unicast' | 'anycast'
-		//	| 'multicast' | 'broadcast'
-		//	| 'boolean' | 'bool'
-		//	| 'char' | 'string'
-		//	| 'integer' | 'int'
-		//	| 'uinteger' | 'uint'
-		//	| 'rational' | 'rat'
-		//	| 'urational' | 'urat'
-		//	| 'time' | 'clock'
-		//	| 'float' | 'double' | 'real'
-		//	| 'ufloat' | 'udouble' | 'ureal'
-		//	| 'interval' | 'enum' | 'struct' | 'union'
-		//	| 'vector' | 'rvector' | 'list'
-		//	| 'set' | 'bag' | 'multiset'
-		//	| 'fifo' | 'lifo'
-		//	| 'guard' | 'tguard'
-		//	| 'event' | 'checksat'
-		//	| 'break' | 'continue' | 'exit' | 'init'
-		//	| 'destroy' | 'stop' | 'abort' | 'restart'
-		//	| 'suspend' | 'resume' | 'wait'
-		//	| 'disable' | 'enable'
-		//	| 'schedule' | 'irun' | 'run' | 'rtc'
-		//	| 'call' | 'new' | 'ctor' | 'newfresh'
-		//	| 'this' | 'self' | 'parent' | 'super'
-		//	| 'null'
-		//	| '#model' | '#instance' | '#static' | '#dynamic'
-		//	| '#runtime' | '#static#instance' | '#dynamic#instance'
-		//	| '#prototype' | '#dynamic#prototype';
+		////    : ID ( '[' ID ']' )? '.' ID ( '[' ID ']' )? | ID
+		////    ;
+		//ReservedKeyWord
+		//    : 'package'   | 'system'      | 'machine'  | 'executable'
+		//    | 'vertex'    | 'pseudostate'
+		//    | 'state'     | 'statemachine'
+		//    | 'macro'     | 'routine'
+		//    | 'procedure' | 'transition'
+		//    | 'public'    | 'private'     | 'protected'
+		//    | 'static'    | 'final'
+		//    | 'volatile'  | 'transient'
+		//    | 'model'     | 'prototype'   | 'instance'
+		//    | 'timed'     | 'timed#dense' | 'timed#discrete'
+		//    | 'unsafe'    | 'input_enabled'
+		//    | 'port'      | 'signal'      | 'message'
+		//    | 'buffer'    | 'channel'     | 'via'
+		//    | 'var'       | 'val'         | 'const'
+		//    | 'input'     | 'in'          | 'inout'
+		//    | 'output'    | 'out'         | 'return'
+		//    | 'simple'    | 'start'       | 'final'
+		//    | 'initial'   | 'terminal'    | 'junction'
+		//    | 'choice'    | 'fork'        | 'join'
+		//    | 'dhistory'  | 'shistory'
+		//    | 'route'     | 'connector'   | 'connect'
+		//    | 'env'       | 'rdv'         | 'multirdv'
+		//    | 'buffer'    | 'unicast'     | 'anycast'
+		//    | 'multicast' | 'broadcast'
+		//    | 'boolean'   | 'bool'
+		//    | 'char'      | 'string'
+		//    | 'integer'   | 'int'
+		//    | 'uinteger'  | 'uint'
+		//    | 'rational'  | 'rat'
+		//    | 'urational' | 'urat'
+		//    | 'time'      | 'clock'
+		//    | 'float'     | 'double'      | 'real'
+		//    | 'ufloat'    | 'udouble'     | 'ureal'
+		//    | 'interval'  | 'enum'        | 'struct' | 'union'
+		//    | 'vector'    | 'rvector'     | 'list'
+		//    | 'set'       | 'bag'         | 'multiset'
+		//    | 'fifo'      | 'lifo'
+		//    | 'guard'     | 'tguard'
+		//    | 'event'     | 'checksat'
+		//    | 'break'     | 'continue'    | 'exit'   | 'init'
+		//    | 'destroy'   | 'stop'        | 'abort'  | 'restart'
+		//    | 'suspend'   | 'resume'      | 'wait'
+		//    | 'disable'   | 'enable'
+		//    | 'schedule'  | 'irun'        | 'run'    | 'rtc'
+		//    | 'call'      | 'new'         | 'ctor'   | 'newfresh'
+		//    | 'this'      | 'self'        | 'parent' | 'super'
+		//    | 'null'
+		//    | '#model'    | '#instance'        | '#static'   |  '#dynamic'
+		//    | '#runtime'  | '#static#instance' | '#dynamic#instance'
+		//    | '#prototype'| '#dynamic#prototype'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'package' | 'system' | 'machine' | 'executable' | 'vertex' | 'pseudostate' | 'state' | 'statemachine' | 'macro' |
-		//'routine' | 'procedure' | 'transition' | 'public' | 'private' | 'protected' | 'static' | 'final' | 'volatile' |
-		//'transient' | 'model' | 'prototype' | 'instance' | 'timed' | 'timed#dense' | 'timed#discrete' | 'unsafe' |
-		//'input_enabled' | 'port' | 'signal' | 'message' | 'buffer' | 'channel' | 'via' | 'var' | 'val' | 'const' | 'input' |
-		//'in' | 'inout' | 'output' | 'out' | 'return' | 'simple' | 'start' | 'final' | 'initial' | 'terminal' | 'junction' |
-		//'choice' | 'fork' | 'join' | 'dhistory' | 'shistory' | 'route' | 'connector' | 'connect' | 'env' | 'rdv' | 'multirdv' |
-		//'buffer' | 'unicast' | 'anycast' | 'multicast' | 'broadcast' | 'boolean' | 'bool' | 'char' | 'string' | 'integer' |
-		//'int' | 'uinteger' | 'uint' | 'rational' | 'rat' | 'urational' | 'urat' | 'time' | 'clock' | 'float' | 'double' |
-		//'real' | 'ufloat' | 'udouble' | 'ureal' | 'interval' | 'enum' | 'struct' | 'union' | 'vector' | 'rvector' | 'list' |
-		//'set' | 'bag' | 'multiset' | 'fifo' | 'lifo' | 'guard' | 'tguard' | 'event' | 'checksat' | 'break' | 'continue' |
-		//'exit' | 'init' | 'destroy' | 'stop' | 'abort' | 'restart' | 'suspend' | 'resume' | 'wait' | 'disable' | 'enable' |
-		//'schedule' | 'irun' | 'run' | 'rtc' | 'call' | 'new' | 'ctor' | 'newfresh' | 'this' | 'self' | 'parent' | 'super' |
-		//'null' | '#model' | '#instance' | '#static' | '#dynamic' | '#runtime' | '#static#instance' | '#dynamic#instance' |
-		//'#prototype' | '#dynamic#prototype'
+		//'package'   | 'system'      | 'machine'  | 'executable'
+		//   | 'vertex'    | 'pseudostate'
+		//   | 'state'     | 'statemachine'
+		//   | 'macro'     | 'routine'
+		//   | 'procedure' | 'transition'
+		//   | 'public'    | 'private'     | 'protected'
+		//   | 'static'    | 'final'
+		//   | 'volatile'  | 'transient'
+		//   | 'model'     | 'prototype'   | 'instance'
+		//   | 'timed'     | 'timed#dense' | 'timed#discrete'
+		//   | 'unsafe'    | 'input_enabled'
+		//   | 'port'      | 'signal'      | 'message'
+		//   | 'buffer'    | 'channel'     | 'via'
+		//   | 'var'       | 'val'         | 'const'
+		//   | 'input'     | 'in'          | 'inout'
+		//   | 'output'    | 'out'         | 'return'
+		//   | 'simple'    | 'start'       | 'final'
+		//   | 'initial'   | 'terminal'    | 'junction'
+		//   | 'choice'    | 'fork'        | 'join'
+		//   | 'dhistory'  | 'shistory'
+		//   | 'route'     | 'connector'   | 'connect'
+		//   | 'env'       | 'rdv'         | 'multirdv'
+		//   | 'buffer'    | 'unicast'     | 'anycast'
+		//   | 'multicast' | 'broadcast'
+		//   | 'boolean'   | 'bool'
+		//   | 'char'      | 'string'
+		//   | 'integer'   | 'int'
+		//   | 'uinteger'  | 'uint'
+		//   | 'rational'  | 'rat'
+		//   | 'urational' | 'urat'
+		//   | 'time'      | 'clock'
+		//   | 'float'     | 'double'      | 'real'
+		//   | 'ufloat'    | 'udouble'     | 'ureal'
+		//   | 'interval'  | 'enum'        | 'struct' | 'union'
+		//   | 'vector'    | 'rvector'     | 'list'
+		//   | 'set'       | 'bag'         | 'multiset'
+		//   | 'fifo'      | 'lifo'
+		//   | 'guard'     | 'tguard'
+		//   | 'event'     | 'checksat'
+		//   | 'break'     | 'continue'    | 'exit'   | 'init'
+		//   | 'destroy'   | 'stop'        | 'abort'  | 'restart'
+		//   | 'suspend'   | 'resume'      | 'wait'
+		//   | 'disable'   | 'enable'
+		//   | 'schedule'  | 'irun'        | 'run'    | 'rtc'
+		//   | 'call'      | 'new'         | 'ctor'   | 'newfresh'
+		//   | 'this'      | 'self'        | 'parent' | 'super'
+		//   | 'null'
+		//   | '#model'    | '#instance'        | '#static'   |  '#dynamic'
+		//   | '#runtime'  | '#static#instance' | '#dynamic#instance'
+		//   | '#prototype'| '#dynamic#prototype'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'package'
@@ -1148,8 +1219,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ESIdentifier");
 		private final RuleCall cXLIA_IDTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ESIdentifier:
-		//	XLIA_ID;
+		//ESIdentifier returns ecore::EString
+		//    : XLIA_ID
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//XLIA_ID
@@ -1168,14 +1240,15 @@
 		private final Keyword cColonKeyword_2_0_1 = (Keyword)cAlternatives_2_0.eContents().get(1);
 		private final RuleCall cXLIA_IDTerminalRuleCall_2_1 = (RuleCall)cGroup_2.eContents().get(1);
 		
-		//ESUfid:
-		//	('spec::' | '::')? XLIA_ID (('.' | ':') XLIA_ID)*;
+		//ESUfid returns ecore::EString
+		//    : ( 'spec::' | '::' )?  XLIA_ID  ( ( '.' | ':' ) XLIA_ID )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//('spec::' | '::')? XLIA_ID (('.' | ':') XLIA_ID)*
+		//( 'spec::' | '::' )?  XLIA_ID  ( ( '.' | ':' ) XLIA_ID )*
 		public Group getGroup() { return cGroup; }
 		
-		//('spec::' | '::')?
+		//( 'spec::' | '::' )?
 		public Alternatives getAlternatives_0() { return cAlternatives_0; }
 		
 		//'spec::'
@@ -1187,10 +1260,10 @@
 		//XLIA_ID
 		public RuleCall getXLIA_IDTerminalRuleCall_1() { return cXLIA_IDTerminalRuleCall_1; }
 		
-		//(('.' | ':') XLIA_ID)*
+		//( ( '.' | ':' ) XLIA_ID )*
 		public Group getGroup_2() { return cGroup_2; }
 		
-		//('.' | ':')
+		//( '.' | ':' )
 		public Alternatives getAlternatives_2_0() { return cAlternatives_2_0; }
 		
 		//'.'
@@ -1206,8 +1279,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.UnrestrictedName");
 		private final RuleCall cSTRINGTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//UnrestrictedName:
-		//	STRING;
+		//UnrestrictedName returns ecore::EString
+		//    : STRING
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//STRING
@@ -1226,35 +1300,40 @@
 		private final Assignment cNameBindingAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
 		private final RuleCall cNameBindingNameBindingParserRuleCall_2_1_0 = (RuleCall)cNameBindingAssignment_2_1.eContents().get(0);
 		
-		//QualifiedName fmlCommon::QualifiedName:
-		//	UnqualifiedName ('::' nameBinding+=NameBinding)* ('.' nameBinding+=NameBinding)*;
+		//QualifiedName returns fmlCommon::QualifiedName
+		//    : UnqualifiedName
+		//        ( '::' nameBinding += NameBinding )*
+		//        ( '.' nameBinding += NameBinding )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//UnqualifiedName ('::' nameBinding+=NameBinding)* ('.' nameBinding+=NameBinding)*
+		//UnqualifiedName
+		//       ( '::' nameBinding += NameBinding )*
+		//       ( '.' nameBinding += NameBinding )*
 		public Group getGroup() { return cGroup; }
 		
 		//UnqualifiedName
 		public RuleCall getUnqualifiedNameParserRuleCall_0() { return cUnqualifiedNameParserRuleCall_0; }
 		
-		//('::' nameBinding+=NameBinding)*
+		//( '::' nameBinding += NameBinding )*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'::'
 		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_1_1() { return cNameBindingAssignment_1_1; }
 		
 		//NameBinding
 		public RuleCall getNameBindingNameBindingParserRuleCall_1_1_0() { return cNameBindingNameBindingParserRuleCall_1_1_0; }
 		
-		//('.' nameBinding+=NameBinding)*
+		//( '.' nameBinding += NameBinding )*
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_2_0() { return cFullStopKeyword_2_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_2_1() { return cNameBindingAssignment_2_1; }
 		
 		//NameBinding
@@ -1278,52 +1357,61 @@
 		private final Assignment cNameBindingAssignment_2_2_1 = (Assignment)cGroup_2_2.eContents().get(1);
 		private final RuleCall cNameBindingNameBindingParserRuleCall_2_2_1_0 = (RuleCall)cNameBindingAssignment_2_2_1.eContents().get(0);
 		
-		//PotentiallyAmbiguousQualifiedName fmlCommon::QualifiedName:
-		//	UnqualifiedName ('::' nameBinding+=NameBinding)* (isAmbiguous?='.' nameBinding+=NameBinding ('.'
-		//	nameBinding+=NameBinding)*)?;
+		//PotentiallyAmbiguousQualifiedName returns fmlCommon::QualifiedName
+		//    : UnqualifiedName
+		//        ( '::' nameBinding += NameBinding )*
+		//        ( isAmbiguous ?= '.' nameBinding += NameBinding
+		//            ( '.' nameBinding += NameBinding )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//UnqualifiedName ('::' nameBinding+=NameBinding)* (isAmbiguous?='.' nameBinding+=NameBinding ('.'
-		//nameBinding+=NameBinding)*)?
+		//UnqualifiedName
+		//       ( '::' nameBinding += NameBinding )*
+		//       ( isAmbiguous ?= '.' nameBinding += NameBinding
+		//           ( '.' nameBinding += NameBinding )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//UnqualifiedName
 		public RuleCall getUnqualifiedNameParserRuleCall_0() { return cUnqualifiedNameParserRuleCall_0; }
 		
-		//('::' nameBinding+=NameBinding)*
+		//( '::' nameBinding += NameBinding )*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'::'
 		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_1_1() { return cNameBindingAssignment_1_1; }
 		
 		//NameBinding
 		public RuleCall getNameBindingNameBindingParserRuleCall_1_1_0() { return cNameBindingNameBindingParserRuleCall_1_1_0; }
 		
-		//(isAmbiguous?='.' nameBinding+=NameBinding ('.' nameBinding+=NameBinding)*)?
+		//( isAmbiguous ?= '.' nameBinding += NameBinding
+		//    ( '.' nameBinding += NameBinding )*
+		//)?
 		public Group getGroup_2() { return cGroup_2; }
 		
-		//isAmbiguous?='.'
+		//isAmbiguous ?= '.'
 		public Assignment getIsAmbiguousAssignment_2_0() { return cIsAmbiguousAssignment_2_0; }
 		
 		//'.'
 		public Keyword getIsAmbiguousFullStopKeyword_2_0_0() { return cIsAmbiguousFullStopKeyword_2_0_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_2_1() { return cNameBindingAssignment_2_1; }
 		
 		//NameBinding
 		public RuleCall getNameBindingNameBindingParserRuleCall_2_1_0() { return cNameBindingNameBindingParserRuleCall_2_1_0; }
 		
-		//('.' nameBinding+=NameBinding)*
+		//( '.' nameBinding += NameBinding )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_2_2_0() { return cFullStopKeyword_2_2_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_2_2_1() { return cNameBindingAssignment_2_2_1; }
 		
 		//NameBinding
@@ -1338,23 +1426,24 @@
 		private final Assignment cNameBindingAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cNameBindingNameBindingParserRuleCall_1_1_0 = (RuleCall)cNameBindingAssignment_1_1.eContents().get(0);
 		
-		//ColonQualifiedName fmlCommon::QualifiedName:
-		//	UnqualifiedName ('::' nameBinding+=NameBinding)+;
+		//ColonQualifiedName returns fmlCommon::QualifiedName
+		//    : UnqualifiedName ( '::' nameBinding += NameBinding )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//UnqualifiedName ('::' nameBinding+=NameBinding)+
+		//UnqualifiedName ( '::' nameBinding += NameBinding )+
 		public Group getGroup() { return cGroup; }
 		
 		//UnqualifiedName
 		public RuleCall getUnqualifiedNameParserRuleCall_0() { return cUnqualifiedNameParserRuleCall_0; }
 		
-		//('::' nameBinding+=NameBinding)+
+		//( '::' nameBinding += NameBinding )+
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'::'
 		public Keyword getColonColonKeyword_1_0() { return cColonColonKeyword_1_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_1_1() { return cNameBindingAssignment_1_1; }
 		
 		//NameBinding
@@ -1369,23 +1458,24 @@
 		private final Assignment cNameBindingAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cNameBindingNameBindingParserRuleCall_1_1_0 = (RuleCall)cNameBindingAssignment_1_1.eContents().get(0);
 		
-		//DotQualifiedName fmlCommon::QualifiedName:
-		//	UnqualifiedName ('.' nameBinding+=NameBinding)+;
+		//DotQualifiedName returns fmlCommon::QualifiedName
+		//    : UnqualifiedName ( '.' nameBinding += NameBinding )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//UnqualifiedName ('.' nameBinding+=NameBinding)+
+		//UnqualifiedName ( '.' nameBinding += NameBinding )+
 		public Group getGroup() { return cGroup; }
 		
 		//UnqualifiedName
 		public RuleCall getUnqualifiedNameParserRuleCall_0() { return cUnqualifiedNameParserRuleCall_0; }
 		
-		//('.' nameBinding+=NameBinding)+
+		//( '.' nameBinding += NameBinding )+
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_1_0() { return cFullStopKeyword_1_0; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment_1_1() { return cNameBindingAssignment_1_1; }
 		
 		//NameBinding
@@ -1396,11 +1486,12 @@
 		private final Assignment cNameBindingAssignment = (Assignment)rule.eContents().get(1);
 		private final RuleCall cNameBindingNameBindingParserRuleCall_0 = (RuleCall)cNameBindingAssignment.eContents().get(0);
 		
-		//UnqualifiedName fmlCommon::QualifiedName:
-		//	nameBinding+=NameBinding;
+		//UnqualifiedName returns fmlCommon::QualifiedName
+		//    : nameBinding += NameBinding
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//nameBinding+=NameBinding
+		//nameBinding += NameBinding
 		public Assignment getNameBindingAssignment() { return cNameBindingAssignment; }
 		
 		//NameBinding
@@ -1410,8 +1501,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.NameBinding");
 		private final RuleCall cXLIA_IDTerminalRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//NameBinding:
-		//	XLIA_ID;
+		//NameBinding
+		//    : XLIA_ID
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//XLIA_ID
@@ -1440,30 +1532,48 @@
 		private final Keyword cAssertKeyword_17 = (Keyword)cAlternatives.eContents().get(17);
 		private final Keyword cNegKeyword_18 = (Keyword)cAlternatives.eContents().get(18);
 		
-		//ModelOfComputationKing:
-		//	'and'
-		//	| 'or'
-		//	| 'start'
-		//	| '#STF'
-		//	| '#STS'
-		//	| '#DF'
-		//	| '#alt'
-		//	| '#opt'
-		//	| '#loop'
-		//	| '#break'
-		//	| '#par'
-		//	| '#strict'
-		//	| '#weak'
-		//	| '#seq'
-		//	| '#critical'
-		//	| '#ignore'
-		//	| '#consider'
-		//	| '#assert'
-		//	| '#neg';
+		//ModelOfComputationKing
+		//    : 'and'
+		//    | 'or'
+		//    | 'start'
+		//    | '#STF'
+		//    | '#STS'
+		//    | '#DF'
+		//    | '#alt'
+		//    | '#opt'
+		//    | '#loop'
+		//    | '#break'
+		//    | '#par'
+		//    | '#strict'
+		//    | '#weak'
+		//    | '#seq'
+		//    | '#critical'
+		//    | '#ignore'
+		//    | '#consider'
+		//    | '#assert'
+		//    | '#neg'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'and' | 'or' | 'start' | '#STF' | '#STS' | '#DF' | '#alt' | '#opt' | '#loop' | '#break' | '#par' | '#strict' | '#weak' |
-		//'#seq' | '#critical' | '#ignore' | '#consider' | '#assert' | '#neg'
+		//'and'
+		//   | 'or'
+		//   | 'start'
+		//   | '#STF'
+		//   | '#STS'
+		//   | '#DF'
+		//   | '#alt'
+		//   | '#opt'
+		//   | '#loop'
+		//   | '#break'
+		//   | '#par'
+		//   | '#strict'
+		//   | '#weak'
+		//   | '#seq'
+		//   | '#critical'
+		//   | '#ignore'
+		//   | '#consider'
+		//   | '#assert'
+		//   | '#neg'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'and'
@@ -1536,20 +1646,28 @@
 		private final Keyword cPrototypeKeyword_7 = (Keyword)cAlternatives.eContents().get(7);
 		private final Keyword cDynamicPrototypeKeyword_8 = (Keyword)cAlternatives.eContents().get(8);
 		
-		//DesignDebugTrace:
-		//	'#model'
-		//	| '#instance'
-		//	| '#static'
-		//	| '#dynamic'
-		//	| '#runtime'
-		//	| '#static#instance'
-		//	| '#dynamic#instance'
-		//	| '#prototype'
-		//	| '#dynamic#prototype';
+		//DesignDebugTrace
+		//    : '#model'
+		//    | '#instance'
+		//    | '#static'
+		//    | '#dynamic'
+		//    | '#runtime'
+		//    | '#static#instance'
+		//    | '#dynamic#instance'
+		//    | '#prototype'
+		//    | '#dynamic#prototype'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'#model' | '#instance' | '#static' | '#dynamic' | '#runtime' | '#static#instance' | '#dynamic#instance' | '#prototype' |
-		//'#dynamic#prototype'
+		//'#model'
+		//   | '#instance'
+		//   | '#static'
+		//   | '#dynamic'
+		//   | '#runtime'
+		//   | '#static#instance'
+		//   | '#dynamic#instance'
+		//   | '#prototype'
+		//   | '#dynamic#prototype'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'#model'
@@ -1744,125 +1862,268 @@
 		private final RuleCall cMainMoeBehaviorParserRuleCall_11_0 = (RuleCall)cMainAssignment_11.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_12 = (Keyword)cGroup.eContents().get(12);
 		
-		//XliaSystem fmlInfra::XliaSystem:
-		//	(visibility=VisibilityKind?
-		//	& timed?='timed'?
-		//	& dense_timed?='timed#dense'?
-		//	& discrete_timed?='timed#discrete'?
-		//	& input_enabled?='input_enabled'?
-		//	& unsafe?='unsafe'?)
-		//	'system' ('<' 'moc:'? ('and' | 'or') '>')?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'{' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	('@property:' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	| '@public:' (port+=PortPublic
-		//	| signal+=SignalPublic
-		//	| buffer+=BufferPublic
-		//	| channel+=ChannelPublic
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPublic
-		//	| variable+=VariablePublic)*
-		//	| '@protected:' (port+=PortProtected
-		//	| signal+=SignalProtected
-		//	| buffer+=BufferProtected
-		//	| channel+=ChannelProtected
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionProtected
-		//	| variable+=VariableProtected)*
-		//	| '@private:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-		//	| '@procedure:' procedure+=Procedure+)*
-		//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-		//	| instance+=InstanceMachine)+
-		//	| '@model:' machine+=AnyMachineBlock*
-		//	| '@prototype:' machine+=AnyMachineBlock*
-		//	| '@instance:' instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+
-		//	| '@statemachine:' behavior+=Statemachine+)*
-		//	main=MoeBehavior
-		//	//		// optional unnamed section for property full declaration / definition
-		//	//		propertyPart=PropertyPart
-		//	//
-		//	//		compositePart=CompositePart
-		//	//
-		//	//		behaviorPart=BehaviorPart
-		//	'}';
+		//XliaSystem returns fmlInfra::XliaSystem
+		//    : ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( unsafe ?= 'unsafe' )?
+		//        )
+		//        'system' ('<' ( 'moc:' )? ( 'and' | 'or' ) '>')?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( // optional unnamed section for property full declaration / definition
+		////            ( 'port'
+		////                ( port+=PortImpl
+		////                | '{' ( port+=PortImpl )+ '}'
+		////                )
+		////            | 'signal'
+		////                ( signal+=SignalImpl
+		////                | '{' ( signal+=SignalImpl )+ '}'
+		////                )
+		////            | 'buffer'
+		////                ( buffer+=BufferImpl
+		////                | '{' ( buffer+=BufferImpl )+ '}'
+		////                )
+		////            | channel+=Channel
+		////            | 'type'
+		////                ( typedef+=TypeDefinitionImpl
+		////                | '{' ( typedef+=TypeDefinitionImpl )+ '}'
+		////                )
+		////            | 'var'
+		////                ( property+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | ( 'val' | 'const' )
+		////                ( variable+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | variable+=Variable
+		////            )*
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		//        ( ( '@composite:' | '@machine:' )
+		//            ( machine +=AnyMachineBlock
+		//            | instance+=InstanceMachine
+		//            )+
+		//        | '@model:'     ( machine +=AnyMachineBlock )*
+		//        | '@prototype:' ( machine +=AnyMachineBlock )*
+		//        | '@instance:'  ( instance+=InstanceMachine )*
+		//        )*
+		//        ( '@behavior:'     ( behavior+=Behavior )+
+		//        | '@statemachine:' ( behavior+=Statemachine )+
+		//        )*
+		//        main=MoeBehavior
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////
+		////        behaviorPart=BehaviorPart
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//(visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? & discrete_timed?='timed#discrete'? &
-		//input_enabled?='input_enabled'? & unsafe?='unsafe'?) 'system' ('<' 'moc:'? ('and' | 'or') '>')? name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? '{' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel |
-		//typedef+=TypeDefinition | function+=Function | variable+=Variable)* ('@property:' (port+=Port | signal+=Signal |
-		//buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function | variable+=Variable)* | '@public:'
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)* | '@protected:' (port+=PortProtected | signal+=SignalProtected |
-		//buffer+=BufferProtected | channel+=ChannelProtected | typedef+=TypeDefinition | function+=FunctionProtected |
-		//variable+=VariableProtected)* | '@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)*
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+ |
-		//'@model:' machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:'
-		//instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)*
-		//main=MoeBehavior //		// optional unnamed section for property full declaration / definition
-		////		propertyPart=PropertyPart
+		// ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( unsafe ?= 'unsafe' )?
+		//        )
+		//        'system' ('<' ( 'moc:' )? ( 'and' | 'or' ) '>')?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( // optional unnamed section for property full declaration / definition
+		////            ( 'port'
+		////                ( port+=PortImpl
+		////                | '{' ( port+=PortImpl )+ '}'
+		////                )
+		////            | 'signal'
+		////                ( signal+=SignalImpl
+		////                | '{' ( signal+=SignalImpl )+ '}'
+		////                )
+		////            | 'buffer'
+		////                ( buffer+=BufferImpl
+		////                | '{' ( buffer+=BufferImpl )+ '}'
+		////                )
+		////            | channel+=Channel
+		////            | 'type'
+		////                ( typedef+=TypeDefinitionImpl
+		////                | '{' ( typedef+=TypeDefinitionImpl )+ '}'
+		////                )
+		////            | 'var'
+		////                ( property+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | ( 'val' | 'const' )
+		////                ( variable+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | variable+=Variable
+		////            )*
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		//        ( ( '@composite:' | '@machine:' )
+		//            ( machine +=AnyMachineBlock
+		//            | instance+=InstanceMachine
+		//            )+
+		//        | '@model:'     ( machine +=AnyMachineBlock )*
+		//        | '@prototype:' ( machine +=AnyMachineBlock )*
+		//        | '@instance:'  ( instance+=InstanceMachine )*
+		//        )*
+		//        ( '@behavior:'     ( behavior+=Behavior )+
+		//        | '@statemachine:' ( behavior+=Statemachine )+
+		//        )*
+		//        main=MoeBehavior
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
 		////
-		////		compositePart=CompositePart
+		////        compositePart=CompositePart
 		////
-		////		behaviorPart=BehaviorPart
-		//'}'
+		////        behaviorPart=BehaviorPart
+		//        '}'
 		public Group getGroup() { return cGroup; }
 		
-		//(visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? & discrete_timed?='timed#discrete'? &
-		//input_enabled?='input_enabled'? & unsafe?='unsafe'?)
+		//( ( visibility=VisibilityKind )?
+		//       & ( timed?='timed' )?
+		//       & ( dense_timed?='timed#dense' )?
+		//       & ( discrete_timed?='timed#discrete' )?
+		//       & ( input_enabled ?= 'input_enabled' )?
+		//       & ( unsafe ?= 'unsafe' )?
+		//       )
 		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_0_0() { return cVisibilityAssignment_0_0; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_0_0_0() { return cVisibilityVisibilityKindEnumRuleCall_0_0_0; }
 		
-		//timed?='timed'?
+		//( timed?='timed' )?
 		public Assignment getTimedAssignment_0_1() { return cTimedAssignment_0_1; }
 		
 		//'timed'
 		public Keyword getTimedTimedKeyword_0_1_0() { return cTimedTimedKeyword_0_1_0; }
 		
-		//dense_timed?='timed#dense'?
+		//( dense_timed?='timed#dense' )?
 		public Assignment getDense_timedAssignment_0_2() { return cDense_timedAssignment_0_2; }
 		
 		//'timed#dense'
 		public Keyword getDense_timedTimedDenseKeyword_0_2_0() { return cDense_timedTimedDenseKeyword_0_2_0; }
 		
-		//discrete_timed?='timed#discrete'?
+		//( discrete_timed?='timed#discrete' )?
 		public Assignment getDiscrete_timedAssignment_0_3() { return cDiscrete_timedAssignment_0_3; }
 		
 		//'timed#discrete'
 		public Keyword getDiscrete_timedTimedDiscreteKeyword_0_3_0() { return cDiscrete_timedTimedDiscreteKeyword_0_3_0; }
 		
-		//input_enabled?='input_enabled'?
+		//( input_enabled ?= 'input_enabled' )?
 		public Assignment getInput_enabledAssignment_0_4() { return cInput_enabledAssignment_0_4; }
 		
 		//'input_enabled'
 		public Keyword getInput_enabledInput_enabledKeyword_0_4_0() { return cInput_enabledInput_enabledKeyword_0_4_0; }
 		
-		//unsafe?='unsafe'?
+		//( unsafe ?= 'unsafe' )?
 		public Assignment getUnsafeAssignment_0_5() { return cUnsafeAssignment_0_5; }
 		
 		//'unsafe'
@@ -1871,16 +2132,16 @@
 		//'system'
 		public Keyword getSystemKeyword_1() { return cSystemKeyword_1; }
 		
-		//('<' 'moc:'? ('and' | 'or') '>')?
+		//('<' ( 'moc:' )? ( 'and' | 'or' ) '>')?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_2_1() { return cMocKeyword_2_1; }
 		
-		//('and' | 'or')
+		//( 'and' | 'or' )
 		public Alternatives getAlternatives_2_2() { return cAlternatives_2_2; }
 		
 		//'and'
@@ -1898,7 +2159,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -1907,8 +2168,43 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5() { return cLeftCurlyBracketKeyword_5; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//        ( // optional unnamed section for property full declaration / definition
+		////            ( 'port'
+		////                ( port+=PortImpl
+		////                | '{' ( port+=PortImpl )+ '}'
+		////                )
+		////            | 'signal'
+		////                ( signal+=SignalImpl
+		////                | '{' ( signal+=SignalImpl )+ '}'
+		////                )
+		////            | 'buffer'
+		////                ( buffer+=BufferImpl
+		////                | '{' ( buffer+=BufferImpl )+ '}'
+		////                )
+		////            | channel+=Channel
+		////            | 'type'
+		////                ( typedef+=TypeDefinitionImpl
+		////                | '{' ( typedef+=TypeDefinitionImpl )+ '}'
+		////                )
+		////            | 'var'
+		////                ( property+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | ( 'val' | 'const' )
+		////                ( variable+=VariableImpl
+		////                | '{' ( variable+=VariableImpl )+ '}'
+		////                )
+		////            | variable+=Variable
+		////            )*
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
 		//port+=Port
@@ -1953,24 +2249,67 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_6_6_0() { return cVariableVariableParserRuleCall_6_6_0; }
 		
-		//('@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)* | '@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic
-		//| channel+=ChannelPublic | typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)* |
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)* | '@private:' (port+=PortPrivate
-		//| signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//( '@property:'
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//| '@public:'
+		//    ( port+=PortPublic
+		//    | signal+=SignalPublic
+		//    | buffer+=BufferPublic
+		//    | channel+=ChannelPublic
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPublic
+		//    | variable+=VariablePublic
+		//    )*
+		//| '@protected:'
+		//    ( port+=PortProtected
+		//    | signal+=SignalProtected
+		//    | buffer+=BufferProtected
+		//    | channel+=ChannelProtected
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionProtected
+		//    | variable+=VariableProtected
+		//    )*
+		//| '@private:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)*
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)*
+		//'@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'@property:'
 		public Keyword getPropertyKeyword_7_0_0() { return cPropertyKeyword_7_0_0; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( port+=Port
+		//| signal+=Signal
+		//| buffer+=Buffer
+		//| channel+=Channel
+		//| typedef+=TypeDefinition
+		//| function+=Function
+		//| variable+=Variable
+		//)*
 		public Alternatives getAlternatives_7_0_1() { return cAlternatives_7_0_1; }
 		
 		//port+=Port
@@ -2015,15 +2354,28 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_7_0_1_6_0() { return cVariableVariableParserRuleCall_7_0_1_6_0; }
 		
-		//'@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic |
-		//typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)*
+		//'@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
 		public Group getGroup_7_1() { return cGroup_7_1; }
 		
 		//'@public:'
 		public Keyword getPublicKeyword_7_1_0() { return cPublicKeyword_7_1_0; }
 		
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)*
+		//( port+=PortPublic
+		//| signal+=SignalPublic
+		//| buffer+=BufferPublic
+		//| channel+=ChannelPublic
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPublic
+		//| variable+=VariablePublic
+		//)*
 		public Alternatives getAlternatives_7_1_1() { return cAlternatives_7_1_1; }
 		
 		//port+=PortPublic
@@ -2068,15 +2420,28 @@
 		//VariablePublic
 		public RuleCall getVariableVariablePublicParserRuleCall_7_1_1_6_0() { return cVariableVariablePublicParserRuleCall_7_1_1_6_0; }
 		
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//'@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
 		public Group getGroup_7_2() { return cGroup_7_2; }
 		
 		//'@protected:'
 		public Keyword getProtectedKeyword_7_2_0() { return cProtectedKeyword_7_2_0; }
 		
-		//(port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//( port+=PortProtected
+		//| signal+=SignalProtected
+		//| buffer+=BufferProtected
+		//| channel+=ChannelProtected
+		//| typedef+=TypeDefinition
+		//| function+=FunctionProtected
+		//| variable+=VariableProtected
+		//)*
 		public Alternatives getAlternatives_7_2_1() { return cAlternatives_7_2_1; }
 		
 		//port+=PortProtected
@@ -2121,15 +2486,28 @@
 		//VariableProtected
 		public RuleCall getVariableVariableProtectedParserRuleCall_7_2_1_6_0() { return cVariableVariableProtectedParserRuleCall_7_2_1_6_0; }
 		
-		//'@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*
+		//'@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
 		public Group getGroup_7_3() { return cGroup_7_3; }
 		
 		//'@private:'
 		public Keyword getPrivateKeyword_7_3_0() { return cPrivateKeyword_7_3_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_7_3_1() { return cAlternatives_7_3_1; }
 		
 		//port+=PortPrivate
@@ -2174,17 +2552,22 @@
 		//VariablePrivate
 		public RuleCall getVariableVariablePrivateParserRuleCall_7_3_1_6_0() { return cVariableVariablePrivateParserRuleCall_7_3_1_6_0; }
 		
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+)
+		//( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//  | '@procedure:' ( procedure+=Procedure )+
+		//  )*
+		//| ( routine+=Routine | procedure+=Procedure )+
+		//)
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//(('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)*
+		//( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
 		public Alternatives getAlternatives_8_0() { return cAlternatives_8_0; }
 		
-		//('@routine:' | '@macro:') routine+=Routine+
+		//( '@routine:' | '@macro:' ) ( routine+=Routine )+
 		public Group getGroup_8_0_0() { return cGroup_8_0_0; }
 		
-		//('@routine:' | '@macro:')
+		//( '@routine:' | '@macro:' )
 		public Alternatives getAlternatives_8_0_0_0() { return cAlternatives_8_0_0_0; }
 		
 		//'@routine:'
@@ -2193,25 +2576,25 @@
 		//'@macro:'
 		public Keyword getMacroKeyword_8_0_0_0_1() { return cMacroKeyword_8_0_0_0_1; }
 		
-		//routine+=Routine+
+		//( routine+=Routine )+
 		public Assignment getRoutineAssignment_8_0_0_1() { return cRoutineAssignment_8_0_0_1; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_8_0_0_1_0() { return cRoutineRoutineParserRuleCall_8_0_0_1_0; }
 		
-		//'@procedure:' procedure+=Procedure+
+		//'@procedure:' ( procedure+=Procedure )+
 		public Group getGroup_8_0_1() { return cGroup_8_0_1; }
 		
 		//'@procedure:'
 		public Keyword getProcedureKeyword_8_0_1_0() { return cProcedureKeyword_8_0_1_0; }
 		
-		//procedure+=Procedure+
+		//( procedure+=Procedure )+
 		public Assignment getProcedureAssignment_8_0_1_1() { return cProcedureAssignment_8_0_1_1; }
 		
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_8_0_1_1_0() { return cProcedureProcedureParserRuleCall_8_0_1_1_0; }
 		
-		//(routine+=Routine | procedure+=Procedure)+
+		//( routine+=Routine | procedure+=Procedure )+
 		public Alternatives getAlternatives_8_1() { return cAlternatives_8_1; }
 		
 		//routine+=Routine
@@ -2226,14 +2609,23 @@
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_8_1_1_0() { return cProcedureProcedureParserRuleCall_8_1_1_0; }
 		
-		//(('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+ | '@model:'
-		//machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)*
+		//( ( '@composite:' | '@machine:' )
+		//    ( machine +=AnyMachineBlock
+		//    | instance+=InstanceMachine
+		//    )+
+		//| '@model:'     ( machine +=AnyMachineBlock )*
+		//| '@prototype:' ( machine +=AnyMachineBlock )*
+		//| '@instance:'  ( instance+=InstanceMachine )*
+		//)*
 		public Alternatives getAlternatives_9() { return cAlternatives_9; }
 		
-		//('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( '@composite:' | '@machine:' )
+		//           ( machine +=AnyMachineBlock
+		//           | instance+=InstanceMachine
+		//           )+
 		public Group getGroup_9_0() { return cGroup_9_0; }
 		
-		//('@composite:' | '@machine:')
+		//( '@composite:' | '@machine:' )
 		public Alternatives getAlternatives_9_0_0() { return cAlternatives_9_0_0; }
 		
 		//'@composite:'
@@ -2242,10 +2634,12 @@
 		//'@machine:'
 		public Keyword getMachineKeyword_9_0_0_1() { return cMachineKeyword_9_0_0_1; }
 		
-		//(machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( machine +=AnyMachineBlock
+		//| instance+=InstanceMachine
+		//)+
 		public Alternatives getAlternatives_9_0_1() { return cAlternatives_9_0_1; }
 		
-		//machine+=AnyMachineBlock
+		//machine +=AnyMachineBlock
 		public Assignment getMachineAssignment_9_0_1_0() { return cMachineAssignment_9_0_1_0; }
 		
 		//AnyMachineBlock
@@ -2257,64 +2651,66 @@
 		//InstanceMachine
 		public RuleCall getInstanceInstanceMachineParserRuleCall_9_0_1_1_0() { return cInstanceInstanceMachineParserRuleCall_9_0_1_1_0; }
 		
-		//'@model:' machine+=AnyMachineBlock*
+		//'@model:'     ( machine +=AnyMachineBlock )*
 		public Group getGroup_9_1() { return cGroup_9_1; }
 		
 		//'@model:'
 		public Keyword getModelKeyword_9_1_0() { return cModelKeyword_9_1_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_9_1_1() { return cMachineAssignment_9_1_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_9_1_1_0() { return cMachineAnyMachineBlockParserRuleCall_9_1_1_0; }
 		
-		//'@prototype:' machine+=AnyMachineBlock*
+		//'@prototype:' ( machine +=AnyMachineBlock )*
 		public Group getGroup_9_2() { return cGroup_9_2; }
 		
 		//'@prototype:'
 		public Keyword getPrototypeKeyword_9_2_0() { return cPrototypeKeyword_9_2_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_9_2_1() { return cMachineAssignment_9_2_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_9_2_1_0() { return cMachineAnyMachineBlockParserRuleCall_9_2_1_0; }
 		
-		//'@instance:' instance+=InstanceMachine*
+		//'@instance:'  ( instance+=InstanceMachine )*
 		public Group getGroup_9_3() { return cGroup_9_3; }
 		
 		//'@instance:'
 		public Keyword getInstanceKeyword_9_3_0() { return cInstanceKeyword_9_3_0; }
 		
-		//instance+=InstanceMachine*
+		//( instance+=InstanceMachine )*
 		public Assignment getInstanceAssignment_9_3_1() { return cInstanceAssignment_9_3_1; }
 		
 		//InstanceMachine
 		public RuleCall getInstanceInstanceMachineParserRuleCall_9_3_1_0() { return cInstanceInstanceMachineParserRuleCall_9_3_1_0; }
 		
-		//('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)*
+		//( '@behavior:'     ( behavior+=Behavior )+
+		//| '@statemachine:' ( behavior+=Statemachine )+
+		//)*
 		public Alternatives getAlternatives_10() { return cAlternatives_10; }
 		
-		//'@behavior:' behavior+=Behavior+
+		//'@behavior:'     ( behavior+=Behavior )+
 		public Group getGroup_10_0() { return cGroup_10_0; }
 		
 		//'@behavior:'
 		public Keyword getBehaviorKeyword_10_0_0() { return cBehaviorKeyword_10_0_0; }
 		
-		//behavior+=Behavior+
+		//( behavior+=Behavior )+
 		public Assignment getBehaviorAssignment_10_0_1() { return cBehaviorAssignment_10_0_1; }
 		
 		//Behavior
 		public RuleCall getBehaviorBehaviorParserRuleCall_10_0_1_0() { return cBehaviorBehaviorParserRuleCall_10_0_1_0; }
 		
-		//'@statemachine:' behavior+=Statemachine+
+		//'@statemachine:' ( behavior+=Statemachine )+
 		public Group getGroup_10_1() { return cGroup_10_1; }
 		
 		//'@statemachine:'
 		public Keyword getStatemachineKeyword_10_1_0() { return cStatemachineKeyword_10_1_0; }
 		
-		//behavior+=Statemachine+
+		//( behavior+=Statemachine )+
 		public Assignment getBehaviorAssignment_10_1_1() { return cBehaviorAssignment_10_1_1; }
 		
 		//Statemachine
@@ -2326,13 +2722,13 @@
 		//MoeBehavior
 		public RuleCall getMainMoeBehaviorParserRuleCall_11_0() { return cMainMoeBehaviorParserRuleCall_11_0; }
 		
-		////		// optional unnamed section for property full declaration / definition
-		////		propertyPart=PropertyPart
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
 		////
-		////		compositePart=CompositePart
+		////        compositePart=CompositePart
 		////
-		////		behaviorPart=BehaviorPart
-		//'}'
+		////        behaviorPart=BehaviorPart
+		//        '}'
 		public Keyword getRightCurlyBracketKeyword_12() { return cRightCurlyBracketKeyword_12; }
 	}
 	public class AnyMachineBlockElements extends AbstractParserRuleElementFinder {
@@ -2341,12 +2737,14 @@
 		private final RuleCall cMachineBlockParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cStatemachineParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//AnyMachineBlock fmlInfra::Machine:
-		//	MachineBlock
-		//	| Statemachine;
+		//AnyMachineBlock returns fmlInfra::Machine
+		//    : MachineBlock
+		//    | Statemachine
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//MachineBlock | Statemachine
+		//MachineBlock
+		//   | Statemachine
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//MachineBlock
@@ -2392,23 +2790,30 @@
 		private final Keyword cRightCurlyBracketKeyword_9_0_2 = (Keyword)cGroup_9_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_9_1 = (Keyword)cAlternatives_9.eContents().get(1);
 		
-		//InstanceMachine fmlInfra::InstanceMachine:
-		//	'instance' ('machine' | 'statemachine')?
-		//	'<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' (slot+=SlotParameter (',' slot+=SlotParameter)*)? ')')? ('{'
-		//	(slot+=SlotProperty ';')* '}'
-		//	| ';');
+		//InstanceMachine returns fmlInfra::InstanceMachine
+		//    : 'instance' ( 'machine' | 'statemachine' ) ?
+		//        '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+		//        ( '{'  ( slot+=SlotProperty ';' )*  '}'
+		//        | ';'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'instance' ('machine' | 'statemachine')? '<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('(' (slot+=SlotParameter (',' slot+=SlotParameter)*)? ')')? ('{'
-		//(slot+=SlotProperty ';')* '}' | ';')
+		//'instance' ( 'machine' | 'statemachine' ) ?
+		//       '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+		//       ( '{'  ( slot+=SlotProperty ';' )*  '}'
+		//       | ';'
+		//       )
 		public Group getGroup() { return cGroup; }
 		
 		//'instance'
 		public Keyword getInstanceKeyword_0() { return cInstanceKeyword_0; }
 		
-		//('machine' | 'statemachine')?
+		//( 'machine' | 'statemachine' ) ?
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'machine'
@@ -2420,7 +2825,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_2() { return cLessThanSignKeyword_2; }
 		
-		//'model:'?
+		//( 'model:' )?
 		public Keyword getModelKeyword_3() { return cModelKeyword_3; }
 		
 		//model=[fmlInfra::Machine|ESUfid]
@@ -2441,19 +2846,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_6_0() { return cNameESIdentifierParserRuleCall_6_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_7() { return cUnrestrictedNameAssignment_7; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_7_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_7_0; }
 		
-		//('(' (slot+=SlotParameter (',' slot+=SlotParameter)*)? ')')?
+		//( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
 		public Group getGroup_8() { return cGroup_8; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_8_0() { return cLeftParenthesisKeyword_8_0; }
 		
-		//(slot+=SlotParameter (',' slot+=SlotParameter)*)?
+		//( slot+=SlotParameter ( ',' slot+=SlotParameter )* )?
 		public Group getGroup_8_1() { return cGroup_8_1; }
 		
 		//slot+=SlotParameter
@@ -2462,7 +2867,7 @@
 		//SlotParameter
 		public RuleCall getSlotSlotParameterParserRuleCall_8_1_0_0() { return cSlotSlotParameterParserRuleCall_8_1_0_0; }
 		
-		//(',' slot+=SlotParameter)*
+		//( ',' slot+=SlotParameter )*
 		public Group getGroup_8_1_1() { return cGroup_8_1_1; }
 		
 		//','
@@ -2477,16 +2882,18 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_8_2() { return cRightParenthesisKeyword_8_2; }
 		
-		//('{' (slot+=SlotProperty ';')* '}' | ';')
+		//( '{'  ( slot+=SlotProperty ';' )*  '}'
+		//| ';'
+		//)
 		public Alternatives getAlternatives_9() { return cAlternatives_9; }
 		
-		//'{' (slot+=SlotProperty ';')* '}'
+		//'{'  ( slot+=SlotProperty ';' )*  '}'
 		public Group getGroup_9_0() { return cGroup_9_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_9_0_0() { return cLeftCurlyBracketKeyword_9_0_0; }
 		
-		//(slot+=SlotProperty ';')*
+		//( slot+=SlotProperty ';' )*
 		public Group getGroup_9_0_1() { return cGroup_9_0_1; }
 		
 		//slot+=SlotProperty
@@ -2518,14 +2925,21 @@
 		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cValueExpressionParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
 		
-		//SlotParameter fmlInfra::SlotProperty:
-		//	xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] (':' | '=' | ':=' | '::=') value=Expression;
+		//SlotParameter returns fmlInfra::SlotProperty
+		//    : ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      )  ( ':' | '='  | ':=' | '::=' )  value=Expression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] (':' | '=' | ':=' | '::=') value=Expression
+		// ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      )  ( ':' | '='  | ':=' | '::=' )  value=Expression
 		public Group getGroup() { return cGroup; }
 		
-		//xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		// ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      )
 		public Assignment getXliaPropertyAssignment_0() { return cXliaPropertyAssignment_0; }
 		
 		//[fmlInfra::PropertyDefinition|ESIdentifier]
@@ -2534,7 +2948,7 @@
 		//ESIdentifier
 		public RuleCall getXliaPropertyPropertyDefinitionESIdentifierParserRuleCall_0_0_1() { return cXliaPropertyPropertyDefinitionESIdentifierParserRuleCall_0_0_1; }
 		
-		//(':' | '=' | ':=' | '::=')
+		//( ':' | '='  | ':=' | '::=' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//':'
@@ -2569,14 +2983,21 @@
 		private final Assignment cValueAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cValueExpressionParserRuleCall_2_0 = (RuleCall)cValueAssignment_2.eContents().get(0);
 		
-		//SlotProperty fmlInfra::SlotProperty:
-		//	xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] ('=' | ':' | ':=' | '::=') value=Expression;
+		//SlotProperty returns fmlInfra::SlotProperty
+		//    : ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      ) ( '='  | ':' | ':=' | '::=' )  value=Expression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] ('=' | ':' | ':=' | '::=') value=Expression
+		// ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      ) ( '='  | ':' | ':=' | '::=' )  value=Expression
 		public Group getGroup() { return cGroup; }
 		
-		//xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		// ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+		////      | umlProperty=[uml::Property|ESIdentifier]
+		//      )
 		public Assignment getXliaPropertyAssignment_0() { return cXliaPropertyAssignment_0; }
 		
 		//[fmlInfra::PropertyDefinition|ESIdentifier]
@@ -2585,7 +3006,7 @@
 		//ESIdentifier
 		public RuleCall getXliaPropertyPropertyDefinitionESIdentifierParserRuleCall_0_0_1() { return cXliaPropertyPropertyDefinitionESIdentifierParserRuleCall_0_0_1; }
 		
-		//('=' | ':' | ':=' | '::=')
+		//( '='  | ':' | ':=' | '::=' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'='
@@ -2786,139 +3207,237 @@
 		private final RuleCall cMainMoeBehaviorParserRuleCall_11_0 = (RuleCall)cMainAssignment_11.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_12 = (Keyword)cGroup.eContents().get(12);
 		
-		//MachineBlock fmlInfra::Machine:
-		//	(visibility=VisibilityKind?
-		//	& timed?='timed'?
-		//	& dense_timed?='timed#dense'?
-		//	& discrete_timed?='timed#discrete'?
-		//	& input_enabled?='input_enabled'?
-		//	& lifeline?='lifeline'?
-		//	& design=DesignKind?) ('machine' | 'executable') ('<' ('moc:'? ModelOfComputationKing)? ('instance:' '[' ('+' | '*'
-		//	| 'init:' EInteger 'max:' EInteger) ']')? '>')?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'{' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	('@property:' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	| '@public:' (port+=PortPublic
-		//	| signal+=SignalPublic
-		//	| buffer+=BufferPublic
-		//	| channel+=ChannelPublic
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPublic
-		//	| variable+=VariablePublic)*
-		//	| '@protected:' (port+=PortProtected
-		//	| signal+=SignalProtected
-		//	| buffer+=BufferProtected
-		//	| channel+=ChannelProtected
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionProtected
-		//	| variable+=VariableProtected)*
-		//	| '@private:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-		//	| '@procedure:' procedure+=Procedure+)*
-		//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-		//	| instance+=InstanceMachine)+
-		//	| '@model:' machine+=AnyMachineBlock*
-		//	| '@prototype:' machine+=AnyMachineBlock*
-		//	| '@instance:' instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+
-		//	| '@statemachine:' behavior+=Statemachine+)*
-		//	main=MoeBehavior
-		//	//		// optional unnamed section for property full declaration / definition
-		//	//		propertyPart=PropertyPart
-		//	//
-		//	//		compositePart=CompositePart
-		//	//
-		//	//		behaviorPart=BehaviorPart
-		//	'}';
+		//MachineBlock returns fmlInfra::Machine
+		//    : ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( lifeline?='lifeline' )?
+		//        & ( design=DesignKind )?
+		//        )
+		//        ( 'machine' | 'executable' )
+		//        ( '<' ( ( 'moc:' )?  ModelOfComputationKing )?
+		//            ( 'instance:' '[' ( '+' | '*'
+		//                | ( 'init:' EInteger 'max:' EInteger ) ) ']' )? '>'
+		//        )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		//        ( ( '@composite:' | '@machine:' )
+		//            ( machine +=AnyMachineBlock
+		//            | instance+=InstanceMachine
+		//            )+
+		//        | '@model:'     ( machine +=AnyMachineBlock )*
+		//        | '@prototype:' ( machine +=AnyMachineBlock )*
+		//        | '@instance:'  ( instance+=InstanceMachine )*
+		//        )*
+		//        ( '@behavior:'     ( behavior+=Behavior )+
+		//        | '@statemachine:' ( behavior+=Statemachine )+
+		//        )*
+		//        main=MoeBehavior
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////
+		////        behaviorPart=BehaviorPart
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//(visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? & discrete_timed?='timed#discrete'? &
-		//input_enabled?='input_enabled'? & lifeline?='lifeline'? & design=DesignKind?) ('machine' | 'executable') ('<' ('moc:'?
-		//ModelOfComputationKing)? ('instance:' '[' ('+' | '*' | 'init:' EInteger 'max:' EInteger) ']')? '>')? name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? '{' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel |
-		//typedef+=TypeDefinition | function+=Function | variable+=Variable)* ('@property:' (port+=Port | signal+=Signal |
-		//buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function | variable+=Variable)* | '@public:'
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)* | '@protected:' (port+=PortProtected | signal+=SignalProtected |
-		//buffer+=BufferProtected | channel+=ChannelProtected | typedef+=TypeDefinition | function+=FunctionProtected |
-		//variable+=VariableProtected)* | '@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)*
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+ |
-		//'@model:' machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:'
-		//instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)*
-		//main=MoeBehavior //		// optional unnamed section for property full declaration / definition
-		////		propertyPart=PropertyPart
+		// ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( lifeline?='lifeline' )?
+		//        & ( design=DesignKind )?
+		//        )
+		//        ( 'machine' | 'executable' )
+		//        ( '<' ( ( 'moc:' )?  ModelOfComputationKing )?
+		//            ( 'instance:' '[' ( '+' | '*'
+		//                | ( 'init:' EInteger 'max:' EInteger ) ) ']' )? '>'
+		//        )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		//        ( ( '@composite:' | '@machine:' )
+		//            ( machine +=AnyMachineBlock
+		//            | instance+=InstanceMachine
+		//            )+
+		//        | '@model:'     ( machine +=AnyMachineBlock )*
+		//        | '@prototype:' ( machine +=AnyMachineBlock )*
+		//        | '@instance:'  ( instance+=InstanceMachine )*
+		//        )*
+		//        ( '@behavior:'     ( behavior+=Behavior )+
+		//        | '@statemachine:' ( behavior+=Statemachine )+
+		//        )*
+		//        main=MoeBehavior
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
 		////
-		////		compositePart=CompositePart
+		////        compositePart=CompositePart
 		////
-		////		behaviorPart=BehaviorPart
-		//'}'
+		////        behaviorPart=BehaviorPart
+		//        '}'
 		public Group getGroup() { return cGroup; }
 		
-		//(visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? & discrete_timed?='timed#discrete'? &
-		//input_enabled?='input_enabled'? & lifeline?='lifeline'? & design=DesignKind?)
+		//( ( visibility=VisibilityKind )?
+		//       & ( timed?='timed' )?
+		//       & ( dense_timed?='timed#dense' )?
+		//       & ( discrete_timed?='timed#discrete' )?
+		//       & ( input_enabled ?= 'input_enabled' )?
+		//       & ( lifeline?='lifeline' )?
+		//       & ( design=DesignKind )?
+		//       )
 		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_0_0() { return cVisibilityAssignment_0_0; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_0_0_0() { return cVisibilityVisibilityKindEnumRuleCall_0_0_0; }
 		
-		//timed?='timed'?
+		//( timed?='timed' )?
 		public Assignment getTimedAssignment_0_1() { return cTimedAssignment_0_1; }
 		
 		//'timed'
 		public Keyword getTimedTimedKeyword_0_1_0() { return cTimedTimedKeyword_0_1_0; }
 		
-		//dense_timed?='timed#dense'?
+		//( dense_timed?='timed#dense' )?
 		public Assignment getDense_timedAssignment_0_2() { return cDense_timedAssignment_0_2; }
 		
 		//'timed#dense'
 		public Keyword getDense_timedTimedDenseKeyword_0_2_0() { return cDense_timedTimedDenseKeyword_0_2_0; }
 		
-		//discrete_timed?='timed#discrete'?
+		//( discrete_timed?='timed#discrete' )?
 		public Assignment getDiscrete_timedAssignment_0_3() { return cDiscrete_timedAssignment_0_3; }
 		
 		//'timed#discrete'
 		public Keyword getDiscrete_timedTimedDiscreteKeyword_0_3_0() { return cDiscrete_timedTimedDiscreteKeyword_0_3_0; }
 		
-		//input_enabled?='input_enabled'?
+		//( input_enabled ?= 'input_enabled' )?
 		public Assignment getInput_enabledAssignment_0_4() { return cInput_enabledAssignment_0_4; }
 		
 		//'input_enabled'
 		public Keyword getInput_enabledInput_enabledKeyword_0_4_0() { return cInput_enabledInput_enabledKeyword_0_4_0; }
 		
-		//lifeline?='lifeline'?
+		//( lifeline?='lifeline' )?
 		public Assignment getLifelineAssignment_0_5() { return cLifelineAssignment_0_5; }
 		
 		//'lifeline'
 		public Keyword getLifelineLifelineKeyword_0_5_0() { return cLifelineLifelineKeyword_0_5_0; }
 		
-		//design=DesignKind?
+		//( design=DesignKind )?
 		public Assignment getDesignAssignment_0_6() { return cDesignAssignment_0_6; }
 		
 		//DesignKind
 		public RuleCall getDesignDesignKindEnumRuleCall_0_6_0() { return cDesignDesignKindEnumRuleCall_0_6_0; }
 		
-		//('machine' | 'executable')
+		//( 'machine' | 'executable' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'machine'
@@ -2927,22 +3446,26 @@
 		//'executable'
 		public Keyword getExecutableKeyword_1_1() { return cExecutableKeyword_1_1; }
 		
-		//('<' ('moc:'? ModelOfComputationKing)? ('instance:' '[' ('+' | '*' | 'init:' EInteger 'max:' EInteger) ']')? '>')?
+		//( '<' ( ( 'moc:' )?  ModelOfComputationKing )?
+		//    ( 'instance:' '[' ( '+' | '*'
+		//        | ( 'init:' EInteger 'max:' EInteger ) ) ']' )? '>'
+		//)?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//('moc:'? ModelOfComputationKing)?
+		//( ( 'moc:' )?  ModelOfComputationKing )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_2_1_0() { return cMocKeyword_2_1_0; }
 		
 		//ModelOfComputationKing
 		public RuleCall getModelOfComputationKingParserRuleCall_2_1_1() { return cModelOfComputationKingParserRuleCall_2_1_1; }
 		
-		//('instance:' '[' ('+' | '*' | 'init:' EInteger 'max:' EInteger) ']')?
+		//( 'instance:' '[' ( '+' | '*'
+		//    | ( 'init:' EInteger 'max:' EInteger ) ) ']' )?
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//'instance:'
@@ -2951,7 +3474,8 @@
 		//'['
 		public Keyword getLeftSquareBracketKeyword_2_2_1() { return cLeftSquareBracketKeyword_2_2_1; }
 		
-		//('+' | '*' | 'init:' EInteger 'max:' EInteger)
+		//( '+' | '*'
+		//               | ( 'init:' EInteger 'max:' EInteger ) )
 		public Alternatives getAlternatives_2_2_2() { return cAlternatives_2_2_2; }
 		
 		//'+'
@@ -2960,7 +3484,7 @@
 		//'*'
 		public Keyword getAsteriskKeyword_2_2_2_1() { return cAsteriskKeyword_2_2_2_1; }
 		
-		//'init:' EInteger 'max:' EInteger
+		//( 'init:' EInteger 'max:' EInteger )
 		public Group getGroup_2_2_2_2() { return cGroup_2_2_2_2; }
 		
 		//'init:'
@@ -2987,7 +3511,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -2996,8 +3520,16 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5() { return cLeftCurlyBracketKeyword_5; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( // optional unnamed section for property full declaration / definition
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//)
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
 		//port+=Port
@@ -3042,24 +3574,67 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_6_6_0() { return cVariableVariableParserRuleCall_6_6_0; }
 		
-		//('@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)* | '@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic
-		//| channel+=ChannelPublic | typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)* |
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)* | '@private:' (port+=PortPrivate
-		//| signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//( '@property:'
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//| '@public:'
+		//    ( port+=PortPublic
+		//    | signal+=SignalPublic
+		//    | buffer+=BufferPublic
+		//    | channel+=ChannelPublic
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPublic
+		//    | variable+=VariablePublic
+		//    )*
+		//| '@protected:'
+		//    ( port+=PortProtected
+		//    | signal+=SignalProtected
+		//    | buffer+=BufferProtected
+		//    | channel+=ChannelProtected
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionProtected
+		//    | variable+=VariableProtected
+		//    )*
+		//| '@private:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)*
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)*
+		//'@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'@property:'
 		public Keyword getPropertyKeyword_7_0_0() { return cPropertyKeyword_7_0_0; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( port+=Port
+		//| signal+=Signal
+		//| buffer+=Buffer
+		//| channel+=Channel
+		//| typedef+=TypeDefinition
+		//| function+=Function
+		//| variable+=Variable
+		//)*
 		public Alternatives getAlternatives_7_0_1() { return cAlternatives_7_0_1; }
 		
 		//port+=Port
@@ -3104,15 +3679,28 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_7_0_1_6_0() { return cVariableVariableParserRuleCall_7_0_1_6_0; }
 		
-		//'@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic |
-		//typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)*
+		//'@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
 		public Group getGroup_7_1() { return cGroup_7_1; }
 		
 		//'@public:'
 		public Keyword getPublicKeyword_7_1_0() { return cPublicKeyword_7_1_0; }
 		
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)*
+		//( port+=PortPublic
+		//| signal+=SignalPublic
+		//| buffer+=BufferPublic
+		//| channel+=ChannelPublic
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPublic
+		//| variable+=VariablePublic
+		//)*
 		public Alternatives getAlternatives_7_1_1() { return cAlternatives_7_1_1; }
 		
 		//port+=PortPublic
@@ -3157,15 +3745,28 @@
 		//VariablePublic
 		public RuleCall getVariableVariablePublicParserRuleCall_7_1_1_6_0() { return cVariableVariablePublicParserRuleCall_7_1_1_6_0; }
 		
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//'@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
 		public Group getGroup_7_2() { return cGroup_7_2; }
 		
 		//'@protected:'
 		public Keyword getProtectedKeyword_7_2_0() { return cProtectedKeyword_7_2_0; }
 		
-		//(port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//( port+=PortProtected
+		//| signal+=SignalProtected
+		//| buffer+=BufferProtected
+		//| channel+=ChannelProtected
+		//| typedef+=TypeDefinition
+		//| function+=FunctionProtected
+		//| variable+=VariableProtected
+		//)*
 		public Alternatives getAlternatives_7_2_1() { return cAlternatives_7_2_1; }
 		
 		//port+=PortProtected
@@ -3210,15 +3811,28 @@
 		//VariableProtected
 		public RuleCall getVariableVariableProtectedParserRuleCall_7_2_1_6_0() { return cVariableVariableProtectedParserRuleCall_7_2_1_6_0; }
 		
-		//'@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*
+		//'@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
 		public Group getGroup_7_3() { return cGroup_7_3; }
 		
 		//'@private:'
 		public Keyword getPrivateKeyword_7_3_0() { return cPrivateKeyword_7_3_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_7_3_1() { return cAlternatives_7_3_1; }
 		
 		//port+=PortPrivate
@@ -3263,17 +3877,22 @@
 		//VariablePrivate
 		public RuleCall getVariableVariablePrivateParserRuleCall_7_3_1_6_0() { return cVariableVariablePrivateParserRuleCall_7_3_1_6_0; }
 		
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+)
+		//( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//  | '@procedure:' ( procedure+=Procedure )+
+		//  )*
+		//| ( routine+=Routine | procedure+=Procedure )+
+		//)
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//(('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)*
+		//( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
 		public Alternatives getAlternatives_8_0() { return cAlternatives_8_0; }
 		
-		//('@routine:' | '@macro:') routine+=Routine+
+		//( '@routine:' | '@macro:' ) ( routine+=Routine )+
 		public Group getGroup_8_0_0() { return cGroup_8_0_0; }
 		
-		//('@routine:' | '@macro:')
+		//( '@routine:' | '@macro:' )
 		public Alternatives getAlternatives_8_0_0_0() { return cAlternatives_8_0_0_0; }
 		
 		//'@routine:'
@@ -3282,25 +3901,25 @@
 		//'@macro:'
 		public Keyword getMacroKeyword_8_0_0_0_1() { return cMacroKeyword_8_0_0_0_1; }
 		
-		//routine+=Routine+
+		//( routine+=Routine )+
 		public Assignment getRoutineAssignment_8_0_0_1() { return cRoutineAssignment_8_0_0_1; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_8_0_0_1_0() { return cRoutineRoutineParserRuleCall_8_0_0_1_0; }
 		
-		//'@procedure:' procedure+=Procedure+
+		//'@procedure:' ( procedure+=Procedure )+
 		public Group getGroup_8_0_1() { return cGroup_8_0_1; }
 		
 		//'@procedure:'
 		public Keyword getProcedureKeyword_8_0_1_0() { return cProcedureKeyword_8_0_1_0; }
 		
-		//procedure+=Procedure+
+		//( procedure+=Procedure )+
 		public Assignment getProcedureAssignment_8_0_1_1() { return cProcedureAssignment_8_0_1_1; }
 		
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_8_0_1_1_0() { return cProcedureProcedureParserRuleCall_8_0_1_1_0; }
 		
-		//(routine+=Routine | procedure+=Procedure)+
+		//( routine+=Routine | procedure+=Procedure )+
 		public Alternatives getAlternatives_8_1() { return cAlternatives_8_1; }
 		
 		//routine+=Routine
@@ -3315,14 +3934,23 @@
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_8_1_1_0() { return cProcedureProcedureParserRuleCall_8_1_1_0; }
 		
-		//(('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+ | '@model:'
-		//machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)*
+		//( ( '@composite:' | '@machine:' )
+		//    ( machine +=AnyMachineBlock
+		//    | instance+=InstanceMachine
+		//    )+
+		//| '@model:'     ( machine +=AnyMachineBlock )*
+		//| '@prototype:' ( machine +=AnyMachineBlock )*
+		//| '@instance:'  ( instance+=InstanceMachine )*
+		//)*
 		public Alternatives getAlternatives_9() { return cAlternatives_9; }
 		
-		//('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( '@composite:' | '@machine:' )
+		//           ( machine +=AnyMachineBlock
+		//           | instance+=InstanceMachine
+		//           )+
 		public Group getGroup_9_0() { return cGroup_9_0; }
 		
-		//('@composite:' | '@machine:')
+		//( '@composite:' | '@machine:' )
 		public Alternatives getAlternatives_9_0_0() { return cAlternatives_9_0_0; }
 		
 		//'@composite:'
@@ -3331,10 +3959,12 @@
 		//'@machine:'
 		public Keyword getMachineKeyword_9_0_0_1() { return cMachineKeyword_9_0_0_1; }
 		
-		//(machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( machine +=AnyMachineBlock
+		//| instance+=InstanceMachine
+		//)+
 		public Alternatives getAlternatives_9_0_1() { return cAlternatives_9_0_1; }
 		
-		//machine+=AnyMachineBlock
+		//machine +=AnyMachineBlock
 		public Assignment getMachineAssignment_9_0_1_0() { return cMachineAssignment_9_0_1_0; }
 		
 		//AnyMachineBlock
@@ -3346,64 +3976,66 @@
 		//InstanceMachine
 		public RuleCall getInstanceInstanceMachineParserRuleCall_9_0_1_1_0() { return cInstanceInstanceMachineParserRuleCall_9_0_1_1_0; }
 		
-		//'@model:' machine+=AnyMachineBlock*
+		//'@model:'     ( machine +=AnyMachineBlock )*
 		public Group getGroup_9_1() { return cGroup_9_1; }
 		
 		//'@model:'
 		public Keyword getModelKeyword_9_1_0() { return cModelKeyword_9_1_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_9_1_1() { return cMachineAssignment_9_1_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_9_1_1_0() { return cMachineAnyMachineBlockParserRuleCall_9_1_1_0; }
 		
-		//'@prototype:' machine+=AnyMachineBlock*
+		//'@prototype:' ( machine +=AnyMachineBlock )*
 		public Group getGroup_9_2() { return cGroup_9_2; }
 		
 		//'@prototype:'
 		public Keyword getPrototypeKeyword_9_2_0() { return cPrototypeKeyword_9_2_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_9_2_1() { return cMachineAssignment_9_2_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_9_2_1_0() { return cMachineAnyMachineBlockParserRuleCall_9_2_1_0; }
 		
-		//'@instance:' instance+=InstanceMachine*
+		//'@instance:'  ( instance+=InstanceMachine )*
 		public Group getGroup_9_3() { return cGroup_9_3; }
 		
 		//'@instance:'
 		public Keyword getInstanceKeyword_9_3_0() { return cInstanceKeyword_9_3_0; }
 		
-		//instance+=InstanceMachine*
+		//( instance+=InstanceMachine )*
 		public Assignment getInstanceAssignment_9_3_1() { return cInstanceAssignment_9_3_1; }
 		
 		//InstanceMachine
 		public RuleCall getInstanceInstanceMachineParserRuleCall_9_3_1_0() { return cInstanceInstanceMachineParserRuleCall_9_3_1_0; }
 		
-		//('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)*
+		//( '@behavior:'     ( behavior+=Behavior )+
+		//| '@statemachine:' ( behavior+=Statemachine )+
+		//)*
 		public Alternatives getAlternatives_10() { return cAlternatives_10; }
 		
-		//'@behavior:' behavior+=Behavior+
+		//'@behavior:'     ( behavior+=Behavior )+
 		public Group getGroup_10_0() { return cGroup_10_0; }
 		
 		//'@behavior:'
 		public Keyword getBehaviorKeyword_10_0_0() { return cBehaviorKeyword_10_0_0; }
 		
-		//behavior+=Behavior+
+		//( behavior+=Behavior )+
 		public Assignment getBehaviorAssignment_10_0_1() { return cBehaviorAssignment_10_0_1; }
 		
 		//Behavior
 		public RuleCall getBehaviorBehaviorParserRuleCall_10_0_1_0() { return cBehaviorBehaviorParserRuleCall_10_0_1_0; }
 		
-		//'@statemachine:' behavior+=Statemachine+
+		//'@statemachine:' ( behavior+=Statemachine )+
 		public Group getGroup_10_1() { return cGroup_10_1; }
 		
 		//'@statemachine:'
 		public Keyword getStatemachineKeyword_10_1_0() { return cStatemachineKeyword_10_1_0; }
 		
-		//behavior+=Statemachine+
+		//( behavior+=Statemachine )+
 		public Assignment getBehaviorAssignment_10_1_1() { return cBehaviorAssignment_10_1_1; }
 		
 		//Statemachine
@@ -3415,13 +4047,13 @@
 		//MoeBehavior
 		public RuleCall getMainMoeBehaviorParserRuleCall_11_0() { return cMainMoeBehaviorParserRuleCall_11_0; }
 		
-		////		// optional unnamed section for property full declaration / definition
-		////		propertyPart=PropertyPart
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
 		////
-		////		compositePart=CompositePart
+		////        compositePart=CompositePart
 		////
-		////		behaviorPart=BehaviorPart
-		//'}'
+		////        behaviorPart=BehaviorPart
+		//        '}'
 		public Keyword getRightCurlyBracketKeyword_12() { return cRightCurlyBracketKeyword_12; }
 	}
 	public class PropertyPartElements extends AbstractParserRuleElementFinder {
@@ -3574,99 +4206,249 @@
 		private final Assignment cVariableAssignment_3_3_1_6 = (Assignment)cAlternatives_3_3_1.eContents().get(6);
 		private final RuleCall cVariableVariablePrivateParserRuleCall_3_3_1_6_0 = (RuleCall)cVariableAssignment_3_3_1_6.eContents().get(0);
 		
-		//PropertyPart fmlInfra::PropertyPart:
-		//	{fmlInfra::PropertyPart} ('@parameter:' ('input' (parameter+=ParameterInput
-		//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-		//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-		//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-		//	| '{' parameter+=ParameterReturn+ '}'))*
-		//	| (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*) ('@input:'
-		//	parameter+=ParameterInput*
-		//	| '@inout:'
-		//	parameter+=ParameterInout*
-		//	| '@output:'
-		//	parameter+=ParameterOutput*
-		//	| '@return:'
-		//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	| '@public:' (port+=PortPublic
-		//	| signal+=SignalPublic
-		//	| buffer+=BufferPublic
-		//	| channel+=ChannelPublic
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPublic
-		//	| variable+=VariablePublic)*
-		//	| '@protected:' (port+=PortProtected
-		//	| signal+=SignalProtected
-		//	| buffer+=BufferProtected
-		//	| channel+=ChannelProtected
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionProtected
-		//	| variable+=VariableProtected)*
-		//	| '@private:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)*;
+		//PropertyPart returns fmlInfra::PropertyPart
+		//    : {fmlInfra::PropertyPart}
+		//        ( '@parameter:'
+		//            ( 'input'
+		//                ( parameter+=ParameterInput
+		//                | '{' ( parameter+=ParameterInput )+ '}'
+		//                )
+		//            | 'inout'
+		//                ( parameter+=ParameterInout
+		//                | '{' ( parameter+=ParameterInout )+ '}'
+		//                )
+		//            | 'output'
+		//                ( parameter+=ParameterOutput
+		//                | '{' ( parameter+=ParameterOutput )+ '}'
+		//                )
+		//            | 'return'
+		//                ( parameter+=ParameterReturn
+		//                | '{' ( parameter+=ParameterReturn )+ '}'
+		//                )
+		//            )*
+		//        | // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@input:'
+		//            ( parameter+=ParameterInput  )*
+		//        | '@inout:'
+		//            ( parameter+=ParameterInout  )*
+		//        | '@output:'
+		//            ( parameter+=ParameterOutput )*
+		//        | '@return:'
+		//            ( parameter+=ParameterReturn )*
+		//        )*
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::PropertyPart} ('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') |
-		//'inout' (parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*) ('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:'
-		//parameter+=ParameterOutput* | '@return:' parameter+=ParameterReturn*)* ('@property:' (port+=Port | signal+=Signal |
-		//buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function | variable+=Variable)* | '@public:'
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)* | '@protected:' (port+=PortProtected | signal+=SignalProtected |
-		//buffer+=BufferProtected | channel+=ChannelProtected | typedef+=TypeDefinition | function+=FunctionProtected |
-		//variable+=VariableProtected)* | '@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//{fmlInfra::PropertyPart}
+		//       ( '@parameter:'
+		//           ( 'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
+		//           | 'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
+		//           | 'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
+		//           | 'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
+		//           )*
+		//       | // optional unnamed section for property full declaration / definition
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
+		//       )
+		//       ( '@input:'
+		//           ( parameter+=ParameterInput  )*
+		//       | '@inout:'
+		//           ( parameter+=ParameterInout  )*
+		//       | '@output:'
+		//           ( parameter+=ParameterOutput )*
+		//       | '@return:'
+		//           ( parameter+=ParameterReturn )*
+		//       )*
+		//       ( '@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
+		//       | '@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
+		//       | '@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
+		//       | '@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::PropertyPart}
 		public Action getPropertyPartAction_0() { return cPropertyPartAction_0; }
 		
-		//('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*)
+		//( '@parameter:'
+		//    ( 'input'
+		//        ( parameter+=ParameterInput
+		//        | '{' ( parameter+=ParameterInput )+ '}'
+		//        )
+		//    | 'inout'
+		//        ( parameter+=ParameterInout
+		//        | '{' ( parameter+=ParameterInout )+ '}'
+		//        )
+		//    | 'output'
+		//        ( parameter+=ParameterOutput
+		//        | '{' ( parameter+=ParameterOutput )+ '}'
+		//        )
+		//    | 'return'
+		//        ( parameter+=ParameterReturn
+		//        | '{' ( parameter+=ParameterReturn )+ '}'
+		//        )
+		//    )*
+		//| // optional unnamed section for property full declaration / definition
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//'@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//'@parameter:'
+		//           ( 'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
+		//           | 'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
+		//           | 'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
+		//           | 'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
+		//           )*
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@parameter:'
 		public Keyword getParameterKeyword_1_0_0() { return cParameterKeyword_1_0_0; }
 		
-		//('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout | '{'
-		//parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}') |
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//( 'input'
+		//    ( parameter+=ParameterInput
+		//    | '{' ( parameter+=ParameterInput )+ '}'
+		//    )
+		//| 'inout'
+		//    ( parameter+=ParameterInout
+		//    | '{' ( parameter+=ParameterInout )+ '}'
+		//    )
+		//| 'output'
+		//    ( parameter+=ParameterOutput
+		//    | '{' ( parameter+=ParameterOutput )+ '}'
+		//    )
+		//| 'return'
+		//    ( parameter+=ParameterReturn
+		//    | '{' ( parameter+=ParameterReturn )+ '}'
+		//    )
+		//)*
 		public Alternatives getAlternatives_1_0_1() { return cAlternatives_1_0_1; }
 		
-		//'input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
 		public Group getGroup_1_0_1_0() { return cGroup_1_0_1_0; }
 		
 		//'input'
 		public Keyword getInputKeyword_1_0_1_0_0() { return cInputKeyword_1_0_1_0_0; }
 		
-		//(parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//( parameter+=ParameterInput
+		//| '{' ( parameter+=ParameterInput )+ '}'
+		//)
 		public Alternatives getAlternatives_1_0_1_0_1() { return cAlternatives_1_0_1_0_1; }
 		
 		//parameter+=ParameterInput
@@ -3675,13 +4457,13 @@
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_1_0_1_0_1_0_0() { return cParameterParameterInputParserRuleCall_1_0_1_0_1_0_0; }
 		
-		//'{' parameter+=ParameterInput+ '}'
+		//'{' ( parameter+=ParameterInput )+ '}'
 		public Group getGroup_1_0_1_0_1_1() { return cGroup_1_0_1_0_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_0_1_0_1_1_0() { return cLeftCurlyBracketKeyword_1_0_1_0_1_1_0; }
 		
-		//parameter+=ParameterInput+
+		//( parameter+=ParameterInput )+
 		public Assignment getParameterAssignment_1_0_1_0_1_1_1() { return cParameterAssignment_1_0_1_0_1_1_1; }
 		
 		//ParameterInput
@@ -3690,13 +4472,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_0_1_0_1_1_2() { return cRightCurlyBracketKeyword_1_0_1_0_1_1_2; }
 		
-		//'inout' (parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
 		public Group getGroup_1_0_1_1() { return cGroup_1_0_1_1; }
 		
 		//'inout'
 		public Keyword getInoutKeyword_1_0_1_1_0() { return cInoutKeyword_1_0_1_1_0; }
 		
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//( parameter+=ParameterInout
+		//| '{' ( parameter+=ParameterInout )+ '}'
+		//)
 		public Alternatives getAlternatives_1_0_1_1_1() { return cAlternatives_1_0_1_1_1; }
 		
 		//parameter+=ParameterInout
@@ -3705,13 +4492,13 @@
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_1_0_1_1_1_0_0() { return cParameterParameterInoutParserRuleCall_1_0_1_1_1_0_0; }
 		
-		//'{' parameter+=ParameterInout+ '}'
+		//'{' ( parameter+=ParameterInout )+ '}'
 		public Group getGroup_1_0_1_1_1_1() { return cGroup_1_0_1_1_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_0_1_1_1_1_0() { return cLeftCurlyBracketKeyword_1_0_1_1_1_1_0; }
 		
-		//parameter+=ParameterInout+
+		//( parameter+=ParameterInout )+
 		public Assignment getParameterAssignment_1_0_1_1_1_1_1() { return cParameterAssignment_1_0_1_1_1_1_1; }
 		
 		//ParameterInout
@@ -3720,13 +4507,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_0_1_1_1_1_2() { return cRightCurlyBracketKeyword_1_0_1_1_1_1_2; }
 		
-		//'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
 		public Group getGroup_1_0_1_2() { return cGroup_1_0_1_2; }
 		
 		//'output'
 		public Keyword getOutputKeyword_1_0_1_2_0() { return cOutputKeyword_1_0_1_2_0; }
 		
-		//(parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//( parameter+=ParameterOutput
+		//| '{' ( parameter+=ParameterOutput )+ '}'
+		//)
 		public Alternatives getAlternatives_1_0_1_2_1() { return cAlternatives_1_0_1_2_1; }
 		
 		//parameter+=ParameterOutput
@@ -3735,13 +4527,13 @@
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_1_0_1_2_1_0_0() { return cParameterParameterOutputParserRuleCall_1_0_1_2_1_0_0; }
 		
-		//'{' parameter+=ParameterOutput+ '}'
+		//'{' ( parameter+=ParameterOutput )+ '}'
 		public Group getGroup_1_0_1_2_1_1() { return cGroup_1_0_1_2_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_0_1_2_1_1_0() { return cLeftCurlyBracketKeyword_1_0_1_2_1_1_0; }
 		
-		//parameter+=ParameterOutput+
+		//( parameter+=ParameterOutput )+
 		public Assignment getParameterAssignment_1_0_1_2_1_1_1() { return cParameterAssignment_1_0_1_2_1_1_1; }
 		
 		//ParameterOutput
@@ -3750,13 +4542,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_0_1_2_1_1_2() { return cRightCurlyBracketKeyword_1_0_1_2_1_1_2; }
 		
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
 		public Group getGroup_1_0_1_3() { return cGroup_1_0_1_3; }
 		
 		//'return'
 		public Keyword getReturnKeyword_1_0_1_3_0() { return cReturnKeyword_1_0_1_3_0; }
 		
-		//(parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//( parameter+=ParameterReturn
+		//| '{' ( parameter+=ParameterReturn )+ '}'
+		//)
 		public Alternatives getAlternatives_1_0_1_3_1() { return cAlternatives_1_0_1_3_1; }
 		
 		//parameter+=ParameterReturn
@@ -3765,13 +4562,13 @@
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_1_0_1_3_1_0_0() { return cParameterParameterReturnParserRuleCall_1_0_1_3_1_0_0; }
 		
-		//'{' parameter+=ParameterReturn+ '}'
+		//'{' ( parameter+=ParameterReturn )+ '}'
 		public Group getGroup_1_0_1_3_1_1() { return cGroup_1_0_1_3_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_0_1_3_1_1_0() { return cLeftCurlyBracketKeyword_1_0_1_3_1_1_0; }
 		
-		//parameter+=ParameterReturn+
+		//( parameter+=ParameterReturn )+
 		public Assignment getParameterAssignment_1_0_1_3_1_1_1() { return cParameterAssignment_1_0_1_3_1_1_1; }
 		
 		//ParameterReturn
@@ -3780,8 +4577,15 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_0_1_3_1_1_2() { return cRightCurlyBracketKeyword_1_0_1_3_1_1_2; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//// optional unnamed section for property full declaration / definition
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//port+=Port
@@ -3826,76 +4630,130 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_1_1_6_0() { return cVariableVariableParserRuleCall_1_1_6_0; }
 		
-		//('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:' parameter+=ParameterOutput* |
-		//'@return:' parameter+=ParameterReturn*)*
+		//( '@input:'
+		//    ( parameter+=ParameterInput  )*
+		//| '@inout:'
+		//    ( parameter+=ParameterInout  )*
+		//| '@output:'
+		//    ( parameter+=ParameterOutput )*
+		//| '@return:'
+		//    ( parameter+=ParameterReturn )*
+		//)*
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//'@input:' parameter+=ParameterInput*
+		//'@input:'
+		//           ( parameter+=ParameterInput  )*
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//'@input:'
 		public Keyword getInputKeyword_2_0_0() { return cInputKeyword_2_0_0; }
 		
-		//parameter+=ParameterInput*
+		//( parameter+=ParameterInput  )*
 		public Assignment getParameterAssignment_2_0_1() { return cParameterAssignment_2_0_1; }
 		
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_2_0_1_0() { return cParameterParameterInputParserRuleCall_2_0_1_0; }
 		
-		//'@inout:' parameter+=ParameterInout*
+		//'@inout:'
+		//           ( parameter+=ParameterInout  )*
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'@inout:'
 		public Keyword getInoutKeyword_2_1_0() { return cInoutKeyword_2_1_0; }
 		
-		//parameter+=ParameterInout*
+		//( parameter+=ParameterInout  )*
 		public Assignment getParameterAssignment_2_1_1() { return cParameterAssignment_2_1_1; }
 		
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_2_1_1_0() { return cParameterParameterInoutParserRuleCall_2_1_1_0; }
 		
-		//'@output:' parameter+=ParameterOutput*
+		//'@output:'
+		//           ( parameter+=ParameterOutput )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//'@output:'
 		public Keyword getOutputKeyword_2_2_0() { return cOutputKeyword_2_2_0; }
 		
-		//parameter+=ParameterOutput*
+		//( parameter+=ParameterOutput )*
 		public Assignment getParameterAssignment_2_2_1() { return cParameterAssignment_2_2_1; }
 		
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_2_2_1_0() { return cParameterParameterOutputParserRuleCall_2_2_1_0; }
 		
-		//'@return:' parameter+=ParameterReturn*
+		//'@return:'
+		//           ( parameter+=ParameterReturn )*
 		public Group getGroup_2_3() { return cGroup_2_3; }
 		
 		//'@return:'
 		public Keyword getReturnKeyword_2_3_0() { return cReturnKeyword_2_3_0; }
 		
-		//parameter+=ParameterReturn*
+		//( parameter+=ParameterReturn )*
 		public Assignment getParameterAssignment_2_3_1() { return cParameterAssignment_2_3_1; }
 		
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_2_3_1_0() { return cParameterParameterReturnParserRuleCall_2_3_1_0; }
 		
-		//('@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)* | '@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic
-		//| channel+=ChannelPublic | typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)* |
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)* | '@private:' (port+=PortPrivate
-		//| signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//( '@property:'
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//| '@public:'
+		//    ( port+=PortPublic
+		//    | signal+=SignalPublic
+		//    | buffer+=BufferPublic
+		//    | channel+=ChannelPublic
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPublic
+		//    | variable+=VariablePublic
+		//    )*
+		//| '@protected:'
+		//    ( port+=PortProtected
+		//    | signal+=SignalProtected
+		//    | buffer+=BufferProtected
+		//    | channel+=ChannelProtected
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionProtected
+		//    | variable+=VariableProtected
+		//    )*
+		//| '@private:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)*
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//'@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)*
+		//'@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'@property:'
 		public Keyword getPropertyKeyword_3_0_0() { return cPropertyKeyword_3_0_0; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( port+=Port
+		//| signal+=Signal
+		//| buffer+=Buffer
+		//| channel+=Channel
+		//| typedef+=TypeDefinition
+		//| function+=Function
+		//| variable+=Variable
+		//)*
 		public Alternatives getAlternatives_3_0_1() { return cAlternatives_3_0_1; }
 		
 		//port+=Port
@@ -3940,15 +4798,28 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_3_0_1_6_0() { return cVariableVariableParserRuleCall_3_0_1_6_0; }
 		
-		//'@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic |
-		//typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)*
+		//'@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'@public:'
 		public Keyword getPublicKeyword_3_1_0() { return cPublicKeyword_3_1_0; }
 		
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)*
+		//( port+=PortPublic
+		//| signal+=SignalPublic
+		//| buffer+=BufferPublic
+		//| channel+=ChannelPublic
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPublic
+		//| variable+=VariablePublic
+		//)*
 		public Alternatives getAlternatives_3_1_1() { return cAlternatives_3_1_1; }
 		
 		//port+=PortPublic
@@ -3993,15 +4864,28 @@
 		//VariablePublic
 		public RuleCall getVariableVariablePublicParserRuleCall_3_1_1_6_0() { return cVariableVariablePublicParserRuleCall_3_1_1_6_0; }
 		
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//'@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
 		public Group getGroup_3_2() { return cGroup_3_2; }
 		
 		//'@protected:'
 		public Keyword getProtectedKeyword_3_2_0() { return cProtectedKeyword_3_2_0; }
 		
-		//(port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//( port+=PortProtected
+		//| signal+=SignalProtected
+		//| buffer+=BufferProtected
+		//| channel+=ChannelProtected
+		//| typedef+=TypeDefinition
+		//| function+=FunctionProtected
+		//| variable+=VariableProtected
+		//)*
 		public Alternatives getAlternatives_3_2_1() { return cAlternatives_3_2_1; }
 		
 		//port+=PortProtected
@@ -4046,15 +4930,28 @@
 		//VariableProtected
 		public RuleCall getVariableVariableProtectedParserRuleCall_3_2_1_6_0() { return cVariableVariableProtectedParserRuleCall_3_2_1_6_0; }
 		
-		//'@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*
+		//'@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
 		public Group getGroup_3_3() { return cGroup_3_3; }
 		
 		//'@private:'
 		public Keyword getPrivateKeyword_3_3_0() { return cPrivateKeyword_3_3_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_3_3_1() { return cAlternatives_3_3_1; }
 		
 		//port+=PortPrivate
@@ -4143,36 +5040,59 @@
 		private final Assignment cInstanceAssignment_2_3_1 = (Assignment)cGroup_2_3.eContents().get(1);
 		private final RuleCall cInstanceInstanceMachineParserRuleCall_2_3_1_0 = (RuleCall)cInstanceAssignment_2_3_1.eContents().get(0);
 		
-		//CompositePart fmlInfra::CompositePart:
-		//	{fmlInfra::CompositePart} ((('@routine:' | '@macro:') routine+=Routine+
-		//	| '@procedure:' procedure+=Procedure+)*
-		//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-		//	| instance+=InstanceMachine)+
-		//	| '@model:' machine+=AnyMachineBlock*
-		//	| '@prototype:' machine+=AnyMachineBlock*
-		//	| '@instance:' instance+=InstanceMachine*)*;
+		//CompositePart returns fmlInfra::CompositePart
+		//    : {fmlInfra::CompositePart}
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		//        ( ( '@composite:' | '@machine:' )
+		//            ( machine +=AnyMachineBlock
+		//            | instance+=InstanceMachine
+		//            )+
+		//        | '@model:'     ( machine +=AnyMachineBlock )*
+		//        | '@prototype:' ( machine +=AnyMachineBlock )*
+		//        | '@instance:'  ( instance+=InstanceMachine )*
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::CompositePart} ((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* |
-		//(routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock |
-		//instance+=InstanceMachine)+ | '@model:' machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* |
-		//'@instance:' instance+=InstanceMachine*)*
+		//{fmlInfra::CompositePart}
+		//       ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
+		//       | ( routine+=Routine | procedure+=Procedure )+
+		//       )
+		//       ( ( '@composite:' | '@machine:' )
+		//           ( machine +=AnyMachineBlock
+		//           | instance+=InstanceMachine
+		//           )+
+		//       | '@model:'     ( machine +=AnyMachineBlock )*
+		//       | '@prototype:' ( machine +=AnyMachineBlock )*
+		//       | '@instance:'  ( instance+=InstanceMachine )*
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::CompositePart}
 		public Action getCompositePartAction_0() { return cCompositePartAction_0; }
 		
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+)
+		//( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//  | '@procedure:' ( procedure+=Procedure )+
+		//  )*
+		//| ( routine+=Routine | procedure+=Procedure )+
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//(('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)*
+		//( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
 		public Alternatives getAlternatives_1_0() { return cAlternatives_1_0; }
 		
-		//('@routine:' | '@macro:') routine+=Routine+
+		//( '@routine:' | '@macro:' ) ( routine+=Routine )+
 		public Group getGroup_1_0_0() { return cGroup_1_0_0; }
 		
-		//('@routine:' | '@macro:')
+		//( '@routine:' | '@macro:' )
 		public Alternatives getAlternatives_1_0_0_0() { return cAlternatives_1_0_0_0; }
 		
 		//'@routine:'
@@ -4181,25 +5101,25 @@
 		//'@macro:'
 		public Keyword getMacroKeyword_1_0_0_0_1() { return cMacroKeyword_1_0_0_0_1; }
 		
-		//routine+=Routine+
+		//( routine+=Routine )+
 		public Assignment getRoutineAssignment_1_0_0_1() { return cRoutineAssignment_1_0_0_1; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_1_0_0_1_0() { return cRoutineRoutineParserRuleCall_1_0_0_1_0; }
 		
-		//'@procedure:' procedure+=Procedure+
+		//'@procedure:' ( procedure+=Procedure )+
 		public Group getGroup_1_0_1() { return cGroup_1_0_1; }
 		
 		//'@procedure:'
 		public Keyword getProcedureKeyword_1_0_1_0() { return cProcedureKeyword_1_0_1_0; }
 		
-		//procedure+=Procedure+
+		//( procedure+=Procedure )+
 		public Assignment getProcedureAssignment_1_0_1_1() { return cProcedureAssignment_1_0_1_1; }
 		
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_1_0_1_1_0() { return cProcedureProcedureParserRuleCall_1_0_1_1_0; }
 		
-		//(routine+=Routine | procedure+=Procedure)+
+		//( routine+=Routine | procedure+=Procedure )+
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//routine+=Routine
@@ -4214,14 +5134,23 @@
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_1_1_1_0() { return cProcedureProcedureParserRuleCall_1_1_1_0; }
 		
-		//(('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+ | '@model:'
-		//machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)*
+		//( ( '@composite:' | '@machine:' )
+		//    ( machine +=AnyMachineBlock
+		//    | instance+=InstanceMachine
+		//    )+
+		//| '@model:'     ( machine +=AnyMachineBlock )*
+		//| '@prototype:' ( machine +=AnyMachineBlock )*
+		//| '@instance:'  ( instance+=InstanceMachine )*
+		//)*
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//('@composite:' | '@machine:') (machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( '@composite:' | '@machine:' )
+		//           ( machine +=AnyMachineBlock
+		//           | instance+=InstanceMachine
+		//           )+
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
-		//('@composite:' | '@machine:')
+		//( '@composite:' | '@machine:' )
 		public Alternatives getAlternatives_2_0_0() { return cAlternatives_2_0_0; }
 		
 		//'@composite:'
@@ -4230,10 +5159,12 @@
 		//'@machine:'
 		public Keyword getMachineKeyword_2_0_0_1() { return cMachineKeyword_2_0_0_1; }
 		
-		//(machine+=AnyMachineBlock | instance+=InstanceMachine)+
+		//( machine +=AnyMachineBlock
+		//| instance+=InstanceMachine
+		//)+
 		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
 		
-		//machine+=AnyMachineBlock
+		//machine +=AnyMachineBlock
 		public Assignment getMachineAssignment_2_0_1_0() { return cMachineAssignment_2_0_1_0; }
 		
 		//AnyMachineBlock
@@ -4245,37 +5176,37 @@
 		//InstanceMachine
 		public RuleCall getInstanceInstanceMachineParserRuleCall_2_0_1_1_0() { return cInstanceInstanceMachineParserRuleCall_2_0_1_1_0; }
 		
-		//'@model:' machine+=AnyMachineBlock*
+		//'@model:'     ( machine +=AnyMachineBlock )*
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'@model:'
 		public Keyword getModelKeyword_2_1_0() { return cModelKeyword_2_1_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_2_1_1() { return cMachineAssignment_2_1_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_2_1_1_0() { return cMachineAnyMachineBlockParserRuleCall_2_1_1_0; }
 		
-		//'@prototype:' machine+=AnyMachineBlock*
+		//'@prototype:' ( machine +=AnyMachineBlock )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//'@prototype:'
 		public Keyword getPrototypeKeyword_2_2_0() { return cPrototypeKeyword_2_2_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_2_2_1() { return cMachineAssignment_2_2_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_2_2_1_0() { return cMachineAnyMachineBlockParserRuleCall_2_2_1_0; }
 		
-		//'@instance:' instance+=InstanceMachine*
+		//'@instance:'  ( instance+=InstanceMachine )*
 		public Group getGroup_2_3() { return cGroup_2_3; }
 		
 		//'@instance:'
 		public Keyword getInstanceKeyword_2_3_0() { return cInstanceKeyword_2_3_0; }
 		
-		//instance+=InstanceMachine*
+		//( instance+=InstanceMachine )*
 		public Assignment getInstanceAssignment_2_3_1() { return cInstanceAssignment_2_3_1; }
 		
 		//InstanceMachine
@@ -4297,40 +5228,49 @@
 		private final Assignment cMainAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cMainMoeBehaviorParserRuleCall_2_0 = (RuleCall)cMainAssignment_2.eContents().get(0);
 		
-		//BehaviorPart fmlInfra::BehaviorPart:
-		//	{fmlInfra::BehaviorPart} ('@behavior:' behavior+=Behavior+
-		//	| '@statemachine:' behavior+=Statemachine+)*
-		//	main=MoeBehavior;
+		//BehaviorPart returns fmlInfra::BehaviorPart
+		//    : {fmlInfra::BehaviorPart}
+		//        ( '@behavior:'     ( behavior+=Behavior )+
+		//        | '@statemachine:' ( behavior+=Statemachine )+
+		//        )*
+		//        main=MoeBehavior
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::BehaviorPart} ('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)* main=MoeBehavior
+		//{fmlInfra::BehaviorPart}
+		//       ( '@behavior:'     ( behavior+=Behavior )+
+		//       | '@statemachine:' ( behavior+=Statemachine )+
+		//       )*
+		//       main=MoeBehavior
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::BehaviorPart}
 		public Action getBehaviorPartAction_0() { return cBehaviorPartAction_0; }
 		
-		//('@behavior:' behavior+=Behavior+ | '@statemachine:' behavior+=Statemachine+)*
+		//( '@behavior:'     ( behavior+=Behavior )+
+		//| '@statemachine:' ( behavior+=Statemachine )+
+		//)*
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//'@behavior:' behavior+=Behavior+
+		//'@behavior:'     ( behavior+=Behavior )+
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@behavior:'
 		public Keyword getBehaviorKeyword_1_0_0() { return cBehaviorKeyword_1_0_0; }
 		
-		//behavior+=Behavior+
+		//( behavior+=Behavior )+
 		public Assignment getBehaviorAssignment_1_0_1() { return cBehaviorAssignment_1_0_1; }
 		
 		//Behavior
 		public RuleCall getBehaviorBehaviorParserRuleCall_1_0_1_0() { return cBehaviorBehaviorParserRuleCall_1_0_1_0; }
 		
-		//'@statemachine:' behavior+=Statemachine+
+		//'@statemachine:' ( behavior+=Statemachine )+
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@statemachine:'
 		public Keyword getStatemachineKeyword_1_1_0() { return cStatemachineKeyword_1_1_0; }
 		
-		//behavior+=Statemachine+
+		//( behavior+=Statemachine )+
 		public Assignment getBehaviorAssignment_1_1_1() { return cBehaviorAssignment_1_1_1; }
 		
 		//Statemachine
@@ -4554,87 +5494,223 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Procedure View Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Procedure fmlInfra::Procedure:
-		//	visibility=VisibilityKind?
-		//	'procedure' ('<' 'moc:'? ('and' | 'or') '>')?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? (('(' (parameter+=FunctionalParameter (','
-		//	parameter+=FunctionalParameter)*)? ')')? ('-->' (parameter+=FormalParameter
-		//	| '(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'))?)?
-		//	'{' ('@parameter:' ('input' (parameter+=ParameterInput
-		//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-		//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-		//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-		//	| '{' parameter+=ParameterReturn+ '}'))*
-		//	| (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*) ('@input:'
-		//	parameter+=ParameterInput*
-		//	| '@inout:'
-		//	parameter+=ParameterInout*
-		//	| '@output:'
-		//	parameter+=ParameterOutput*
-		//	| '@return:'
-		//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	| '@public:' (port+=PortPublic
-		//	| signal+=SignalPublic
-		//	| buffer+=BufferPublic
-		//	| channel+=ChannelPublic
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPublic
-		//	| variable+=VariablePublic)*
-		//	| '@protected:' (port+=PortProtected
-		//	| signal+=SignalProtected
-		//	| buffer+=BufferProtected
-		//	| channel+=ChannelProtected
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionProtected
-		//	| variable+=VariableProtected)*
-		//	| '@private:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-		//	| '@procedure:' procedure+=Procedure+)*
-		//	| (routine+=Routine | procedure+=Procedure)+) execution=ProcedureExecution?
-		//	//		& ( computation=ModelOfComputation )?
-		//	//		& ( interaction=ModelOfInteraction )?
-		//	'}';
+		//Procedure returns fmlInfra::Procedure
+		//    : ( visibility=VisibilityKind )?
+		//        'procedure' ( '<' ( 'moc:' )?  ( 'and' | 'or' ) '>' )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( ( '(' ( parameter+=FunctionalParameter
+		//            ( ',' parameter+=FunctionalParameter )* )? ')' )?
+		//             ( '-->'
+		//                 ( parameter+=FormalParameter
+		//                 | '('  parameter+=FormalParameter
+		//                     ( ',' parameter+=FormalParameter )* ')'
+		//                 )
+		//             )?
+		//         )?
+		//        '{'
+		//        ( '@parameter:'
+		//            ( 'input'
+		//                ( parameter+=ParameterInput
+		//                | '{' ( parameter+=ParameterInput )+ '}'
+		//                )
+		//            | 'inout'
+		//                ( parameter+=ParameterInout
+		//                | '{' ( parameter+=ParameterInout )+ '}'
+		//                )
+		//            | 'output'
+		//                ( parameter+=ParameterOutput
+		//                | '{' ( parameter+=ParameterOutput )+ '}'
+		//                )
+		//            | 'return'
+		//                ( parameter+=ParameterReturn
+		//                | '{' ( parameter+=ParameterReturn )+ '}'
+		//                )
+		//            )*
+		//        | // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@input:'
+		//            ( parameter+=ParameterInput  )*
+		//        | '@inout:'
+		//            ( parameter+=ParameterInout  )*
+		//        | '@output:'
+		//            ( parameter+=ParameterOutput )*
+		//        | '@return:'
+		//            ( parameter+=ParameterReturn )*
+		//        )*
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////        | region+=StatemachineRegionLite
+		////        )?
+		//        ( ( execution=ProcedureExecution )?
+		////        & ( computation=ModelOfComputation )?
+		////        & ( interaction=ModelOfInteraction )?
+		//        )
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//visibility=VisibilityKind? 'procedure' ('<' 'moc:'? ('and' | 'or') '>')? name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? (('(' (parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*)? ')')?
-		//('-->' (parameter+=FormalParameter | '(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'))?)? '{'
-		//('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*) ('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:'
-		//parameter+=ParameterOutput* | '@return:' parameter+=ParameterReturn*)* ('@property:' (port+=Port | signal+=Signal |
-		//buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function | variable+=Variable)* | '@public:'
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)* | '@protected:' (port+=PortProtected | signal+=SignalProtected |
-		//buffer+=BufferProtected | channel+=ChannelProtected | typedef+=TypeDefinition | function+=FunctionProtected |
-		//variable+=VariableProtected)* | '@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)*
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+) execution=ProcedureExecution? //		& ( computation=ModelOfComputation )?
-		////		& ( interaction=ModelOfInteraction )?
-		//'}'
+		// ( visibility=VisibilityKind )?
+		//        'procedure' ( '<' ( 'moc:' )?  ( 'and' | 'or' ) '>' )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( ( '(' ( parameter+=FunctionalParameter
+		//            ( ',' parameter+=FunctionalParameter )* )? ')' )?
+		//             ( '-->'
+		//                 ( parameter+=FormalParameter
+		//                 | '('  parameter+=FormalParameter
+		//                     ( ',' parameter+=FormalParameter )* ')'
+		//                 )
+		//             )?
+		//         )?
+		//        '{'
+		//        ( '@parameter:'
+		//            ( 'input'
+		//                ( parameter+=ParameterInput
+		//                | '{' ( parameter+=ParameterInput )+ '}'
+		//                )
+		//            | 'inout'
+		//                ( parameter+=ParameterInout
+		//                | '{' ( parameter+=ParameterInout )+ '}'
+		//                )
+		//            | 'output'
+		//                ( parameter+=ParameterOutput
+		//                | '{' ( parameter+=ParameterOutput )+ '}'
+		//                )
+		//            | 'return'
+		//                ( parameter+=ParameterReturn
+		//                | '{' ( parameter+=ParameterReturn )+ '}'
+		//                )
+		//            )*
+		//        | // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@input:'
+		//            ( parameter+=ParameterInput  )*
+		//        | '@inout:'
+		//            ( parameter+=ParameterInout  )*
+		//        | '@output:'
+		//            ( parameter+=ParameterOutput )*
+		//        | '@return:'
+		//            ( parameter+=ParameterReturn )*
+		//        )*
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine | procedure+=Procedure )+
+		//        )
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////        | region+=StatemachineRegionLite
+		////        )?
+		//        ( ( execution=ProcedureExecution )?
+		////        & ( computation=ModelOfComputation )?
+		////        & ( interaction=ModelOfInteraction )?
+		//        )
+		//        '}'
 		public Group getGroup() { return cGroup; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_0() { return cVisibilityAssignment_0; }
 		
 		//VisibilityKind
@@ -4643,16 +5719,16 @@
 		//'procedure'
 		public Keyword getProcedureKeyword_1() { return cProcedureKeyword_1; }
 		
-		//('<' 'moc:'? ('and' | 'or') '>')?
+		//( '<' ( 'moc:' )?  ( 'and' | 'or' ) '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_2_1() { return cMocKeyword_2_1; }
 		
-		//('and' | 'or')
+		//( 'and' | 'or' )
 		public Alternatives getAlternatives_2_2() { return cAlternatives_2_2; }
 		
 		//'and'
@@ -4670,23 +5746,32 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//(('(' (parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*)? ')')? ('-->' (parameter+=FormalParameter |
-		//'(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'))?)?
+		//( ( '(' ( parameter+=FunctionalParameter
+		//    ( ',' parameter+=FunctionalParameter )* )? ')' )?
+		//     ( '-->'
+		//         ( parameter+=FormalParameter
+		//         | '('  parameter+=FormalParameter
+		//             ( ',' parameter+=FormalParameter )* ')'
+		//         )
+		//     )?
+		// )?
 		public Group getGroup_5() { return cGroup_5; }
 		
-		//('(' (parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*)? ')')?
+		//( '(' ( parameter+=FunctionalParameter
+		//           ( ',' parameter+=FunctionalParameter )* )? ')' )?
 		public Group getGroup_5_0() { return cGroup_5_0; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0_0() { return cLeftParenthesisKeyword_5_0_0; }
 		
-		//(parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*)?
+		//( parameter+=FunctionalParameter
+		//           ( ',' parameter+=FunctionalParameter )* )?
 		public Group getGroup_5_0_1() { return cGroup_5_0_1; }
 		
 		//parameter+=FunctionalParameter
@@ -4695,7 +5780,7 @@
 		//FunctionalParameter
 		public RuleCall getParameterFunctionalParameterParserRuleCall_5_0_1_0_0() { return cParameterFunctionalParameterParserRuleCall_5_0_1_0_0; }
 		
-		//(',' parameter+=FunctionalParameter)*
+		//( ',' parameter+=FunctionalParameter )*
 		public Group getGroup_5_0_1_1() { return cGroup_5_0_1_1; }
 		
 		//','
@@ -4710,13 +5795,21 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_5_0_2() { return cRightParenthesisKeyword_5_0_2; }
 		
-		//('-->' (parameter+=FormalParameter | '(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'))?
+		//( '-->'
+		//    ( parameter+=FormalParameter
+		//    | '('  parameter+=FormalParameter
+		//        ( ',' parameter+=FormalParameter )* ')'
+		//    )
+		//)?
 		public Group getGroup_5_1() { return cGroup_5_1; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_5_1_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_5_1_0; }
 		
-		//(parameter+=FormalParameter | '(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')')
+		//( parameter+=FormalParameter
+		//| '('  parameter+=FormalParameter
+		//    ( ',' parameter+=FormalParameter )* ')'
+		//)
 		public Alternatives getAlternatives_5_1_1() { return cAlternatives_5_1_1; }
 		
 		//parameter+=FormalParameter
@@ -4725,7 +5818,8 @@
 		//FormalParameter
 		public RuleCall getParameterFormalParameterParserRuleCall_5_1_1_0_0() { return cParameterFormalParameterParserRuleCall_5_1_1_0_0; }
 		
-		//'(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'
+		//'('  parameter+=FormalParameter
+		//                    ( ',' parameter+=FormalParameter )* ')'
 		public Group getGroup_5_1_1_1() { return cGroup_5_1_1_1; }
 		
 		//'('
@@ -4737,7 +5831,7 @@
 		//FormalParameter
 		public RuleCall getParameterFormalParameterParserRuleCall_5_1_1_1_1_0() { return cParameterFormalParameterParserRuleCall_5_1_1_1_1_0; }
 		
-		//(',' parameter+=FormalParameter)*
+		//( ',' parameter+=FormalParameter )*
 		public Group getGroup_5_1_1_1_2() { return cGroup_5_1_1_1_2; }
 		
 		//','
@@ -4755,33 +5849,90 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*)
+		//( '@parameter:'
+		//    ( 'input'
+		//        ( parameter+=ParameterInput
+		//        | '{' ( parameter+=ParameterInput )+ '}'
+		//        )
+		//    | 'inout'
+		//        ( parameter+=ParameterInout
+		//        | '{' ( parameter+=ParameterInout )+ '}'
+		//        )
+		//    | 'output'
+		//        ( parameter+=ParameterOutput
+		//        | '{' ( parameter+=ParameterOutput )+ '}'
+		//        )
+		//    | 'return'
+		//        ( parameter+=ParameterReturn
+		//        | '{' ( parameter+=ParameterReturn )+ '}'
+		//        )
+		//    )*
+		//| // optional unnamed section for property full declaration / definition
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//'@parameter:'
+		//           ( 'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
+		//           | 'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
+		//           | 'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
+		//           | 'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
+		//           )*
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'@parameter:'
 		public Keyword getParameterKeyword_7_0_0() { return cParameterKeyword_7_0_0; }
 		
-		//('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout | '{'
-		//parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}') |
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//( 'input'
+		//    ( parameter+=ParameterInput
+		//    | '{' ( parameter+=ParameterInput )+ '}'
+		//    )
+		//| 'inout'
+		//    ( parameter+=ParameterInout
+		//    | '{' ( parameter+=ParameterInout )+ '}'
+		//    )
+		//| 'output'
+		//    ( parameter+=ParameterOutput
+		//    | '{' ( parameter+=ParameterOutput )+ '}'
+		//    )
+		//| 'return'
+		//    ( parameter+=ParameterReturn
+		//    | '{' ( parameter+=ParameterReturn )+ '}'
+		//    )
+		//)*
 		public Alternatives getAlternatives_7_0_1() { return cAlternatives_7_0_1; }
 		
-		//'input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
 		public Group getGroup_7_0_1_0() { return cGroup_7_0_1_0; }
 		
 		//'input'
 		public Keyword getInputKeyword_7_0_1_0_0() { return cInputKeyword_7_0_1_0_0; }
 		
-		//(parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//( parameter+=ParameterInput
+		//| '{' ( parameter+=ParameterInput )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_0_1() { return cAlternatives_7_0_1_0_1; }
 		
 		//parameter+=ParameterInput
@@ -4790,13 +5941,13 @@
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_7_0_1_0_1_0_0() { return cParameterParameterInputParserRuleCall_7_0_1_0_1_0_0; }
 		
-		//'{' parameter+=ParameterInput+ '}'
+		//'{' ( parameter+=ParameterInput )+ '}'
 		public Group getGroup_7_0_1_0_1_1() { return cGroup_7_0_1_0_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_0_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_0_1_1_0; }
 		
-		//parameter+=ParameterInput+
+		//( parameter+=ParameterInput )+
 		public Assignment getParameterAssignment_7_0_1_0_1_1_1() { return cParameterAssignment_7_0_1_0_1_1_1; }
 		
 		//ParameterInput
@@ -4805,13 +5956,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_0_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_0_1_1_2; }
 		
-		//'inout' (parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
 		public Group getGroup_7_0_1_1() { return cGroup_7_0_1_1; }
 		
 		//'inout'
 		public Keyword getInoutKeyword_7_0_1_1_0() { return cInoutKeyword_7_0_1_1_0; }
 		
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//( parameter+=ParameterInout
+		//| '{' ( parameter+=ParameterInout )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_1_1() { return cAlternatives_7_0_1_1_1; }
 		
 		//parameter+=ParameterInout
@@ -4820,13 +5976,13 @@
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_7_0_1_1_1_0_0() { return cParameterParameterInoutParserRuleCall_7_0_1_1_1_0_0; }
 		
-		//'{' parameter+=ParameterInout+ '}'
+		//'{' ( parameter+=ParameterInout )+ '}'
 		public Group getGroup_7_0_1_1_1_1() { return cGroup_7_0_1_1_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_1_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_1_1_1_0; }
 		
-		//parameter+=ParameterInout+
+		//( parameter+=ParameterInout )+
 		public Assignment getParameterAssignment_7_0_1_1_1_1_1() { return cParameterAssignment_7_0_1_1_1_1_1; }
 		
 		//ParameterInout
@@ -4835,13 +5991,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_1_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_1_1_1_2; }
 		
-		//'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
 		public Group getGroup_7_0_1_2() { return cGroup_7_0_1_2; }
 		
 		//'output'
 		public Keyword getOutputKeyword_7_0_1_2_0() { return cOutputKeyword_7_0_1_2_0; }
 		
-		//(parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//( parameter+=ParameterOutput
+		//| '{' ( parameter+=ParameterOutput )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_2_1() { return cAlternatives_7_0_1_2_1; }
 		
 		//parameter+=ParameterOutput
@@ -4850,13 +6011,13 @@
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_7_0_1_2_1_0_0() { return cParameterParameterOutputParserRuleCall_7_0_1_2_1_0_0; }
 		
-		//'{' parameter+=ParameterOutput+ '}'
+		//'{' ( parameter+=ParameterOutput )+ '}'
 		public Group getGroup_7_0_1_2_1_1() { return cGroup_7_0_1_2_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_2_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_2_1_1_0; }
 		
-		//parameter+=ParameterOutput+
+		//( parameter+=ParameterOutput )+
 		public Assignment getParameterAssignment_7_0_1_2_1_1_1() { return cParameterAssignment_7_0_1_2_1_1_1; }
 		
 		//ParameterOutput
@@ -4865,13 +6026,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_2_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_2_1_1_2; }
 		
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
 		public Group getGroup_7_0_1_3() { return cGroup_7_0_1_3; }
 		
 		//'return'
 		public Keyword getReturnKeyword_7_0_1_3_0() { return cReturnKeyword_7_0_1_3_0; }
 		
-		//(parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//( parameter+=ParameterReturn
+		//| '{' ( parameter+=ParameterReturn )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_3_1() { return cAlternatives_7_0_1_3_1; }
 		
 		//parameter+=ParameterReturn
@@ -4880,13 +6046,13 @@
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_7_0_1_3_1_0_0() { return cParameterParameterReturnParserRuleCall_7_0_1_3_1_0_0; }
 		
-		//'{' parameter+=ParameterReturn+ '}'
+		//'{' ( parameter+=ParameterReturn )+ '}'
 		public Group getGroup_7_0_1_3_1_1() { return cGroup_7_0_1_3_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_3_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_3_1_1_0; }
 		
-		//parameter+=ParameterReturn+
+		//( parameter+=ParameterReturn )+
 		public Assignment getParameterAssignment_7_0_1_3_1_1_1() { return cParameterAssignment_7_0_1_3_1_1_1; }
 		
 		//ParameterReturn
@@ -4895,8 +6061,15 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_3_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_3_1_1_2; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//// optional unnamed section for property full declaration / definition
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Alternatives getAlternatives_7_1() { return cAlternatives_7_1; }
 		
 		//port+=Port
@@ -4941,76 +6114,130 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_7_1_6_0() { return cVariableVariableParserRuleCall_7_1_6_0; }
 		
-		//('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:' parameter+=ParameterOutput* |
-		//'@return:' parameter+=ParameterReturn*)*
+		//( '@input:'
+		//    ( parameter+=ParameterInput  )*
+		//| '@inout:'
+		//    ( parameter+=ParameterInout  )*
+		//| '@output:'
+		//    ( parameter+=ParameterOutput )*
+		//| '@return:'
+		//    ( parameter+=ParameterReturn )*
+		//)*
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//'@input:' parameter+=ParameterInput*
+		//'@input:'
+		//           ( parameter+=ParameterInput  )*
 		public Group getGroup_8_0() { return cGroup_8_0; }
 		
 		//'@input:'
 		public Keyword getInputKeyword_8_0_0() { return cInputKeyword_8_0_0; }
 		
-		//parameter+=ParameterInput*
+		//( parameter+=ParameterInput  )*
 		public Assignment getParameterAssignment_8_0_1() { return cParameterAssignment_8_0_1; }
 		
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_8_0_1_0() { return cParameterParameterInputParserRuleCall_8_0_1_0; }
 		
-		//'@inout:' parameter+=ParameterInout*
+		//'@inout:'
+		//           ( parameter+=ParameterInout  )*
 		public Group getGroup_8_1() { return cGroup_8_1; }
 		
 		//'@inout:'
 		public Keyword getInoutKeyword_8_1_0() { return cInoutKeyword_8_1_0; }
 		
-		//parameter+=ParameterInout*
+		//( parameter+=ParameterInout  )*
 		public Assignment getParameterAssignment_8_1_1() { return cParameterAssignment_8_1_1; }
 		
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_8_1_1_0() { return cParameterParameterInoutParserRuleCall_8_1_1_0; }
 		
-		//'@output:' parameter+=ParameterOutput*
+		//'@output:'
+		//           ( parameter+=ParameterOutput )*
 		public Group getGroup_8_2() { return cGroup_8_2; }
 		
 		//'@output:'
 		public Keyword getOutputKeyword_8_2_0() { return cOutputKeyword_8_2_0; }
 		
-		//parameter+=ParameterOutput*
+		//( parameter+=ParameterOutput )*
 		public Assignment getParameterAssignment_8_2_1() { return cParameterAssignment_8_2_1; }
 		
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_8_2_1_0() { return cParameterParameterOutputParserRuleCall_8_2_1_0; }
 		
-		//'@return:' parameter+=ParameterReturn*
+		//'@return:'
+		//           ( parameter+=ParameterReturn )*
 		public Group getGroup_8_3() { return cGroup_8_3; }
 		
 		//'@return:'
 		public Keyword getReturnKeyword_8_3_0() { return cReturnKeyword_8_3_0; }
 		
-		//parameter+=ParameterReturn*
+		//( parameter+=ParameterReturn )*
 		public Assignment getParameterAssignment_8_3_1() { return cParameterAssignment_8_3_1; }
 		
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_8_3_1_0() { return cParameterParameterReturnParserRuleCall_8_3_1_0; }
 		
-		//('@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)* | '@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic
-		//| channel+=ChannelPublic | typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)* |
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)* | '@private:' (port+=PortPrivate
-		//| signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//( '@property:'
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//| '@public:'
+		//    ( port+=PortPublic
+		//    | signal+=SignalPublic
+		//    | buffer+=BufferPublic
+		//    | channel+=ChannelPublic
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPublic
+		//    | variable+=VariablePublic
+		//    )*
+		//| '@protected:'
+		//    ( port+=PortProtected
+		//    | signal+=SignalProtected
+		//    | buffer+=BufferProtected
+		//    | channel+=ChannelProtected
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionProtected
+		//    | variable+=VariableProtected
+		//    )*
+		//| '@private:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)*
 		public Alternatives getAlternatives_9() { return cAlternatives_9; }
 		
-		//'@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)*
+		//'@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Group getGroup_9_0() { return cGroup_9_0; }
 		
 		//'@property:'
 		public Keyword getPropertyKeyword_9_0_0() { return cPropertyKeyword_9_0_0; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( port+=Port
+		//| signal+=Signal
+		//| buffer+=Buffer
+		//| channel+=Channel
+		//| typedef+=TypeDefinition
+		//| function+=Function
+		//| variable+=Variable
+		//)*
 		public Alternatives getAlternatives_9_0_1() { return cAlternatives_9_0_1; }
 		
 		//port+=Port
@@ -5055,15 +6282,28 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_9_0_1_6_0() { return cVariableVariableParserRuleCall_9_0_1_6_0; }
 		
-		//'@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic |
-		//typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)*
+		//'@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
 		public Group getGroup_9_1() { return cGroup_9_1; }
 		
 		//'@public:'
 		public Keyword getPublicKeyword_9_1_0() { return cPublicKeyword_9_1_0; }
 		
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)*
+		//( port+=PortPublic
+		//| signal+=SignalPublic
+		//| buffer+=BufferPublic
+		//| channel+=ChannelPublic
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPublic
+		//| variable+=VariablePublic
+		//)*
 		public Alternatives getAlternatives_9_1_1() { return cAlternatives_9_1_1; }
 		
 		//port+=PortPublic
@@ -5108,15 +6348,28 @@
 		//VariablePublic
 		public RuleCall getVariableVariablePublicParserRuleCall_9_1_1_6_0() { return cVariableVariablePublicParserRuleCall_9_1_1_6_0; }
 		
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//'@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
 		public Group getGroup_9_2() { return cGroup_9_2; }
 		
 		//'@protected:'
 		public Keyword getProtectedKeyword_9_2_0() { return cProtectedKeyword_9_2_0; }
 		
-		//(port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//( port+=PortProtected
+		//| signal+=SignalProtected
+		//| buffer+=BufferProtected
+		//| channel+=ChannelProtected
+		//| typedef+=TypeDefinition
+		//| function+=FunctionProtected
+		//| variable+=VariableProtected
+		//)*
 		public Alternatives getAlternatives_9_2_1() { return cAlternatives_9_2_1; }
 		
 		//port+=PortProtected
@@ -5161,15 +6414,28 @@
 		//VariableProtected
 		public RuleCall getVariableVariableProtectedParserRuleCall_9_2_1_6_0() { return cVariableVariableProtectedParserRuleCall_9_2_1_6_0; }
 		
-		//'@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*
+		//'@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
 		public Group getGroup_9_3() { return cGroup_9_3; }
 		
 		//'@private:'
 		public Keyword getPrivateKeyword_9_3_0() { return cPrivateKeyword_9_3_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_9_3_1() { return cAlternatives_9_3_1; }
 		
 		//port+=PortPrivate
@@ -5214,17 +6480,22 @@
 		//VariablePrivate
 		public RuleCall getVariableVariablePrivateParserRuleCall_9_3_1_6_0() { return cVariableVariablePrivateParserRuleCall_9_3_1_6_0; }
 		
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+)
+		//( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//  | '@procedure:' ( procedure+=Procedure )+
+		//  )*
+		//| ( routine+=Routine | procedure+=Procedure )+
+		//)
 		public Alternatives getAlternatives_10() { return cAlternatives_10; }
 		
-		//(('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)*
+		//( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
 		public Alternatives getAlternatives_10_0() { return cAlternatives_10_0; }
 		
-		//('@routine:' | '@macro:') routine+=Routine+
+		//( '@routine:' | '@macro:' ) ( routine+=Routine )+
 		public Group getGroup_10_0_0() { return cGroup_10_0_0; }
 		
-		//('@routine:' | '@macro:')
+		//( '@routine:' | '@macro:' )
 		public Alternatives getAlternatives_10_0_0_0() { return cAlternatives_10_0_0_0; }
 		
 		//'@routine:'
@@ -5233,25 +6504,25 @@
 		//'@macro:'
 		public Keyword getMacroKeyword_10_0_0_0_1() { return cMacroKeyword_10_0_0_0_1; }
 		
-		//routine+=Routine+
+		//( routine+=Routine )+
 		public Assignment getRoutineAssignment_10_0_0_1() { return cRoutineAssignment_10_0_0_1; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_10_0_0_1_0() { return cRoutineRoutineParserRuleCall_10_0_0_1_0; }
 		
-		//'@procedure:' procedure+=Procedure+
+		//'@procedure:' ( procedure+=Procedure )+
 		public Group getGroup_10_0_1() { return cGroup_10_0_1; }
 		
 		//'@procedure:'
 		public Keyword getProcedureKeyword_10_0_1_0() { return cProcedureKeyword_10_0_1_0; }
 		
-		//procedure+=Procedure+
+		//( procedure+=Procedure )+
 		public Assignment getProcedureAssignment_10_0_1_1() { return cProcedureAssignment_10_0_1_1; }
 		
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_10_0_1_1_0() { return cProcedureProcedureParserRuleCall_10_0_1_1_0; }
 		
-		//(routine+=Routine | procedure+=Procedure)+
+		//( routine+=Routine | procedure+=Procedure )+
 		public Alternatives getAlternatives_10_1() { return cAlternatives_10_1; }
 		
 		//routine+=Routine
@@ -5266,15 +6537,18 @@
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_10_1_1_0() { return cProcedureProcedureParserRuleCall_10_1_1_0; }
 		
-		////		// optional unnamed section for property full declaration / definition
-		////		propertyPart=PropertyPart
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
 		////
-		////		compositePart=CompositePart
-		////		( region+=StatemachineRegion
-		////		| ( region+=StatemachineNamedRegion )+
-		////		| region+=StatemachineRegionLite
-		////		)?
-		//execution=ProcedureExecution?
+		////        compositePart=CompositePart
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////        | region+=StatemachineRegionLite
+		////        )?
+		//        ( ( execution=ProcedureExecution )?
+		////        & ( computation=ModelOfComputation )?
+		////        & ( interaction=ModelOfInteraction )?
+		//        )
 		public Assignment getExecutionAssignment_11() { return cExecutionAssignment_11; }
 		
 		//ProcedureExecution
@@ -5300,28 +6574,37 @@
 		private final Assignment cRunRoutineAssignment_2_1_1 = (Assignment)cGroup_2_1.eContents().get(1);
 		private final RuleCall cRunRoutineMoeRoutineParserRuleCall_2_1_1_0 = (RuleCall)cRunRoutineAssignment_2_1_1.eContents().get(0);
 		
-		//ProcedureExecution fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} '@moe:'? ((('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-		//	& ('@run' runRoutine=moeRoutine)?);
+		//ProcedureExecution returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//        ( '@moe:' )?
+		//        ( ( ( '@schedule' | '@xschedule' )  scheduleRoutine=moeRoutine )?
+		//        & ( '@run'  runRoutine=moeRoutine )?
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} '@moe:'? ((('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)? & ('@run'
-		//runRoutine=moeRoutine)?)
+		//{ fmlInfra::ModelOfExecution }
+		//       ( '@moe:' )?
+		//       ( ( ( '@schedule' | '@xschedule' )  scheduleRoutine=moeRoutine )?
+		//       & ( '@run'  runRoutine=moeRoutine )?
+		//       )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//'@moe:'?
+		//( '@moe:' )?
 		public Keyword getMoeKeyword_1() { return cMoeKeyword_1; }
 		
-		//((('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)? & ('@run' runRoutine=moeRoutine)?)
+		//( ( ( '@schedule' | '@xschedule' )  scheduleRoutine=moeRoutine )?
+		//& ( '@run'  runRoutine=moeRoutine )?
+		//)
 		public UnorderedGroup getUnorderedGroup_2() { return cUnorderedGroup_2; }
 		
-		//(('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
+		//( ( '@schedule' | '@xschedule' )  scheduleRoutine=moeRoutine )?
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
-		//('@schedule' | '@xschedule')
+		//( '@schedule' | '@xschedule' )
 		public Alternatives getAlternatives_2_0_0() { return cAlternatives_2_0_0; }
 		
 		//'@schedule'
@@ -5336,7 +6619,7 @@
 		//moeRoutine
 		public RuleCall getScheduleRoutineMoeRoutineParserRuleCall_2_0_1_0() { return cScheduleRoutineMoeRoutineParserRuleCall_2_0_1_0; }
 		
-		//('@run' runRoutine=moeRoutine)?
+		//( '@run'  runRoutine=moeRoutine )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'@run'
@@ -5355,8 +6638,9 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Behavior View Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Behavior fmlInfra::Behavior:
-		//	Statemachine;
+		//Behavior returns fmlInfra::Behavior
+		//    : Statemachine
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//Statemachine
@@ -5389,36 +6673,68 @@
 		private final Assignment cInteractionAssignment_2_1 = (Assignment)cUnorderedGroup_2.eContents().get(1);
 		private final RuleCall cInteractionModelOfInteractionParserRuleCall_2_1_0 = (RuleCall)cInteractionAssignment_2_1.eContents().get(0);
 		
-		//MoeBehavior fmlInfra::Behavior:
-		//	{fmlInfra::Behavior} ('@local:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)? (execution=ModelOfExecution?
-		//	//		& ( computation=ModelOfComputation )?
-		//	& interaction=ModelOfInteraction?);
+		//MoeBehavior returns fmlInfra::Behavior
+		//    : {fmlInfra::Behavior}
+		//        ( '@local:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )?
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Behavior} ('@local:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)?
-		//(execution=ModelOfExecution? //		& ( computation=ModelOfComputation )?
-		//& interaction=ModelOfInteraction?)
+		// {fmlInfra::Behavior}
+		//        ( '@local:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )?
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Behavior}
 		public Action getBehaviorAction_0() { return cBehaviorAction_0; }
 		
-		//('@local:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)?
+		//( '@local:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'@local:'
 		public Keyword getLocalKeyword_1_0() { return cLocalKeyword_1_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//port+=PortPrivate
@@ -5463,17 +6779,19 @@
 		//VariablePrivate
 		public RuleCall getVariableVariablePrivateParserRuleCall_1_1_6_0() { return cVariableVariablePrivateParserRuleCall_1_1_6_0; }
 		
-		//(execution=ModelOfExecution? //		& ( computation=ModelOfComputation )?
-		//& interaction=ModelOfInteraction?)
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
 		public UnorderedGroup getUnorderedGroup_2() { return cUnorderedGroup_2; }
 		
-		//execution=ModelOfExecution?
+		//( execution=ModelOfExecution )?
 		public Assignment getExecutionAssignment_2_0() { return cExecutionAssignment_2_0; }
 		
 		//ModelOfExecution
 		public RuleCall getExecutionModelOfExecutionParserRuleCall_2_0_0() { return cExecutionModelOfExecutionParserRuleCall_2_0_0; }
 		
-		//interaction=ModelOfInteraction?
+		//( interaction=ModelOfInteraction )?
 		public Assignment getInteractionAssignment_2_1() { return cInteractionAssignment_2_1; }
 		
 		//ModelOfInteraction
@@ -5709,143 +7027,296 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Statemachine Behavior View Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Statemachine fmlStmchn::Statemachine:
-		//	{fmlStmchn::Statemachine} (visibility=VisibilityKind?
-		//	& timed?='timed'?
-		//	& dense_timed?='timed#dense'?
-		//	& discrete_timed?='timed#discrete'?
-		//	& input_enabled?='input_enabled'?
-		//	& lifeline?='lifeline'?
-		//	& design=DesignKind?)
-		//	'statemachine' ('<' 'moc:'? ModelOfComputationKing '>')?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'{' ('@parameter:' ('input' (parameter+=ParameterInput
-		//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-		//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-		//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-		//	| '{' parameter+=ParameterReturn+ '}'))*
-		//	| (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*) ('@input:'
-		//	parameter+=ParameterInput*
-		//	| '@inout:'
-		//	parameter+=ParameterInout*
-		//	| '@output:'
-		//	parameter+=ParameterOutput*
-		//	| '@return:'
-		//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-		//	| signal+=Signal
-		//	| buffer+=Buffer
-		//	| channel+=Channel
-		//	| typedef+=TypeDefinition
-		//	| function+=Function
-		//	| variable+=Variable)*
-		//	| '@public:' (port+=PortPublic
-		//	| signal+=SignalPublic
-		//	| buffer+=BufferPublic
-		//	| channel+=ChannelPublic
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPublic
-		//	| variable+=VariablePublic)*
-		//	| '@protected:' (port+=PortProtected
-		//	| signal+=SignalProtected
-		//	| buffer+=BufferProtected
-		//	| channel+=ChannelProtected
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionProtected
-		//	| variable+=VariableProtected)*
-		//	| '@private:' (port+=PortPrivate
-		//	| signal+=SignalPrivate
-		//	| buffer+=BufferPrivate
-		//	| channel+=ChannelPrivate
-		//	| typedef+=TypeDefinition
-		//	| function+=FunctionPrivate
-		//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-		//	| '@procedure:' procedure+=Procedure+)*
-		//	| (routine+=Routine | procedure+=Procedure)+) (('@statemachine:' machine+=Statemachine+
-		//	| '@composite:' machine+=AnyMachineBlock*
-		//	| '@model:' machine+=AnyMachineBlock*
-		//	| '@prototype:' machine+=AnyMachineBlock*
-		//	| '@instance:' instance+=InstanceMachine*)+
-		//	| region+=StatemachineRegion
-		//	| region+=StatemachineNamedRegion+
-		//	| region+=StatemachineRegionLite) (execution=ModelOfExecution?
-		//	//		& ( computation=ModelOfComputation )?
-		//	& interaction=ModelOfInteraction?)
-		//	'}';
+		//Statemachine returns fmlStmchn::Statemachine
+		//    : { fmlStmchn::Statemachine }
+		//        ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( lifeline?='lifeline' )?
+		//        & ( design=DesignKind )?
+		//        )
+		//        'statemachine' ( '<' ( 'moc:' )? ModelOfComputationKing '>' )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( '@parameter:'  //( parameter+=Parameter )+
+		//            ( 'input'
+		//                ( parameter+=ParameterInput
+		//                | '{' ( parameter+=ParameterInput )+ '}'
+		//                )
+		//            | 'inout'
+		//                ( parameter+=ParameterInout
+		//                | '{' ( parameter+=ParameterInout )+ '}'
+		//                )
+		//            | 'output'
+		//                ( parameter+=ParameterOutput
+		//                | '{' ( parameter+=ParameterOutput )+ '}'
+		//                )
+		//            | 'return'
+		//                ( parameter+=ParameterReturn
+		//                | '{' ( parameter+=ParameterReturn )+ '}'
+		//                )
+		//            )*
+		//        | // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@input:'
+		//            ( parameter+=ParameterInput  )*
+		//        | '@inout:'
+		//            ( parameter+=ParameterInout  )*
+		//        | '@output:'
+		//            ( parameter+=ParameterOutput )*
+		//        | '@return:'
+		//            ( parameter+=ParameterReturn )*
+		//        )*
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine  | procedure+=Procedure )+
+		//        )
+		////        ( ( '@composite:' | '@statemachine:' )  ( machine +=Statemachine )+
+		//        ( ( '@statemachine:' ( machine +=Statemachine    )+
+		//            | '@composite:'  ( machine +=AnyMachineBlock )*
+		//            | '@model:'      ( machine +=AnyMachineBlock )*
+		//            | '@prototype:'  ( machine +=AnyMachineBlock )*
+		//            | '@instance:'   ( instance+=InstanceMachine )*
+		//            )+
+		//        | region+=StatemachineRegion
+		//        | ( region+=StatemachineNamedRegion )+
+		//        | region+=StatemachineRegionLite
+		//        )
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////
+		////        | region+=StatemachineRegionLite
+		////        )
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Statemachine} (visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? &
-		//discrete_timed?='timed#discrete'? & input_enabled?='input_enabled'? & lifeline?='lifeline'? & design=DesignKind?)
-		//'statemachine' ('<' 'moc:'? ModelOfComputationKing '>')? name=ESIdentifier unrestrictedName=UnrestrictedName? '{'
-		//('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*) ('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:'
-		//parameter+=ParameterOutput* | '@return:' parameter+=ParameterReturn*)* ('@property:' (port+=Port | signal+=Signal |
-		//buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function | variable+=Variable)* | '@public:'
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)* | '@protected:' (port+=PortProtected | signal+=SignalProtected |
-		//buffer+=BufferProtected | channel+=ChannelProtected | typedef+=TypeDefinition | function+=FunctionProtected |
-		//variable+=VariableProtected)* | '@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate |
-		//channel+=ChannelPrivate | typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*)*
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+) (('@statemachine:' machine+=Statemachine+ | '@composite:' machine+=AnyMachineBlock* | '@model:'
-		//machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)+ |
-		//region+=StatemachineRegion | region+=StatemachineNamedRegion+ | region+=StatemachineRegionLite)
-		//(execution=ModelOfExecution? //		& ( computation=ModelOfComputation )?
-		//& interaction=ModelOfInteraction?) '}'
+		// { fmlStmchn::Statemachine }
+		//        ( ( visibility=VisibilityKind )?
+		//        & ( timed?='timed' )?
+		//        & ( dense_timed?='timed#dense' )?
+		//        & ( discrete_timed?='timed#discrete' )?
+		//        & ( input_enabled ?= 'input_enabled' )?
+		//        & ( lifeline?='lifeline' )?
+		//        & ( design=DesignKind )?
+		//        )
+		//        'statemachine' ( '<' ( 'moc:' )? ModelOfComputationKing '>' )?
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//        ( '@parameter:'  //( parameter+=Parameter )+
+		//            ( 'input'
+		//                ( parameter+=ParameterInput
+		//                | '{' ( parameter+=ParameterInput )+ '}'
+		//                )
+		//            | 'inout'
+		//                ( parameter+=ParameterInout
+		//                | '{' ( parameter+=ParameterInout )+ '}'
+		//                )
+		//            | 'output'
+		//                ( parameter+=ParameterOutput
+		//                | '{' ( parameter+=ParameterOutput )+ '}'
+		//                )
+		//            | 'return'
+		//                ( parameter+=ParameterReturn
+		//                | '{' ( parameter+=ParameterReturn )+ '}'
+		//                )
+		//            )*
+		//        | // optional unnamed section for property full declaration / definition
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        )
+		//        ( '@input:'
+		//            ( parameter+=ParameterInput  )*
+		//        | '@inout:'
+		//            ( parameter+=ParameterInout  )*
+		//        | '@output:'
+		//            ( parameter+=ParameterOutput )*
+		//        | '@return:'
+		//            ( parameter+=ParameterReturn )*
+		//        )*
+		//        ( '@property:'
+		//            ( port+=Port
+		//            | signal+=Signal
+		//            | buffer+=Buffer
+		//            | channel+=Channel
+		//            | typedef+=TypeDefinition
+		//            | function+=Function
+		//            | variable+=Variable
+		//            )*
+		//        | '@public:'
+		//            ( port+=PortPublic
+		//            | signal+=SignalPublic
+		//            | buffer+=BufferPublic
+		//            | channel+=ChannelPublic
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPublic
+		//            | variable+=VariablePublic
+		//            )*
+		//        | '@protected:'
+		//            ( port+=PortProtected
+		//            | signal+=SignalProtected
+		//            | buffer+=BufferProtected
+		//            | channel+=ChannelProtected
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionProtected
+		//            | variable+=VariableProtected
+		//            )*
+		//        | '@private:'
+		//            ( port+=PortPrivate
+		//            | signal+=SignalPrivate
+		//            | buffer+=BufferPrivate
+		//            | channel+=ChannelPrivate
+		//            | typedef+=TypeDefinition
+		//            | function+=FunctionPrivate
+		//            | variable+=VariablePrivate
+		//            )*
+		//        )*
+		//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//          | '@procedure:' ( procedure+=Procedure )+
+		//          )*
+		//        | ( routine+=Routine  | procedure+=Procedure )+
+		//        )
+		////        ( ( '@composite:' | '@statemachine:' )  ( machine +=Statemachine )+
+		//        ( ( '@statemachine:' ( machine +=Statemachine    )+
+		//            | '@composite:'  ( machine +=AnyMachineBlock )*
+		//            | '@model:'      ( machine +=AnyMachineBlock )*
+		//            | '@prototype:'  ( machine +=AnyMachineBlock )*
+		//            | '@instance:'   ( instance+=InstanceMachine )*
+		//            )+
+		//        | region+=StatemachineRegion
+		//        | ( region+=StatemachineNamedRegion )+
+		//        | region+=StatemachineRegionLite
+		//        )
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////
+		////        | region+=StatemachineRegionLite
+		////        )
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
+		//        '}'
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::Statemachine}
+		//{ fmlStmchn::Statemachine }
 		public Action getStatemachineAction_0() { return cStatemachineAction_0; }
 		
-		//(visibility=VisibilityKind? & timed?='timed'? & dense_timed?='timed#dense'? & discrete_timed?='timed#discrete'? &
-		//input_enabled?='input_enabled'? & lifeline?='lifeline'? & design=DesignKind?)
+		//( ( visibility=VisibilityKind )?
+		//& ( timed?='timed' )?
+		//& ( dense_timed?='timed#dense' )?
+		//& ( discrete_timed?='timed#discrete' )?
+		//& ( input_enabled ?= 'input_enabled' )?
+		//& ( lifeline?='lifeline' )?
+		//& ( design=DesignKind )?
+		//)
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1_0() { return cVisibilityAssignment_1_0; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_1_0_0() { return cVisibilityVisibilityKindEnumRuleCall_1_0_0; }
 		
-		//timed?='timed'?
+		//( timed?='timed' )?
 		public Assignment getTimedAssignment_1_1() { return cTimedAssignment_1_1; }
 		
 		//'timed'
 		public Keyword getTimedTimedKeyword_1_1_0() { return cTimedTimedKeyword_1_1_0; }
 		
-		//dense_timed?='timed#dense'?
+		//( dense_timed?='timed#dense' )?
 		public Assignment getDense_timedAssignment_1_2() { return cDense_timedAssignment_1_2; }
 		
 		//'timed#dense'
 		public Keyword getDense_timedTimedDenseKeyword_1_2_0() { return cDense_timedTimedDenseKeyword_1_2_0; }
 		
-		//discrete_timed?='timed#discrete'?
+		//( discrete_timed?='timed#discrete' )?
 		public Assignment getDiscrete_timedAssignment_1_3() { return cDiscrete_timedAssignment_1_3; }
 		
 		//'timed#discrete'
 		public Keyword getDiscrete_timedTimedDiscreteKeyword_1_3_0() { return cDiscrete_timedTimedDiscreteKeyword_1_3_0; }
 		
-		//input_enabled?='input_enabled'?
+		//( input_enabled ?= 'input_enabled' )?
 		public Assignment getInput_enabledAssignment_1_4() { return cInput_enabledAssignment_1_4; }
 		
 		//'input_enabled'
 		public Keyword getInput_enabledInput_enabledKeyword_1_4_0() { return cInput_enabledInput_enabledKeyword_1_4_0; }
 		
-		//lifeline?='lifeline'?
+		//( lifeline?='lifeline' )?
 		public Assignment getLifelineAssignment_1_5() { return cLifelineAssignment_1_5; }
 		
 		//'lifeline'
 		public Keyword getLifelineLifelineKeyword_1_5_0() { return cLifelineLifelineKeyword_1_5_0; }
 		
-		//design=DesignKind?
+		//( design=DesignKind )?
 		public Assignment getDesignAssignment_1_6() { return cDesignAssignment_1_6; }
 		
 		//DesignKind
@@ -5854,13 +7325,13 @@
 		//'statemachine'
 		public Keyword getStatemachineKeyword_2() { return cStatemachineKeyword_2; }
 		
-		//('<' 'moc:'? ModelOfComputationKing '>')?
+		//( '<' ( 'moc:' )? ModelOfComputationKing '>' )?
 		public Group getGroup_3() { return cGroup_3; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_3_0() { return cLessThanSignKeyword_3_0; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_3_1() { return cMocKeyword_3_1; }
 		
 		//ModelOfComputationKing
@@ -5875,7 +7346,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
@@ -5884,33 +7355,91 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//('@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))* |
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*)
+		//( '@parameter:'  //( parameter+=Parameter )+
+		//    ( 'input'
+		//        ( parameter+=ParameterInput
+		//        | '{' ( parameter+=ParameterInput )+ '}'
+		//        )
+		//    | 'inout'
+		//        ( parameter+=ParameterInout
+		//        | '{' ( parameter+=ParameterInout )+ '}'
+		//        )
+		//    | 'output'
+		//        ( parameter+=ParameterOutput
+		//        | '{' ( parameter+=ParameterOutput )+ '}'
+		//        )
+		//    | 'return'
+		//        ( parameter+=ParameterReturn
+		//        | '{' ( parameter+=ParameterReturn )+ '}'
+		//        )
+		//    )*
+		//| // optional unnamed section for property full declaration / definition
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'@parameter:' ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//'@parameter:'  //( parameter+=Parameter )+
+		//           ( 'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
+		//           | 'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
+		//           | 'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
+		//           | 'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
+		//           )*
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'@parameter:'
 		public Keyword getParameterKeyword_7_0_0() { return cParameterKeyword_7_0_0; }
 		
-		//('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout | '{'
-		//parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}') |
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		////( parameter+=Parameter )+
+		//          ( 'input'
+		//              ( parameter+=ParameterInput
+		//              | '{' ( parameter+=ParameterInput )+ '}'
+		//              )
+		//          | 'inout'
+		//              ( parameter+=ParameterInout
+		//              | '{' ( parameter+=ParameterInout )+ '}'
+		//              )
+		//          | 'output'
+		//              ( parameter+=ParameterOutput
+		//              | '{' ( parameter+=ParameterOutput )+ '}'
+		//              )
+		//          | 'return'
+		//              ( parameter+=ParameterReturn
+		//              | '{' ( parameter+=ParameterReturn )+ '}'
+		//              )
+		//          )*
 		public Alternatives getAlternatives_7_0_1() { return cAlternatives_7_0_1; }
 		
-		//'input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//'input'
+		//               ( parameter+=ParameterInput
+		//               | '{' ( parameter+=ParameterInput )+ '}'
+		//               )
 		public Group getGroup_7_0_1_0() { return cGroup_7_0_1_0; }
 		
 		//'input'
 		public Keyword getInputKeyword_7_0_1_0_0() { return cInputKeyword_7_0_1_0_0; }
 		
-		//(parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//( parameter+=ParameterInput
+		//| '{' ( parameter+=ParameterInput )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_0_1() { return cAlternatives_7_0_1_0_1; }
 		
 		//parameter+=ParameterInput
@@ -5919,13 +7448,13 @@
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_7_0_1_0_1_0_0() { return cParameterParameterInputParserRuleCall_7_0_1_0_1_0_0; }
 		
-		//'{' parameter+=ParameterInput+ '}'
+		//'{' ( parameter+=ParameterInput )+ '}'
 		public Group getGroup_7_0_1_0_1_1() { return cGroup_7_0_1_0_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_0_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_0_1_1_0; }
 		
-		//parameter+=ParameterInput+
+		//( parameter+=ParameterInput )+
 		public Assignment getParameterAssignment_7_0_1_0_1_1_1() { return cParameterAssignment_7_0_1_0_1_1_1; }
 		
 		//ParameterInput
@@ -5934,13 +7463,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_0_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_0_1_1_2; }
 		
-		//'inout' (parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//'inout'
+		//               ( parameter+=ParameterInout
+		//               | '{' ( parameter+=ParameterInout )+ '}'
+		//               )
 		public Group getGroup_7_0_1_1() { return cGroup_7_0_1_1; }
 		
 		//'inout'
 		public Keyword getInoutKeyword_7_0_1_1_0() { return cInoutKeyword_7_0_1_1_0; }
 		
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//( parameter+=ParameterInout
+		//| '{' ( parameter+=ParameterInout )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_1_1() { return cAlternatives_7_0_1_1_1; }
 		
 		//parameter+=ParameterInout
@@ -5949,13 +7483,13 @@
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_7_0_1_1_1_0_0() { return cParameterParameterInoutParserRuleCall_7_0_1_1_1_0_0; }
 		
-		//'{' parameter+=ParameterInout+ '}'
+		//'{' ( parameter+=ParameterInout )+ '}'
 		public Group getGroup_7_0_1_1_1_1() { return cGroup_7_0_1_1_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_1_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_1_1_1_0; }
 		
-		//parameter+=ParameterInout+
+		//( parameter+=ParameterInout )+
 		public Assignment getParameterAssignment_7_0_1_1_1_1_1() { return cParameterAssignment_7_0_1_1_1_1_1; }
 		
 		//ParameterInout
@@ -5964,13 +7498,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_1_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_1_1_1_2; }
 		
-		//'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//'output'
+		//               ( parameter+=ParameterOutput
+		//               | '{' ( parameter+=ParameterOutput )+ '}'
+		//               )
 		public Group getGroup_7_0_1_2() { return cGroup_7_0_1_2; }
 		
 		//'output'
 		public Keyword getOutputKeyword_7_0_1_2_0() { return cOutputKeyword_7_0_1_2_0; }
 		
-		//(parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//( parameter+=ParameterOutput
+		//| '{' ( parameter+=ParameterOutput )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_2_1() { return cAlternatives_7_0_1_2_1; }
 		
 		//parameter+=ParameterOutput
@@ -5979,13 +7518,13 @@
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_7_0_1_2_1_0_0() { return cParameterParameterOutputParserRuleCall_7_0_1_2_1_0_0; }
 		
-		//'{' parameter+=ParameterOutput+ '}'
+		//'{' ( parameter+=ParameterOutput )+ '}'
 		public Group getGroup_7_0_1_2_1_1() { return cGroup_7_0_1_2_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_2_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_2_1_1_0; }
 		
-		//parameter+=ParameterOutput+
+		//( parameter+=ParameterOutput )+
 		public Assignment getParameterAssignment_7_0_1_2_1_1_1() { return cParameterAssignment_7_0_1_2_1_1_1; }
 		
 		//ParameterOutput
@@ -5994,13 +7533,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_2_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_2_1_1_2; }
 		
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//'return'
+		//               ( parameter+=ParameterReturn
+		//               | '{' ( parameter+=ParameterReturn )+ '}'
+		//               )
 		public Group getGroup_7_0_1_3() { return cGroup_7_0_1_3; }
 		
 		//'return'
 		public Keyword getReturnKeyword_7_0_1_3_0() { return cReturnKeyword_7_0_1_3_0; }
 		
-		//(parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//( parameter+=ParameterReturn
+		//| '{' ( parameter+=ParameterReturn )+ '}'
+		//)
 		public Alternatives getAlternatives_7_0_1_3_1() { return cAlternatives_7_0_1_3_1; }
 		
 		//parameter+=ParameterReturn
@@ -6009,13 +7553,13 @@
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_7_0_1_3_1_0_0() { return cParameterParameterReturnParserRuleCall_7_0_1_3_1_0_0; }
 		
-		//'{' parameter+=ParameterReturn+ '}'
+		//'{' ( parameter+=ParameterReturn )+ '}'
 		public Group getGroup_7_0_1_3_1_1() { return cGroup_7_0_1_3_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7_0_1_3_1_1_0() { return cLeftCurlyBracketKeyword_7_0_1_3_1_1_0; }
 		
-		//parameter+=ParameterReturn+
+		//( parameter+=ParameterReturn )+
 		public Assignment getParameterAssignment_7_0_1_3_1_1_1() { return cParameterAssignment_7_0_1_3_1_1_1; }
 		
 		//ParameterReturn
@@ -6024,8 +7568,15 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_7_0_1_3_1_1_2() { return cRightCurlyBracketKeyword_7_0_1_3_1_1_2; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//// optional unnamed section for property full declaration / definition
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Alternatives getAlternatives_7_1() { return cAlternatives_7_1; }
 		
 		//port+=Port
@@ -6070,76 +7621,130 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_7_1_6_0() { return cVariableVariableParserRuleCall_7_1_6_0; }
 		
-		//('@input:' parameter+=ParameterInput* | '@inout:' parameter+=ParameterInout* | '@output:' parameter+=ParameterOutput* |
-		//'@return:' parameter+=ParameterReturn*)*
+		//( '@input:'
+		//    ( parameter+=ParameterInput  )*
+		//| '@inout:'
+		//    ( parameter+=ParameterInout  )*
+		//| '@output:'
+		//    ( parameter+=ParameterOutput )*
+		//| '@return:'
+		//    ( parameter+=ParameterReturn )*
+		//)*
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//'@input:' parameter+=ParameterInput*
+		//'@input:'
+		//           ( parameter+=ParameterInput  )*
 		public Group getGroup_8_0() { return cGroup_8_0; }
 		
 		//'@input:'
 		public Keyword getInputKeyword_8_0_0() { return cInputKeyword_8_0_0; }
 		
-		//parameter+=ParameterInput*
+		//( parameter+=ParameterInput  )*
 		public Assignment getParameterAssignment_8_0_1() { return cParameterAssignment_8_0_1; }
 		
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_8_0_1_0() { return cParameterParameterInputParserRuleCall_8_0_1_0; }
 		
-		//'@inout:' parameter+=ParameterInout*
+		//'@inout:'
+		//           ( parameter+=ParameterInout  )*
 		public Group getGroup_8_1() { return cGroup_8_1; }
 		
 		//'@inout:'
 		public Keyword getInoutKeyword_8_1_0() { return cInoutKeyword_8_1_0; }
 		
-		//parameter+=ParameterInout*
+		//( parameter+=ParameterInout  )*
 		public Assignment getParameterAssignment_8_1_1() { return cParameterAssignment_8_1_1; }
 		
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_8_1_1_0() { return cParameterParameterInoutParserRuleCall_8_1_1_0; }
 		
-		//'@output:' parameter+=ParameterOutput*
+		//'@output:'
+		//           ( parameter+=ParameterOutput )*
 		public Group getGroup_8_2() { return cGroup_8_2; }
 		
 		//'@output:'
 		public Keyword getOutputKeyword_8_2_0() { return cOutputKeyword_8_2_0; }
 		
-		//parameter+=ParameterOutput*
+		//( parameter+=ParameterOutput )*
 		public Assignment getParameterAssignment_8_2_1() { return cParameterAssignment_8_2_1; }
 		
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_8_2_1_0() { return cParameterParameterOutputParserRuleCall_8_2_1_0; }
 		
-		//'@return:' parameter+=ParameterReturn*
+		//'@return:'
+		//           ( parameter+=ParameterReturn )*
 		public Group getGroup_8_3() { return cGroup_8_3; }
 		
 		//'@return:'
 		public Keyword getReturnKeyword_8_3_0() { return cReturnKeyword_8_3_0; }
 		
-		//parameter+=ParameterReturn*
+		//( parameter+=ParameterReturn )*
 		public Assignment getParameterAssignment_8_3_1() { return cParameterAssignment_8_3_1; }
 		
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_8_3_1_0() { return cParameterParameterReturnParserRuleCall_8_3_1_0; }
 		
-		//('@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)* | '@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic
-		//| channel+=ChannelPublic | typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)* |
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)* | '@private:' (port+=PortPrivate
-		//| signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*)*
+		//( '@property:'
+		//    ( port+=Port
+		//    | signal+=Signal
+		//    | buffer+=Buffer
+		//    | channel+=Channel
+		//    | typedef+=TypeDefinition
+		//    | function+=Function
+		//    | variable+=Variable
+		//    )*
+		//| '@public:'
+		//    ( port+=PortPublic
+		//    | signal+=SignalPublic
+		//    | buffer+=BufferPublic
+		//    | channel+=ChannelPublic
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPublic
+		//    | variable+=VariablePublic
+		//    )*
+		//| '@protected:'
+		//    ( port+=PortProtected
+		//    | signal+=SignalProtected
+		//    | buffer+=BufferProtected
+		//    | channel+=ChannelProtected
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionProtected
+		//    | variable+=VariableProtected
+		//    )*
+		//| '@private:'
+		//    ( port+=PortPrivate
+		//    | signal+=SignalPrivate
+		//    | buffer+=BufferPrivate
+		//    | channel+=ChannelPrivate
+		//    | typedef+=TypeDefinition
+		//    | function+=FunctionPrivate
+		//    | variable+=VariablePrivate
+		//    )*
+		//)*
 		public Alternatives getAlternatives_9() { return cAlternatives_9; }
 		
-		//'@property:' (port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition |
-		//function+=Function | variable+=Variable)*
+		//'@property:'
+		//           ( port+=Port
+		//           | signal+=Signal
+		//           | buffer+=Buffer
+		//           | channel+=Channel
+		//           | typedef+=TypeDefinition
+		//           | function+=Function
+		//           | variable+=Variable
+		//           )*
 		public Group getGroup_9_0() { return cGroup_9_0; }
 		
 		//'@property:'
 		public Keyword getPropertyKeyword_9_0_0() { return cPropertyKeyword_9_0_0; }
 		
-		//(port+=Port | signal+=Signal | buffer+=Buffer | channel+=Channel | typedef+=TypeDefinition | function+=Function |
-		//variable+=Variable)*
+		//( port+=Port
+		//| signal+=Signal
+		//| buffer+=Buffer
+		//| channel+=Channel
+		//| typedef+=TypeDefinition
+		//| function+=Function
+		//| variable+=Variable
+		//)*
 		public Alternatives getAlternatives_9_0_1() { return cAlternatives_9_0_1; }
 		
 		//port+=Port
@@ -6184,15 +7789,28 @@
 		//Variable
 		public RuleCall getVariableVariableParserRuleCall_9_0_1_6_0() { return cVariableVariableParserRuleCall_9_0_1_6_0; }
 		
-		//'@public:' (port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic |
-		//typedef+=TypeDefinition | function+=FunctionPublic | variable+=VariablePublic)*
+		//'@public:'
+		//           ( port+=PortPublic
+		//           | signal+=SignalPublic
+		//           | buffer+=BufferPublic
+		//           | channel+=ChannelPublic
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPublic
+		//           | variable+=VariablePublic
+		//           )*
 		public Group getGroup_9_1() { return cGroup_9_1; }
 		
 		//'@public:'
 		public Keyword getPublicKeyword_9_1_0() { return cPublicKeyword_9_1_0; }
 		
-		//(port+=PortPublic | signal+=SignalPublic | buffer+=BufferPublic | channel+=ChannelPublic | typedef+=TypeDefinition |
-		//function+=FunctionPublic | variable+=VariablePublic)*
+		//( port+=PortPublic
+		//| signal+=SignalPublic
+		//| buffer+=BufferPublic
+		//| channel+=ChannelPublic
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPublic
+		//| variable+=VariablePublic
+		//)*
 		public Alternatives getAlternatives_9_1_1() { return cAlternatives_9_1_1; }
 		
 		//port+=PortPublic
@@ -6237,15 +7855,28 @@
 		//VariablePublic
 		public RuleCall getVariableVariablePublicParserRuleCall_9_1_1_6_0() { return cVariableVariablePublicParserRuleCall_9_1_1_6_0; }
 		
-		//'@protected:' (port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//'@protected:'
+		//           ( port+=PortProtected
+		//           | signal+=SignalProtected
+		//           | buffer+=BufferProtected
+		//           | channel+=ChannelProtected
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionProtected
+		//           | variable+=VariableProtected
+		//           )*
 		public Group getGroup_9_2() { return cGroup_9_2; }
 		
 		//'@protected:'
 		public Keyword getProtectedKeyword_9_2_0() { return cProtectedKeyword_9_2_0; }
 		
-		//(port+=PortProtected | signal+=SignalProtected | buffer+=BufferProtected | channel+=ChannelProtected |
-		//typedef+=TypeDefinition | function+=FunctionProtected | variable+=VariableProtected)*
+		//( port+=PortProtected
+		//| signal+=SignalProtected
+		//| buffer+=BufferProtected
+		//| channel+=ChannelProtected
+		//| typedef+=TypeDefinition
+		//| function+=FunctionProtected
+		//| variable+=VariableProtected
+		//)*
 		public Alternatives getAlternatives_9_2_1() { return cAlternatives_9_2_1; }
 		
 		//port+=PortProtected
@@ -6290,15 +7921,28 @@
 		//VariableProtected
 		public RuleCall getVariableVariableProtectedParserRuleCall_9_2_1_6_0() { return cVariableVariableProtectedParserRuleCall_9_2_1_6_0; }
 		
-		//'@private:' (port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate |
-		//typedef+=TypeDefinition | function+=FunctionPrivate | variable+=VariablePrivate)*
+		//'@private:'
+		//           ( port+=PortPrivate
+		//           | signal+=SignalPrivate
+		//           | buffer+=BufferPrivate
+		//           | channel+=ChannelPrivate
+		//           | typedef+=TypeDefinition
+		//           | function+=FunctionPrivate
+		//           | variable+=VariablePrivate
+		//           )*
 		public Group getGroup_9_3() { return cGroup_9_3; }
 		
 		//'@private:'
 		public Keyword getPrivateKeyword_9_3_0() { return cPrivateKeyword_9_3_0; }
 		
-		//(port+=PortPrivate | signal+=SignalPrivate | buffer+=BufferPrivate | channel+=ChannelPrivate | typedef+=TypeDefinition |
-		//function+=FunctionPrivate | variable+=VariablePrivate)*
+		//( port+=PortPrivate
+		//| signal+=SignalPrivate
+		//| buffer+=BufferPrivate
+		//| channel+=ChannelPrivate
+		//| typedef+=TypeDefinition
+		//| function+=FunctionPrivate
+		//| variable+=VariablePrivate
+		//)*
 		public Alternatives getAlternatives_9_3_1() { return cAlternatives_9_3_1; }
 		
 		//port+=PortPrivate
@@ -6343,17 +7987,22 @@
 		//VariablePrivate
 		public RuleCall getVariableVariablePrivateParserRuleCall_9_3_1_6_0() { return cVariableVariablePrivateParserRuleCall_9_3_1_6_0; }
 		
-		//((('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)* | (routine+=Routine |
-		//procedure+=Procedure)+)
+		//( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//  | '@procedure:' ( procedure+=Procedure )+
+		//  )*
+		//| ( routine+=Routine  | procedure+=Procedure )+
+		//)
 		public Alternatives getAlternatives_10() { return cAlternatives_10; }
 		
-		//(('@routine:' | '@macro:') routine+=Routine+ | '@procedure:' procedure+=Procedure+)*
+		//( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+		//         | '@procedure:' ( procedure+=Procedure )+
+		//         )*
 		public Alternatives getAlternatives_10_0() { return cAlternatives_10_0; }
 		
-		//('@routine:' | '@macro:') routine+=Routine+
+		//( '@routine:' | '@macro:' ) ( routine+=Routine )+
 		public Group getGroup_10_0_0() { return cGroup_10_0_0; }
 		
-		//('@routine:' | '@macro:')
+		//( '@routine:' | '@macro:' )
 		public Alternatives getAlternatives_10_0_0_0() { return cAlternatives_10_0_0_0; }
 		
 		//'@routine:'
@@ -6362,25 +8011,25 @@
 		//'@macro:'
 		public Keyword getMacroKeyword_10_0_0_0_1() { return cMacroKeyword_10_0_0_0_1; }
 		
-		//routine+=Routine+
+		//( routine+=Routine )+
 		public Assignment getRoutineAssignment_10_0_0_1() { return cRoutineAssignment_10_0_0_1; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_10_0_0_1_0() { return cRoutineRoutineParserRuleCall_10_0_0_1_0; }
 		
-		//'@procedure:' procedure+=Procedure+
+		//'@procedure:' ( procedure+=Procedure )+
 		public Group getGroup_10_0_1() { return cGroup_10_0_1; }
 		
 		//'@procedure:'
 		public Keyword getProcedureKeyword_10_0_1_0() { return cProcedureKeyword_10_0_1_0; }
 		
-		//procedure+=Procedure+
+		//( procedure+=Procedure )+
 		public Assignment getProcedureAssignment_10_0_1_1() { return cProcedureAssignment_10_0_1_1; }
 		
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_10_0_1_1_0() { return cProcedureProcedureParserRuleCall_10_0_1_1_0; }
 		
-		//(routine+=Routine | procedure+=Procedure)+
+		//( routine+=Routine  | procedure+=Procedure )+
 		public Alternatives getAlternatives_10_1() { return cAlternatives_10_1; }
 		
 		//routine+=Routine
@@ -6395,70 +8044,82 @@
 		//Procedure
 		public RuleCall getProcedureProcedureParserRuleCall_10_1_1_0() { return cProcedureProcedureParserRuleCall_10_1_1_0; }
 		
-		//(('@statemachine:' machine+=Statemachine+ | '@composite:' machine+=AnyMachineBlock* | '@model:'
-		//machine+=AnyMachineBlock* | '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)+ |
-		//region+=StatemachineRegion | region+=StatemachineNamedRegion+ | region+=StatemachineRegionLite)
+		////        ( ( '@composite:' | '@statemachine:' )  ( machine +=Statemachine )+
+		//        ( ( '@statemachine:' ( machine +=Statemachine    )+
+		//            | '@composite:'  ( machine +=AnyMachineBlock )*
+		//            | '@model:'      ( machine +=AnyMachineBlock )*
+		//            | '@prototype:'  ( machine +=AnyMachineBlock )*
+		//            | '@instance:'   ( instance+=InstanceMachine )*
+		//            )+
+		//        | region+=StatemachineRegion
+		//        | ( region+=StatemachineNamedRegion )+
+		//        | region+=StatemachineRegionLite
+		//        )
 		public Alternatives getAlternatives_11() { return cAlternatives_11; }
 		
-		//('@statemachine:' machine+=Statemachine+ | '@composite:' machine+=AnyMachineBlock* | '@model:' machine+=AnyMachineBlock*
-		//| '@prototype:' machine+=AnyMachineBlock* | '@instance:' instance+=InstanceMachine*)+
+		//( '@statemachine:' ( machine +=Statemachine    )+
+		//           | '@composite:'  ( machine +=AnyMachineBlock )*
+		//           | '@model:'      ( machine +=AnyMachineBlock )*
+		//           | '@prototype:'  ( machine +=AnyMachineBlock )*
+		//           | '@instance:'   ( instance+=InstanceMachine )*
+		//           )+
 		public Alternatives getAlternatives_11_0() { return cAlternatives_11_0; }
 		
-		//'@statemachine:' machine+=Statemachine+
+		//'@statemachine:' ( machine +=Statemachine    )+
 		public Group getGroup_11_0_0() { return cGroup_11_0_0; }
 		
 		//'@statemachine:'
 		public Keyword getStatemachineKeyword_11_0_0_0() { return cStatemachineKeyword_11_0_0_0; }
 		
-		//machine+=Statemachine+
+		//( machine +=Statemachine    )+
 		public Assignment getMachineAssignment_11_0_0_1() { return cMachineAssignment_11_0_0_1; }
 		
 		//Statemachine
 		public RuleCall getMachineStatemachineParserRuleCall_11_0_0_1_0() { return cMachineStatemachineParserRuleCall_11_0_0_1_0; }
 		
-		//'@composite:' machine+=AnyMachineBlock*
+		//'@composite:'  ( machine +=AnyMachineBlock )*
 		public Group getGroup_11_0_1() { return cGroup_11_0_1; }
 		
 		//'@composite:'
 		public Keyword getCompositeKeyword_11_0_1_0() { return cCompositeKeyword_11_0_1_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_11_0_1_1() { return cMachineAssignment_11_0_1_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_11_0_1_1_0() { return cMachineAnyMachineBlockParserRuleCall_11_0_1_1_0; }
 		
-		//'@model:' machine+=AnyMachineBlock*
+		//'@model:'      ( machine +=AnyMachineBlock )*
 		public Group getGroup_11_0_2() { return cGroup_11_0_2; }
 		
 		//'@model:'
 		public Keyword getModelKeyword_11_0_2_0() { return cModelKeyword_11_0_2_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_11_0_2_1() { return cMachineAssignment_11_0_2_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_11_0_2_1_0() { return cMachineAnyMachineBlockParserRuleCall_11_0_2_1_0; }
 		
-		//'@prototype:' machine+=AnyMachineBlock*
+		//'@prototype:'  ( machine +=AnyMachineBlock )*
 		public Group getGroup_11_0_3() { return cGroup_11_0_3; }
 		
 		//'@prototype:'
 		public Keyword getPrototypeKeyword_11_0_3_0() { return cPrototypeKeyword_11_0_3_0; }
 		
-		//machine+=AnyMachineBlock*
+		//( machine +=AnyMachineBlock )*
 		public Assignment getMachineAssignment_11_0_3_1() { return cMachineAssignment_11_0_3_1; }
 		
 		//AnyMachineBlock
 		public RuleCall getMachineAnyMachineBlockParserRuleCall_11_0_3_1_0() { return cMachineAnyMachineBlockParserRuleCall_11_0_3_1_0; }
 		
-		//'@instance:' instance+=InstanceMachine*
+		//'@instance:'   ( instance+=InstanceMachine )*
 		public Group getGroup_11_0_4() { return cGroup_11_0_4; }
 		
 		//'@instance:'
 		public Keyword getInstanceKeyword_11_0_4_0() { return cInstanceKeyword_11_0_4_0; }
 		
-		//instance+=InstanceMachine*
+		//( instance+=InstanceMachine )*
 		public Assignment getInstanceAssignment_11_0_4_1() { return cInstanceAssignment_11_0_4_1; }
 		
 		//InstanceMachine
@@ -6470,7 +8131,7 @@
 		//StatemachineRegion
 		public RuleCall getRegionStatemachineRegionParserRuleCall_11_1_0() { return cRegionStatemachineRegionParserRuleCall_11_1_0; }
 		
-		//region+=StatemachineNamedRegion+
+		//( region+=StatemachineNamedRegion )+
 		public Assignment getRegionAssignment_11_2() { return cRegionAssignment_11_2; }
 		
 		//StatemachineNamedRegion
@@ -6482,17 +8143,29 @@
 		//StatemachineRegionLite
 		public RuleCall getRegionStatemachineRegionLiteParserRuleCall_11_3_0() { return cRegionStatemachineRegionLiteParserRuleCall_11_3_0; }
 		
-		//(execution=ModelOfExecution? //		& ( computation=ModelOfComputation )?
-		//& interaction=ModelOfInteraction?)
+		////        // optional unnamed section for property full declaration / definition
+		////        propertyPart=PropertyPart
+		////
+		////        compositePart=CompositePart
+		////
+		////        ( region+=StatemachineRegion
+		////        | ( region+=StatemachineNamedRegion )+
+		////
+		////        | region+=StatemachineRegionLite
+		////        )
+		//        ( ( execution=ModelOfExecution )?
+		////        & ( computation=ModelOfComputation )?
+		//        & ( interaction=ModelOfInteraction )?
+		//        )
 		public UnorderedGroup getUnorderedGroup_12() { return cUnorderedGroup_12; }
 		
-		//execution=ModelOfExecution?
+		//( execution=ModelOfExecution )?
 		public Assignment getExecutionAssignment_12_0() { return cExecutionAssignment_12_0; }
 		
 		//ModelOfExecution
 		public RuleCall getExecutionModelOfExecutionParserRuleCall_12_0_0() { return cExecutionModelOfExecutionParserRuleCall_12_0_0; }
 		
-		//interaction=ModelOfInteraction?
+		//( interaction=ModelOfInteraction )?
 		public Assignment getInteractionAssignment_12_1() { return cInteractionAssignment_12_1; }
 		
 		//ModelOfInteraction
@@ -6514,18 +8187,26 @@
 		private final Assignment cVertexAssignment_2_1 = (Assignment)cAlternatives_2.eContents().get(1);
 		private final RuleCall cVertexPseudostateParserRuleCall_2_1_0 = (RuleCall)cVertexAssignment_2_1.eContents().get(0);
 		
-		//StatemachineRegion fmlStmchn::Region:
-		//	{fmlStmchn::Region} ('@state:' | '@region:') (vertex+=State
-		//	| vertex+=Pseudostate)+;
+		//StatemachineRegion returns fmlStmchn::Region
+		//    : {fmlStmchn::Region}
+		//        ( '@state:' | '@region:' )
+		//        ( vertex+=State
+		//        | vertex+=Pseudostate
+		//        )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Region} ('@state:' | '@region:') (vertex+=State | vertex+=Pseudostate)+
+		//{fmlStmchn::Region}
+		//       ( '@state:' | '@region:' )
+		//       ( vertex+=State
+		//       | vertex+=Pseudostate
+		//       )+
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmchn::Region}
 		public Action getRegionAction_0() { return cRegionAction_0; }
 		
-		//('@state:' | '@region:')
+		//( '@state:' | '@region:' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'@state:'
@@ -6534,7 +8215,9 @@
 		//'@region:'
 		public Keyword getRegionKeyword_1_1() { return cRegionKeyword_1_1; }
 		
-		//(vertex+=State | vertex+=Pseudostate)+
+		//( vertex+=State
+		//| vertex+=Pseudostate
+		//)+
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
 		//vertex+=State
@@ -6568,15 +8251,22 @@
 		private final Assignment cVertexAssignment_6_1 = (Assignment)cAlternatives_6.eContents().get(1);
 		private final RuleCall cVertexPseudostateParserRuleCall_6_1_0 = (RuleCall)cVertexAssignment_6_1.eContents().get(0);
 		
-		//StatemachineNamedRegion fmlStmchn::Region:
-		//	{fmlStmchn::Region}
-		//	'@region(' ('id:' | 'name:')? name=ESIdentifier
-		//	unrestrictedName=UnrestrictedName? '):' (vertex+=State
-		//	| vertex+=Pseudostate)+;
+		//StatemachineNamedRegion returns fmlStmchn::Region
+		//    : {fmlStmchn::Region}
+		//        '@region(' ( 'id:' | 'name:' )?  name=ESIdentifier
+		//            ( unrestrictedName=UnrestrictedName )?  '):'
+		//        ( vertex+=State
+		//        | vertex+=Pseudostate
+		//        )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Region} '@region(' ('id:' | 'name:')? name=ESIdentifier unrestrictedName=UnrestrictedName? '):'
-		//(vertex+=State | vertex+=Pseudostate)+
+		//{fmlStmchn::Region}
+		//       '@region(' ( 'id:' | 'name:' )?  name=ESIdentifier
+		//           ( unrestrictedName=UnrestrictedName )?  '):'
+		//       ( vertex+=State
+		//       | vertex+=Pseudostate
+		//       )+
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmchn::Region}
@@ -6585,7 +8275,7 @@
 		//'@region('
 		public Keyword getRegionKeyword_1() { return cRegionKeyword_1; }
 		
-		//('id:' | 'name:')?
+		//( 'id:' | 'name:' )?
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
 		//'id:'
@@ -6600,7 +8290,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -6609,7 +8299,9 @@
 		//'):'
 		public Keyword getRightParenthesisColonKeyword_5() { return cRightParenthesisColonKeyword_5; }
 		
-		//(vertex+=State | vertex+=Pseudostate)+
+		//( vertex+=State
+		//| vertex+=Pseudostate
+		//)+
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
 		//vertex+=State
@@ -6632,11 +8324,12 @@
 		private final Assignment cVertexAssignment_1 = (Assignment)cAlternatives.eContents().get(1);
 		private final RuleCall cVertexPseudostateParserRuleCall_1_0 = (RuleCall)cVertexAssignment_1.eContents().get(0);
 		
-		//StatemachineRegionLite fmlStmchn::Region:
-		//	(vertex+=State | vertex+=Pseudostate)+;
+		//StatemachineRegionLite returns fmlStmchn::Region
+		//    : ( vertex+=State | vertex+=Pseudostate )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//(vertex+=State | vertex+=Pseudostate)+
+		//( vertex+=State | vertex+=Pseudostate )+
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//vertex+=State
@@ -6662,14 +8355,18 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// State Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//State fmlStmchn::State:
-		//	CompositeState
-		//	| StartState
-		//	| SimpleState
-		//	| FinalState;
+		//State returns fmlStmchn::State
+		//    : CompositeState
+		//    | StartState
+		//    | SimpleState
+		//    | FinalState
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//CompositeState | StartState | SimpleState | FinalState
+		//CompositeState
+		//   | StartState
+		//   | SimpleState
+		//   | FinalState
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//CompositeState
@@ -6732,25 +8429,49 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// CompositeState Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//CompositeState fmlStmchn::State:
-		//	{fmlStmchn::State} composite?='state' '<' 'moc:'? ('or' | orthogonal?='and') '>'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' ((region+=StatemachineRegion
-		//	| region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)?
-		//	& '@transition:' transition+=Transition*
-		//	| region+=StatemachineRegionLite*
-		//	& moe=moeCompositeStateRoutines?
-		//	& transition+=Transition*)
-		//	'}'
-		//	| ';');
+		//CompositeState returns fmlStmchn::State
+		//    : { fmlStmchn::State }
+		//        composite?='state' '<' ( 'moc:' )? ( 'or' | orthogonal?='and' ) '>'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '{'
+		//            ( ( ( region+=StatemachineRegion
+		//                | ( region+=StatemachineNamedRegion )+
+		//                )
+		//              & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//              & '@transition:' ( transition+=Transition )*
+		//              )
+		//            | ( ( region+=StatemachineRegionLite )*
+		//              & ( moe=moeCompositeStateRoutines  )?
+		//              & ( transition+=Transition )*
+		//              )
+		//            )
+		//          '}'
+		//        | ';'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::State} composite?='state' '<' 'moc:'? ('or' | orthogonal?='and') '>' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('{' ((region+=StatemachineRegion | region+=StatemachineNamedRegion+) & ('@moe:'
-		//moe=moeCompositeStateRoutines)? & '@transition:' transition+=Transition* | region+=StatemachineRegionLite* &
-		//moe=moeCompositeStateRoutines? & transition+=Transition*) '}' | ';')
+		//{ fmlStmchn::State }
+		//       composite?='state' '<' ( 'moc:' )? ( 'or' | orthogonal?='and' ) '>'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '{'
+		//           ( ( ( region+=StatemachineRegion
+		//               | ( region+=StatemachineNamedRegion )+
+		//               )
+		//             & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//             & '@transition:' ( transition+=Transition )*
+		//             )
+		//           | ( ( region+=StatemachineRegionLite )*
+		//             & ( moe=moeCompositeStateRoutines  )?
+		//             & ( transition+=Transition )*
+		//             )
+		//           )
+		//         '}'
+		//       | ';'
+		//       )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::State}
+		//{ fmlStmchn::State }
 		public Action getStateAction_0() { return cStateAction_0; }
 		
 		//composite?='state'
@@ -6762,10 +8483,10 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_2() { return cLessThanSignKeyword_2; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_3() { return cMocKeyword_3; }
 		
-		//('or' | orthogonal?='and')
+		//( 'or' | orthogonal?='and' )
 		public Alternatives getAlternatives_4() { return cAlternatives_4; }
 		
 		//'or'
@@ -6786,35 +8507,71 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_6_0() { return cNameESIdentifierParserRuleCall_6_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_7() { return cUnrestrictedNameAssignment_7; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_7_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_7_0; }
 		
-		//('{' ((region+=StatemachineRegion | region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)? &
-		//'@transition:' transition+=Transition* | region+=StatemachineRegionLite* & moe=moeCompositeStateRoutines? &
-		//transition+=Transition*) '}' | ';')
+		//( '{'
+		//    ( ( ( region+=StatemachineRegion
+		//        | ( region+=StatemachineNamedRegion )+
+		//        )
+		//      & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//      & '@transition:' ( transition+=Transition )*
+		//      )
+		//    | ( ( region+=StatemachineRegionLite )*
+		//      & ( moe=moeCompositeStateRoutines  )?
+		//      & ( transition+=Transition )*
+		//      )
+		//    )
+		//  '}'
+		//| ';'
+		//)
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//'{' ((region+=StatemachineRegion | region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)? &
-		//'@transition:' transition+=Transition* | region+=StatemachineRegionLite* & moe=moeCompositeStateRoutines? &
-		//transition+=Transition*) '}'
+		//'{'
+		//           ( ( ( region+=StatemachineRegion
+		//               | ( region+=StatemachineNamedRegion )+
+		//               )
+		//             & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//             & '@transition:' ( transition+=Transition )*
+		//             )
+		//           | ( ( region+=StatemachineRegionLite )*
+		//             & ( moe=moeCompositeStateRoutines  )?
+		//             & ( transition+=Transition )*
+		//             )
+		//           )
+		//         '}'
 		public Group getGroup_8_0() { return cGroup_8_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_8_0_0() { return cLeftCurlyBracketKeyword_8_0_0; }
 		
-		//((region+=StatemachineRegion | region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)? &
-		//'@transition:' transition+=Transition* | region+=StatemachineRegionLite* & moe=moeCompositeStateRoutines? &
-		//transition+=Transition*)
+		//( ( ( region+=StatemachineRegion
+		//    | ( region+=StatemachineNamedRegion )+
+		//    )
+		//  & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//  & '@transition:' ( transition+=Transition )*
+		//  )
+		//| ( ( region+=StatemachineRegionLite )*
+		//  & ( moe=moeCompositeStateRoutines  )?
+		//  & ( transition+=Transition )*
+		//  )
+		//)
 		public Alternatives getAlternatives_8_0_1() { return cAlternatives_8_0_1; }
 		
-		//(region+=StatemachineRegion | region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)? &
-		//'@transition:' transition+=Transition*
+		//( ( region+=StatemachineRegion
+		//               | ( region+=StatemachineNamedRegion )+
+		//               )
+		//             & ( '@moe:' moe=moeCompositeStateRoutines )?
+		//             & '@transition:' ( transition+=Transition )*
+		//             )
 		public UnorderedGroup getUnorderedGroup_8_0_1_0() { return cUnorderedGroup_8_0_1_0; }
 		
-		//(region+=StatemachineRegion | region+=StatemachineNamedRegion+)
+		//( region+=StatemachineRegion
+		//               | ( region+=StatemachineNamedRegion )+
+		//               )
 		public Alternatives getAlternatives_8_0_1_0_0() { return cAlternatives_8_0_1_0_0; }
 		
 		//region+=StatemachineRegion
@@ -6823,13 +8580,13 @@
 		//StatemachineRegion
 		public RuleCall getRegionStatemachineRegionParserRuleCall_8_0_1_0_0_0_0() { return cRegionStatemachineRegionParserRuleCall_8_0_1_0_0_0_0; }
 		
-		//region+=StatemachineNamedRegion+
+		//( region+=StatemachineNamedRegion )+
 		public Assignment getRegionAssignment_8_0_1_0_0_1() { return cRegionAssignment_8_0_1_0_0_1; }
 		
 		//StatemachineNamedRegion
 		public RuleCall getRegionStatemachineNamedRegionParserRuleCall_8_0_1_0_0_1_0() { return cRegionStatemachineNamedRegionParserRuleCall_8_0_1_0_0_1_0; }
 		
-		//('@moe:' moe=moeCompositeStateRoutines)?
+		//( '@moe:' moe=moeCompositeStateRoutines )?
 		public Group getGroup_8_0_1_0_1() { return cGroup_8_0_1_0_1; }
 		
 		//'@moe:'
@@ -6841,34 +8598,37 @@
 		//moeCompositeStateRoutines
 		public RuleCall getMoeMoeCompositeStateRoutinesParserRuleCall_8_0_1_0_1_1_0() { return cMoeMoeCompositeStateRoutinesParserRuleCall_8_0_1_0_1_1_0; }
 		
-		//'@transition:' transition+=Transition*
+		//'@transition:' ( transition+=Transition )*
 		public Group getGroup_8_0_1_0_2() { return cGroup_8_0_1_0_2; }
 		
 		//'@transition:'
 		public Keyword getTransitionKeyword_8_0_1_0_2_0() { return cTransitionKeyword_8_0_1_0_2_0; }
 		
-		//transition+=Transition*
+		//( transition+=Transition )*
 		public Assignment getTransitionAssignment_8_0_1_0_2_1() { return cTransitionAssignment_8_0_1_0_2_1; }
 		
 		//Transition
 		public RuleCall getTransitionTransitionParserRuleCall_8_0_1_0_2_1_0() { return cTransitionTransitionParserRuleCall_8_0_1_0_2_1_0; }
 		
-		//region+=StatemachineRegionLite* & moe=moeCompositeStateRoutines? & transition+=Transition*
+		//( ( region+=StatemachineRegionLite )*
+		//             & ( moe=moeCompositeStateRoutines  )?
+		//             & ( transition+=Transition )*
+		//             )
 		public UnorderedGroup getUnorderedGroup_8_0_1_1() { return cUnorderedGroup_8_0_1_1; }
 		
-		//region+=StatemachineRegionLite*
+		//( region+=StatemachineRegionLite )*
 		public Assignment getRegionAssignment_8_0_1_1_0() { return cRegionAssignment_8_0_1_1_0; }
 		
 		//StatemachineRegionLite
 		public RuleCall getRegionStatemachineRegionLiteParserRuleCall_8_0_1_1_0_0() { return cRegionStatemachineRegionLiteParserRuleCall_8_0_1_1_0_0; }
 		
-		//moe=moeCompositeStateRoutines?
+		//( moe=moeCompositeStateRoutines  )?
 		public Assignment getMoeAssignment_8_0_1_1_1() { return cMoeAssignment_8_0_1_1_1; }
 		
 		//moeCompositeStateRoutines
 		public RuleCall getMoeMoeCompositeStateRoutinesParserRuleCall_8_0_1_1_1_0() { return cMoeMoeCompositeStateRoutinesParserRuleCall_8_0_1_1_1_0; }
 		
-		//transition+=Transition*
+		//( transition+=Transition )*
 		public Assignment getTransitionAssignment_8_0_1_1_2() { return cTransitionAssignment_8_0_1_1_2; }
 		
 		//Transition
@@ -6924,34 +8684,50 @@
 		private final Assignment cRunRoutineAssignment_1_8_1 = (Assignment)cGroup_1_8.eContents().get(1);
 		private final RuleCall cRunRoutineMoeRoutineParserRuleCall_1_8_1_0 = (RuleCall)cRunRoutineAssignment_1_8_1.eContents().get(0);
 		
-		//moeCompositeStateRoutines fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)?
-		//	& ('@init' initRoutine=moeRoutine)?
-		//	& ('@final' finalRoutine=moeRoutine)?
-		//	& ('@enable' enableRoutine=moeRoutine)?
-		//	& ('@disable' disableRoutine=moeRoutine)?
-		//	& ('@concurrency' concurrencyRoutine=moeRoutine)?
-		//	& (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-		//	& ('@irun' irunRoutine=moeRoutine)?
-		//	& ('@run' runRoutine=moeRoutine)?);
+		//moeCompositeStateRoutines returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    ( ( '@create' createRoutine=moeRoutine )?
+		//    & ( '@init'   initRoutine=moeRoutine   )?
+		//    & ( '@final'  finalRoutine=moeRoutine  )?
+		//    & ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//    & ( ( '@schedule' | '@xschedule' ) scheduleRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		//    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)? & ('@init' initRoutine=moeRoutine)? & ('@final'
-		//finalRoutine=moeRoutine)? & ('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? &
-		//('@concurrency' concurrencyRoutine=moeRoutine)? & (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)? & ('@irun'
-		//irunRoutine=moeRoutine)? & ('@run' runRoutine=moeRoutine)?)
+		//{ fmlInfra::ModelOfExecution }
+		//   ( ( '@create' createRoutine=moeRoutine )?
+		//   & ( '@init'   initRoutine=moeRoutine   )?
+		//   & ( '@final'  finalRoutine=moeRoutine  )?
+		//   & ( '@enable'  enableRoutine=moeRoutine  )?
+		//   & ( '@disable' disableRoutine=moeRoutine )?
+		//   & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//   & ( ( '@schedule' | '@xschedule' ) scheduleRoutine=moeRoutine )?
+		//   & ( '@irun' irunRoutine=moeRoutine )?
+		//   & ( '@run'  runRoutine=moeRoutine  )?
+		//   )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//(('@create' createRoutine=moeRoutine)? & ('@init' initRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? &
-		//('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@concurrency'
-		//concurrencyRoutine=moeRoutine)? & (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)? & ('@irun'
-		//irunRoutine=moeRoutine)? & ('@run' runRoutine=moeRoutine)?)
+		//( ( '@create' createRoutine=moeRoutine )?
+		//& ( '@init'   initRoutine=moeRoutine   )?
+		//& ( '@final'  finalRoutine=moeRoutine  )?
+		//& ( '@enable'  enableRoutine=moeRoutine  )?
+		//& ( '@disable' disableRoutine=moeRoutine )?
+		//& ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//& ( ( '@schedule' | '@xschedule' ) scheduleRoutine=moeRoutine )?
+		//& ( '@irun' irunRoutine=moeRoutine )?
+		//& ( '@run'  runRoutine=moeRoutine  )?
+		//)
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//('@create' createRoutine=moeRoutine)?
+		//( '@create' createRoutine=moeRoutine )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@create'
@@ -6963,7 +8739,7 @@
 		//moeRoutine
 		public RuleCall getCreateRoutineMoeRoutineParserRuleCall_1_0_1_0() { return cCreateRoutineMoeRoutineParserRuleCall_1_0_1_0; }
 		
-		//('@init' initRoutine=moeRoutine)?
+		//( '@init'   initRoutine=moeRoutine   )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@init'
@@ -6975,7 +8751,7 @@
 		//moeRoutine
 		public RuleCall getInitRoutineMoeRoutineParserRuleCall_1_1_1_0() { return cInitRoutineMoeRoutineParserRuleCall_1_1_1_0; }
 		
-		//('@final' finalRoutine=moeRoutine)?
+		//( '@final'  finalRoutine=moeRoutine  )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'@final'
@@ -6987,7 +8763,7 @@
 		//moeRoutine
 		public RuleCall getFinalRoutineMoeRoutineParserRuleCall_1_2_1_0() { return cFinalRoutineMoeRoutineParserRuleCall_1_2_1_0; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine  )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'@enable'
@@ -6999,7 +8775,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_1_3_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_1_3_1_0; }
 		
-		//('@disable' disableRoutine=moeRoutine)?
+		//( '@disable' disableRoutine=moeRoutine )?
 		public Group getGroup_1_4() { return cGroup_1_4; }
 		
 		//'@disable'
@@ -7011,7 +8787,7 @@
 		//moeRoutine
 		public RuleCall getDisableRoutineMoeRoutineParserRuleCall_1_4_1_0() { return cDisableRoutineMoeRoutineParserRuleCall_1_4_1_0; }
 		
-		//('@concurrency' concurrencyRoutine=moeRoutine)?
+		//( '@concurrency' concurrencyRoutine=moeRoutine )?
 		public Group getGroup_1_5() { return cGroup_1_5; }
 		
 		//'@concurrency'
@@ -7023,10 +8799,10 @@
 		//moeRoutine
 		public RuleCall getConcurrencyRoutineMoeRoutineParserRuleCall_1_5_1_0() { return cConcurrencyRoutineMoeRoutineParserRuleCall_1_5_1_0; }
 		
-		//(('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
+		//( ( '@schedule' | '@xschedule' ) scheduleRoutine=moeRoutine )?
 		public Group getGroup_1_6() { return cGroup_1_6; }
 		
-		//('@schedule' | '@xschedule')
+		//( '@schedule' | '@xschedule' )
 		public Alternatives getAlternatives_1_6_0() { return cAlternatives_1_6_0; }
 		
 		//'@schedule'
@@ -7041,7 +8817,7 @@
 		//moeRoutine
 		public RuleCall getScheduleRoutineMoeRoutineParserRuleCall_1_6_1_0() { return cScheduleRoutineMoeRoutineParserRuleCall_1_6_1_0; }
 		
-		//('@irun' irunRoutine=moeRoutine)?
+		//( '@irun' irunRoutine=moeRoutine )?
 		public Group getGroup_1_7() { return cGroup_1_7; }
 		
 		//'@irun'
@@ -7053,7 +8829,7 @@
 		//moeRoutine
 		public RuleCall getIrunRoutineMoeRoutineParserRuleCall_1_7_1_0() { return cIrunRoutineMoeRoutineParserRuleCall_1_7_1_0; }
 		
-		//('@run' runRoutine=moeRoutine)?
+		//( '@run'  runRoutine=moeRoutine  )?
 		public Group getGroup_1_8() { return cGroup_1_8; }
 		
 		//'@run'
@@ -7094,19 +8870,45 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// SimpleState Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//SimpleState fmlStmchn::State:
-		//	{fmlStmchn::State} simple?='state' ('<' 'moc:'? 'simple' '>')?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-		//	& moe=moeSimpleStateRoutines?)
-		//	'}'
-		//	| ';');
+		//SimpleState returns fmlStmchn::State
+		//    : { fmlStmchn::State }
+		//    simple?='state' ( '<' ( 'moc:' )? 'simple' '>' )?
+		//    name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeSimpleStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::State} simple?='state' ('<' 'moc:'? 'simple' '>')? name=ESIdentifier unrestrictedName=UnrestrictedName? ('{'
-		//(transition+=Transition* & moe=moeSimpleStateRoutines?) '}' | ';')
+		// { fmlStmchn::State }
+		//    simple?='state' ( '<' ( 'moc:' )? 'simple' '>' )?
+		//    name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeSimpleStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::State}
+		//{ fmlStmchn::State }
 		public Action getStateAction_0() { return cStateAction_0; }
 		
 		//simple?='state'
@@ -7115,13 +8917,13 @@
 		//'state'
 		public Keyword getSimpleStateKeyword_1_0() { return cSimpleStateKeyword_1_0; }
 		
-		//('<' 'moc:'? 'simple' '>')?
+		//( '<' ( 'moc:' )? 'simple' '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_2_1() { return cMocKeyword_2_1; }
 		
 		//'simple'
@@ -7136,31 +8938,61 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('{' (transition+=Transition* & moe=moeSimpleStateRoutines?) '}' | ';')
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeSimpleStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
 		public Alternatives getAlternatives_5() { return cAlternatives_5; }
 		
-		//'{' (transition+=Transition* & moe=moeSimpleStateRoutines?) '}'
+		// '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeSimpleStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
 		public Group getGroup_5_0() { return cGroup_5_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5_0_0() { return cLeftCurlyBracketKeyword_5_0_0; }
 		
-		//(transition+=Transition* & moe=moeSimpleStateRoutines?)
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeSimpleStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+		////            )
+		//        )
 		public UnorderedGroup getUnorderedGroup_5_0_1() { return cUnorderedGroup_5_0_1; }
 		
-		//transition+=Transition*
+		//( transition+=Transition    )*
 		public Assignment getTransitionAssignment_5_0_1_0() { return cTransitionAssignment_5_0_1_0; }
 		
 		//Transition
 		public RuleCall getTransitionTransitionParserRuleCall_5_0_1_0_0() { return cTransitionTransitionParserRuleCall_5_0_1_0_0; }
 		
-		//moe=moeSimpleStateRoutines?
+		//( moe=moeSimpleStateRoutines )?
 		public Assignment getMoeAssignment_5_0_1_1() { return cMoeAssignment_5_0_1_1; }
 		
 		//moeSimpleStateRoutines
@@ -7190,27 +9022,35 @@
 		private final Assignment cIrunRoutineAssignment_1_2_1 = (Assignment)cGroup_1_2.eContents().get(1);
 		private final RuleCall cIrunRoutineMoeRoutineParserRuleCall_1_2_1_0 = (RuleCall)cIrunRoutineAssignment_1_2_1.eContents().get(0);
 		
-		//moeSimpleStateRoutines fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-		//	& ('@disable' disableRoutine=moeRoutine)?
-		//	& ('@irun' irunRoutine=moeRoutine)?
-		//	//	& ( '@run'  runRoutine=moeRoutine  )?
-		//);
+		//moeSimpleStateRoutines returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@irun'
-		//irunRoutine=moeRoutine)? //	& ( '@run'  runRoutine=moeRoutine  )?
-		//)
+		// { fmlInfra::ModelOfExecution }
+		//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//(('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@irun' irunRoutine=moeRoutine)? //	& ( '@run'  runRoutine=moeRoutine  )?
-		//)
+		//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine  )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@enable'
@@ -7222,7 +9062,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_1_0_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_1_0_1_0; }
 		
-		//('@disable' disableRoutine=moeRoutine)?
+		//( '@disable' disableRoutine=moeRoutine )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@disable'
@@ -7234,7 +9074,7 @@
 		//moeRoutine
 		public RuleCall getDisableRoutineMoeRoutineParserRuleCall_1_1_1_0() { return cDisableRoutineMoeRoutineParserRuleCall_1_1_1_0; }
 		
-		//('@irun' irunRoutine=moeRoutine)?
+		//( '@irun' irunRoutine=moeRoutine )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'@irun'
@@ -7278,25 +9118,57 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// StartState Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//StartState fmlStmchn::StartState:
-		//	{fmlStmchn::StartState} (simple?='state' '<' 'moc:'? 'start' '>' name=ESIdentifier
-		//	| simple?='#start') unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-		//	& moe=moeStartStateRoutines?)
-		//	'}'
-		//	| ';');
+		//StartState returns fmlStmchn::StartState
+		//    : { fmlStmchn::StartState }
+		//    ( simple?='state' '<' ( 'moc:' )? 'start' '>' name=ESIdentifier
+		//    | simple?='#start'
+		//    )
+		//    ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeStartStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::StartState} (simple?='state' '<' 'moc:'? 'start' '>' name=ESIdentifier | simple?='#start')
-		//unrestrictedName=UnrestrictedName? ('{' (transition+=Transition* & moe=moeStartStateRoutines?) '}' | ';')
+		// { fmlStmchn::StartState }
+		//    ( simple?='state' '<' ( 'moc:' )? 'start' '>' name=ESIdentifier
+		//    | simple?='#start'
+		//    )
+		//    ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeStartStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::StartState}
+		//{ fmlStmchn::StartState }
 		public Action getStartStateAction_0() { return cStartStateAction_0; }
 		
-		//(simple?='state' '<' 'moc:'? 'start' '>' name=ESIdentifier | simple?='#start')
+		//( simple?='state' '<' ( 'moc:' )? 'start' '>' name=ESIdentifier
+		//| simple?='#start'
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//simple?='state' '<' 'moc:'? 'start' '>' name=ESIdentifier
+		//simple?='state' '<' ( 'moc:' )? 'start' '>' name=ESIdentifier
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//simple?='state'
@@ -7308,7 +9180,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_1_0_1() { return cLessThanSignKeyword_1_0_1; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_1_0_2() { return cMocKeyword_1_0_2; }
 		
 		//'start'
@@ -7329,31 +9201,61 @@
 		//'#start'
 		public Keyword getSimpleStartKeyword_1_1_0() { return cSimpleStartKeyword_1_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_2_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_2_0; }
 		
-		//('{' (transition+=Transition* & moe=moeStartStateRoutines?) '}' | ';')
+		//    ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeStartStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
+		//    | ';'
+		//    )
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//'{' (transition+=Transition* & moe=moeStartStateRoutines?) '}'
+		// '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeStartStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+		////            )
+		//        )
+		//      '}'
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3_0_0() { return cLeftCurlyBracketKeyword_3_0_0; }
 		
-		//(transition+=Transition* & moe=moeStartStateRoutines?)
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moeStartStateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+		////            )
+		//        )
 		public UnorderedGroup getUnorderedGroup_3_0_1() { return cUnorderedGroup_3_0_1; }
 		
-		//transition+=Transition*
+		//( transition+=Transition    )*
 		public Assignment getTransitionAssignment_3_0_1_0() { return cTransitionAssignment_3_0_1_0; }
 		
 		//Transition
 		public RuleCall getTransitionTransitionParserRuleCall_3_0_1_0_0() { return cTransitionTransitionParserRuleCall_3_0_1_0_0; }
 		
-		//moe=moeStartStateRoutines?
+		//( moe=moeStartStateRoutines )?
 		public Assignment getMoeAssignment_3_0_1_1() { return cMoeAssignment_3_0_1_1; }
 		
 		//moeStartStateRoutines
@@ -7395,32 +9297,44 @@
 		private final Assignment cIrunRoutineAssignment_1_5_1 = (Assignment)cGroup_1_5.eContents().get(1);
 		private final RuleCall cIrunRoutineMoeRoutineParserRuleCall_1_5_1_0 = (RuleCall)cIrunRoutineAssignment_1_5_1.eContents().get(0);
 		
-		//moeStartStateRoutines fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)?
-		//	& ('@init' initRoutine=moeRoutine)?
-		//	& ('@final' finalRoutine=moeRoutine)?
-		//	& ('@enable' enableRoutine=moeRoutine)?
-		//	& ('@disable' disableRoutine=moeRoutine)?
-		//	& ('@irun' irunRoutine=moeRoutine)?
-		//	//	& ( '@run'  runRoutine=moeRoutine  )?
-		//);
+		//moeStartStateRoutines returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    ( ( '@create' createRoutine=moeRoutine )?
+		//    & ( '@init'   initRoutine=moeRoutine   )?
+		//    & ( '@final'  finalRoutine=moeRoutine  )?
+		//    & ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)? & ('@init' initRoutine=moeRoutine)? & ('@final'
-		//finalRoutine=moeRoutine)? & ('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@irun'
-		//irunRoutine=moeRoutine)? //	& ( '@run'  runRoutine=moeRoutine  )?
-		//)
+		// { fmlInfra::ModelOfExecution }
+		//    ( ( '@create' createRoutine=moeRoutine )?
+		//    & ( '@init'   initRoutine=moeRoutine   )?
+		//    & ( '@final'  finalRoutine=moeRoutine  )?
+		//    & ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//(('@create' createRoutine=moeRoutine)? & ('@init' initRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? &
-		//('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@irun' irunRoutine=moeRoutine)? //	& ( '@run'  runRoutine=moeRoutine  )?
-		//)
+		//    ( ( '@create' createRoutine=moeRoutine )?
+		//    & ( '@init'   initRoutine=moeRoutine   )?
+		//    & ( '@final'  finalRoutine=moeRoutine  )?
+		//    & ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		////    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//('@create' createRoutine=moeRoutine)?
+		//( '@create' createRoutine=moeRoutine )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@create'
@@ -7432,7 +9346,7 @@
 		//moeRoutine
 		public RuleCall getCreateRoutineMoeRoutineParserRuleCall_1_0_1_0() { return cCreateRoutineMoeRoutineParserRuleCall_1_0_1_0; }
 		
-		//('@init' initRoutine=moeRoutine)?
+		//( '@init'   initRoutine=moeRoutine   )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@init'
@@ -7444,7 +9358,7 @@
 		//moeRoutine
 		public RuleCall getInitRoutineMoeRoutineParserRuleCall_1_1_1_0() { return cInitRoutineMoeRoutineParserRuleCall_1_1_1_0; }
 		
-		//('@final' finalRoutine=moeRoutine)?
+		//( '@final'  finalRoutine=moeRoutine  )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'@final'
@@ -7456,7 +9370,7 @@
 		//moeRoutine
 		public RuleCall getFinalRoutineMoeRoutineParserRuleCall_1_2_1_0() { return cFinalRoutineMoeRoutineParserRuleCall_1_2_1_0; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine  )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'@enable'
@@ -7468,7 +9382,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_1_3_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_1_3_1_0; }
 		
-		//('@disable' disableRoutine=moeRoutine)?
+		//( '@disable' disableRoutine=moeRoutine )?
 		public Group getGroup_1_4() { return cGroup_1_4; }
 		
 		//'@disable'
@@ -7480,7 +9394,7 @@
 		//moeRoutine
 		public RuleCall getDisableRoutineMoeRoutineParserRuleCall_1_4_1_0() { return cDisableRoutineMoeRoutineParserRuleCall_1_4_1_0; }
 		
-		//('@irun' irunRoutine=moeRoutine)?
+		//( '@irun' irunRoutine=moeRoutine )?
 		public Group getGroup_1_5() { return cGroup_1_5; }
 		
 		//'@irun'
@@ -7523,24 +9437,41 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// FinalState Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//FinalState fmlStmchn::FinalState:
-		//	{fmlStmchn::FinalState} (simple?='state' '<' 'moc:'? 'final' '>' name=ESIdentifier
-		//	| simple?='#final') unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)?
-		//	'}'
-		//	| ';');
+		//FinalState returns fmlStmchn::FinalState
+		//    : { fmlStmchn::FinalState }
+		//    ( simple?='state' '<' ( 'moc:' )? 'final' '>' name=ESIdentifier
+		//    | simple?='#final'
+		//    )
+		//    ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'
+		//        ( ( '@moe:' )?  moe=moeFinalStateRoutines )?
+		//      '}'
+		//    | ';'
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::FinalState} (simple?='state' '<' 'moc:'? 'final' '>' name=ESIdentifier | simple?='#final')
-		//unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)? '}' | ';')
+		//{ fmlStmchn::FinalState }
+		//   ( simple?='state' '<' ( 'moc:' )? 'final' '>' name=ESIdentifier
+		//   | simple?='#final'
+		//   )
+		//   ( unrestrictedName=UnrestrictedName )?
+		//   ( '{'
+		//       ( ( '@moe:' )?  moe=moeFinalStateRoutines )?
+		//     '}'
+		//   | ';'
+		//   )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::FinalState}
+		//{ fmlStmchn::FinalState }
 		public Action getFinalStateAction_0() { return cFinalStateAction_0; }
 		
-		//(simple?='state' '<' 'moc:'? 'final' '>' name=ESIdentifier | simple?='#final')
+		//( simple?='state' '<' ( 'moc:' )? 'final' '>' name=ESIdentifier
+		//| simple?='#final'
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//simple?='state' '<' 'moc:'? 'final' '>' name=ESIdentifier
+		//simple?='state' '<' ( 'moc:' )? 'final' '>' name=ESIdentifier
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//simple?='state'
@@ -7552,7 +9483,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_1_0_1() { return cLessThanSignKeyword_1_0_1; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_1_0_2() { return cMocKeyword_1_0_2; }
 		
 		//'final'
@@ -7573,25 +9504,31 @@
 		//'#final'
 		public Keyword getSimpleFinalKeyword_1_1_0() { return cSimpleFinalKeyword_1_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_2_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_2_0; }
 		
-		//('{' ('@moe:'? moe=moeFinalStateRoutines)? '}' | ';')
+		//( '{'
+		//    ( ( '@moe:' )?  moe=moeFinalStateRoutines )?
+		//  '}'
+		//| ';'
+		//)
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//'{' ('@moe:'? moe=moeFinalStateRoutines)? '}'
+		//'{'
+		//       ( ( '@moe:' )?  moe=moeFinalStateRoutines )?
+		//     '}'
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3_0_0() { return cLeftCurlyBracketKeyword_3_0_0; }
 		
-		//('@moe:'? moe=moeFinalStateRoutines)?
+		//( ( '@moe:' )?  moe=moeFinalStateRoutines )?
 		public Group getGroup_3_0_1() { return cGroup_3_0_1; }
 		
-		//'@moe:'?
+		//( '@moe:' )?
 		public Keyword getMoeKeyword_3_0_1_0() { return cMoeKeyword_3_0_1_0; }
 		
 		//moe=moeFinalStateRoutines
@@ -7620,25 +9557,32 @@
 		private final Assignment cFinalRoutineAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
 		private final RuleCall cFinalRoutineMoeRoutineParserRuleCall_1_1_1_0 = (RuleCall)cFinalRoutineAssignment_1_1_1.eContents().get(0);
 		
-		//moeFinalStateRoutines fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-		//	& ('@final' finalRoutine=moeRoutine)?
-		//	//	& ( '@run'     runRoutine=moeRoutine    )?
-		//);
+		//moeFinalStateRoutines returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    ( ( '@enable'  enableRoutine=moeRoutine )?
+		//    & ( '@final'   finalRoutine=moeRoutine  )?
+		////    & ( '@run'     runRoutine=moeRoutine    )?
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? //	& ( '@run'     runRoutine=moeRoutine    )?
-		//)
+		// { fmlInfra::ModelOfExecution }
+		//    ( ( '@enable'  enableRoutine=moeRoutine )?
+		//    & ( '@final'   finalRoutine=moeRoutine  )?
+		////    & ( '@run'     runRoutine=moeRoutine    )?
+		//    )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//(('@enable' enableRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? //	& ( '@run'     runRoutine=moeRoutine    )?
-		//)
+		//    ( ( '@enable'  enableRoutine=moeRoutine )?
+		//    & ( '@final'   finalRoutine=moeRoutine  )?
+		////    & ( '@run'     runRoutine=moeRoutine    )?
+		//    )
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@enable'
@@ -7650,7 +9594,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_1_0_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_1_0_1_0; }
 		
-		//('@final' finalRoutine=moeRoutine)?
+		//( '@final'   finalRoutine=moeRoutine  )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@final'
@@ -7672,13 +9616,16 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Pseudostate Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Pseudostate fmlStmchn::Pseudostate:
-		//	PseudostateInitial
-		//	| EndingPseudostate
-		//	| OtherPseudostate;
+		//Pseudostate returns fmlStmchn::Pseudostate
+		//    : PseudostateInitial
+		//    | EndingPseudostate
+		//    | OtherPseudostate
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PseudostateInitial | EndingPseudostate | OtherPseudostate
+		//PseudostateInitial
+		//   | EndingPseudostate
+		//   | OtherPseudostate
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PseudostateInitial
@@ -7717,23 +9664,59 @@
 		private final Keyword cRightCurlyBracketKeyword_8_0_2 = (Keyword)cGroup_8_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_8_1 = (Keyword)cAlternatives_8.eContents().get(1);
 		
-		//OtherPseudostate fmlStmchn::Pseudostate:
-		//	{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateKind '>'
-		//	name=ESIdentifier
-		//	unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-		//	& moe=moePseudotateRoutines?)
-		//	'}'
-		//	| ';');
+		//OtherPseudostate returns fmlStmchn::Pseudostate
+		//    : { fmlStmchn::Pseudostate }
+		//        ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=PseudostateKind '>'
+		//        name=ESIdentifier
+		//        ( unrestrictedName=UnrestrictedName )?
+		//        ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moePseudotateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+		////            )
+		//        )
+		//          '}'
+		//        | ';'
+		//        )
+		////    | PseudostateInitial
+		////    | PseudostateTerminal
+		////    | PseudostateReturn
+		////    | PseudostateJunction
+		////    | PseudostateChoice
+		////    | PseudostateFork
+		////    | PseudostateJoin
+		////    | PseudostateDeepHistory
+		////    | PseudostateShallowHistory
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateKind '>' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('{' (transition+=Transition* & moe=moePseudotateRoutines?) '}' | ';')
+		// { fmlStmchn::Pseudostate }
+		//        ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=PseudostateKind '>'
+		//        name=ESIdentifier
+		//        ( unrestrictedName=UnrestrictedName )?
+		//        ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moePseudotateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+		////            )
+		//        )
+		//          '}'
+		//        | ';'
+		//        )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::Pseudostate}
+		//{ fmlStmchn::Pseudostate }
 		public Action getPseudostateAction_0() { return cPseudostateAction_0; }
 		
-		//('state' | 'pseudostate')
+		//( 'state' | 'pseudostate' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'state'
@@ -7745,7 +9728,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_2() { return cLessThanSignKeyword_2; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_3() { return cMocKeyword_3; }
 		
 		//kind=PseudostateKind
@@ -7763,31 +9746,61 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_6_0() { return cNameESIdentifierParserRuleCall_6_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_7() { return cUnrestrictedNameAssignment_7; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_7_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_7_0; }
 		
-		//('{' (transition+=Transition* & moe=moePseudotateRoutines?) '}' | ';')
+		//        ( '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moePseudotateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+		////            )
+		//        )
+		//          '}'
+		//        | ';'
+		//        )
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//'{' (transition+=Transition* & moe=moePseudotateRoutines?) '}'
+		// '{'
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moePseudotateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+		////            )
+		//        )
+		//          '}'
 		public Group getGroup_8_0() { return cGroup_8_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_8_0_0() { return cLeftCurlyBracketKeyword_8_0_0; }
 		
-		//(transition+=Transition* & moe=moePseudotateRoutines?)
+		//        (
+		//            ( ( transition+=Transition    )*
+		//            & ( moe=moePseudotateRoutines )?
+		//            )
+		////        |
+		////            ( ( '@transition:'  ( transition+=Transition )* )?
+		////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+		////            )
+		//        )
 		public UnorderedGroup getUnorderedGroup_8_0_1() { return cUnorderedGroup_8_0_1; }
 		
-		//transition+=Transition*
+		//( transition+=Transition    )*
 		public Assignment getTransitionAssignment_8_0_1_0() { return cTransitionAssignment_8_0_1_0; }
 		
 		//Transition
 		public RuleCall getTransitionTransitionParserRuleCall_8_0_1_0_0() { return cTransitionTransitionParserRuleCall_8_0_1_0_0; }
 		
-		//moe=moePseudotateRoutines?
+		//( moe=moePseudotateRoutines )?
 		public Assignment getMoeAssignment_8_0_1_1() { return cMoeAssignment_8_0_1_1; }
 		
 		//moePseudotateRoutines
@@ -7813,21 +9826,29 @@
 		private final Assignment cDisableRoutineAssignment_1_1_1 = (Assignment)cGroup_1_1.eContents().get(1);
 		private final RuleCall cDisableRoutineMoeRoutineParserRuleCall_1_1_1_0 = (RuleCall)cDisableRoutineAssignment_1_1_1.eContents().get(0);
 		
-		//moePseudotateRoutines fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-		//	& ('@disable' disableRoutine=moeRoutine)?);
+		//moePseudotateRoutines returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)?)
+		//{ fmlInfra::ModelOfExecution }
+		//   ( ( '@enable'  enableRoutine=moeRoutine  )?
+		//   & ( '@disable' disableRoutine=moeRoutine )?
+		//   )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
-		//(('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)?)
+		//( ( '@enable'  enableRoutine=moeRoutine  )?
+		//& ( '@disable' disableRoutine=moeRoutine )?
+		//)
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine  )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'@enable'
@@ -7839,7 +9860,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_1_0_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_1_0_1_0; }
 		
-		//('@disable' disableRoutine=moeRoutine)?
+		//( '@disable' disableRoutine=moeRoutine )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'@disable'
@@ -7886,30 +9907,48 @@
 		private final Keyword cRightCurlyBracketKeyword_3_0_2 = (Keyword)cGroup_3_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_3_1 = (Keyword)cAlternatives_3.eContents().get(1);
 		
-		//PseudostateInitial fmlStmchn::Pseudostate:
-		//	{fmlStmchn::Pseudostate} (('state' | 'pseudostate')
-		//	'<' 'moc:'? kind=PseudostateInitialKind '>'
-		//	name=(ESIdentifier | '#initial' | '#init') | name=('#initial' | '#init')) unrestrictedName=UnrestrictedName? ('{'
-		//	('@transition:'? transition+=Transition*)? '}'
-		//	| ';');
+		//PseudostateInitial returns fmlStmchn::Pseudostate
+		//    : { fmlStmchn::Pseudostate }
+		//    ( ( 'state' | 'pseudostate' )
+		//        '<' ( 'moc:' )? kind=PseudostateInitialKind '>'
+		//        name=(ESIdentifier | '#initial' | '#init' )
+		//    | name=( '#initial' | '#init' )
+		//    )
+		//    ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'  ( ( '@transition:' )?  ( transition+=Transition )* )?  '}'
+		//    | ';'
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Pseudostate} (('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateInitialKind '>' name=(ESIdentifier |
-		//'#initial' | '#init') | name=('#initial' | '#init')) unrestrictedName=UnrestrictedName? ('{' ('@transition:'?
-		//transition+=Transition*)? '}' | ';')
+		//{ fmlStmchn::Pseudostate }
+		//   ( ( 'state' | 'pseudostate' )
+		//       '<' ( 'moc:' )? kind=PseudostateInitialKind '>'
+		//       name=(ESIdentifier | '#initial' | '#init' )
+		//   | name=( '#initial' | '#init' )
+		//   )
+		//   ( unrestrictedName=UnrestrictedName )?
+		//   ( '{'  ( ( '@transition:' )?  ( transition+=Transition )* )?  '}'
+		//   | ';'
+		//   )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::Pseudostate}
+		//{ fmlStmchn::Pseudostate }
 		public Action getPseudostateAction_0() { return cPseudostateAction_0; }
 		
-		//(('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateInitialKind '>' name=(ESIdentifier | '#initial' | '#init') |
-		//name=('#initial' | '#init'))
+		//( ( 'state' | 'pseudostate' )
+		//    '<' ( 'moc:' )? kind=PseudostateInitialKind '>'
+		//    name=(ESIdentifier | '#initial' | '#init' )
+		//| name=( '#initial' | '#init' )
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateInitialKind '>' name=(ESIdentifier | '#initial' | '#init')
+		//( 'state' | 'pseudostate' )
+		//       '<' ( 'moc:' )? kind=PseudostateInitialKind '>'
+		//       name=(ESIdentifier | '#initial' | '#init' )
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
-		//('state' | 'pseudostate')
+		//( 'state' | 'pseudostate' )
 		public Alternatives getAlternatives_1_0_0() { return cAlternatives_1_0_0; }
 		
 		//'state'
@@ -7921,7 +9960,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_1_0_1() { return cLessThanSignKeyword_1_0_1; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_1_0_2() { return cMocKeyword_1_0_2; }
 		
 		//kind=PseudostateInitialKind
@@ -7933,10 +9972,10 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_1_0_4() { return cGreaterThanSignKeyword_1_0_4; }
 		
-		//name=(ESIdentifier | '#initial' | '#init')
+		//name=(ESIdentifier | '#initial' | '#init' )
 		public Assignment getNameAssignment_1_0_5() { return cNameAssignment_1_0_5; }
 		
-		//(ESIdentifier | '#initial' | '#init')
+		//(ESIdentifier | '#initial' | '#init' )
 		public Alternatives getNameAlternatives_1_0_5_0() { return cNameAlternatives_1_0_5_0; }
 		
 		//ESIdentifier
@@ -7948,10 +9987,10 @@
 		//'#init'
 		public Keyword getNameInitKeyword_1_0_5_0_2() { return cNameInitKeyword_1_0_5_0_2; }
 		
-		//name=('#initial' | '#init')
+		//name=( '#initial' | '#init' )
 		public Assignment getNameAssignment_1_1() { return cNameAssignment_1_1; }
 		
-		//('#initial' | '#init')
+		//( '#initial' | '#init' )
 		public Alternatives getNameAlternatives_1_1_0() { return cNameAlternatives_1_1_0; }
 		
 		//'#initial'
@@ -7960,28 +9999,30 @@
 		//'#init'
 		public Keyword getNameInitKeyword_1_1_0_1() { return cNameInitKeyword_1_1_0_1; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_2_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_2_0; }
 		
-		//('{' ('@transition:'? transition+=Transition*)? '}' | ';')
+		//( '{'  ( ( '@transition:' )?  ( transition+=Transition )* )?  '}'
+		//| ';'
+		//)
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//'{' ('@transition:'? transition+=Transition*)? '}'
+		//'{'  ( ( '@transition:' )?  ( transition+=Transition )* )?  '}'
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3_0_0() { return cLeftCurlyBracketKeyword_3_0_0; }
 		
-		//('@transition:'? transition+=Transition*)?
+		//( ( '@transition:' )?  ( transition+=Transition )* )?
 		public Group getGroup_3_0_1() { return cGroup_3_0_1; }
 		
-		//'@transition:'?
+		//( '@transition:' )?
 		public Keyword getTransitionKeyword_3_0_1_0() { return cTransitionKeyword_3_0_1_0; }
 		
-		//transition+=Transition*
+		//( transition+=Transition )*
 		public Assignment getTransitionAssignment_3_0_1_1() { return cTransitionAssignment_3_0_1_1; }
 		
 		//Transition
@@ -8019,20 +10060,28 @@
 		private final Keyword cRightCurlyBracketKeyword_8_0_2 = (Keyword)cGroup_8_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_8_1 = (Keyword)cAlternatives_8.eContents().get(1);
 		
-		//EndingPseudostate fmlStmchn::Pseudostate:
-		//	{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=EndingPseudostateKind '>'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)? '}'
-		//	| ';');
+		//EndingPseudostate returns fmlStmchn::Pseudostate
+		//    : { fmlStmchn::Pseudostate }
+		//    ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=EndingPseudostateKind '>'
+		//    name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//    ( '{'  ( ( '@moe:' )?  moe=moeFinalStateRoutines )?  '}'
+		//    | ';'
+		//    )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=EndingPseudostateKind '>' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)? '}' | ';')
+		//{ fmlStmchn::Pseudostate }
+		//   ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=EndingPseudostateKind '>'
+		//   name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//   ( '{'  ( ( '@moe:' )?  moe=moeFinalStateRoutines )?  '}'
+		//   | ';'
+		//   )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlStmchn::Pseudostate}
+		//{ fmlStmchn::Pseudostate }
 		public Action getPseudostateAction_0() { return cPseudostateAction_0; }
 		
-		//('state' | 'pseudostate')
+		//( 'state' | 'pseudostate' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'state'
@@ -8044,7 +10093,7 @@
 		//'<'
 		public Keyword getLessThanSignKeyword_2() { return cLessThanSignKeyword_2; }
 		
-		//'moc:'?
+		//( 'moc:' )?
 		public Keyword getMocKeyword_3() { return cMocKeyword_3; }
 		
 		//kind=EndingPseudostateKind
@@ -8062,25 +10111,27 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_6_0() { return cNameESIdentifierParserRuleCall_6_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_7() { return cUnrestrictedNameAssignment_7; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_7_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_7_0; }
 		
-		//('{' ('@moe:'? moe=moeFinalStateRoutines)? '}' | ';')
+		//( '{'  ( ( '@moe:' )?  moe=moeFinalStateRoutines )?  '}'
+		//| ';'
+		//)
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
-		//'{' ('@moe:'? moe=moeFinalStateRoutines)? '}'
+		//'{'  ( ( '@moe:' )?  moe=moeFinalStateRoutines )?  '}'
 		public Group getGroup_8_0() { return cGroup_8_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_8_0_0() { return cLeftCurlyBracketKeyword_8_0_0; }
 		
-		//('@moe:'? moe=moeFinalStateRoutines)?
+		//( ( '@moe:' )?  moe=moeFinalStateRoutines )?
 		public Group getGroup_8_0_1() { return cGroup_8_0_1; }
 		
-		//'@moe:'?
+		//( '@moe:' )?
 		public Keyword getMoeKeyword_8_0_1_0() { return cMoeKeyword_8_0_1_0; }
 		
 		//moe=moeFinalStateRoutines
@@ -8102,11 +10153,12 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Section Model Of Computation Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//ModelOfComputation fmlInfra::ModelOfComputation:
-		//	{fmlInfra::ModelOfComputation};
+		//ModelOfComputation returns fmlInfra::ModelOfComputation
+		//    : { fmlInfra::ModelOfComputation }
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfComputation}
+		//{ fmlInfra::ModelOfComputation }
 		public Action getModelOfComputationAction() { return cModelOfComputationAction; }
 	}
 	public class ModelOfExecutionElements extends AbstractParserRuleElementFinder {
@@ -8161,45 +10213,65 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Section Model Of Execution Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//ModelOfExecution fmlInfra::ModelOfExecution:
-		//	{fmlInfra::ModelOfExecution}
-		//	'@moe:'
-		//	routine+=Routine* (('@create' createRoutine=moeRoutine)?
-		//	& ('@init' initRoutine=moeRoutine)?
-		//	& ('@final' finalRoutine=moeRoutine)?
-		//	& ('@enable' enableRoutine=moeRoutine)?
-		//	& ('@disable' disableRoutine=moeRoutine)?
-		//	& ('@concurrency' concurrencyRoutine=moeRoutine)?
-		//	& (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-		//	& ('@irun' irunRoutine=moeRoutine)?
-		//	& ('@run' runRoutine=moeRoutine)?) routine+=Routine*;
+		//ModelOfExecution returns fmlInfra::ModelOfExecution
+		//    : { fmlInfra::ModelOfExecution }
+		//    '@moe:'
+		//    ( routine+=Routine )*
+		//    ( ( '@create'  createRoutine=moeRoutine )?
+		//    & ( '@init'    initRoutine=moeRoutine   )?
+		//    & ( '@final'   finalRoutine=moeRoutine  )?
+		//    & ( '@enable'  enableRoutine=moeRoutine  )?
+		//    & ( '@disable' disableRoutine=moeRoutine )?
+		//    & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//    & ( ( '@schedule' | '@xschedule' )    scheduleRoutine=moeRoutine )?
+		//    & ( '@irun' irunRoutine=moeRoutine )?
+		//    & ( '@run'  runRoutine=moeRoutine  )?
+		//    )
+		//    ( routine+=Routine )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfExecution} '@moe:' routine+=Routine* (('@create' createRoutine=moeRoutine)? & ('@init'
-		//initRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? & ('@enable' enableRoutine=moeRoutine)? & ('@disable'
-		//disableRoutine=moeRoutine)? & ('@concurrency' concurrencyRoutine=moeRoutine)? & (('@schedule' | '@xschedule')
-		//scheduleRoutine=moeRoutine)? & ('@irun' irunRoutine=moeRoutine)? & ('@run' runRoutine=moeRoutine)?) routine+=Routine*
+		//{ fmlInfra::ModelOfExecution }
+		//   '@moe:'
+		//   ( routine+=Routine )*
+		//   ( ( '@create'  createRoutine=moeRoutine )?
+		//   & ( '@init'    initRoutine=moeRoutine   )?
+		//   & ( '@final'   finalRoutine=moeRoutine  )?
+		//   & ( '@enable'  enableRoutine=moeRoutine  )?
+		//   & ( '@disable' disableRoutine=moeRoutine )?
+		//   & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//   & ( ( '@schedule' | '@xschedule' )    scheduleRoutine=moeRoutine )?
+		//   & ( '@irun' irunRoutine=moeRoutine )?
+		//   & ( '@run'  runRoutine=moeRoutine  )?
+		//   )
+		//   ( routine+=Routine )*
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfExecution}
+		//{ fmlInfra::ModelOfExecution }
 		public Action getModelOfExecutionAction_0() { return cModelOfExecutionAction_0; }
 		
 		//'@moe:'
 		public Keyword getMoeKeyword_1() { return cMoeKeyword_1; }
 		
-		//routine+=Routine*
+		//( routine+=Routine )*
 		public Assignment getRoutineAssignment_2() { return cRoutineAssignment_2; }
 		
 		//Routine
 		public RuleCall getRoutineRoutineParserRuleCall_2_0() { return cRoutineRoutineParserRuleCall_2_0; }
 		
-		//(('@create' createRoutine=moeRoutine)? & ('@init' initRoutine=moeRoutine)? & ('@final' finalRoutine=moeRoutine)? &
-		//('@enable' enableRoutine=moeRoutine)? & ('@disable' disableRoutine=moeRoutine)? & ('@concurrency'
-		//concurrencyRoutine=moeRoutine)? & (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)? & ('@irun'
-		//irunRoutine=moeRoutine)? & ('@run' runRoutine=moeRoutine)?)
+		//( ( '@create'  createRoutine=moeRoutine )?
+		//& ( '@init'    initRoutine=moeRoutine   )?
+		//& ( '@final'   finalRoutine=moeRoutine  )?
+		//& ( '@enable'  enableRoutine=moeRoutine  )?
+		//& ( '@disable' disableRoutine=moeRoutine )?
+		//& ( '@concurrency' concurrencyRoutine=moeRoutine )?
+		//& ( ( '@schedule' | '@xschedule' )    scheduleRoutine=moeRoutine )?
+		//& ( '@irun' irunRoutine=moeRoutine )?
+		//& ( '@run'  runRoutine=moeRoutine  )?
+		//)
 		public UnorderedGroup getUnorderedGroup_3() { return cUnorderedGroup_3; }
 		
-		//('@create' createRoutine=moeRoutine)?
+		//( '@create'  createRoutine=moeRoutine )?
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'@create'
@@ -8211,7 +10283,7 @@
 		//moeRoutine
 		public RuleCall getCreateRoutineMoeRoutineParserRuleCall_3_0_1_0() { return cCreateRoutineMoeRoutineParserRuleCall_3_0_1_0; }
 		
-		//('@init' initRoutine=moeRoutine)?
+		//( '@init'    initRoutine=moeRoutine   )?
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'@init'
@@ -8223,7 +10295,7 @@
 		//moeRoutine
 		public RuleCall getInitRoutineMoeRoutineParserRuleCall_3_1_1_0() { return cInitRoutineMoeRoutineParserRuleCall_3_1_1_0; }
 		
-		//('@final' finalRoutine=moeRoutine)?
+		//( '@final'   finalRoutine=moeRoutine  )?
 		public Group getGroup_3_2() { return cGroup_3_2; }
 		
 		//'@final'
@@ -8235,7 +10307,7 @@
 		//moeRoutine
 		public RuleCall getFinalRoutineMoeRoutineParserRuleCall_3_2_1_0() { return cFinalRoutineMoeRoutineParserRuleCall_3_2_1_0; }
 		
-		//('@enable' enableRoutine=moeRoutine)?
+		//( '@enable'  enableRoutine=moeRoutine  )?
 		public Group getGroup_3_3() { return cGroup_3_3; }
 		
 		//'@enable'
@@ -8247,7 +10319,7 @@
 		//moeRoutine
 		public RuleCall getEnableRoutineMoeRoutineParserRuleCall_3_3_1_0() { return cEnableRoutineMoeRoutineParserRuleCall_3_3_1_0; }
 		
-		//('@disable' disableRoutine=moeRoutine)?
+		//( '@disable' disableRoutine=moeRoutine )?
 		public Group getGroup_3_4() { return cGroup_3_4; }
 		
 		//'@disable'
@@ -8259,7 +10331,7 @@
 		//moeRoutine
 		public RuleCall getDisableRoutineMoeRoutineParserRuleCall_3_4_1_0() { return cDisableRoutineMoeRoutineParserRuleCall_3_4_1_0; }
 		
-		//('@concurrency' concurrencyRoutine=moeRoutine)?
+		//( '@concurrency' concurrencyRoutine=moeRoutine )?
 		public Group getGroup_3_5() { return cGroup_3_5; }
 		
 		//'@concurrency'
@@ -8271,10 +10343,10 @@
 		//moeRoutine
 		public RuleCall getConcurrencyRoutineMoeRoutineParserRuleCall_3_5_1_0() { return cConcurrencyRoutineMoeRoutineParserRuleCall_3_5_1_0; }
 		
-		//(('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
+		//( ( '@schedule' | '@xschedule' )    scheduleRoutine=moeRoutine )?
 		public Group getGroup_3_6() { return cGroup_3_6; }
 		
-		//('@schedule' | '@xschedule')
+		//( '@schedule' | '@xschedule' )
 		public Alternatives getAlternatives_3_6_0() { return cAlternatives_3_6_0; }
 		
 		//'@schedule'
@@ -8289,7 +10361,7 @@
 		//moeRoutine
 		public RuleCall getScheduleRoutineMoeRoutineParserRuleCall_3_6_1_0() { return cScheduleRoutineMoeRoutineParserRuleCall_3_6_1_0; }
 		
-		//('@irun' irunRoutine=moeRoutine)?
+		//( '@irun' irunRoutine=moeRoutine )?
 		public Group getGroup_3_7() { return cGroup_3_7; }
 		
 		//'@irun'
@@ -8301,7 +10373,7 @@
 		//moeRoutine
 		public RuleCall getIrunRoutineMoeRoutineParserRuleCall_3_7_1_0() { return cIrunRoutineMoeRoutineParserRuleCall_3_7_1_0; }
 		
-		//('@run' runRoutine=moeRoutine)?
+		//( '@run'  runRoutine=moeRoutine  )?
 		public Group getGroup_3_8() { return cGroup_3_8; }
 		
 		//'@run'
@@ -8313,7 +10385,7 @@
 		//moeRoutine
 		public RuleCall getRunRoutineMoeRoutineParserRuleCall_3_8_1_0() { return cRunRoutineMoeRoutineParserRuleCall_3_8_1_0; }
 		
-		//routine+=Routine*
+		//( routine+=Routine )*
 		public Assignment getRoutineAssignment_4() { return cRoutineAssignment_4; }
 		
 		//Routine
@@ -8341,26 +10413,38 @@
 		private final Assignment cBodyBlockAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_3_0 = (RuleCall)cBodyBlockAssignment_3.eContents().get(0);
 		
-		//moeRoutine fmlInfra::Routine:
-		//	{fmlInfra::Routine} ('(' parameterSet=FormalParameterSet? ')')? ('->' (resultSet=FormalParameterSet
-		//	| '(' resultSet=FormalParameterSet ')'))?
-		//	bodyBlock=BlockStatement;
+		//moeRoutine returns fmlInfra::Routine
+		//    : { fmlInfra::Routine }
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ('->'
+		//            (     resultSet=FormalParameterSet
+		//            | '(' resultSet=FormalParameterSet ')'
+		//            )
+		//        )?
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Routine} ('(' parameterSet=FormalParameterSet? ')')? ('->' (resultSet=FormalParameterSet | '('
-		//resultSet=FormalParameterSet ')'))? bodyBlock=BlockStatement
+		//{ fmlInfra::Routine }
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ('->'
+		//           (     resultSet=FormalParameterSet
+		//           | '(' resultSet=FormalParameterSet ')'
+		//           )
+		//       )?
+		//       bodyBlock=BlockStatement
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::Routine}
+		//{ fmlInfra::Routine }
 		public Action getRoutineAction_0() { return cRoutineAction_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_1_0() { return cLeftParenthesisKeyword_1_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_1_1() { return cParameterSetAssignment_1_1; }
 		
 		//FormalParameterSet
@@ -8369,13 +10453,19 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }
 		
-		//('->' (resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')'))?
+		//('->'
+		//    (     resultSet=FormalParameterSet
+		//    | '(' resultSet=FormalParameterSet ')'
+		//    )
+		//)?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'->'
 		public Keyword getHyphenMinusGreaterThanSignKeyword_2_0() { return cHyphenMinusGreaterThanSignKeyword_2_0; }
 		
-		//(resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')')
+		//(     resultSet=FormalParameterSet
+		//| '(' resultSet=FormalParameterSet ')'
+		//)
 		public Alternatives getAlternatives_2_1() { return cAlternatives_2_1; }
 		
 		//resultSet=FormalParameterSet
@@ -8436,33 +10526,45 @@
 		private final Assignment cBodyBlockAssignment_8 = (Assignment)cGroup.eContents().get(8);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_8_0 = (RuleCall)cBodyBlockAssignment_8.eContents().get(0);
 		
-		//Routine fmlInfra::Routine:
-		//	visibility=VisibilityKind? macro?='macro'? DesignDebugTrace*
-		//	'routine'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? ('-->'
-		//	(resultSet=FormalParameterSet
-		//	| '(' resultSet=FormalParameterSet ')'))?
-		//	bodyBlock=BlockStatement;
+		//Routine returns fmlInfra::Routine
+		//    : ( visibility=VisibilityKind )?  ( macro?='macro' )?  ( DesignDebugTrace )*
+		//        'routine'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ( '-->'
+		//            (     resultSet=FormalParameterSet
+		//            | '(' resultSet=FormalParameterSet ')'
+		//            )
+		//        )?
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//visibility=VisibilityKind? macro?='macro'? DesignDebugTrace* 'routine' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? ('-->' (resultSet=FormalParameterSet |
-		//'(' resultSet=FormalParameterSet ')'))? bodyBlock=BlockStatement
+		//( visibility=VisibilityKind )?  ( macro?='macro' )?  ( DesignDebugTrace )*
+		//       'routine'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ( '-->'
+		//           (     resultSet=FormalParameterSet
+		//           | '(' resultSet=FormalParameterSet ')'
+		//           )
+		//       )?
+		//       bodyBlock=BlockStatement
 		public Group getGroup() { return cGroup; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_0() { return cVisibilityAssignment_0; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_0_0() { return cVisibilityVisibilityKindEnumRuleCall_0_0; }
 		
-		//macro?='macro'?
+		//( macro?='macro' )?
 		public Assignment getMacroAssignment_1() { return cMacroAssignment_1; }
 		
 		//'macro'
 		public Keyword getMacroMacroKeyword_1_0() { return cMacroMacroKeyword_1_0; }
 		
-		//DesignDebugTrace*
+		//( DesignDebugTrace )*
 		public RuleCall getDesignDebugTraceParserRuleCall_2() { return cDesignDebugTraceParserRuleCall_2; }
 		
 		//'routine'
@@ -8474,19 +10576,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_5_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_6_0() { return cLeftParenthesisKeyword_6_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_6_1() { return cParameterSetAssignment_6_1; }
 		
 		//FormalParameterSet
@@ -8495,13 +10597,19 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_6_2() { return cRightParenthesisKeyword_6_2; }
 		
-		//('-->' (resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')'))?
+		//( '-->'
+		//    (     resultSet=FormalParameterSet
+		//    | '(' resultSet=FormalParameterSet ')'
+		//    )
+		//)?
 		public Group getGroup_7() { return cGroup_7; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_7_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_7_0; }
 		
-		//(resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')')
+		//(     resultSet=FormalParameterSet
+		//| '(' resultSet=FormalParameterSet ')'
+		//)
 		public Alternatives getAlternatives_7_1() { return cAlternatives_7_1; }
 		
 		//resultSet=FormalParameterSet
@@ -8545,22 +10653,31 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Section Model Of Interaction / Communication Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//ModelOfInteraction fmlInfra::ModelOfInteraction:
-		//	{fmlInfra::ModelOfInteraction}
-		//	'@com:' (routes+=Route
-		//	| connectors+=Connector)*;
+		//ModelOfInteraction returns fmlInfra::ModelOfInteraction
+		//    : { fmlInfra::ModelOfInteraction }
+		//        '@com:'
+		//        ( routes+=Route
+		//        | connectors+=Connector
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ModelOfInteraction} '@com:' (routes+=Route | connectors+=Connector)*
+		//{ fmlInfra::ModelOfInteraction }
+		//       '@com:'
+		//       ( routes+=Route
+		//       | connectors+=Connector
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ModelOfInteraction}
+		//{ fmlInfra::ModelOfInteraction }
 		public Action getModelOfInteractionAction_0() { return cModelOfInteractionAction_0; }
 		
 		//'@com:'
 		public Keyword getComKeyword_1() { return cComKeyword_1; }
 		
-		//(routes+=Route | connectors+=Connector)*
+		//( routes+=Route
+		//| connectors+=Connector
+		//)*
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
 		//routes+=Route
@@ -8604,19 +10721,31 @@
 		private final Keyword cRightSquareBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		private final Keyword cSemicolonKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
-		//Route fmlInfra::Route:
-		//	{fmlInfra::Route}
-		//	'route' '<' protocol=ComRouteProtocol '>' (name=ESIdentifier unrestrictedName=UnrestrictedName?)?
-		//	'[' ('*'
-		//	| signals+=[fmlInfra::Signal|ESUfid] (',' signals+=[fmlInfra::Signal|ESUfid])*)
-		//	']' ';';
+		//Route returns fmlInfra::Route
+		//    : { fmlInfra::Route }
+		//        'route' '<' protocol=ComRouteProtocol '>'
+		//        ( name=ESIdentifier ( unrestrictedName=UnrestrictedName )? )?
+		//        '['
+		//        ( '*'
+		//        | signals+=[fmlInfra::Signal|ESUfid]
+		//            ( ',' signals+=[fmlInfra::Signal|ESUfid] )*
+		//        )
+		//        ']' ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Route} 'route' '<' protocol=ComRouteProtocol '>' (name=ESIdentifier unrestrictedName=UnrestrictedName?)? '['
-		//('*' | signals+=[fmlInfra::Signal|ESUfid] (',' signals+=[fmlInfra::Signal|ESUfid])*) ']' ';'
+		//{ fmlInfra::Route }
+		//       'route' '<' protocol=ComRouteProtocol '>'
+		//       ( name=ESIdentifier ( unrestrictedName=UnrestrictedName )? )?
+		//       '['
+		//       ( '*'
+		//       | signals+=[fmlInfra::Signal|ESUfid]
+		//           ( ',' signals+=[fmlInfra::Signal|ESUfid] )*
+		//       )
+		//       ']' ';'
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::Route}
+		//{ fmlInfra::Route }
 		public Action getRouteAction_0() { return cRouteAction_0; }
 		
 		//'route'
@@ -8634,7 +10763,7 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_4() { return cGreaterThanSignKeyword_4; }
 		
-		//(name=ESIdentifier unrestrictedName=UnrestrictedName?)?
+		//( name=ESIdentifier ( unrestrictedName=UnrestrictedName )? )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//name=ESIdentifier
@@ -8643,7 +10772,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_5_0_0() { return cNameESIdentifierParserRuleCall_5_0_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5_1() { return cUnrestrictedNameAssignment_5_1; }
 		
 		//UnrestrictedName
@@ -8652,13 +10781,17 @@
 		//'['
 		public Keyword getLeftSquareBracketKeyword_6() { return cLeftSquareBracketKeyword_6; }
 		
-		//('*' | signals+=[fmlInfra::Signal|ESUfid] (',' signals+=[fmlInfra::Signal|ESUfid])*)
+		//( '*'
+		//| signals+=[fmlInfra::Signal|ESUfid]
+		//    ( ',' signals+=[fmlInfra::Signal|ESUfid] )*
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
 		//'*'
 		public Keyword getAsteriskKeyword_7_0() { return cAsteriskKeyword_7_0; }
 		
-		//signals+=[fmlInfra::Signal|ESUfid] (',' signals+=[fmlInfra::Signal|ESUfid])*
+		//signals+=[fmlInfra::Signal|ESUfid]
+		//           ( ',' signals+=[fmlInfra::Signal|ESUfid] )*
 		public Group getGroup_7_1() { return cGroup_7_1; }
 		
 		//signals+=[fmlInfra::Signal|ESUfid]
@@ -8670,7 +10803,7 @@
 		//ESUfid
 		public RuleCall getSignalsSignalESUfidParserRuleCall_7_1_0_0_1() { return cSignalsSignalESUfidParserRuleCall_7_1_0_0_1; }
 		
-		//(',' signals+=[fmlInfra::Signal|ESUfid])*
+		//( ',' signals+=[fmlInfra::Signal|ESUfid] )*
 		public Group getGroup_7_1_1() { return cGroup_7_1_1; }
 		
 		//','
@@ -8720,17 +10853,36 @@
 		private final Assignment cBufferAssignment_3 = (Assignment)cAlternatives.eContents().get(3);
 		private final RuleCall cBufferComBufferParserRuleCall_3_0 = (RuleCall)cBufferAssignment_3.eContents().get(0);
 		
-		//ComRouteProtocol fmlInfra::ComProtocol:
-		//	protocol=ComProtocolKind
-		//	| protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) '>')?
-		//	| inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer;
+		//ComRouteProtocol returns fmlInfra::ComProtocol
+		//    : protocol=ComProtocolKind
+		//    | protocol=BufferProtocolKind
+		//        ( ':'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            )
+		//        | '<'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            ) '>'
+		//        )?
+		//    | inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//protocol=ComProtocolKind | protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')? | inner_buffer=BufferContainerType | buffer=ComBuffer
+		//protocol=ComProtocolKind
+		//   | protocol=BufferProtocolKind
+		//       ( ':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
+		//       | '<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
+		//       )?
+		//   | inner_buffer=BufferContainerType
+		//   | buffer=ComBuffer
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//protocol=ComProtocolKind
@@ -8739,8 +10891,16 @@
 		//ComProtocolKind
 		public RuleCall getProtocolComProtocolKindEnumRuleCall_0_0() { return cProtocolComProtocolKindEnumRuleCall_0_0; }
 		
-		//protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')?
+		//protocol=BufferProtocolKind
+		//       ( ':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
+		//       | '<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
+		//       )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//protocol=BufferProtocolKind
@@ -8749,17 +10909,29 @@
 		//BufferProtocolKind
 		public RuleCall getProtocolBufferProtocolKindEnumRuleCall_1_0_0() { return cProtocolBufferProtocolKindEnumRuleCall_1_0_0; }
 		
-		//(':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType | buffer=ComBuffer)
-		//'>')?
+		//( ':'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    )
+		//| '<'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    ) '>'
+		//)?
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
-		//':' (inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
 		public Group getGroup_1_1_0() { return cGroup_1_1_0; }
 		
 		//':'
 		public Keyword getColonKeyword_1_1_0_0() { return cColonKeyword_1_1_0_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_1_1_0_1() { return cAlternatives_1_1_0_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -8774,13 +10946,18 @@
 		//ComBuffer
 		public RuleCall getBufferComBufferParserRuleCall_1_1_0_1_1_0() { return cBufferComBufferParserRuleCall_1_1_0_1_1_0; }
 		
-		//'<' (inner_buffer=BufferContainerType | buffer=ComBuffer) '>'
+		//'<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
 		public Group getGroup_1_1_1() { return cGroup_1_1_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_1_1_1_0() { return cLessThanSignKeyword_1_1_1_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_1_1_1_1() { return cAlternatives_1_1_1_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -8829,17 +11006,19 @@
 		private final RuleCall cConnectorEndConnectorEndParserRuleCall_7_0 = (RuleCall)cConnectorEndAssignment_7.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		
-		//Connector fmlInfra::Connector:
-		//	('connector' | 'connect') '<' protocol=ComProtocol '>'
-		//	name=ESIdentifier? unrestrictedName=UnrestrictedName?
-		//	'{' connectorEnd+=ConnectorEnd+ '}';
+		//Connector returns fmlInfra::Connector
+		//    : ( 'connector' | 'connect' ) '<' protocol=ComProtocol '>'
+		//        ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+		//        '{' (connectorEnd+=ConnectorEnd)+ '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//('connector' | 'connect') '<' protocol=ComProtocol '>' name=ESIdentifier? unrestrictedName=UnrestrictedName? '{'
-		//connectorEnd+=ConnectorEnd+ '}'
+		//( 'connector' | 'connect' ) '<' protocol=ComProtocol '>'
+		//       ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+		//       '{' (connectorEnd+=ConnectorEnd)+ '}'
 		public Group getGroup() { return cGroup; }
 		
-		//('connector' | 'connect')
+		//( 'connector' | 'connect' )
 		public Alternatives getAlternatives_0() { return cAlternatives_0; }
 		
 		//'connector'
@@ -8860,13 +11039,13 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_3() { return cGreaterThanSignKeyword_3; }
 		
-		//name=ESIdentifier?
+		//( name=ESIdentifier )?
 		public Assignment getNameAssignment_4() { return cNameAssignment_4; }
 		
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
@@ -8875,7 +11054,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//connectorEnd+=ConnectorEnd+
+		//(connectorEnd+=ConnectorEnd)+
 		public Assignment getConnectorEndAssignment_7() { return cConnectorEndAssignment_7; }
 		
 		//ConnectorEnd
@@ -8923,21 +11102,40 @@
 		private final Assignment cCastAssignment_5 = (Assignment)cAlternatives.eContents().get(5);
 		private final RuleCall cCastComCastKingEnumRuleCall_5_0 = (RuleCall)cCastAssignment_5.eContents().get(0);
 		
-		//ComProtocol fmlInfra::ComProtocol:
-		//	protocol=ComEnvRdvProtocolKind
-		//	| protocol=ComMultiRdvProtocolKind ('<' cast=ComCastKing '>')?
-		//	| protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) '>')?
-		//	| inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer
-		//	| cast=ComCastKing;
+		//ComProtocol returns fmlInfra::ComProtocol
+		//    : protocol=ComEnvRdvProtocolKind
+		//    | protocol=ComMultiRdvProtocolKind ( '<' cast=ComCastKing '>')?
+		//    | protocol=BufferProtocolKind
+		//        ( ':'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            )
+		//        | '<'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            ) '>'
+		//        )?
+		//    | inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    | cast=ComCastKing
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//protocol=ComEnvRdvProtocolKind | protocol=ComMultiRdvProtocolKind ('<' cast=ComCastKing '>')? |
-		//protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')? | inner_buffer=BufferContainerType | buffer=ComBuffer |
-		//cast=ComCastKing
+		//protocol=ComEnvRdvProtocolKind
+		//   | protocol=ComMultiRdvProtocolKind ( '<' cast=ComCastKing '>')?
+		//   | protocol=BufferProtocolKind
+		//       ( ':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
+		//       | '<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
+		//       )?
+		//   | inner_buffer=BufferContainerType
+		//   | buffer=ComBuffer
+		//   | cast=ComCastKing
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//protocol=ComEnvRdvProtocolKind
@@ -8946,7 +11144,7 @@
 		//ComEnvRdvProtocolKind
 		public RuleCall getProtocolComEnvRdvProtocolKindEnumRuleCall_0_0() { return cProtocolComEnvRdvProtocolKindEnumRuleCall_0_0; }
 		
-		//protocol=ComMultiRdvProtocolKind ('<' cast=ComCastKing '>')?
+		//protocol=ComMultiRdvProtocolKind ( '<' cast=ComCastKing '>')?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//protocol=ComMultiRdvProtocolKind
@@ -8955,7 +11153,7 @@
 		//ComMultiRdvProtocolKind
 		public RuleCall getProtocolComMultiRdvProtocolKindEnumRuleCall_1_0_0() { return cProtocolComMultiRdvProtocolKindEnumRuleCall_1_0_0; }
 		
-		//('<' cast=ComCastKing '>')?
+		//( '<' cast=ComCastKing '>')?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'<'
@@ -8970,8 +11168,16 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_1_1_2() { return cGreaterThanSignKeyword_1_1_2; }
 		
-		//protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')?
+		//protocol=BufferProtocolKind
+		//       ( ':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
+		//       | '<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
+		//       )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//protocol=BufferProtocolKind
@@ -8980,17 +11186,29 @@
 		//BufferProtocolKind
 		public RuleCall getProtocolBufferProtocolKindEnumRuleCall_2_0_0() { return cProtocolBufferProtocolKindEnumRuleCall_2_0_0; }
 		
-		//(':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType | buffer=ComBuffer)
-		//'>')?
+		//( ':'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    )
+		//| '<'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    ) '>'
+		//)?
 		public Alternatives getAlternatives_2_1() { return cAlternatives_2_1; }
 		
-		//':' (inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
 		public Group getGroup_2_1_0() { return cGroup_2_1_0; }
 		
 		//':'
 		public Keyword getColonKeyword_2_1_0_0() { return cColonKeyword_2_1_0_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_2_1_0_1() { return cAlternatives_2_1_0_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -9005,13 +11223,18 @@
 		//ComBuffer
 		public RuleCall getBufferComBufferParserRuleCall_2_1_0_1_1_0() { return cBufferComBufferParserRuleCall_2_1_0_1_1_0; }
 		
-		//'<' (inner_buffer=BufferContainerType | buffer=ComBuffer) '>'
+		//'<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
 		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_1_1_0() { return cLessThanSignKeyword_2_1_1_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_2_1_1_1() { return cAlternatives_2_1_1_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -9081,17 +11304,25 @@
 		private final Keyword cSemicolonKeyword_3_2_1_1 = (Keyword)cGroup_3_2_1.eContents().get(1);
 		private final Keyword cRightCurlyBracketKeyword_3_2_2 = (Keyword)cGroup_3_2.eContents().get(2);
 		
-		//ConnectorEnd fmlInfra::ConnectorEnd:
-		//	{fmlInfra::ConnectorEnd} direction=ChannelDirection ('<' protocol=ComPointProtocol '>')? (points+=ComPoint ';'
-		//	| '[' points+=ComPoint (',' points+=ComPoint)* ']' ';'
-		//	| '{' (points+=ComPoint ';')+ '}');
+		//ConnectorEnd returns fmlInfra::ConnectorEnd
+		//    : { fmlInfra::ConnectorEnd }
+		//        direction=ChannelDirection ( '<' protocol=ComPointProtocol '>' )?
+		//        ( points+=ComPoint ';'
+		//        | '[' points+=ComPoint ( ',' points+=ComPoint )* ']' ';'
+		//        | '{' ( points+=ComPoint ';' )+ '}'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ConnectorEnd} direction=ChannelDirection ('<' protocol=ComPointProtocol '>')? (points+=ComPoint ';' | '['
-		//points+=ComPoint (',' points+=ComPoint)* ']' ';' | '{' (points+=ComPoint ';')+ '}')
+		//{ fmlInfra::ConnectorEnd }
+		//       direction=ChannelDirection ( '<' protocol=ComPointProtocol '>' )?
+		//       ( points+=ComPoint ';'
+		//       | '[' points+=ComPoint ( ',' points+=ComPoint )* ']' ';'
+		//       | '{' ( points+=ComPoint ';' )+ '}'
+		//       )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ConnectorEnd}
+		//{ fmlInfra::ConnectorEnd }
 		public Action getConnectorEndAction_0() { return cConnectorEndAction_0; }
 		
 		//direction=ChannelDirection
@@ -9100,7 +11331,7 @@
 		//ChannelDirection
 		public RuleCall getDirectionChannelDirectionEnumRuleCall_1_0() { return cDirectionChannelDirectionEnumRuleCall_1_0; }
 		
-		//('<' protocol=ComPointProtocol '>')?
+		//( '<' protocol=ComPointProtocol '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -9115,7 +11346,10 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_2_2() { return cGreaterThanSignKeyword_2_2; }
 		
-		//(points+=ComPoint ';' | '[' points+=ComPoint (',' points+=ComPoint)* ']' ';' | '{' (points+=ComPoint ';')+ '}')
+		//( points+=ComPoint ';'
+		//| '[' points+=ComPoint ( ',' points+=ComPoint )* ']' ';'
+		//| '{' ( points+=ComPoint ';' )+ '}'
+		//)
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
 		//points+=ComPoint ';'
@@ -9130,7 +11364,7 @@
 		//';'
 		public Keyword getSemicolonKeyword_3_0_1() { return cSemicolonKeyword_3_0_1; }
 		
-		//'[' points+=ComPoint (',' points+=ComPoint)* ']' ';'
+		//'[' points+=ComPoint ( ',' points+=ComPoint )* ']' ';'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'['
@@ -9142,7 +11376,7 @@
 		//ComPoint
 		public RuleCall getPointsComPointParserRuleCall_3_1_1_0() { return cPointsComPointParserRuleCall_3_1_1_0; }
 		
-		//(',' points+=ComPoint)*
+		//( ',' points+=ComPoint )*
 		public Group getGroup_3_1_2() { return cGroup_3_1_2; }
 		
 		//','
@@ -9160,13 +11394,13 @@
 		//';'
 		public Keyword getSemicolonKeyword_3_1_4() { return cSemicolonKeyword_3_1_4; }
 		
-		//'{' (points+=ComPoint ';')+ '}'
+		//'{' ( points+=ComPoint ';' )+ '}'
 		public Group getGroup_3_2() { return cGroup_3_2; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3_2_0() { return cLeftCurlyBracketKeyword_3_2_0; }
 		
-		//(points+=ComPoint ';')+
+		//( points+=ComPoint ';' )+
 		public Group getGroup_3_2_1() { return cGroup_3_2_1; }
 		
 		//points+=ComPoint
@@ -9196,20 +11430,24 @@
 		private final CrossReference cPortPortCrossReference_2_0 = (CrossReference)cPortAssignment_2.eContents().get(0);
 		private final RuleCall cPortPortESIdentifierParserRuleCall_2_0_1 = (RuleCall)cPortPortCrossReference_2_0.eContents().get(1);
 		
-		//ComPoint fmlInfra::ComPoint:
-		//	{fmlInfra::ComPoint} (machine=[fmlCommon::NamedElement|ESIdentifier] ('->' | '.'))?
-		//	//		( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
-		//	port=[fmlInfra::Port|ESIdentifier];
+		//ComPoint returns fmlInfra::ComPoint
+		//    : { fmlInfra::ComPoint }
+		//        ( machine=[fmlCommon::NamedElement|ESIdentifier] ('->'| '.') )?
+		////        ( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
+		//        port=[fmlInfra::Port|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ComPoint} (machine=[fmlCommon::NamedElement|ESIdentifier] ('->' | '.'))? //		( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
-		//port=[fmlInfra::Port|ESIdentifier]
+		// { fmlInfra::ComPoint }
+		//        ( machine=[fmlCommon::NamedElement|ESIdentifier] ('->'| '.') )?
+		////        ( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
+		//        port=[fmlInfra::Port|ESIdentifier]
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::ComPoint}
+		//{ fmlInfra::ComPoint }
 		public Action getComPointAction_0() { return cComPointAction_0; }
 		
-		//(machine=[fmlCommon::NamedElement|ESIdentifier] ('->' | '.'))?
+		//( machine=[fmlCommon::NamedElement|ESIdentifier] ('->'| '.') )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//machine=[fmlCommon::NamedElement|ESIdentifier]
@@ -9221,7 +11459,7 @@
 		//ESIdentifier
 		public RuleCall getMachineNamedElementESIdentifierParserRuleCall_1_0_0_1() { return cMachineNamedElementESIdentifierParserRuleCall_1_0_0_1; }
 		
-		//('->' | '.')
+		//('->'| '.')
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//'->'
@@ -9230,8 +11468,8 @@
 		//'.'
 		public Keyword getFullStopKeyword_1_1_1() { return cFullStopKeyword_1_1_1; }
 		
-		////		( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
-		//port=[fmlInfra::Port|ESIdentifier]
+		////        ( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
+		//        port=[fmlInfra::Port|ESIdentifier]
 		public Assignment getPortAssignment_2() { return cPortAssignment_2; }
 		
 		//[fmlInfra::Port|ESIdentifier]
@@ -9267,22 +11505,48 @@
 		private final Assignment cBufferRefAssignment_2 = (Assignment)cAlternatives.eContents().get(2);
 		private final RuleCall cBufferRefComBufferRefParserRuleCall_2_0 = (RuleCall)cBufferRefAssignment_2.eContents().get(0);
 		
-		//ComPointProtocol fmlInfra::ComProtocol:
-		//	protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-		//	| buffer=ComBuffer) '>')?
-		//	| inner_buffer=BufferContainerType
-		//	//	| buffer=ComBuffer
-		//	| bufferRef=ComBufferRef;
+		//ComPointProtocol returns fmlInfra::ComProtocol
+		//    : protocol=BufferProtocolKind
+		//        ( ':'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            )
+		//        | '<'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            ) '>'
+		//        )?
+		//    | inner_buffer=BufferContainerType
+		////    | buffer=ComBuffer
+		//    | bufferRef=ComBufferRef
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')? | inner_buffer=BufferContainerType //	| buffer=ComBuffer
-		//| bufferRef=ComBufferRef
+		// protocol=BufferProtocolKind
+		//        ( ':'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            )
+		//        | '<'
+		//            ( inner_buffer=BufferContainerType
+		//            | buffer=ComBuffer
+		//            ) '>'
+		//        )?
+		//    | inner_buffer=BufferContainerType
+		////    | buffer=ComBuffer
+		//    | bufferRef=ComBufferRef
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<'
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer) '>')?
+		//protocol=BufferProtocolKind
+		//       ( ':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
+		//       | '<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
+		//       )?
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//protocol=BufferProtocolKind
@@ -9291,17 +11555,29 @@
 		//BufferProtocolKind
 		public RuleCall getProtocolBufferProtocolKindEnumRuleCall_0_0_0() { return cProtocolBufferProtocolKindEnumRuleCall_0_0_0; }
 		
-		//(':' (inner_buffer=BufferContainerType | buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType | buffer=ComBuffer)
-		//'>')?
+		//( ':'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    )
+		//| '<'
+		//    ( inner_buffer=BufferContainerType
+		//    | buffer=ComBuffer
+		//    ) '>'
+		//)?
 		public Alternatives getAlternatives_0_1() { return cAlternatives_0_1; }
 		
-		//':' (inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//':'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           )
 		public Group getGroup_0_1_0() { return cGroup_0_1_0; }
 		
 		//':'
 		public Keyword getColonKeyword_0_1_0_0() { return cColonKeyword_0_1_0_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_0_1_0_1() { return cAlternatives_0_1_0_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -9316,13 +11592,18 @@
 		//ComBuffer
 		public RuleCall getBufferComBufferParserRuleCall_0_1_0_1_1_0() { return cBufferComBufferParserRuleCall_0_1_0_1_1_0; }
 		
-		//'<' (inner_buffer=BufferContainerType | buffer=ComBuffer) '>'
+		//'<'
+		//           ( inner_buffer=BufferContainerType
+		//           | buffer=ComBuffer
+		//           ) '>'
 		public Group getGroup_0_1_1() { return cGroup_0_1_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_0_1_1_0() { return cLessThanSignKeyword_0_1_1_0; }
 		
-		//(inner_buffer=BufferContainerType | buffer=ComBuffer)
+		//( inner_buffer=BufferContainerType
+		//| buffer=ComBuffer
+		//)
 		public Alternatives getAlternatives_0_1_1_1() { return cAlternatives_0_1_1_1; }
 		
 		//inner_buffer=BufferContainerType
@@ -9366,19 +11647,26 @@
 		private final CrossReference cElementBufferCrossReference_1_0 = (CrossReference)cElementAssignment_1.eContents().get(0);
 		private final RuleCall cElementBufferESIdentifierParserRuleCall_1_0_1 = (RuleCall)cElementBufferCrossReference_1_0.eContents().get(1);
 		
-		//ComBuffer fmlExpr::ValueElementSpecification:
-		//	(parent=LiteralPureReferenceMachine
-		//	// ( '.' | '->' ) element
-		//	kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind))?
-		//	element=[fmlInfra::Buffer|ESIdentifier];
+		//ComBuffer returns fmlExpr::ValueElementSpecification
+		//    : ( parent=LiteralPureReferenceMachine
+		//        // ( '.' | '->' ) element
+		//        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//      )?
+		//      element=[fmlInfra::Buffer|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//(parent=LiteralPureReferenceMachine // ( '.' | '->' ) element
-		//kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind))? element=[fmlInfra::Buffer|ESIdentifier]
+		//( parent=LiteralPureReferenceMachine
+		//       // ( '.' | '->' ) element
+		//       kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//     )?
+		//     element=[fmlInfra::Buffer|ESIdentifier]
 		public Group getGroup() { return cGroup; }
 		
-		//(parent=LiteralPureReferenceMachine // ( '.' | '->' ) element
-		//kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind))?
+		//( parent=LiteralPureReferenceMachine
+		//       // ( '.' | '->' ) element
+		//       kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//     )?
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//parent=LiteralPureReferenceMachine
@@ -9388,10 +11676,10 @@
 		public RuleCall getParentLiteralPureReferenceMachineParserRuleCall_0_0_0() { return cParentLiteralPureReferenceMachineParserRuleCall_0_0_0; }
 		
 		//// ( '.' | '->' ) element
-		//kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind)
+		//kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
 		public Assignment getKindAssignment_0_1() { return cKindAssignment_0_1; }
 		
-		//(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind)
+		//( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
 		public Alternatives getKindAlternatives_0_1_0() { return cKindAlternatives_0_1_0; }
 		
 		//ValueDotFieldExpressionKind
@@ -9422,19 +11710,22 @@
 		private final Assignment cElementAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cElementBufferReferenceElementParserRuleCall_2_0 = (RuleCall)cElementAssignment_2.eContents().get(0);
 		
-		//ComBufferRef fmlExpr::LiteralReferenceSpecification:
-		//	{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-		//	element=BufferReferenceElement;
+		//ComBufferRef returns fmlExpr::LiteralReferenceSpecification
+		//    : { fmlExpr::LiteralReferenceSpecification }
+		//        ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+		//        element=BufferReferenceElement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-		//element=BufferReferenceElement
+		//{ fmlExpr::LiteralReferenceSpecification }
+		//       ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+		//       element=BufferReferenceElement
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlExpr::LiteralReferenceSpecification}
+		//{ fmlExpr::LiteralReferenceSpecification }
 		public Action getLiteralReferenceSpecificationAction_0() { return cLiteralReferenceSpecificationAction_0; }
 		
-		//(parent+=LiteralReferenceExpression ('.' | '->'))*
+		//( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//parent+=LiteralReferenceExpression
@@ -9443,7 +11734,7 @@
 		//LiteralReferenceExpression
 		public RuleCall getParentLiteralReferenceExpressionParserRuleCall_1_0_0() { return cParentLiteralReferenceExpressionParserRuleCall_1_0_0; }
 		
-		//('.' | '->')
+		//( '.'  |  '->' )
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//'.'
@@ -9466,11 +11757,14 @@
 		private final CrossReference cElementBufferCrossReference_1_0 = (CrossReference)cElementAssignment_1.eContents().get(0);
 		private final RuleCall cElementBufferESIdentifierParserRuleCall_1_0_1 = (RuleCall)cElementBufferCrossReference_1_0.eContents().get(1);
 		
-		//BufferReferenceElement fmlExpr::LiteralReferenceElement:
-		//	{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Buffer|ESIdentifier];
+		//BufferReferenceElement returns fmlExpr::LiteralReferenceElement
+		//    : {fmlExpr::LiteralReferenceElement}
+		//        element=[fmlInfra::Buffer|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Buffer|ESIdentifier]
+		//{fmlExpr::LiteralReferenceElement}
+		//       element=[fmlInfra::Buffer|ESIdentifier]
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralReferenceElement}
@@ -9495,14 +11789,20 @@
 		private final RuleCall cElementMachineESIdentifierParserRuleCall_0_1_0_1 = (RuleCall)cElementMachineCrossReference_0_1_0.eContents().get(1);
 		private final RuleCall cLiteralReferenceMachineContextParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//LiteralPureReferenceMachine fmlExpr::LiteralReferenceExpression:
-		//	{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Machine|ESIdentifier] | LiteralReferenceMachineContext;
+		//LiteralPureReferenceMachine returns fmlExpr::LiteralReferenceExpression
+		//    : {fmlExpr::LiteralReferenceElement}
+		//        element=[fmlInfra::Machine|ESIdentifier]
+		//    | LiteralReferenceMachineContext
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Machine|ESIdentifier] | LiteralReferenceMachineContext
+		//{fmlExpr::LiteralReferenceElement}
+		//       element=[fmlInfra::Machine|ESIdentifier]
+		//   | LiteralReferenceMachineContext
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Machine|ESIdentifier]
+		//{fmlExpr::LiteralReferenceElement}
+		//       element=[fmlInfra::Machine|ESIdentifier]
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{fmlExpr::LiteralReferenceElement}
@@ -9535,23 +11835,29 @@
 		//// Sections Declarations Data Rules
 		//////////////////////////////////////////////////////////////////////////////////
 		////TypeDefinition returns fmlType::DataType
-		////	: typedef?='type' name=ESIdentifier
-		////		( support=DataTypeReference ';'
-		////		| support=StructuredDataType
-		////		)
-		////	;
-		//TypeDefinition fmlType::DataType:
-		//	EnumerationTypeDefinition
-		//	| StructureTypeDefinition
-		//	| UnionTypeDefinition
-		//	| ChoiceTypeDefinition
-		//	| IntervalTypeDefinition
-		//	| CollectionTypeDefinition
-		//	| OtherDataTypeDefinition;
+		////    : typedef?='type' name=ESIdentifier
+		////        ( support=DataTypeReference ';'
+		////        | support=StructuredDataType
+		////        )
+		////    ;
+		//TypeDefinition returns fmlType::DataType
+		//    : EnumerationTypeDefinition
+		//    | StructureTypeDefinition
+		//    | UnionTypeDefinition
+		//    | ChoiceTypeDefinition
+		//    | IntervalTypeDefinition
+		//    | CollectionTypeDefinition
+		//    | OtherDataTypeDefinition
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//EnumerationTypeDefinition | StructureTypeDefinition | UnionTypeDefinition | ChoiceTypeDefinition |
-		//IntervalTypeDefinition | CollectionTypeDefinition | OtherDataTypeDefinition
+		//EnumerationTypeDefinition
+		//   | StructureTypeDefinition
+		//   | UnionTypeDefinition
+		//   | ChoiceTypeDefinition
+		//   | IntervalTypeDefinition
+		//   | CollectionTypeDefinition
+		//   | OtherDataTypeDefinition
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//EnumerationTypeDefinition
@@ -9582,28 +11888,30 @@
 		private final RuleCall cLiteralReferenceElementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
 		////TypeDefinitionImpl returns fmlType::DataTypeReference
-		////	: name=ESIdentifier
-		////		( support=DataTypeReference ';'
-		////		| support=StructuredDataType
-		////		)
-		////	;
+		////    : name=ESIdentifier
+		////        ( support=DataTypeReference ';'
+		////        | support=StructuredDataType
+		////        )
+		////    ;
 		////TypeDefinitionImpl returns fmlType::DataType
-		////	: EnumerationTypeDefinitionImpl
-		////	| StructureTypeDefinitionImpl
-		////	| UnionTypeDefinitionImpl
-		////	| ChoiceTypeDefinitionImpl
+		////    : EnumerationTypeDefinitionImpl
+		////    | StructureTypeDefinitionImpl
+		////    | UnionTypeDefinitionImpl
+		////    | ChoiceTypeDefinitionImpl
 		////
-		////	| IntervalTypeDefinitionImpl
-		////	| CollectionTypeDefinitionImpl
+		////    | IntervalTypeDefinitionImpl
+		////    | CollectionTypeDefinitionImpl
 		////
-		////	| OtherDataTypeDefinitionImpl
-		////	;
-		//DataTypeMultiplicity fmlExpr::Expression:
-		//	LiteralIntegerExpression
-		//	| LiteralReferenceElement;
+		////    | OtherDataTypeDefinitionImpl
+		////    ;
+		//DataTypeMultiplicity returns fmlExpr::Expression
+		//    : LiteralIntegerExpression
+		//    | LiteralReferenceElement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralIntegerExpression | LiteralReferenceElement
+		//LiteralIntegerExpression
+		//   | LiteralReferenceElement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralIntegerExpression
@@ -9634,23 +11942,38 @@
 		private final RuleCall cMultiplicityDataTypeMultiplicityParserRuleCall_1_2_1_0 = (RuleCall)cMultiplicityAssignment_1_2_1.eContents().get(0);
 		private final Keyword cRightSquareBracketKeyword_1_2_2 = (Keyword)cGroup_1_2.eContents().get(2);
 		
-		//DataTypeReference fmlType::DataType:
-		//	SimpleDataType ({fmlType::DataTypeReference.support=current}
-		//	'[' multiplicity=DataTypeMultiplicity ']')?
-		//	| {fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?;
+		//DataTypeReference returns fmlType::DataType
+		//    : SimpleDataType
+		//        ( {fmlType::DataTypeReference.support=current}
+		//            '[' multiplicity=DataTypeMultiplicity ']'
+		//        )?
+		//    | {fmlType::DataTypeReference}
+		//        typeref=[fmlType::DataType|ESUfid]
+		//        ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//SimpleDataType ({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')? |
-		//{fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?
+		//SimpleDataType
+		//       ( {fmlType::DataTypeReference.support=current}
+		//           '[' multiplicity=DataTypeMultiplicity ']'
+		//       )?
+		//   | {fmlType::DataTypeReference}
+		//       typeref=[fmlType::DataType|ESUfid]
+		//       ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//SimpleDataType ({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')?
+		//SimpleDataType
+		//       ( {fmlType::DataTypeReference.support=current}
+		//           '[' multiplicity=DataTypeMultiplicity ']'
+		//       )?
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//SimpleDataType
 		public RuleCall getSimpleDataTypeParserRuleCall_0_0() { return cSimpleDataTypeParserRuleCall_0_0; }
 		
-		//({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')?
+		//( {fmlType::DataTypeReference.support=current}
+		//    '[' multiplicity=DataTypeMultiplicity ']'
+		//)?
 		public Group getGroup_0_1() { return cGroup_0_1; }
 		
 		//{fmlType::DataTypeReference.support=current}
@@ -9668,7 +11991,9 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_0_1_3() { return cRightSquareBracketKeyword_0_1_3; }
 		
-		//{fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?
+		//{fmlType::DataTypeReference}
+		//       typeref=[fmlType::DataType|ESUfid]
+		//       ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlType::DataTypeReference}
@@ -9683,7 +12008,7 @@
 		//ESUfid
 		public RuleCall getTyperefDataTypeESUfidParserRuleCall_1_1_0_1() { return cTyperefDataTypeESUfidParserRuleCall_1_1_0_1; }
 		
-		//('[' multiplicity=DataTypeMultiplicity ']')?
+		//( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'['
@@ -9733,24 +12058,32 @@
 		private final RuleCall cConstraintTypeConstraintRoutineParserRuleCall_6_0_0 = (RuleCall)cConstraintAssignment_6_0.eContents().get(0);
 		private final Keyword cSemicolonKeyword_6_1 = (Keyword)cAlternatives_6.eContents().get(1);
 		
-		//OtherDataTypeDefinition fmlType::DataTypeReference:
-		//	{fmlType::DataTypeReference} visibility=VisibilityKind? typedef?='type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? (support=PrimitiveType ('[' multiplicity=DataTypeMultiplicity
-		//	']')?
-		//	| typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?) (constraint=TypeConstraintRoutine |
-		//	';');
+		//OtherDataTypeDefinition returns fmlType::DataTypeReference
+		//    : {fmlType::DataTypeReference}
+		//        ( visibility=VisibilityKind )?  typedef?='type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( support=PrimitiveType
+		//            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//        | typeref=[fmlType::DataType|ESUfid]
+		//            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//        )  ( constraint=TypeConstraintRoutine | ';' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::DataTypeReference} visibility=VisibilityKind? typedef?='type' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? (support=PrimitiveType ('[' multiplicity=DataTypeMultiplicity ']')? |
-		//typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?) (constraint=TypeConstraintRoutine |
-		//';')
+		//{fmlType::DataTypeReference}
+		//       ( visibility=VisibilityKind )?  typedef?='type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( support=PrimitiveType
+		//           ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//       | typeref=[fmlType::DataType|ESUfid]
+		//           ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//       )  ( constraint=TypeConstraintRoutine | ';' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::DataTypeReference}
 		public Action getDataTypeReferenceAction_0() { return cDataTypeReferenceAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -9768,17 +12101,21 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//(support=PrimitiveType ('[' multiplicity=DataTypeMultiplicity ']')? | typeref=[fmlType::DataType|ESUfid] ('['
-		//multiplicity=DataTypeMultiplicity ']')?)
+		//( support=PrimitiveType
+		//    ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//| typeref=[fmlType::DataType|ESUfid]
+		//    ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//)
 		public Alternatives getAlternatives_5() { return cAlternatives_5; }
 		
-		//support=PrimitiveType ('[' multiplicity=DataTypeMultiplicity ']')?
+		//support=PrimitiveType
+		//           ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_5_0() { return cGroup_5_0; }
 		
 		//support=PrimitiveType
@@ -9787,7 +12124,7 @@
 		//PrimitiveType
 		public RuleCall getSupportPrimitiveTypeParserRuleCall_5_0_0_0() { return cSupportPrimitiveTypeParserRuleCall_5_0_0_0; }
 		
-		//('[' multiplicity=DataTypeMultiplicity ']')?
+		//( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_5_0_1() { return cGroup_5_0_1; }
 		
 		//'['
@@ -9802,7 +12139,8 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_5_0_1_2() { return cRightSquareBracketKeyword_5_0_1_2; }
 		
-		//typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?
+		//typeref=[fmlType::DataType|ESUfid]
+		//           ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_5_1() { return cGroup_5_1; }
 		
 		//typeref=[fmlType::DataType|ESUfid]
@@ -9814,7 +12152,7 @@
 		//ESUfid
 		public RuleCall getTyperefDataTypeESUfidParserRuleCall_5_1_0_0_1() { return cTyperefDataTypeESUfidParserRuleCall_5_1_0_0_1; }
 		
-		//('[' multiplicity=DataTypeMultiplicity ']')?
+		//( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_5_1_1() { return cGroup_5_1_1; }
 		
 		//'['
@@ -9829,7 +12167,7 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_5_1_1_2() { return cRightSquareBracketKeyword_5_1_1_2; }
 		
-		//(constraint=TypeConstraintRoutine | ';')
+		//( constraint=TypeConstraintRoutine | ';' )
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
 		//constraint=TypeConstraintRoutine
@@ -9861,18 +12199,27 @@
 		private final Keyword cSemicolonKeyword_4_1_1 = (Keyword)cGroup_4_1.eContents().get(1);
 		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//TypeConstraintRoutine fmlInfra::Routine:
-		//	{fmlInfra::Routine} '{'
-		//	'@constraint' ('(' parameterSet=VariableRoutineParameterSet ')')? (bodyBlock=BlockStatement
-		//	| bodyBlock=ConditionalBlockStatement ';')
-		//	'}';
+		//TypeConstraintRoutine returns fmlInfra::Routine
+		//    : { fmlInfra::Routine } '{'
+		//        '@constraint'
+		//        ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+		//        ( bodyBlock=BlockStatement
+		//        | bodyBlock=ConditionalBlockStatement ';'
+		//        )
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Routine} '{' '@constraint' ('(' parameterSet=VariableRoutineParameterSet ')')? (bodyBlock=BlockStatement |
-		//bodyBlock=ConditionalBlockStatement ';') '}'
+		//{ fmlInfra::Routine } '{'
+		//       '@constraint'
+		//       ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+		//       ( bodyBlock=BlockStatement
+		//       | bodyBlock=ConditionalBlockStatement ';'
+		//       )
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::Routine}
+		//{ fmlInfra::Routine }
 		public Action getRoutineAction_0() { return cRoutineAction_0; }
 		
 		//'{'
@@ -9881,7 +12228,7 @@
 		//'@constraint'
 		public Keyword getConstraintKeyword_2() { return cConstraintKeyword_2; }
 		
-		//('(' parameterSet=VariableRoutineParameterSet ')')?
+		//( '(' parameterSet=VariableRoutineParameterSet ')' )?
 		public Group getGroup_3() { return cGroup_3; }
 		
 		//'('
@@ -9896,7 +12243,9 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_3_2() { return cRightParenthesisKeyword_3_2; }
 		
-		//(bodyBlock=BlockStatement | bodyBlock=ConditionalBlockStatement ';')
+		//( bodyBlock=BlockStatement
+		//| bodyBlock=ConditionalBlockStatement ';'
+		//)
 		public Alternatives getAlternatives_4() { return cAlternatives_4; }
 		
 		//bodyBlock=BlockStatement
@@ -9927,11 +12276,14 @@
 		private final Assignment cStatementAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cStatementGuardTestExpressionParserRuleCall_1_0 = (RuleCall)cStatementAssignment_1.eContents().get(0);
 		
-		//ConditionalBlockStatement fmlStmnt::BlockStatement:
-		//	{fmlStmnt::BlockStatement} statement+=GuardTestExpression;
+		//ConditionalBlockStatement returns fmlStmnt::BlockStatement
+		//    : {fmlStmnt::BlockStatement}
+		//        statement+=GuardTestExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::BlockStatement} statement+=GuardTestExpression
+		//{fmlStmnt::BlockStatement}
+		//       statement+=GuardTestExpression
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::BlockStatement}
@@ -9950,8 +12302,9 @@
 		private final Assignment cConditionAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
 		
-		//GuardTestExpression fmlStmnt::GuardStatement:
-		//	'|=>' condition=Expression;
+		//GuardTestExpression returns fmlStmnt::GuardStatement
+		//    : '|=>' condition=Expression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'|=>' condition=Expression
@@ -9973,20 +12326,22 @@
 		private final RuleCall cStructuredDataTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
 		////OtherDataTypeDefinitionImpl returns fmlType::DataTypeReference
-		////	: {fmlType::DataTypeReference}
-		////		name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
-		////		( support=PrimitiveType
-		////			( '[' multiplicity=DataTypeMultiplicity ']' )?
-		////		| typeref=[fmlType::DataType|ESUfid]
-		////			( '[' multiplicity=DataTypeMultiplicity ']' )?
-		////		)  typedef?=';'
-		////	;
-		//DataType fmlType::DataType:
-		//	DataTypeReference
-		//	| StructuredDataType;
+		////    : {fmlType::DataTypeReference}
+		////        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		////        ( support=PrimitiveType
+		////            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		////        | typeref=[fmlType::DataType|ESUfid]
+		////            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		////        )  typedef?=';'
+		////    ;
+		//DataType returns fmlType::DataType
+		//    : DataTypeReference
+		//    | StructuredDataType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//DataTypeReference | StructuredDataType
+		//DataTypeReference
+		//   | StructuredDataType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//DataTypeReference
@@ -10002,13 +12357,16 @@
 		private final RuleCall cIntervalTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		private final RuleCall cCollectionTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
-		//SimpleDataType fmlType::DataType:
-		//	PrimitiveType
-		//	| IntervalType
-		//	| CollectionType;
+		//SimpleDataType returns fmlType::DataType
+		//    : PrimitiveType
+		//    | IntervalType
+		//    | CollectionType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimitiveType | IntervalType | CollectionType
+		//PrimitiveType
+		//   | IntervalType
+		//   | CollectionType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PrimitiveType
@@ -10028,14 +12386,18 @@
 		private final RuleCall cUnionTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cChoiceTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
-		//StructuredDataType fmlType::DataType:
-		//	EnumerationType
-		//	| StructureType
-		//	| UnionType
-		//	| ChoiceType;
+		//StructuredDataType returns fmlType::DataType
+		//    : EnumerationType
+		//    | StructureType
+		//    | UnionType
+		//    | ChoiceType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//EnumerationType | StructureType | UnionType | ChoiceType
+		//EnumerationType
+		//   | StructureType
+		//   | UnionType
+		//   | ChoiceType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//EnumerationType
@@ -10057,49 +12419,51 @@
 		private final RuleCall cOtherPrimitiveTypeParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
 		////PrimitiveType returns fmlType::PrimitiveType
-		////	: kind=NumberPrimitiveTypeKind ( '<' ( 'bit:' )? bitSize = EInt '>' )?
-		////	| kind=OtherPrimitiveKind
-		////	;
+		////    : kind=NumberPrimitiveTypeKind ( '<' ( 'bit:' )? bitSize = EInt '>' )?
+		////    | kind=OtherPrimitiveKind
+		////    ;
 		////
 		////enum OtherPrimitiveKind returns fmlType::PrimitiveTypeKind
-		////	: BOOLEAN   = 'boolean'
-		////	| BOOLEAN   = 'bool'
-		////	| CHAR      = 'char'
-		////	| STRING    = 'string'
-		////	| BUFFER    = 'buffer'
-		////	| MESSAGE   = 'message'
-		////	| PORT      = 'port'
-		////	| MACHINE   = 'machine'
-		////	;
+		////    : BOOLEAN   = 'boolean'
+		////    | BOOLEAN   = 'bool'
+		////    | CHAR      = 'char'
+		////    | STRING    = 'string'
+		////    | BUFFER    = 'buffer'
+		////    | MESSAGE   = 'message'
+		////    | PORT      = 'port'
+		////    | MACHINE   = 'machine'
+		////    ;
 		////
 		////
 		////enum NumberPrimitiveTypeKind returns fmlType::PrimitiveTypeKind
-		////	: INTEGER   = 'integer'
-		////	| RATIONAL  = 'rational'
-		////	| FLOAT     = 'float'
-		////	| DOUBLE    = 'double'
-		////	| REAL      = 'real'
+		////    : INTEGER   = 'integer'
+		////    | RATIONAL  = 'rational'
+		////    | FLOAT     = 'float'
+		////    | DOUBLE    = 'double'
+		////    | REAL      = 'real'
 		////
-		////	| TIME      = 'time'
+		////    | TIME      = 'time'
 		////
-		////	| UINTEGER  = 'uinteger'
-		////	| URATIONAL = 'urational'
-		////	| UFLOAT    = 'ufloat'
-		////	| UDOUBLE   = 'udouble'
-		////	| UREAL     = 'ureal'
+		////    | UINTEGER  = 'uinteger'
+		////    | URATIONAL = 'urational'
+		////    | UFLOAT    = 'ufloat'
+		////    | UDOUBLE   = 'udouble'
+		////    | UREAL     = 'ureal'
 		////
-		////	| INT       = 'int'
-		////	| RAT       = 'rat'
+		////    | INT       = 'int'
+		////    | RAT       = 'rat'
 		////
-		////	| UINT      = 'uint'
-		////	| URAT      = 'urat'
-		////	;
-		//PrimitiveType fmlType::PrimitiveType:
-		//	PrimitiveNumberType
-		//	| OtherPrimitiveType;
+		////    | UINT      = 'uint'
+		////    | URAT      = 'urat'
+		////    ;
+		//PrimitiveType returns fmlType::PrimitiveType
+		//    : PrimitiveNumberType
+		//    | OtherPrimitiveType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimitiveNumberType | OtherPrimitiveType
+		//PrimitiveNumberType
+		//   | OtherPrimitiveType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PrimitiveNumberType
@@ -10117,15 +12481,20 @@
 		private final RuleCall cPrimitiveRealTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		private final RuleCall cPrimitiveTimeTypeParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
 		
-		//PrimitiveNumberType fmlType::PrimitiveNumberType:
-		//	PrimitiveIntegerType
-		//	| PrimitiveRationalType
-		//	| PrimitiveFloatType
-		//	| PrimitiveRealType
-		//	| PrimitiveTimeType;
+		//PrimitiveNumberType returns fmlType::PrimitiveNumberType
+		//    : PrimitiveIntegerType
+		//    | PrimitiveRationalType
+		//    | PrimitiveFloatType
+		//    | PrimitiveRealType
+		//    | PrimitiveTimeType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimitiveIntegerType | PrimitiveRationalType | PrimitiveFloatType | PrimitiveRealType | PrimitiveTimeType
+		//PrimitiveIntegerType
+		//   | PrimitiveRationalType
+		//   | PrimitiveFloatType
+		//   | PrimitiveRealType
+		//   | PrimitiveTimeType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PrimitiveIntegerType
@@ -10168,33 +12537,57 @@
 		private final RuleCall cSizeEIntParserRuleCall_3_1_2_0 = (RuleCall)cSizeAssignment_3_1_2.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
 		
-		//PrimitiveIntegerType fmlType::PrimitiveIntegerType:
-		//	{fmlType::PrimitiveIntegerType} sign=PrimitiveNumberSign?
-		//	name=('integer'
-		//	| 'uinteger'
-		//	| 'pos_integer'
-		//	| 'int'
-		//	| 'uint') (':' size=EInt
-		//	| '<' 'size:'? size=EInt '>')?;
+		//PrimitiveIntegerType returns fmlType::PrimitiveIntegerType
+		//    : { fmlType::PrimitiveIntegerType }
+		//        ( sign=PrimitiveNumberSign )?
+		//        name=( 'integer'
+		//        | 'uinteger'
+		//        | 'pos_integer'
+		//        | 'int'
+		//        | 'uint'
+		//        )
+		//        ( ':' size = EInt
+		//            | '<' ( 'size:' )? size = EInt '>'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveIntegerType} sign=PrimitiveNumberSign? name=('integer' | 'uinteger' | 'pos_integer' | 'int' | 'uint')
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//{ fmlType::PrimitiveIntegerType }
+		//       ( sign=PrimitiveNumberSign )?
+		//       name=( 'integer'
+		//       | 'uinteger'
+		//       | 'pos_integer'
+		//       | 'int'
+		//       | 'uint'
+		//       )
+		//       ( ':' size = EInt
+		//           | '<' ( 'size:' )? size = EInt '>'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveIntegerType}
+		//{ fmlType::PrimitiveIntegerType }
 		public Action getPrimitiveIntegerTypeAction_0() { return cPrimitiveIntegerTypeAction_0; }
 		
-		//sign=PrimitiveNumberSign?
+		//( sign=PrimitiveNumberSign )?
 		public Assignment getSignAssignment_1() { return cSignAssignment_1; }
 		
 		//PrimitiveNumberSign
 		public RuleCall getSignPrimitiveNumberSignEnumRuleCall_1_0() { return cSignPrimitiveNumberSignEnumRuleCall_1_0; }
 		
-		//name=('integer' | 'uinteger' | 'pos_integer' | 'int' | 'uint')
+		//name=( 'integer'
+		//| 'uinteger'
+		//| 'pos_integer'
+		//| 'int'
+		//| 'uint'
+		//)
 		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
 		
-		//('integer' | 'uinteger' | 'pos_integer' | 'int' | 'uint')
+		//( 'integer'
+		//        | 'uinteger'
+		//        | 'pos_integer'
+		//        | 'int'
+		//        | 'uint'
+		//        )
 		public Alternatives getNameAlternatives_2_0() { return cNameAlternatives_2_0; }
 		
 		//'integer'
@@ -10212,31 +12605,33 @@
 		//'uint'
 		public Keyword getNameUintKeyword_2_0_4() { return cNameUintKeyword_2_0_4; }
 		
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//( ':' size = EInt
+		//    | '<' ( 'size:' )? size = EInt '>'
+		//)?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//':' size=EInt
+		//':' size = EInt
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//':'
 		public Keyword getColonKeyword_3_0_0() { return cColonKeyword_3_0_0; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_0_1() { return cSizeAssignment_3_0_1; }
 		
 		//EInt
 		public RuleCall getSizeEIntParserRuleCall_3_0_1_0() { return cSizeEIntParserRuleCall_3_0_1_0; }
 		
-		//'<' 'size:'? size=EInt '>'
+		//'<' ( 'size:' )? size = EInt '>'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_3_1_0() { return cLessThanSignKeyword_3_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_3_1_1() { return cSizeKeyword_3_1_1; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_1_2() { return cSizeAssignment_3_1_2; }
 		
 		//EInt
@@ -10270,33 +12665,57 @@
 		private final RuleCall cSizeEIntParserRuleCall_3_1_2_0 = (RuleCall)cSizeAssignment_3_1_2.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
 		
-		//PrimitiveRationalType fmlType::PrimitiveRationalType:
-		//	{fmlType::PrimitiveRationalType} sign=PrimitiveNumberSign?
-		//	name=('rational'
-		//	| 'urational'
-		//	| 'pos_rational'
-		//	| 'rat'
-		//	| 'urat') (':' size=EInt
-		//	| '<' 'size:'? size=EInt '>')?;
+		//PrimitiveRationalType returns fmlType::PrimitiveRationalType
+		//    : { fmlType::PrimitiveRationalType }
+		//        ( sign=PrimitiveNumberSign )?
+		//        name=( 'rational'
+		//        | 'urational'
+		//        | 'pos_rational'
+		//        | 'rat'
+		//        | 'urat'
+		//        )
+		//        ( ':' size = EInt
+		//            | '<' ( 'size:' )? size = EInt '>'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveRationalType} sign=PrimitiveNumberSign? name=('rational' | 'urational' | 'pos_rational' | 'rat' |
-		//'urat') (':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//{ fmlType::PrimitiveRationalType }
+		//       ( sign=PrimitiveNumberSign )?
+		//       name=( 'rational'
+		//       | 'urational'
+		//       | 'pos_rational'
+		//       | 'rat'
+		//       | 'urat'
+		//       )
+		//       ( ':' size = EInt
+		//           | '<' ( 'size:' )? size = EInt '>'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveRationalType}
+		//{ fmlType::PrimitiveRationalType }
 		public Action getPrimitiveRationalTypeAction_0() { return cPrimitiveRationalTypeAction_0; }
 		
-		//sign=PrimitiveNumberSign?
+		//( sign=PrimitiveNumberSign )?
 		public Assignment getSignAssignment_1() { return cSignAssignment_1; }
 		
 		//PrimitiveNumberSign
 		public RuleCall getSignPrimitiveNumberSignEnumRuleCall_1_0() { return cSignPrimitiveNumberSignEnumRuleCall_1_0; }
 		
-		//name=('rational' | 'urational' | 'pos_rational' | 'rat' | 'urat')
+		//name=( 'rational'
+		//| 'urational'
+		//| 'pos_rational'
+		//| 'rat'
+		//| 'urat'
+		//)
 		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
 		
-		//('rational' | 'urational' | 'pos_rational' | 'rat' | 'urat')
+		//( 'rational'
+		//        | 'urational'
+		//        | 'pos_rational'
+		//        | 'rat'
+		//        | 'urat'
+		//        )
 		public Alternatives getNameAlternatives_2_0() { return cNameAlternatives_2_0; }
 		
 		//'rational'
@@ -10314,31 +12733,33 @@
 		//'urat'
 		public Keyword getNameUratKeyword_2_0_4() { return cNameUratKeyword_2_0_4; }
 		
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//( ':' size = EInt
+		//    | '<' ( 'size:' )? size = EInt '>'
+		//)?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//':' size=EInt
+		//':' size = EInt
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//':'
 		public Keyword getColonKeyword_3_0_0() { return cColonKeyword_3_0_0; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_0_1() { return cSizeAssignment_3_0_1; }
 		
 		//EInt
 		public RuleCall getSizeEIntParserRuleCall_3_0_1_0() { return cSizeEIntParserRuleCall_3_0_1_0; }
 		
-		//'<' 'size:'? size=EInt '>'
+		//'<' ( 'size:' )? size = EInt '>'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_3_1_0() { return cLessThanSignKeyword_3_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_3_1_1() { return cSizeKeyword_3_1_1; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_1_2() { return cSizeAssignment_3_1_2; }
 		
 		//EInt
@@ -10372,33 +12793,57 @@
 		private final RuleCall cSizeEIntParserRuleCall_3_1_2_0 = (RuleCall)cSizeAssignment_3_1_2.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
 		
-		//PrimitiveFloatType fmlType::PrimitiveFloatType:
-		//	{fmlType::PrimitiveFloatType} sign=PrimitiveNumberSign?
-		//	name=('float'
-		//	| 'ufloat'
-		//	| 'pos_float'
-		//	| 'double'
-		//	| 'udouble') (':' size=EInt
-		//	| '<' 'size:'? size=EInt '>')?;
+		//PrimitiveFloatType returns fmlType::PrimitiveFloatType
+		//    : { fmlType::PrimitiveFloatType }
+		//        ( sign=PrimitiveNumberSign )?
+		//        name=( 'float'
+		//        | 'ufloat'
+		//        | 'pos_float'
+		//        | 'double'
+		//        | 'udouble'
+		//        )
+		//        ( ':' size = EInt
+		//            | '<' ( 'size:' )? size = EInt '>'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveFloatType} sign=PrimitiveNumberSign? name=('float' | 'ufloat' | 'pos_float' | 'double' | 'udouble')
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//{ fmlType::PrimitiveFloatType }
+		//       ( sign=PrimitiveNumberSign )?
+		//       name=( 'float'
+		//       | 'ufloat'
+		//       | 'pos_float'
+		//       | 'double'
+		//       | 'udouble'
+		//       )
+		//       ( ':' size = EInt
+		//           | '<' ( 'size:' )? size = EInt '>'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveFloatType}
+		//{ fmlType::PrimitiveFloatType }
 		public Action getPrimitiveFloatTypeAction_0() { return cPrimitiveFloatTypeAction_0; }
 		
-		//sign=PrimitiveNumberSign?
+		//( sign=PrimitiveNumberSign )?
 		public Assignment getSignAssignment_1() { return cSignAssignment_1; }
 		
 		//PrimitiveNumberSign
 		public RuleCall getSignPrimitiveNumberSignEnumRuleCall_1_0() { return cSignPrimitiveNumberSignEnumRuleCall_1_0; }
 		
-		//name=('float' | 'ufloat' | 'pos_float' | 'double' | 'udouble')
+		//name=( 'float'
+		//| 'ufloat'
+		//| 'pos_float'
+		//| 'double'
+		//| 'udouble'
+		//)
 		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
 		
-		//('float' | 'ufloat' | 'pos_float' | 'double' | 'udouble')
+		//( 'float'
+		//        | 'ufloat'
+		//        | 'pos_float'
+		//        | 'double'
+		//        | 'udouble'
+		//        )
 		public Alternatives getNameAlternatives_2_0() { return cNameAlternatives_2_0; }
 		
 		//'float'
@@ -10416,31 +12861,33 @@
 		//'udouble'
 		public Keyword getNameUdoubleKeyword_2_0_4() { return cNameUdoubleKeyword_2_0_4; }
 		
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//( ':' size = EInt
+		//    | '<' ( 'size:' )? size = EInt '>'
+		//)?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//':' size=EInt
+		//':' size = EInt
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//':'
 		public Keyword getColonKeyword_3_0_0() { return cColonKeyword_3_0_0; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_0_1() { return cSizeAssignment_3_0_1; }
 		
 		//EInt
 		public RuleCall getSizeEIntParserRuleCall_3_0_1_0() { return cSizeEIntParserRuleCall_3_0_1_0; }
 		
-		//'<' 'size:'? size=EInt '>'
+		//'<' ( 'size:' )? size = EInt '>'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_3_1_0() { return cLessThanSignKeyword_3_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_3_1_1() { return cSizeKeyword_3_1_1; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_1_2() { return cSizeAssignment_3_1_2; }
 		
 		//EInt
@@ -10472,31 +12919,49 @@
 		private final RuleCall cSizeEIntParserRuleCall_3_1_2_0 = (RuleCall)cSizeAssignment_3_1_2.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_3_1_3 = (Keyword)cGroup_3_1.eContents().get(3);
 		
-		//PrimitiveRealType fmlType::PrimitiveRealType:
-		//	{fmlType::PrimitiveRealType} sign=PrimitiveNumberSign?
-		//	name=('real'
-		//	| 'ureal'
-		//	| 'pos_real') (':' size=EInt
-		//	| '<' 'size:'? size=EInt '>')?;
+		//PrimitiveRealType returns fmlType::PrimitiveRealType
+		//    : { fmlType::PrimitiveRealType }
+		//        ( sign=PrimitiveNumberSign )?
+		//        name=( 'real'
+		//        | 'ureal'
+		//        | 'pos_real'
+		//        )
+		//        ( ':' size = EInt
+		//            | '<' ( 'size:' )? size = EInt '>'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveRealType} sign=PrimitiveNumberSign? name=('real' | 'ureal' | 'pos_real') (':' size=EInt | '<'
-		//'size:'? size=EInt '>')?
+		//{ fmlType::PrimitiveRealType }
+		//       ( sign=PrimitiveNumberSign )?
+		//       name=( 'real'
+		//       | 'ureal'
+		//       | 'pos_real'
+		//       )
+		//       ( ':' size = EInt
+		//           | '<' ( 'size:' )? size = EInt '>'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveRealType}
+		//{ fmlType::PrimitiveRealType }
 		public Action getPrimitiveRealTypeAction_0() { return cPrimitiveRealTypeAction_0; }
 		
-		//sign=PrimitiveNumberSign?
+		//( sign=PrimitiveNumberSign )?
 		public Assignment getSignAssignment_1() { return cSignAssignment_1; }
 		
 		//PrimitiveNumberSign
 		public RuleCall getSignPrimitiveNumberSignEnumRuleCall_1_0() { return cSignPrimitiveNumberSignEnumRuleCall_1_0; }
 		
-		//name=('real' | 'ureal' | 'pos_real')
+		//name=( 'real'
+		//| 'ureal'
+		//| 'pos_real'
+		//)
 		public Assignment getNameAssignment_2() { return cNameAssignment_2; }
 		
-		//('real' | 'ureal' | 'pos_real')
+		//( 'real'
+		//        | 'ureal'
+		//        | 'pos_real'
+		//        )
 		public Alternatives getNameAlternatives_2_0() { return cNameAlternatives_2_0; }
 		
 		//'real'
@@ -10508,31 +12973,33 @@
 		//'pos_real'
 		public Keyword getNamePos_realKeyword_2_0_2() { return cNamePos_realKeyword_2_0_2; }
 		
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//( ':' size = EInt
+		//    | '<' ( 'size:' )? size = EInt '>'
+		//)?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//':' size=EInt
+		//':' size = EInt
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//':'
 		public Keyword getColonKeyword_3_0_0() { return cColonKeyword_3_0_0; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_0_1() { return cSizeAssignment_3_0_1; }
 		
 		//EInt
 		public RuleCall getSizeEIntParserRuleCall_3_0_1_0() { return cSizeEIntParserRuleCall_3_0_1_0; }
 		
-		//'<' 'size:'? size=EInt '>'
+		//'<' ( 'size:' )? size = EInt '>'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_3_1_0() { return cLessThanSignKeyword_3_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_3_1_1() { return cSizeKeyword_3_1_1; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_3_1_2() { return cSizeAssignment_3_1_2; }
 		
 		//EInt
@@ -10568,29 +13035,48 @@
 		private final Assignment cSupportAssignment_1_2_1 = (Assignment)cAlternatives_1_2.eContents().get(1);
 		private final RuleCall cSupportPrimitiveTimeNumberTypeParserRuleCall_1_2_1_0 = (RuleCall)cSupportAssignment_1_2_1.eContents().get(0);
 		
-		//PrimitiveTimeType fmlType::PrimitiveTimeType:
-		//	{fmlType::PrimitiveTimeType}
-		//	'time' ('<' support=PrimitiveTimeNumberType '>'
-		//	| support=PrimitiveTimeNumberType)?
-		//	| {fmlType::PrimitiveTimeType} clock?='clock' ('<' support=PrimitiveTimeNumberType '>'
-		//	| support=PrimitiveTimeNumberType)?;
+		//PrimitiveTimeType returns fmlType::PrimitiveTimeType
+		//    : { fmlType::PrimitiveTimeType }
+		//        'time'
+		//        ( '<' support=PrimitiveTimeNumberType '>'
+		//        | support=PrimitiveTimeNumberType
+		//        )?
+		//    | { fmlType::PrimitiveTimeType }
+		//        clock?='clock'
+		//        ( '<' support=PrimitiveTimeNumberType '>'
+		//        | support=PrimitiveTimeNumberType
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveTimeType} 'time' ('<' support=PrimitiveTimeNumberType '>' | support=PrimitiveTimeNumberType)? |
-		//{fmlType::PrimitiveTimeType} clock?='clock' ('<' support=PrimitiveTimeNumberType '>' |
-		//support=PrimitiveTimeNumberType)?
+		//{ fmlType::PrimitiveTimeType }
+		//       'time'
+		//       ( '<' support=PrimitiveTimeNumberType '>'
+		//       | support=PrimitiveTimeNumberType
+		//       )?
+		//   | { fmlType::PrimitiveTimeType }
+		//       clock?='clock'
+		//       ( '<' support=PrimitiveTimeNumberType '>'
+		//       | support=PrimitiveTimeNumberType
+		//       )?
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{fmlType::PrimitiveTimeType} 'time' ('<' support=PrimitiveTimeNumberType '>' | support=PrimitiveTimeNumberType)?
+		//{ fmlType::PrimitiveTimeType }
+		//       'time'
+		//       ( '<' support=PrimitiveTimeNumberType '>'
+		//       | support=PrimitiveTimeNumberType
+		//       )?
 		public Group getGroup_0() { return cGroup_0; }
 		
-		//{fmlType::PrimitiveTimeType}
+		//{ fmlType::PrimitiveTimeType }
 		public Action getPrimitiveTimeTypeAction_0_0() { return cPrimitiveTimeTypeAction_0_0; }
 		
 		//'time'
 		public Keyword getTimeKeyword_0_1() { return cTimeKeyword_0_1; }
 		
-		//('<' support=PrimitiveTimeNumberType '>' | support=PrimitiveTimeNumberType)?
+		//( '<' support=PrimitiveTimeNumberType '>'
+		//| support=PrimitiveTimeNumberType
+		//)?
 		public Alternatives getAlternatives_0_2() { return cAlternatives_0_2; }
 		
 		//'<' support=PrimitiveTimeNumberType '>'
@@ -10614,10 +13100,14 @@
 		//PrimitiveTimeNumberType
 		public RuleCall getSupportPrimitiveTimeNumberTypeParserRuleCall_0_2_1_0() { return cSupportPrimitiveTimeNumberTypeParserRuleCall_0_2_1_0; }
 		
-		//{fmlType::PrimitiveTimeType} clock?='clock' ('<' support=PrimitiveTimeNumberType '>' | support=PrimitiveTimeNumberType)?
+		//{ fmlType::PrimitiveTimeType }
+		//       clock?='clock'
+		//       ( '<' support=PrimitiveTimeNumberType '>'
+		//       | support=PrimitiveTimeNumberType
+		//       )?
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{fmlType::PrimitiveTimeType}
+		//{ fmlType::PrimitiveTimeType }
 		public Action getPrimitiveTimeTypeAction_1_0() { return cPrimitiveTimeTypeAction_1_0; }
 		
 		//clock?='clock'
@@ -10626,7 +13116,9 @@
 		//'clock'
 		public Keyword getClockClockKeyword_1_1_0() { return cClockClockKeyword_1_1_0; }
 		
-		//('<' support=PrimitiveTimeNumberType '>' | support=PrimitiveTimeNumberType)?
+		//( '<' support=PrimitiveTimeNumberType '>'
+		//| support=PrimitiveTimeNumberType
+		//)?
 		public Alternatives getAlternatives_1_2() { return cAlternatives_1_2; }
 		
 		//'<' support=PrimitiveTimeNumberType '>'
@@ -10658,14 +13150,18 @@
 		private final RuleCall cPrimitiveFloatTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cPrimitiveRealTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
-		//PrimitiveTimeNumberType fmlType::PrimitiveNumberType:
-		//	PrimitiveIntegerType
-		//	| PrimitiveRationalType
-		//	| PrimitiveFloatType
-		//	| PrimitiveRealType;
+		//PrimitiveTimeNumberType returns fmlType::PrimitiveNumberType
+		//    : PrimitiveIntegerType
+		//    | PrimitiveRationalType
+		//    | PrimitiveFloatType
+		//    | PrimitiveRealType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimitiveIntegerType | PrimitiveRationalType | PrimitiveFloatType | PrimitiveRealType
+		//PrimitiveIntegerType
+		//   | PrimitiveRationalType
+		//   | PrimitiveFloatType
+		//   | PrimitiveRealType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PrimitiveIntegerType
@@ -10688,14 +13184,18 @@
 		private final RuleCall cPrimitiveStringTypeParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cPrimitiveInstanceTypeParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
-		//OtherPrimitiveType fmlType::PrimitiveType:
-		//	PrimitiveBooleanType
-		//	| PrimitiveCharacterType
-		//	| PrimitiveStringType
-		//	| PrimitiveInstanceType;
+		//OtherPrimitiveType returns fmlType::PrimitiveType
+		//    : PrimitiveBooleanType
+		//    | PrimitiveCharacterType
+		//    | PrimitiveStringType
+		//    | PrimitiveInstanceType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//PrimitiveBooleanType | PrimitiveCharacterType | PrimitiveStringType | PrimitiveInstanceType
+		//PrimitiveBooleanType
+		//   | PrimitiveCharacterType
+		//   | PrimitiveStringType
+		//   | PrimitiveInstanceType
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//PrimitiveBooleanType
@@ -10719,20 +13219,23 @@
 		private final Keyword cNameBooleanKeyword_1_0_0 = (Keyword)cNameAlternatives_1_0.eContents().get(0);
 		private final Keyword cNameBoolKeyword_1_0_1 = (Keyword)cNameAlternatives_1_0.eContents().get(1);
 		
-		//PrimitiveBooleanType fmlType::PrimitiveBooleanType:
-		//	{fmlType::PrimitiveBooleanType} name=('boolean' | 'bool');
+		//PrimitiveBooleanType returns fmlType::PrimitiveBooleanType
+		//    : { fmlType::PrimitiveBooleanType }
+		//        name=( 'boolean'| 'bool' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveBooleanType} name=('boolean' | 'bool')
+		//{ fmlType::PrimitiveBooleanType }
+		//       name=( 'boolean'| 'bool' )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveBooleanType}
+		//{ fmlType::PrimitiveBooleanType }
 		public Action getPrimitiveBooleanTypeAction_0() { return cPrimitiveBooleanTypeAction_0; }
 		
-		//name=('boolean' | 'bool')
+		//name=( 'boolean'| 'bool' )
 		public Assignment getNameAssignment_1() { return cNameAssignment_1; }
 		
-		//('boolean' | 'bool')
+		//( 'boolean'| 'bool' )
 		public Alternatives getNameAlternatives_1_0() { return cNameAlternatives_1_0; }
 		
 		//'boolean'
@@ -10747,14 +13250,15 @@
 		private final Action cPrimitiveCharacterTypeAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cCharKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//PrimitiveCharacterType fmlType::PrimitiveCharacterType:
-		//	{fmlType::PrimitiveCharacterType} 'char';
+		//PrimitiveCharacterType returns fmlType::PrimitiveCharacterType
+		//    : { fmlType::PrimitiveCharacterType } 'char'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveCharacterType} 'char'
+		//{ fmlType::PrimitiveCharacterType } 'char'
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveCharacterType}
+		//{ fmlType::PrimitiveCharacterType }
 		public Action getPrimitiveCharacterTypeAction_0() { return cPrimitiveCharacterTypeAction_0; }
 		
 		//'char'
@@ -10778,15 +13282,23 @@
 		private final RuleCall cSizeEIntParserRuleCall_2_1_2_0 = (RuleCall)cSizeAssignment_2_1_2.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_1_3 = (Keyword)cGroup_2_1.eContents().get(3);
 		
-		//PrimitiveStringType fmlType::PrimitiveStringType:
-		//	{fmlType::PrimitiveStringType} name='string' (':' size=EInt
-		//	| '<' 'size:'? size=EInt '>')?;
+		//PrimitiveStringType returns fmlType::PrimitiveStringType
+		//    : { fmlType::PrimitiveStringType }
+		//        name='string'
+		//        ( ':' size = EInt
+		//        | '<' ( 'size:' )? size = EInt '>'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveStringType} name='string' (':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//{ fmlType::PrimitiveStringType }
+		//       name='string'
+		//       ( ':' size = EInt
+		//       | '<' ( 'size:' )? size = EInt '>'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveStringType}
+		//{ fmlType::PrimitiveStringType }
 		public Action getPrimitiveStringTypeAction_0() { return cPrimitiveStringTypeAction_0; }
 		
 		//name='string'
@@ -10795,31 +13307,33 @@
 		//'string'
 		public Keyword getNameStringKeyword_1_0() { return cNameStringKeyword_1_0; }
 		
-		//(':' size=EInt | '<' 'size:'? size=EInt '>')?
+		//( ':' size = EInt
+		//| '<' ( 'size:' )? size = EInt '>'
+		//)?
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//':' size=EInt
+		//':' size = EInt
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//':'
 		public Keyword getColonKeyword_2_0_0() { return cColonKeyword_2_0_0; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_2_0_1() { return cSizeAssignment_2_0_1; }
 		
 		//EInt
 		public RuleCall getSizeEIntParserRuleCall_2_0_1_0() { return cSizeEIntParserRuleCall_2_0_1_0; }
 		
-		//'<' 'size:'? size=EInt '>'
+		//'<' ( 'size:' )? size = EInt '>'
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_1_0() { return cLessThanSignKeyword_2_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_2_1_1() { return cSizeKeyword_2_1_1; }
 		
-		//size=EInt
+		//size = EInt
 		public Assignment getSizeAssignment_2_1_2() { return cSizeAssignment_2_1_2; }
 		
 		//EInt
@@ -10841,15 +13355,19 @@
 		private final RuleCall cModelNamedElementESIdentifierParserRuleCall_2_1_0_1 = (RuleCall)cModelNamedElementCrossReference_2_1_0.eContents().get(1);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//PrimitiveInstanceType fmlType::PrimitiveInstanceType:
-		//	{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind ('<' model=[fmlCommon::NamedElement|ESIdentifier]
-		//	'>')?;
+		//PrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+		//    : { fmlType::PrimitiveInstanceType }
+		//        expected=PrimitiveInstanceKind
+		//        ( '<' model=[fmlCommon::NamedElement|ESIdentifier] '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind ('<' model=[fmlCommon::NamedElement|ESIdentifier] '>')?
+		//{ fmlType::PrimitiveInstanceType }
+		//       expected=PrimitiveInstanceKind
+		//       ( '<' model=[fmlCommon::NamedElement|ESIdentifier] '>' )?
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveInstanceType}
+		//{ fmlType::PrimitiveInstanceType }
 		public Action getPrimitiveInstanceTypeAction_0() { return cPrimitiveInstanceTypeAction_0; }
 		
 		//expected=PrimitiveInstanceKind
@@ -10858,7 +13376,7 @@
 		//PrimitiveInstanceKind
 		public RuleCall getExpectedPrimitiveInstanceKindEnumRuleCall_1_0() { return cExpectedPrimitiveInstanceKindEnumRuleCall_1_0; }
 		
-		//('<' model=[fmlCommon::NamedElement|ESIdentifier] '>')?
+		//( '<' model=[fmlCommon::NamedElement|ESIdentifier] '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -10900,15 +13418,26 @@
 		private final Keyword cRopenLeftSquareBracketKeyword_8_1_0 = (Keyword)cRopenAssignment_8_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
-		//IntervalType fmlType::IntervalType:
-		//	{fmlType::IntervalType} name='interval'
-		//	'<'
-		//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-		//	'>';
+		//IntervalType returns fmlType::IntervalType
+		//    : {fmlType::IntervalType}
+		//        name='interval'
+		//        '<'
+		//            support=PrimitiveNumberType
+		//            ( lopen?=']' | '[' )
+		//            infimum=Expression ',' supremum=Expression
+		//            ( ']' |  ropen?='[' )
+		//        '>'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::IntervalType} name='interval' '<' support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ','
-		//supremum=Expression (']' | ropen?='[') '>'
+		//{fmlType::IntervalType}
+		//       name='interval'
+		//       '<'
+		//           support=PrimitiveNumberType
+		//           ( lopen?=']' | '[' )
+		//           infimum=Expression ',' supremum=Expression
+		//           ( ']' |  ropen?='[' )
+		//       '>'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::IntervalType}
@@ -10929,7 +13458,7 @@
 		//PrimitiveNumberType
 		public RuleCall getSupportPrimitiveNumberTypeParserRuleCall_3_0() { return cSupportPrimitiveNumberTypeParserRuleCall_3_0; }
 		
-		//(lopen?=']' | '[')
+		//( lopen?=']' | '[' )
 		public Alternatives getAlternatives_4() { return cAlternatives_4; }
 		
 		//lopen?=']'
@@ -10956,7 +13485,7 @@
 		//Expression
 		public RuleCall getSupremumExpressionParserRuleCall_7_0() { return cSupremumExpressionParserRuleCall_7_0; }
 		
-		//(']' | ropen?='[')
+		//( ']' |  ropen?='[' )
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
 		//']'
@@ -11002,24 +13531,36 @@
 		private final Keyword cGreaterThanSignKeyword_13 = (Keyword)cGroup.eContents().get(13);
 		private final Keyword cSemicolonKeyword_14 = (Keyword)cGroup.eContents().get(14);
 		
-		//IntervalTypeDefinition fmlType::IntervalType:
-		//	{fmlType::IntervalType} visibility=VisibilityKind? 'type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'interval'
-		//	'<'
-		//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-		//	'>' ';';
+		//IntervalTypeDefinition returns fmlType::IntervalType
+		//    : {fmlType::IntervalType}
+		//        ( visibility=VisibilityKind )? 'type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'interval'
+		//        '<'
+		//            support=PrimitiveNumberType
+		//            ( lopen?=']' | '[' )
+		//            infimum=Expression ',' supremum=Expression
+		//            ( ']' |  ropen?='[' )
+		//        '>' ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::IntervalType} visibility=VisibilityKind? 'type' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//'interval' '<' support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' |
-		//ropen?='[') '>' ';'
+		//{fmlType::IntervalType}
+		//       ( visibility=VisibilityKind )? 'type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'interval'
+		//       '<'
+		//           support=PrimitiveNumberType
+		//           ( lopen?=']' | '[' )
+		//           infimum=Expression ',' supremum=Expression
+		//           ( ']' |  ropen?='[' )
+		//       '>' ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::IntervalType}
 		public Action getIntervalTypeAction_0() { return cIntervalTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -11034,7 +13575,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -11052,7 +13593,7 @@
 		//PrimitiveNumberType
 		public RuleCall getSupportPrimitiveNumberTypeParserRuleCall_7_0() { return cSupportPrimitiveNumberTypeParserRuleCall_7_0; }
 		
-		//(lopen?=']' | '[')
+		//( lopen?=']' | '[' )
 		public Alternatives getAlternatives_8() { return cAlternatives_8; }
 		
 		//lopen?=']'
@@ -11079,7 +13620,7 @@
 		//Expression
 		public RuleCall getSupremumExpressionParserRuleCall_11_0() { return cSupremumExpressionParserRuleCall_11_0; }
 		
-		//(']' | ropen?='[')
+		//( ']' |  ropen?='[' )
 		public Alternatives getAlternatives_12() { return cAlternatives_12; }
 		
 		//']'
@@ -11125,16 +13666,28 @@
 		private final Keyword cGreaterThanSignKeyword_11 = (Keyword)cGroup.eContents().get(11);
 		private final Keyword cSemicolonKeyword_12 = (Keyword)cGroup.eContents().get(12);
 		
-		//IntervalTypeDefinitionImpl fmlType::IntervalType:
-		//	{fmlType::IntervalType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'interval'
-		//	'<'
-		//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-		//	'>' ';';
+		//IntervalTypeDefinitionImpl returns fmlType::IntervalType
+		//    : {fmlType::IntervalType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'interval'
+		//        '<'
+		//            support=PrimitiveNumberType
+		//            ( lopen?=']' | '[' )
+		//            infimum=Expression ',' supremum=Expression
+		//            ( ']' |  ropen?='[' )
+		//        '>' ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::IntervalType} name=ESIdentifier unrestrictedName=UnrestrictedName? 'interval' '<' support=PrimitiveNumberType
-		//(lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[') '>' ';'
+		//{fmlType::IntervalType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'interval'
+		//       '<'
+		//           support=PrimitiveNumberType
+		//           ( lopen?=']' | '[' )
+		//           infimum=Expression ',' supremum=Expression
+		//           ( ']' |  ropen?='[' )
+		//       '>' ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::IntervalType}
@@ -11146,7 +13699,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
@@ -11164,7 +13717,7 @@
 		//PrimitiveNumberType
 		public RuleCall getSupportPrimitiveNumberTypeParserRuleCall_5_0() { return cSupportPrimitiveNumberTypeParserRuleCall_5_0; }
 		
-		//(lopen?=']' | '[')
+		//( lopen?=']' | '[' )
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
 		//lopen?=']'
@@ -11191,7 +13744,7 @@
 		//Expression
 		public RuleCall getSupremumExpressionParserRuleCall_9_0() { return cSupremumExpressionParserRuleCall_9_0; }
 		
-		//(']' | ropen?='[')
+		//( ']' |  ropen?='[' )
 		public Alternatives getAlternatives_10() { return cAlternatives_10; }
 		
 		//']'
@@ -11231,25 +13784,37 @@
 		//// TODO
 		//// mettre à jour la grammaire par rapport au noyau, i.e.
 		//// CollectionKind | CollectionKind< size > | CollectionKind< type , size >
-		//CollectionType fmlType::CollectionType:
-		//	{fmlType::CollectionType} container=CollectionKind ('<'
-		//	support=DataType (',' (size=EInt | unbounded?='*'))?
-		//	'>')?;
+		//CollectionType returns fmlType::CollectionType
+		//    : {fmlType::CollectionType}
+		//        container = CollectionKind
+		//        ( '<'
+		//            support=DataType
+		//            ( ',' ( size=EInt | unbounded?='*' ) )?
+		//        '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::CollectionType} container=CollectionKind ('<' support=DataType (',' (size=EInt | unbounded?='*'))? '>')?
+		//{fmlType::CollectionType}
+		//       container = CollectionKind
+		//       ( '<'
+		//           support=DataType
+		//           ( ',' ( size=EInt | unbounded?='*' ) )?
+		//       '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::CollectionType}
 		public Action getCollectionTypeAction_0() { return cCollectionTypeAction_0; }
 		
-		//container=CollectionKind
+		//container = CollectionKind
 		public Assignment getContainerAssignment_1() { return cContainerAssignment_1; }
 		
 		//CollectionKind
 		public RuleCall getContainerCollectionKindEnumRuleCall_1_0() { return cContainerCollectionKindEnumRuleCall_1_0; }
 		
-		//('<' support=DataType (',' (size=EInt | unbounded?='*'))? '>')?
+		//( '<'
+		//    support=DataType
+		//    ( ',' ( size=EInt | unbounded?='*' ) )?
+		//'>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -11261,13 +13826,13 @@
 		//DataType
 		public RuleCall getSupportDataTypeParserRuleCall_2_1_0() { return cSupportDataTypeParserRuleCall_2_1_0; }
 		
-		//(',' (size=EInt | unbounded?='*'))?
+		//( ',' ( size=EInt | unbounded?='*' ) )?
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//','
 		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
 		
-		//(size=EInt | unbounded?='*')
+		//( size=EInt | unbounded?='*' )
 		public Alternatives getAlternatives_2_2_1() { return cAlternatives_2_2_1; }
 		
 		//size=EInt
@@ -11311,23 +13876,32 @@
 		private final Keyword cGreaterThanSignKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		private final Keyword cSemicolonKeyword_10 = (Keyword)cGroup.eContents().get(10);
 		
-		//CollectionTypeDefinition fmlType::CollectionType:
-		//	{fmlType::CollectionType} visibility=VisibilityKind? 'type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	container=CollectionKind
-		//	'<'
-		//	support=DataType (',' (size=EInt | unbounded?='*'))?
-		//	'>' ';';
+		//CollectionTypeDefinition returns fmlType::CollectionType
+		//    : {fmlType::CollectionType}
+		//        ( visibility=VisibilityKind )? 'type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        container = CollectionKind
+		//        '<'
+		//            support=DataType
+		//            ( ',' ( size=EInt | unbounded?='*' ) )?
+		//        '>' ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::CollectionType} visibility=VisibilityKind? 'type' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//container=CollectionKind '<' support=DataType (',' (size=EInt | unbounded?='*'))? '>' ';'
+		//{fmlType::CollectionType}
+		//       ( visibility=VisibilityKind )? 'type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       container = CollectionKind
+		//       '<'
+		//           support=DataType
+		//           ( ',' ( size=EInt | unbounded?='*' ) )?
+		//       '>' ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::CollectionType}
 		public Action getCollectionTypeAction_0() { return cCollectionTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -11342,13 +13916,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//container=CollectionKind
+		//container = CollectionKind
 		public Assignment getContainerAssignment_5() { return cContainerAssignment_5; }
 		
 		//CollectionKind
@@ -11363,13 +13937,13 @@
 		//DataType
 		public RuleCall getSupportDataTypeParserRuleCall_7_0() { return cSupportDataTypeParserRuleCall_7_0; }
 		
-		//(',' (size=EInt | unbounded?='*'))?
+		//( ',' ( size=EInt | unbounded?='*' ) )?
 		public Group getGroup_8() { return cGroup_8; }
 		
 		//','
 		public Keyword getCommaKeyword_8_0() { return cCommaKeyword_8_0; }
 		
-		//(size=EInt | unbounded?='*')
+		//( size=EInt | unbounded?='*' )
 		public Alternatives getAlternatives_8_1() { return cAlternatives_8_1; }
 		
 		//size=EInt
@@ -11413,16 +13987,24 @@
 		private final Keyword cGreaterThanSignKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		
-		//CollectionTypeDefinitionImpl fmlType::CollectionType:
-		//	{fmlType::CollectionType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	container=CollectionKind
-		//	'<'
-		//	support=DataType (',' (size=EInt | unbounded?='*'))?
-		//	'>' ';';
+		//CollectionTypeDefinitionImpl returns fmlType::CollectionType
+		//    : {fmlType::CollectionType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        container = CollectionKind
+		//        '<'
+		//            support=DataType
+		//            ( ',' ( size=EInt | unbounded?='*' ) )?
+		//        '>' ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::CollectionType} name=ESIdentifier unrestrictedName=UnrestrictedName? container=CollectionKind '<'
-		//support=DataType (',' (size=EInt | unbounded?='*'))? '>' ';'
+		//{fmlType::CollectionType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       container = CollectionKind
+		//       '<'
+		//           support=DataType
+		//           ( ',' ( size=EInt | unbounded?='*' ) )?
+		//       '>' ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::CollectionType}
@@ -11434,13 +14016,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_2_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_2_0; }
 		
-		//container=CollectionKind
+		//container = CollectionKind
 		public Assignment getContainerAssignment_3() { return cContainerAssignment_3; }
 		
 		//CollectionKind
@@ -11455,13 +14037,13 @@
 		//DataType
 		public RuleCall getSupportDataTypeParserRuleCall_5_0() { return cSupportDataTypeParserRuleCall_5_0; }
 		
-		//(',' (size=EInt | unbounded?='*'))?
+		//( ',' ( size=EInt | unbounded?='*' ) )?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//','
 		public Keyword getCommaKeyword_6_0() { return cCommaKeyword_6_0; }
 		
-		//(size=EInt | unbounded?='*')
+		//( size=EInt | unbounded?='*' )
 		public Alternatives getAlternatives_6_1() { return cAlternatives_6_1; }
 		
 		//size=EInt
@@ -11503,16 +14085,20 @@
 		private final RuleCall cLiteralEnumerationLiteralParserRuleCall_5_1_0 = (RuleCall)cLiteralAssignment_5_1.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
-		//EnumerationType fmlType::EnumerationType:
-		//	{fmlType::EnumerationType}
-		//	'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-		//	'{'
-		//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-		//	'}';
+		//EnumerationType returns fmlType::EnumerationType
+		//    : {fmlType::EnumerationType}
+		//        'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//        '{'
+		//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::EnumerationType} 'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')? '{'
-		//literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)* '}'
+		//{fmlType::EnumerationType}
+		//       'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//       '{'
+		//           literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::EnumerationType}
@@ -11521,13 +14107,13 @@
 		//'enum'
 		public Keyword getEnumKeyword_1() { return cEnumKeyword_1; }
 		
-		//('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
+		//( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'super:'?
+		//( 'super:' )?
 		public Keyword getSuperKeyword_2_1() { return cSuperKeyword_2_1; }
 		
 		//superType=[fmlType::EnumerationType|ESUfid]
@@ -11545,19 +14131,19 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3() { return cLeftCurlyBracketKeyword_3; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_4() { return cLiteralAssignment_4; }
 		
 		//EnumerationLiteral
 		public RuleCall getLiteralEnumerationLiteralParserRuleCall_4_0() { return cLiteralEnumerationLiteralParserRuleCall_4_0; }
 		
-		//(',' literal+=EnumerationLiteral)*
+		//( ',' literal+= EnumerationLiteral )*
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//','
 		public Keyword getCommaKeyword_5_0() { return cCommaKeyword_5_0; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_5_1() { return cLiteralAssignment_5_1; }
 		
 		//EnumerationLiteral
@@ -11595,24 +14181,30 @@
 		private final RuleCall cLiteralEnumerationLiteralParserRuleCall_9_1_0 = (RuleCall)cLiteralAssignment_9_1.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_10 = (Keyword)cGroup.eContents().get(10);
 		
-		//EnumerationTypeDefinition fmlType::EnumerationType:
-		//	{fmlType::EnumerationType} visibility=VisibilityKind? typedef?='type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-		//	'{'
-		//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-		//	'}';
+		//EnumerationTypeDefinition returns fmlType::EnumerationType
+		//    : {fmlType::EnumerationType}
+		//        ( visibility=VisibilityKind )? typedef?='type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//        '{'
+		//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::EnumerationType} visibility=VisibilityKind? typedef?='type' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? 'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')? '{'
-		//literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)* '}'
+		//{fmlType::EnumerationType}
+		//       ( visibility=VisibilityKind )? typedef?='type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//       '{'
+		//           literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::EnumerationType}
 		public Action getEnumerationTypeAction_0() { return cEnumerationTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -11630,7 +14222,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -11639,13 +14231,13 @@
 		//'enum'
 		public Keyword getEnumKeyword_5() { return cEnumKeyword_5; }
 		
-		//('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
+		//( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_6_0() { return cLessThanSignKeyword_6_0; }
 		
-		//'super:'?
+		//( 'super:' )?
 		public Keyword getSuperKeyword_6_1() { return cSuperKeyword_6_1; }
 		
 		//superType=[fmlType::EnumerationType|ESUfid]
@@ -11663,19 +14255,19 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_7() { return cLeftCurlyBracketKeyword_7; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_8() { return cLiteralAssignment_8; }
 		
 		//EnumerationLiteral
 		public RuleCall getLiteralEnumerationLiteralParserRuleCall_8_0() { return cLiteralEnumerationLiteralParserRuleCall_8_0; }
 		
-		//(',' literal+=EnumerationLiteral)*
+		//( ',' literal+= EnumerationLiteral )*
 		public Group getGroup_9() { return cGroup_9; }
 		
 		//','
 		public Keyword getCommaKeyword_9_0() { return cCommaKeyword_9_0; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_9_1() { return cLiteralAssignment_9_1; }
 		
 		//EnumerationLiteral
@@ -11710,17 +14302,24 @@
 		private final RuleCall cLiteralEnumerationLiteralParserRuleCall_7_1_0 = (RuleCall)cLiteralAssignment_7_1.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		
-		//EnumerationTypeDefinitionImpl fmlType::EnumerationType:
-		//	{fmlType::EnumerationType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	typedef?='enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-		//	'{'
-		//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-		//	'}';
+		//EnumerationTypeDefinitionImpl returns fmlType::EnumerationType
+		//    : {fmlType::EnumerationType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        typedef?='enum'
+		//        ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//        '{'
+		//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::EnumerationType} name=ESIdentifier unrestrictedName=UnrestrictedName? typedef?='enum' ('<' 'super:'?
-		//superType=[fmlType::EnumerationType|ESUfid] '>')? '{' literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-		//'}'
+		//{fmlType::EnumerationType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       typedef?='enum'
+		//       ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+		//       '{'
+		//           literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::EnumerationType}
@@ -11732,7 +14331,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
@@ -11744,13 +14343,13 @@
 		//'enum'
 		public Keyword getTypedefEnumKeyword_3_0() { return cTypedefEnumKeyword_3_0; }
 		
-		//('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
+		//( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
 		public Group getGroup_4() { return cGroup_4; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_4_0() { return cLessThanSignKeyword_4_0; }
 		
-		//'super:'?
+		//( 'super:' )?
 		public Keyword getSuperKeyword_4_1() { return cSuperKeyword_4_1; }
 		
 		//superType=[fmlType::EnumerationType|ESUfid]
@@ -11768,19 +14367,19 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5() { return cLeftCurlyBracketKeyword_5; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_6() { return cLiteralAssignment_6; }
 		
 		//EnumerationLiteral
 		public RuleCall getLiteralEnumerationLiteralParserRuleCall_6_0() { return cLiteralEnumerationLiteralParserRuleCall_6_0; }
 		
-		//(',' literal+=EnumerationLiteral)*
+		//( ',' literal+= EnumerationLiteral )*
 		public Group getGroup_7() { return cGroup_7; }
 		
 		//','
 		public Keyword getCommaKeyword_7_0() { return cCommaKeyword_7_0; }
 		
-		//literal+=EnumerationLiteral
+		//literal+= EnumerationLiteral
 		public Assignment getLiteralAssignment_7_1() { return cLiteralAssignment_7_1; }
 		
 		//EnumerationLiteral
@@ -11801,11 +14400,14 @@
 		private final Assignment cValueAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
 		private final RuleCall cValueLiteralTerminalExpressionParserRuleCall_2_1_0 = (RuleCall)cValueAssignment_2_1.eContents().get(0);
 		
-		//EnumerationLiteral fmlType::EnumerationLiteral:
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' value=LiteralTerminalExpression)?;
+		//EnumerationLiteral returns fmlType::EnumerationLiteral
+		//    : name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '=' value=LiteralTerminalExpression )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' value=LiteralTerminalExpression)?
+		//name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '=' value=LiteralTerminalExpression )?
 		public Group getGroup() { return cGroup; }
 		
 		//name=ESIdentifier
@@ -11814,13 +14416,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_0_0() { return cNameESIdentifierParserRuleCall_0_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_1() { return cUnrestrictedNameAssignment_1; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_1_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_1_0; }
 		
-		//('=' value=LiteralTerminalExpression)?
+		//( '=' value=LiteralTerminalExpression )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'='
@@ -11843,16 +14445,22 @@
 		private final RuleCall cPropertyVariableParserRuleCall_4_0 = (RuleCall)cPropertyAssignment_4.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//StructureType fmlType::StructureType:
-		//	{fmlType::StructureType}
-		//	'struct'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//StructureType returns fmlType::StructureType
+		//    : {fmlType::StructureType}
+		//        'struct'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::StructureType} 'struct' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::StructureType}
+		//       'struct'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::StructureType}
@@ -11864,10 +14472,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_3() { return cPropertyKeyword_3; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_4() { return cPropertyAssignment_4; }
 		
 		//Variable
@@ -11895,24 +14503,32 @@
 		private final RuleCall cPropertyVariableParserRuleCall_8_0 = (RuleCall)cPropertyAssignment_8.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
-		//StructureTypeDefinition fmlType::StructureType:
-		//	{fmlType::StructureType} visibility=VisibilityKind? typedef?='type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'struct'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//StructureTypeDefinition returns fmlType::StructureType
+		//    : {fmlType::StructureType}
+		//        ( visibility=VisibilityKind )? typedef?='type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'struct'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::StructureType} visibility=VisibilityKind? typedef?='type' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//'struct' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::StructureType}
+		//       ( visibility=VisibilityKind )? typedef?='type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'struct'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::StructureType}
 		public Action getStructureTypeAction_0() { return cStructureTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -11930,7 +14546,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -11942,10 +14558,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_7() { return cPropertyKeyword_7; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_8() { return cPropertyAssignment_8; }
 		
 		//Variable
@@ -11970,17 +14586,24 @@
 		private final RuleCall cPropertyVariableParserRuleCall_6_0 = (RuleCall)cPropertyAssignment_6.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
-		//StructureTypeDefinitionImpl fmlType::StructureType:
-		//	{fmlType::StructureType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	typedef?='struct'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//StructureTypeDefinitionImpl returns fmlType::StructureType
+		//    : {fmlType::StructureType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        typedef?='struct'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::StructureType} name=ESIdentifier unrestrictedName=UnrestrictedName? typedef?='struct' '{' '@property:'?
-		//property+=Variable+ '}'
+		//{fmlType::StructureType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       typedef?='struct'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::StructureType}
@@ -11992,7 +14615,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
@@ -12007,10 +14630,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_5() { return cPropertyKeyword_5; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_6() { return cPropertyAssignment_6; }
 		
 		//Variable
@@ -12030,16 +14653,22 @@
 		private final RuleCall cPropertyVariableParserRuleCall_4_0 = (RuleCall)cPropertyAssignment_4.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//UnionType fmlType::UnionType:
-		//	{fmlType::UnionType}
-		//	'union'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//UnionType returns fmlType::UnionType
+		//    : {fmlType::UnionType}
+		//        'union'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::UnionType} 'union' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::UnionType}
+		//       'union'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::UnionType}
@@ -12051,10 +14680,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_3() { return cPropertyKeyword_3; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_4() { return cPropertyAssignment_4; }
 		
 		//Variable
@@ -12082,24 +14711,32 @@
 		private final RuleCall cPropertyVariableParserRuleCall_8_0 = (RuleCall)cPropertyAssignment_8.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
-		//UnionTypeDefinition fmlType::UnionType:
-		//	{fmlType::UnionType} visibility=VisibilityKind? typedef?='type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'union'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//UnionTypeDefinition returns fmlType::UnionType
+		//    : {fmlType::UnionType}
+		//        ( visibility=VisibilityKind )? typedef?='type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'union'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::UnionType} visibility=VisibilityKind? typedef?='type' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//'union' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::UnionType}
+		//       ( visibility=VisibilityKind )? typedef?='type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'union'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::UnionType}
 		public Action getUnionTypeAction_0() { return cUnionTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -12117,7 +14754,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -12129,10 +14766,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_7() { return cPropertyKeyword_7; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_8() { return cPropertyAssignment_8; }
 		
 		//Variable
@@ -12157,17 +14794,24 @@
 		private final RuleCall cPropertyVariableParserRuleCall_6_0 = (RuleCall)cPropertyAssignment_6.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
-		//UnionTypeDefinitionImpl fmlType::UnionType:
-		//	{fmlType::UnionType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	typedef?='union'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//UnionTypeDefinitionImpl returns fmlType::UnionType
+		//    : {fmlType::UnionType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        typedef?='union'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::UnionType} name=ESIdentifier unrestrictedName=UnrestrictedName? typedef?='union' '{' '@property:'?
-		//property+=Variable+ '}'
+		//{fmlType::UnionType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       typedef?='union'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::UnionType}
@@ -12179,7 +14823,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
@@ -12194,10 +14838,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_5() { return cPropertyKeyword_5; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_6() { return cPropertyAssignment_6; }
 		
 		//Variable
@@ -12217,16 +14861,22 @@
 		private final RuleCall cPropertyVariableParserRuleCall_4_0 = (RuleCall)cPropertyAssignment_4.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//ChoiceType fmlType::ChoiceType:
-		//	{fmlType::ChoiceType}
-		//	'choice'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//ChoiceType returns fmlType::ChoiceType
+		//    : {fmlType::ChoiceType}
+		//        'choice'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::ChoiceType} 'choice' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::ChoiceType}
+		//       'choice'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::ChoiceType}
@@ -12238,10 +14888,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_3() { return cPropertyKeyword_3; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_4() { return cPropertyAssignment_4; }
 		
 		//Variable
@@ -12269,24 +14919,32 @@
 		private final RuleCall cPropertyVariableParserRuleCall_8_0 = (RuleCall)cPropertyAssignment_8.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_9 = (Keyword)cGroup.eContents().get(9);
 		
-		//ChoiceTypeDefinition fmlType::ChoiceType:
-		//	{fmlType::ChoiceType} visibility=VisibilityKind? typedef?='type'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'choice'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//ChoiceTypeDefinition returns fmlType::ChoiceType
+		//    : {fmlType::ChoiceType}
+		//        ( visibility=VisibilityKind )? typedef?='type'
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        'choice'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::ChoiceType} visibility=VisibilityKind? typedef?='type' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//'choice' '{' '@property:'? property+=Variable+ '}'
+		//{fmlType::ChoiceType}
+		//       ( visibility=VisibilityKind )? typedef?='type'
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       'choice'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::ChoiceType}
 		public Action getChoiceTypeAction_0() { return cChoiceTypeAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -12304,7 +14962,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -12316,10 +14974,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6() { return cLeftCurlyBracketKeyword_6; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_7() { return cPropertyKeyword_7; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_8() { return cPropertyAssignment_8; }
 		
 		//Variable
@@ -12344,17 +15002,24 @@
 		private final RuleCall cPropertyVariableParserRuleCall_6_0 = (RuleCall)cPropertyAssignment_6.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
-		//ChoiceTypeDefinitionImpl fmlType::ChoiceType:
-		//	{fmlType::ChoiceType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	typedef?='choice'
-		//	'{'
-		//	'@property:'?
-		//	property+=Variable+
-		//	'}';
+		//ChoiceTypeDefinitionImpl returns fmlType::ChoiceType
+		//    : {fmlType::ChoiceType}
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        typedef?='choice'
+		//        '{'
+		//            ( '@property:' )?
+		//            ( property+=Variable )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::ChoiceType} name=ESIdentifier unrestrictedName=UnrestrictedName? typedef?='choice' '{' '@property:'?
-		//property+=Variable+ '}'
+		//{fmlType::ChoiceType}
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       typedef?='choice'
+		//       '{'
+		//           ( '@property:' )?
+		//           ( property+=Variable )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::ChoiceType}
@@ -12366,7 +15031,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_1_0() { return cNameESIdentifierParserRuleCall_1_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_2() { return cUnrestrictedNameAssignment_2; }
 		
 		//UnrestrictedName
@@ -12381,10 +15046,10 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_4() { return cLeftCurlyBracketKeyword_4; }
 		
-		//'@property:'?
+		//( '@property:' )?
 		public Keyword getPropertyKeyword_5() { return cPropertyKeyword_5; }
 		
-		//property+=Variable+
+		//( property+=Variable )+
 		public Assignment getPropertyAssignment_6() { return cPropertyAssignment_6; }
 		
 		//Variable
@@ -12411,88 +15076,102 @@
 		
 		///*
 		//enum TypeSpecifyerKind returns TypeSpecifyerKind
-		//	: ALIAS = 'ALIAS'
-		//	| BOOLEAN = 'BOOLEAN'
-		//	| CHAR = 'CHAR'
-		//	| INT = 'INT'
-		//	| RATIONAL = 'RATIONAL'
-		//	| URATIONAL = 'URATIONAL'
-		//	| FLOAT = 'FLOAT'
-		//	| UFLOAT = 'UFLOAT'
-		//	| DOUBLE = 'DOUBLE'
-		//	| UDOUBLE = 'UDOUBLE'
-		//	| REAL = 'REAL'
-		//	| UREAL = 'UREAL'
-		//	| CTIME = 'CTIME'
-		//	| DTIME = 'DTIME'
-		//	| STRING = 'STRING'
-		//	| IDENTIFIER = 'IDENTIFIER'
-		//	| UFI = 'UFI'
-		//	| ARRAY = 'ARRAY'
-		//	| VECTOR = 'VECTOR'
-		//	| LIST = 'LIST'
-		//	| FIFO = 'FIFO'
-		//	| LIFO = 'LIFO'
-		//	| MULTISET = 'MULTISET'
-		//	| SET = 'SET'
-		//	| INTERVAL = 'INTERVAL'
-		//	| ENUM = 'ENUM'
-		//	| STRUCTURE = 'STRUCTURE'
-		//	| BUFFER = 'BUFFER'
-		//	| MESSAGE = 'MESSAGE'
-		//	| PORT = 'PORT'
-		//	| CONNECTION = 'CONNECTION'
-		//	| OPERATOR = 'OPERATOR'
-		//	| MACHINE = 'MACHINE'
-		//	| LAMBDA = 'LAMBDA'
-		//	| UNIVERSAL = 'UNIVERSAL'
-		//	;
-		//*/ ////////////////////////////////////////////////////////////////////////////////
+		//    : ALIAS = 'ALIAS'
+		//    | BOOLEAN = 'BOOLEAN'
+		//    | CHAR = 'CHAR'
+		//    | INT = 'INT'
+		//    | RATIONAL = 'RATIONAL'
+		//    | URATIONAL = 'URATIONAL'
+		//    | FLOAT = 'FLOAT'
+		//    | UFLOAT = 'UFLOAT'
+		//    | DOUBLE = 'DOUBLE'
+		//    | UDOUBLE = 'UDOUBLE'
+		//    | REAL = 'REAL'
+		//    | UREAL = 'UREAL'
+		//    | CTIME = 'CTIME'
+		//    | DTIME = 'DTIME'
+		//    | STRING = 'STRING'
+		//    | IDENTIFIER = 'IDENTIFIER'
+		//    | UFI = 'UFI'
+		//    | ARRAY = 'ARRAY'
+		//    | VECTOR = 'VECTOR'
+		//    | LIST = 'LIST'
+		//    | FIFO = 'FIFO'
+		//    | LIFO = 'LIFO'
+		//    | MULTISET = 'MULTISET'
+		//    | SET = 'SET'
+		//    | INTERVAL = 'INTERVAL'
+		//    | ENUM = 'ENUM'
+		//    | STRUCTURE = 'STRUCTURE'
+		//    | BUFFER = 'BUFFER'
+		//    | MESSAGE = 'MESSAGE'
+		//    | PORT = 'PORT'
+		//    | CONNECTION = 'CONNECTION'
+		//    | OPERATOR = 'OPERATOR'
+		//    | MACHINE = 'MACHINE'
+		//    | LAMBDA = 'LAMBDA'
+		//    | UNIVERSAL = 'UNIVERSAL'
+		//    ;
+		//*/
+		//////////////////////////////////////////////////////////////////////////////////
 		//// Modifier Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Modifier fmlInfra::Modifier:
-		//	{fmlInfra::Modifier} (static?='static'?
-		//	& final?='final'?
-		//	& volatile?='volatile'?
-		//	& transient?='transient'?
-		//	& optional?='optional'?);
+		//Modifier returns fmlInfra::Modifier
+		//    : {fmlInfra::Modifier}
+		//        ( ( static?='static' )?
+		//        & ( final ?='final'  )?
+		//        & ( volatile ?='volatile'  )?
+		//        & ( transient?='transient' )?
+		//        & ( optional?='optional' )?
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Modifier} (static?='static'? & final?='final'? & volatile?='volatile'? & transient?='transient'? &
-		//optional?='optional'?)
+		//{fmlInfra::Modifier}
+		//       ( ( static?='static' )?
+		//       & ( final ?='final'  )?
+		//       & ( volatile ?='volatile'  )?
+		//       & ( transient?='transient' )?
+		//       & ( optional?='optional' )?
+		//       )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Modifier}
 		public Action getModifierAction_0() { return cModifierAction_0; }
 		
-		//(static?='static'? & final?='final'? & volatile?='volatile'? & transient?='transient'? & optional?='optional'?)
+		//( ( static?='static' )?
+		//& ( final ?='final'  )?
+		//& ( volatile ?='volatile'  )?
+		//& ( transient?='transient' )?
+		//& ( optional?='optional' )?
+		//)
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//static?='static'?
+		//( static?='static' )?
 		public Assignment getStaticAssignment_1_0() { return cStaticAssignment_1_0; }
 		
 		//'static'
 		public Keyword getStaticStaticKeyword_1_0_0() { return cStaticStaticKeyword_1_0_0; }
 		
-		//final?='final'?
+		//( final ?='final'  )?
 		public Assignment getFinalAssignment_1_1() { return cFinalAssignment_1_1; }
 		
 		//'final'
 		public Keyword getFinalFinalKeyword_1_1_0() { return cFinalFinalKeyword_1_1_0; }
 		
-		//volatile?='volatile'?
+		//( volatile ?='volatile'  )?
 		public Assignment getVolatileAssignment_1_2() { return cVolatileAssignment_1_2; }
 		
 		//'volatile'
 		public Keyword getVolatileVolatileKeyword_1_2_0() { return cVolatileVolatileKeyword_1_2_0; }
 		
-		//transient?='transient'?
+		//( transient?='transient' )?
 		public Assignment getTransientAssignment_1_3() { return cTransientAssignment_1_3; }
 		
 		//'transient'
 		public Keyword getTransientTransientKeyword_1_3_0() { return cTransientTransientKeyword_1_3_0; }
 		
-		//optional?='optional'?
+		//( optional?='optional' )?
 		public Assignment getOptionalAssignment_1_4() { return cOptionalAssignment_1_4; }
 		
 		//'optional'
@@ -12531,25 +15210,42 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Function Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Function fmlInfra::Function:
-		//	{fmlInfra::Function} (visibility=VisibilityKind
-		//	& modifier=Modifier)?
-		//	'fun'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')?
-		//	'->' (resultSet=FormalParameterSet
-		//	| '(' resultSet=FormalParameterSet ')')
-		//	';';
+		//Function returns fmlInfra::Function
+		//    : {fmlInfra::Function}
+		//        ( visibility=VisibilityKind
+		//          & modifier=Modifier
+		//        )?
+		//        'fun'
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        '->'
+		//        (     resultSet=FormalParameterSet
+		//        | '(' resultSet=FormalParameterSet ')'
+		//        )
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Function} (visibility=VisibilityKind & modifier=Modifier)? 'fun' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? '->' (resultSet=FormalParameterSet | '('
-		//resultSet=FormalParameterSet ')') ';'
+		//{fmlInfra::Function}
+		//       ( visibility=VisibilityKind
+		//         & modifier=Modifier
+		//       )?
+		//       'fun'
+		//       name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       '->'
+		//       (     resultSet=FormalParameterSet
+		//       | '(' resultSet=FormalParameterSet ')'
+		//       )
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Function}
 		public Action getFunctionAction_0() { return cFunctionAction_0; }
 		
-		//(visibility=VisibilityKind & modifier=Modifier)?
+		//( visibility=VisibilityKind
+		//  & modifier=Modifier
+		//)?
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
 		//visibility=VisibilityKind
@@ -12573,19 +15269,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0() { return cLeftParenthesisKeyword_5_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_5_1() { return cParameterSetAssignment_5_1; }
 		
 		//FormalParameterSet
@@ -12597,7 +15293,9 @@
 		//'->'
 		public Keyword getHyphenMinusGreaterThanSignKeyword_6() { return cHyphenMinusGreaterThanSignKeyword_6; }
 		
-		//(resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')')
+		//(     resultSet=FormalParameterSet
+		//| '(' resultSet=FormalParameterSet ')'
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
 		//resultSet=FormalParameterSet
@@ -12651,23 +15349,36 @@
 		private final Keyword cRightParenthesisKeyword_7_1_2 = (Keyword)cGroup_7_1.eContents().get(2);
 		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		
-		//FunctionImpl fmlInfra::Function:
-		//	{fmlInfra::Function} modifier=Modifier?
-		//	'fun'
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')?
-		//	'->' (resultSet=FormalParameterSet
-		//	| '(' resultSet=FormalParameterSet ')')
-		//	';';
+		//FunctionImpl returns fmlInfra::Function
+		//    : {fmlInfra::Function}
+		//        ( modifier=Modifier )?
+		//        'fun'
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        '->'
+		//        (     resultSet=FormalParameterSet
+		//        | '(' resultSet=FormalParameterSet ')'
+		//        )
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Function} modifier=Modifier? 'fun' name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-		//parameterSet=FormalParameterSet? ')')? '->' (resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')') ';'
+		//{fmlInfra::Function}
+		//       ( modifier=Modifier )?
+		//       'fun'
+		//       name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       '->'
+		//       (     resultSet=FormalParameterSet
+		//       | '(' resultSet=FormalParameterSet ')'
+		//       )
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Function}
 		public Action getFunctionAction_0() { return cFunctionAction_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
 		
 		//Modifier
@@ -12682,19 +15393,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0() { return cLeftParenthesisKeyword_5_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_5_1() { return cParameterSetAssignment_5_1; }
 		
 		//FormalParameterSet
@@ -12706,7 +15417,9 @@
 		//'->'
 		public Keyword getHyphenMinusGreaterThanSignKeyword_6() { return cHyphenMinusGreaterThanSignKeyword_6; }
 		
-		//(resultSet=FormalParameterSet | '(' resultSet=FormalParameterSet ')')
+		//(     resultSet=FormalParameterSet
+		//| '(' resultSet=FormalParameterSet ')'
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
 		//resultSet=FormalParameterSet
@@ -12737,8 +15450,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.FunctionPublic");
 		private final RuleCall cFunctionImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//FunctionPublic fmlInfra::Function:
-		//	FunctionImpl;
+		//FunctionPublic returns fmlInfra::Function
+		//    : FunctionImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//FunctionImpl
@@ -12748,8 +15462,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.FunctionProtected");
 		private final RuleCall cFunctionImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//FunctionProtected fmlInfra::Function:
-		//	FunctionImpl;
+		//FunctionProtected returns fmlInfra::Function
+		//    : FunctionImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//FunctionImpl
@@ -12759,8 +15474,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.FunctionPrivate");
 		private final RuleCall cFunctionImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//FunctionPrivate fmlInfra::Function:
-		//	FunctionImpl;
+		//FunctionPrivate returns fmlInfra::Function
+		//    : FunctionImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//FunctionImpl
@@ -12785,29 +15501,41 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Variable Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//ModifierVar fmlInfra::Modifier:
-		//	{fmlInfra::Modifier} (static?='static'?
-		//	& final?=('final' | 'const')?
-		//	& volatile?='volatile'?
-		//	& transient?='transient'?);
+		//ModifierVar returns fmlInfra::Modifier
+		//    : {fmlInfra::Modifier}
+		//        ( ( static?='static' )?
+		//        & ( final ?=('final' | 'const') )?
+		//        & ( volatile ?='volatile'  )?
+		//        & ( transient?='transient' )?
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Modifier} (static?='static'? & final?=('final' | 'const')? & volatile?='volatile'? & transient?='transient'?)
+		//{fmlInfra::Modifier}
+		//       ( ( static?='static' )?
+		//       & ( final ?=('final' | 'const') )?
+		//       & ( volatile ?='volatile'  )?
+		//       & ( transient?='transient' )?
+		//       )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Modifier}
 		public Action getModifierAction_0() { return cModifierAction_0; }
 		
-		//(static?='static'? & final?=('final' | 'const')? & volatile?='volatile'? & transient?='transient'?)
+		//( ( static?='static' )?
+		//& ( final ?=('final' | 'const') )?
+		//& ( volatile ?='volatile'  )?
+		//& ( transient?='transient' )?
+		//)
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
-		//static?='static'?
+		//( static?='static' )?
 		public Assignment getStaticAssignment_1_0() { return cStaticAssignment_1_0; }
 		
 		//'static'
 		public Keyword getStaticStaticKeyword_1_0_0() { return cStaticStaticKeyword_1_0_0; }
 		
-		//final?=('final' | 'const')?
+		//( final ?=('final' | 'const') )?
 		public Assignment getFinalAssignment_1_1() { return cFinalAssignment_1_1; }
 		
 		//('final' | 'const')
@@ -12819,13 +15547,13 @@
 		//'const'
 		public Keyword getFinalConstKeyword_1_1_0_1() { return cFinalConstKeyword_1_1_0_1; }
 		
-		//volatile?='volatile'?
+		//( volatile ?='volatile'  )?
 		public Assignment getVolatileAssignment_1_2() { return cVolatileAssignment_1_2; }
 		
 		//'volatile'
 		public Keyword getVolatileVolatileKeyword_1_2_0() { return cVolatileVolatileKeyword_1_2_0; }
 		
-		//transient?='transient'?
+		//( transient?='transient' )?
 		public Assignment getTransientAssignment_1_3() { return cTransientAssignment_1_3; }
 		
 		//'transient'
@@ -12879,37 +15607,59 @@
 		private final Keyword cRightCurlyBracketKeyword_7_0_2 = (Keyword)cGroup_7_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_7_1 = (Keyword)cAlternatives_7.eContents().get(1);
 		
-		//Variable fmlInfra::Variable:
-		//	(visibility=VisibilityKind?
-		//	& modifier=Modifier?) ('var' | const?='val'
-		//	| (const?='const' | const?='final') macro?='macro'? 'var'?
-		//	| macro?='macro' ('var' | const?='val')?) type=DataType reference?='&'?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine
-		//	'}' | ';');
+		//Variable returns fmlInfra::Variable
+		//    : ( ( visibility=VisibilityKind )?
+		//        & ( modifier=Modifier )?
+		//        )
+		//        ( 'var' | const?='val'
+		//        | ( const?='const' | const?='final' ) ( macro?='macro' )? ( 'var' )?
+		//        | macro?='macro' ( 'var' | const?='val' )?
+		//        )
+		//         type=DataType  ( reference?='&' )?
+		//         name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '=' defaultValue=Expression )?
+		//        ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//        | ';'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//(visibility=VisibilityKind? & modifier=Modifier?) ('var' | const?='val' | (const?='const' | const?='final')
-		//macro?='macro'? 'var'? | macro?='macro' ('var' | const?='val')?) type=DataType reference?='&'? name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine '}' | ';')
+		//( ( visibility=VisibilityKind )?
+		//       & ( modifier=Modifier )?
+		//       )
+		//       ( 'var' | const?='val'
+		//       | ( const?='const' | const?='final' ) ( macro?='macro' )? ( 'var' )?
+		//       | macro?='macro' ( 'var' | const?='val' )?
+		//       )
+		//        type=DataType  ( reference?='&' )?
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '=' defaultValue=Expression )?
+		//       ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//       | ';'
+		//       )
 		public Group getGroup() { return cGroup; }
 		
-		//(visibility=VisibilityKind? & modifier=Modifier?)
+		//( ( visibility=VisibilityKind )?
+		//       & ( modifier=Modifier )?
+		//       )
 		public UnorderedGroup getUnorderedGroup_0() { return cUnorderedGroup_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_0_0() { return cVisibilityAssignment_0_0; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_0_0_0() { return cVisibilityVisibilityKindEnumRuleCall_0_0_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_0_1() { return cModifierAssignment_0_1; }
 		
 		//Modifier
 		public RuleCall getModifierModifierParserRuleCall_0_1_0() { return cModifierModifierParserRuleCall_0_1_0; }
 		
-		//('var' | const?='val' | (const?='const' | const?='final') macro?='macro'? 'var'? | macro?='macro' ('var' |
-		//const?='val')?)
+		//( 'var' | const?='val'
+		//| ( const?='const' | const?='final' ) ( macro?='macro' )? ( 'var' )?
+		//| macro?='macro' ( 'var' | const?='val' )?
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'var'
@@ -12921,10 +15671,10 @@
 		//'val'
 		public Keyword getConstValKeyword_1_1_0() { return cConstValKeyword_1_1_0; }
 		
-		//(const?='const' | const?='final') macro?='macro'? 'var'?
+		//( const?='const' | const?='final' ) ( macro?='macro' )? ( 'var' )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
-		//(const?='const' | const?='final')
+		//( const?='const' | const?='final' )
 		public Alternatives getAlternatives_1_2_0() { return cAlternatives_1_2_0; }
 		
 		//const?='const'
@@ -12939,16 +15689,16 @@
 		//'final'
 		public Keyword getConstFinalKeyword_1_2_0_1_0() { return cConstFinalKeyword_1_2_0_1_0; }
 		
-		//macro?='macro'?
+		//( macro?='macro' )?
 		public Assignment getMacroAssignment_1_2_1() { return cMacroAssignment_1_2_1; }
 		
 		//'macro'
 		public Keyword getMacroMacroKeyword_1_2_1_0() { return cMacroMacroKeyword_1_2_1_0; }
 		
-		//'var'?
+		//( 'var' )?
 		public Keyword getVarKeyword_1_2_2() { return cVarKeyword_1_2_2; }
 		
-		//macro?='macro' ('var' | const?='val')?
+		//macro?='macro' ( 'var' | const?='val' )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//macro?='macro'
@@ -12957,7 +15707,7 @@
 		//'macro'
 		public Keyword getMacroMacroKeyword_1_3_0_0() { return cMacroMacroKeyword_1_3_0_0; }
 		
-		//('var' | const?='val')?
+		//( 'var' | const?='val' )?
 		public Alternatives getAlternatives_1_3_1() { return cAlternatives_1_3_1; }
 		
 		//'var'
@@ -12975,7 +15725,7 @@
 		//DataType
 		public RuleCall getTypeDataTypeParserRuleCall_2_0() { return cTypeDataTypeParserRuleCall_2_0; }
 		
-		//reference?='&'?
+		//( reference?='&' )?
 		public Assignment getReferenceAssignment_3() { return cReferenceAssignment_3; }
 		
 		//'&'
@@ -12987,13 +15737,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_5_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//'='
@@ -13005,10 +15755,12 @@
 		//Expression
 		public RuleCall getDefaultValueExpressionParserRuleCall_6_1_0() { return cDefaultValueExpressionParserRuleCall_6_1_0; }
 		
-		//('{' onWriteAction=OnWriteRoutine '}' | ';')
+		//( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//| ';'
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'{' onWriteAction=OnWriteRoutine '}'
+		//( '{' onWriteAction=OnWriteRoutine  '}' )
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'{'
@@ -13068,26 +15820,44 @@
 		private final Keyword cRightCurlyBracketKeyword_7_0_2 = (Keyword)cGroup_7_0.eContents().get(2);
 		private final Keyword cSemicolonKeyword_7_1 = (Keyword)cAlternatives_7.eContents().get(1);
 		
-		//VariableImpl fmlInfra::Variable:
-		//	modifier=Modifier? ('var' | const?='val'
-		//	| const?='const' macro?='macro'? 'var'?
-		//	| macro?='macro' ('var' | const?='val')?) type=DataType reference?='&'?
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine
-		//	'}' | ';');
+		//VariableImpl returns fmlInfra::Variable
+		//    : ( modifier=Modifier )?
+		//        ( 'var' | const?='val'
+		//        | const?='const' ( macro?='macro' )? ( 'var' )?
+		//        | macro?='macro' ( 'var' | const?='val' )?
+		//        )
+		//         type=DataType  ( reference?='&' )?
+		//         name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '=' defaultValue=Expression )?
+		//        ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//        | ';'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//modifier=Modifier? ('var' | const?='val' | const?='const' macro?='macro'? 'var'? | macro?='macro' ('var' |
-		//const?='val')?) type=DataType reference?='&'? name=ESIdentifier unrestrictedName=UnrestrictedName? ('='
-		//defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine '}' | ';')
+		//( modifier=Modifier )?
+		//       ( 'var' | const?='val'
+		//       | const?='const' ( macro?='macro' )? ( 'var' )?
+		//       | macro?='macro' ( 'var' | const?='val' )?
+		//       )
+		//        type=DataType  ( reference?='&' )?
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '=' defaultValue=Expression )?
+		//       ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//       | ';'
+		//       )
 		public Group getGroup() { return cGroup; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_0() { return cModifierAssignment_0; }
 		
 		//Modifier
 		public RuleCall getModifierModifierParserRuleCall_0_0() { return cModifierModifierParserRuleCall_0_0; }
 		
-		//('var' | const?='val' | const?='const' macro?='macro'? 'var'? | macro?='macro' ('var' | const?='val')?)
+		//( 'var' | const?='val'
+		//| const?='const' ( macro?='macro' )? ( 'var' )?
+		//| macro?='macro' ( 'var' | const?='val' )?
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'var'
@@ -13099,7 +15869,7 @@
 		//'val'
 		public Keyword getConstValKeyword_1_1_0() { return cConstValKeyword_1_1_0; }
 		
-		//const?='const' macro?='macro'? 'var'?
+		//const?='const' ( macro?='macro' )? ( 'var' )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//const?='const'
@@ -13108,16 +15878,16 @@
 		//'const'
 		public Keyword getConstConstKeyword_1_2_0_0() { return cConstConstKeyword_1_2_0_0; }
 		
-		//macro?='macro'?
+		//( macro?='macro' )?
 		public Assignment getMacroAssignment_1_2_1() { return cMacroAssignment_1_2_1; }
 		
 		//'macro'
 		public Keyword getMacroMacroKeyword_1_2_1_0() { return cMacroMacroKeyword_1_2_1_0; }
 		
-		//'var'?
+		//( 'var' )?
 		public Keyword getVarKeyword_1_2_2() { return cVarKeyword_1_2_2; }
 		
-		//macro?='macro' ('var' | const?='val')?
+		//macro?='macro' ( 'var' | const?='val' )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//macro?='macro'
@@ -13126,7 +15896,7 @@
 		//'macro'
 		public Keyword getMacroMacroKeyword_1_3_0_0() { return cMacroMacroKeyword_1_3_0_0; }
 		
-		//('var' | const?='val')?
+		//( 'var' | const?='val' )?
 		public Alternatives getAlternatives_1_3_1() { return cAlternatives_1_3_1; }
 		
 		//'var'
@@ -13144,7 +15914,7 @@
 		//DataType
 		public RuleCall getTypeDataTypeParserRuleCall_2_0() { return cTypeDataTypeParserRuleCall_2_0; }
 		
-		//reference?='&'?
+		//( reference?='&' )?
 		public Assignment getReferenceAssignment_3() { return cReferenceAssignment_3; }
 		
 		//'&'
@@ -13156,13 +15926,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_5_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//'='
@@ -13174,10 +15944,12 @@
 		//Expression
 		public RuleCall getDefaultValueExpressionParserRuleCall_6_1_0() { return cDefaultValueExpressionParserRuleCall_6_1_0; }
 		
-		//('{' onWriteAction=OnWriteRoutine '}' | ';')
+		//( ( '{' onWriteAction=OnWriteRoutine  '}' )
+		//| ';'
+		//)
 		public Alternatives getAlternatives_7() { return cAlternatives_7; }
 		
-		//'{' onWriteAction=OnWriteRoutine '}'
+		//( '{' onWriteAction=OnWriteRoutine  '}' )
 		public Group getGroup_7_0() { return cGroup_7_0; }
 		
 		//'{'
@@ -13210,19 +15982,24 @@
 		private final Assignment cBodyBlockAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_3_0 = (RuleCall)cBodyBlockAssignment_3.eContents().get(0);
 		
-		//OnWriteRoutine fmlInfra::Routine:
-		//	{fmlInfra::Routine} ('@write' | '@on_write') ('(' parameterSet=VariableRoutineParameterSet ')')?
-		//	bodyBlock=BlockStatement;
+		//OnWriteRoutine returns fmlInfra::Routine
+		//    : { fmlInfra::Routine }
+		//        ( '@write' | '@on_write' )
+		//        ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Routine} ('@write' | '@on_write') ('(' parameterSet=VariableRoutineParameterSet ')')?
-		//bodyBlock=BlockStatement
+		//{ fmlInfra::Routine }
+		//       ( '@write' | '@on_write' )
+		//       ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+		//       bodyBlock=BlockStatement
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlInfra::Routine}
+		//{ fmlInfra::Routine }
 		public Action getRoutineAction_0() { return cRoutineAction_0; }
 		
-		//('@write' | '@on_write')
+		//( '@write' | '@on_write' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'@write'
@@ -13231,7 +16008,7 @@
 		//'@on_write'
 		public Keyword getOn_writeKeyword_1_1() { return cOn_writeKeyword_1_1; }
 		
-		//('(' parameterSet=VariableRoutineParameterSet ')')?
+		//( '(' parameterSet=VariableRoutineParameterSet ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -13259,11 +16036,14 @@
 		private final Assignment cParameterAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cParameterVariableRoutineParameterParserRuleCall_1_0 = (RuleCall)cParameterAssignment_1.eContents().get(0);
 		
-		//VariableRoutineParameterSet fmlInfra::ParameterSet:
-		//	{fmlInfra::ParameterSet} parameter+=VariableRoutineParameter;
+		//VariableRoutineParameterSet returns fmlInfra::ParameterSet
+		//    : {fmlInfra::ParameterSet}
+		//        parameter+=VariableRoutineParameter
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ParameterSet} parameter+=VariableRoutineParameter
+		//{fmlInfra::ParameterSet}
+		//       parameter+=VariableRoutineParameter
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::ParameterSet}
@@ -13290,26 +16070,32 @@
 		private final Assignment cDefaultValueAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
 		private final RuleCall cDefaultValueExpressionParserRuleCall_4_1_0 = (RuleCall)cDefaultValueAssignment_4_1.eContents().get(0);
 		
-		//VariableRoutineParameter fmlInfra::Parameter:
-		//	FormalParameterOffset?
-		//	direction=ParameterDirectionKind?
-		//	type=DataType?
-		//	name=ESIdentifier ('=' defaultValue=Expression)?;
+		//VariableRoutineParameter returns fmlInfra::Parameter
+		//    : ( FormalParameterOffset )?
+		//        ( direction=ParameterDirectionKind )?
+		//        ( type=DataType )?
+		//        name=ESIdentifier
+		//        ( '=' defaultValue=Expression )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//FormalParameterOffset? direction=ParameterDirectionKind? type=DataType? name=ESIdentifier ('=' defaultValue=Expression)?
+		//( FormalParameterOffset )?
+		//       ( direction=ParameterDirectionKind )?
+		//       ( type=DataType )?
+		//       name=ESIdentifier
+		//       ( '=' defaultValue=Expression )?
 		public Group getGroup() { return cGroup; }
 		
-		//FormalParameterOffset?
+		//( FormalParameterOffset )?
 		public RuleCall getFormalParameterOffsetParserRuleCall_0() { return cFormalParameterOffsetParserRuleCall_0; }
 		
-		//direction=ParameterDirectionKind?
+		//( direction=ParameterDirectionKind )?
 		public Assignment getDirectionAssignment_1() { return cDirectionAssignment_1; }
 		
 		//ParameterDirectionKind
 		public RuleCall getDirectionParameterDirectionKindEnumRuleCall_1_0() { return cDirectionParameterDirectionKindEnumRuleCall_1_0; }
 		
-		//type=DataType?
+		//( type=DataType )?
 		public Assignment getTypeAssignment_2() { return cTypeAssignment_2; }
 		
 		//DataType
@@ -13321,7 +16107,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_4() { return cGroup_4; }
 		
 		//'='
@@ -13337,8 +16123,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.VariablePublic");
 		private final RuleCall cVariableImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//VariablePublic fmlInfra::Variable:
-		//	VariableImpl;
+		//VariablePublic returns fmlInfra::Variable
+		//    : VariableImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//VariableImpl
@@ -13348,8 +16135,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.VariableProtected");
 		private final RuleCall cVariableImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//VariableProtected fmlInfra::Variable:
-		//	VariableImpl;
+		//VariableProtected returns fmlInfra::Variable
+		//    : VariableImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//VariableImpl
@@ -13359,8 +16147,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.VariablePrivate");
 		private final RuleCall cVariableImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//VariablePrivate fmlInfra::Variable:
-		//	VariableImpl;
+		//VariablePrivate returns fmlInfra::Variable
+		//    : VariableImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//VariableImpl
@@ -13377,11 +16166,16 @@
 		private final Assignment cParameterAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
 		private final RuleCall cParameterFunctionalParameterParserRuleCall_2_1_0 = (RuleCall)cParameterAssignment_2_1.eContents().get(0);
 		
-		//FunctionalParameterSet fmlInfra::ParameterSet:
-		//	{fmlInfra::ParameterSet} parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*;
+		//FunctionalParameterSet returns fmlInfra::ParameterSet
+		//    : {fmlInfra::ParameterSet}
+		//        parameter+=FunctionalParameter
+		//        ( ',' parameter+=FunctionalParameter )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ParameterSet} parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*
+		//{fmlInfra::ParameterSet}
+		//       parameter+=FunctionalParameter
+		//       ( ',' parameter+=FunctionalParameter )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::ParameterSet}
@@ -13393,7 +16187,7 @@
 		//FunctionalParameter
 		public RuleCall getParameterFunctionalParameterParserRuleCall_1_0() { return cParameterFunctionalParameterParserRuleCall_1_0; }
 		
-		//(',' parameter+=FunctionalParameter)*
+		//( ',' parameter+=FunctionalParameter )*
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//','
@@ -13420,18 +16214,24 @@
 		private final Assignment cDefaultValueAssignment_4_1 = (Assignment)cGroup_4.eContents().get(1);
 		private final RuleCall cDefaultValueExpressionParserRuleCall_4_1_0 = (RuleCall)cDefaultValueAssignment_4_1.eContents().get(0);
 		
-		//FunctionalParameter fmlInfra::Parameter:
-		//	{fmlInfra::Parameter} direction=ParameterDirectionKind? type=DataType
-		//	name=ESIdentifier ('=' defaultValue=Expression)?;
+		//FunctionalParameter returns fmlInfra::Parameter
+		//    : {fmlInfra::Parameter}
+		//        ( direction=ParameterDirectionKind )?  type=DataType
+		//         name=ESIdentifier
+		//        ( '=' defaultValue=Expression )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Parameter} direction=ParameterDirectionKind? type=DataType name=ESIdentifier ('=' defaultValue=Expression)?
+		//{fmlInfra::Parameter}
+		//       ( direction=ParameterDirectionKind )?  type=DataType
+		//        name=ESIdentifier
+		//       ( '=' defaultValue=Expression )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Parameter}
 		public Action getParameterAction_0() { return cParameterAction_0; }
 		
-		//direction=ParameterDirectionKind?
+		//( direction=ParameterDirectionKind )?
 		public Assignment getDirectionAssignment_1() { return cDirectionAssignment_1; }
 		
 		//ParameterDirectionKind
@@ -13449,7 +16249,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_4() { return cGroup_4; }
 		
 		//'='
@@ -13472,11 +16272,16 @@
 		private final Assignment cParameterAssignment_2_1 = (Assignment)cGroup_2.eContents().get(1);
 		private final RuleCall cParameterFormalParameterParserRuleCall_2_1_0 = (RuleCall)cParameterAssignment_2_1.eContents().get(0);
 		
-		//FormalParameterSet fmlInfra::ParameterSet:
-		//	{fmlInfra::ParameterSet} parameter+=FormalParameter (',' parameter+=FormalParameter)*;
+		//FormalParameterSet returns fmlInfra::ParameterSet
+		//    : {fmlInfra::ParameterSet}
+		//        parameter+=FormalParameter
+		//        ( ',' parameter+=FormalParameter )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ParameterSet} parameter+=FormalParameter (',' parameter+=FormalParameter)*
+		//{fmlInfra::ParameterSet}
+		//       parameter+=FormalParameter
+		//       ( ',' parameter+=FormalParameter )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::ParameterSet}
@@ -13488,7 +16293,7 @@
 		//FormalParameter
 		public RuleCall getParameterFormalParameterParserRuleCall_1_0() { return cParameterFormalParameterParserRuleCall_1_0; }
 		
-		//(',' parameter+=FormalParameter)*
+		//( ',' parameter+=FormalParameter )*
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//','
@@ -13518,29 +16323,35 @@
 		private final Assignment cDefaultValueAssignment_6_1 = (Assignment)cGroup_6.eContents().get(1);
 		private final RuleCall cDefaultValueExpressionParserRuleCall_6_1_0 = (RuleCall)cDefaultValueAssignment_6_1.eContents().get(0);
 		
-		//FormalParameter fmlInfra::Parameter:
-		//	{fmlInfra::Parameter} FormalParameterOffset?
-		//	direction=ParameterDirectionKind? modifier=Modifier?
-		//	type=DataType name=ESIdentifier? ('=' defaultValue=Expression)?;
+		//FormalParameter returns fmlInfra::Parameter
+		//    : {fmlInfra::Parameter}
+		//        ( FormalParameterOffset )?
+		//        ( direction=ParameterDirectionKind )? ( modifier=Modifier )?
+		//        type=DataType  ( name=ESIdentifier )?
+		//        ( '=' defaultValue=Expression )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Parameter} FormalParameterOffset? direction=ParameterDirectionKind? modifier=Modifier? type=DataType
-		//name=ESIdentifier? ('=' defaultValue=Expression)?
+		//{fmlInfra::Parameter}
+		//       ( FormalParameterOffset )?
+		//       ( direction=ParameterDirectionKind )? ( modifier=Modifier )?
+		//       type=DataType  ( name=ESIdentifier )?
+		//       ( '=' defaultValue=Expression )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Parameter}
 		public Action getParameterAction_0() { return cParameterAction_0; }
 		
-		//FormalParameterOffset?
+		//( FormalParameterOffset )?
 		public RuleCall getFormalParameterOffsetParserRuleCall_1() { return cFormalParameterOffsetParserRuleCall_1; }
 		
-		//direction=ParameterDirectionKind?
+		//( direction=ParameterDirectionKind )?
 		public Assignment getDirectionAssignment_2() { return cDirectionAssignment_2; }
 		
 		//ParameterDirectionKind
 		public RuleCall getDirectionParameterDirectionKindEnumRuleCall_2_0() { return cDirectionParameterDirectionKindEnumRuleCall_2_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_3() { return cModifierAssignment_3; }
 		
 		//Modifier
@@ -13552,13 +16363,13 @@
 		//DataType
 		public RuleCall getTypeDataTypeParserRuleCall_4_0() { return cTypeDataTypeParserRuleCall_4_0; }
 		
-		//name=ESIdentifier?
+		//( name=ESIdentifier )?
 		public Assignment getNameAssignment_5() { return cNameAssignment_5; }
 		
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_5_0() { return cNameESIdentifierParserRuleCall_5_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//'='
@@ -13574,8 +16385,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.FormalParameterOffset");
 		private final RuleCall cEOffsetParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//FormalParameterOffset:
-		//	EOffset;
+		//FormalParameterOffset
+		//    : EOffset
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//EOffset
@@ -13630,34 +16442,82 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Block ParameterSet Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//BlockParameterSet fmlInfra::ParameterSet:
-		//	{fmlInfra::ParameterSet} ('input' (parameter+=ParameterInput
-		//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-		//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-		//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-		//	| '{' parameter+=ParameterReturn+ '}'))*;
+		//BlockParameterSet returns fmlInfra::ParameterSet
+		//    : {fmlInfra::ParameterSet}
+		//        ( 'input'
+		//            ( parameter+=ParameterInput
+		//            | '{' ( parameter+=ParameterInput )+ '}'
+		//            )
+		//        | 'inout'
+		//            ( parameter+=ParameterInout
+		//            | '{' ( parameter+=ParameterInout )+ '}'
+		//            )
+		//        | 'output'
+		//            ( parameter+=ParameterOutput
+		//            | '{' ( parameter+=ParameterOutput )+ '}'
+		//            )
+		//        | 'return'
+		//            ( parameter+=ParameterReturn
+		//            | '{' ( parameter+=ParameterReturn )+ '}'
+		//            )
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::ParameterSet} ('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout'
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{'
-		//parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//{fmlInfra::ParameterSet}
+		//       ( 'input'
+		//           ( parameter+=ParameterInput
+		//           | '{' ( parameter+=ParameterInput )+ '}'
+		//           )
+		//       | 'inout'
+		//           ( parameter+=ParameterInout
+		//           | '{' ( parameter+=ParameterInout )+ '}'
+		//           )
+		//       | 'output'
+		//           ( parameter+=ParameterOutput
+		//           | '{' ( parameter+=ParameterOutput )+ '}'
+		//           )
+		//       | 'return'
+		//           ( parameter+=ParameterReturn
+		//           | '{' ( parameter+=ParameterReturn )+ '}'
+		//           )
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::ParameterSet}
 		public Action getParameterSetAction_0() { return cParameterSetAction_0; }
 		
-		//('input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout | '{'
-		//parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}') |
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}'))*
+		//( 'input'
+		//    ( parameter+=ParameterInput
+		//    | '{' ( parameter+=ParameterInput )+ '}'
+		//    )
+		//| 'inout'
+		//    ( parameter+=ParameterInout
+		//    | '{' ( parameter+=ParameterInout )+ '}'
+		//    )
+		//| 'output'
+		//    ( parameter+=ParameterOutput
+		//    | '{' ( parameter+=ParameterOutput )+ '}'
+		//    )
+		//| 'return'
+		//    ( parameter+=ParameterReturn
+		//    | '{' ( parameter+=ParameterReturn )+ '}'
+		//    )
+		//)*
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//'input' (parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//'input'
+		//           ( parameter+=ParameterInput
+		//           | '{' ( parameter+=ParameterInput )+ '}'
+		//           )
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//'input'
 		public Keyword getInputKeyword_1_0_0() { return cInputKeyword_1_0_0; }
 		
-		//(parameter+=ParameterInput | '{' parameter+=ParameterInput+ '}')
+		//( parameter+=ParameterInput
+		//| '{' ( parameter+=ParameterInput )+ '}'
+		//)
 		public Alternatives getAlternatives_1_0_1() { return cAlternatives_1_0_1; }
 		
 		//parameter+=ParameterInput
@@ -13666,13 +16526,13 @@
 		//ParameterInput
 		public RuleCall getParameterParameterInputParserRuleCall_1_0_1_0_0() { return cParameterParameterInputParserRuleCall_1_0_1_0_0; }
 		
-		//'{' parameter+=ParameterInput+ '}'
+		//'{' ( parameter+=ParameterInput )+ '}'
 		public Group getGroup_1_0_1_1() { return cGroup_1_0_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_0_1_1_0() { return cLeftCurlyBracketKeyword_1_0_1_1_0; }
 		
-		//parameter+=ParameterInput+
+		//( parameter+=ParameterInput )+
 		public Assignment getParameterAssignment_1_0_1_1_1() { return cParameterAssignment_1_0_1_1_1; }
 		
 		//ParameterInput
@@ -13681,13 +16541,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_0_1_1_2() { return cRightCurlyBracketKeyword_1_0_1_1_2; }
 		
-		//'inout' (parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//'inout'
+		//           ( parameter+=ParameterInout
+		//           | '{' ( parameter+=ParameterInout )+ '}'
+		//           )
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'inout'
 		public Keyword getInoutKeyword_1_1_0() { return cInoutKeyword_1_1_0; }
 		
-		//(parameter+=ParameterInout | '{' parameter+=ParameterInout+ '}')
+		//( parameter+=ParameterInout
+		//| '{' ( parameter+=ParameterInout )+ '}'
+		//)
 		public Alternatives getAlternatives_1_1_1() { return cAlternatives_1_1_1; }
 		
 		//parameter+=ParameterInout
@@ -13696,13 +16561,13 @@
 		//ParameterInout
 		public RuleCall getParameterParameterInoutParserRuleCall_1_1_1_0_0() { return cParameterParameterInoutParserRuleCall_1_1_1_0_0; }
 		
-		//'{' parameter+=ParameterInout+ '}'
+		//'{' ( parameter+=ParameterInout )+ '}'
 		public Group getGroup_1_1_1_1() { return cGroup_1_1_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_1_1_1_0() { return cLeftCurlyBracketKeyword_1_1_1_1_0; }
 		
-		//parameter+=ParameterInout+
+		//( parameter+=ParameterInout )+
 		public Assignment getParameterAssignment_1_1_1_1_1() { return cParameterAssignment_1_1_1_1_1; }
 		
 		//ParameterInout
@@ -13711,13 +16576,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_1_1_1_2() { return cRightCurlyBracketKeyword_1_1_1_1_2; }
 		
-		//'output' (parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//'output'
+		//           ( parameter+=ParameterOutput
+		//           | '{' ( parameter+=ParameterOutput )+ '}'
+		//           )
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'output'
 		public Keyword getOutputKeyword_1_2_0() { return cOutputKeyword_1_2_0; }
 		
-		//(parameter+=ParameterOutput | '{' parameter+=ParameterOutput+ '}')
+		//( parameter+=ParameterOutput
+		//| '{' ( parameter+=ParameterOutput )+ '}'
+		//)
 		public Alternatives getAlternatives_1_2_1() { return cAlternatives_1_2_1; }
 		
 		//parameter+=ParameterOutput
@@ -13726,13 +16596,13 @@
 		//ParameterOutput
 		public RuleCall getParameterParameterOutputParserRuleCall_1_2_1_0_0() { return cParameterParameterOutputParserRuleCall_1_2_1_0_0; }
 		
-		//'{' parameter+=ParameterOutput+ '}'
+		//'{' ( parameter+=ParameterOutput )+ '}'
 		public Group getGroup_1_2_1_1() { return cGroup_1_2_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_2_1_1_0() { return cLeftCurlyBracketKeyword_1_2_1_1_0; }
 		
-		//parameter+=ParameterOutput+
+		//( parameter+=ParameterOutput )+
 		public Assignment getParameterAssignment_1_2_1_1_1() { return cParameterAssignment_1_2_1_1_1; }
 		
 		//ParameterOutput
@@ -13741,13 +16611,18 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_1_2_1_1_2() { return cRightCurlyBracketKeyword_1_2_1_1_2; }
 		
-		//'return' (parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//'return'
+		//           ( parameter+=ParameterReturn
+		//           | '{' ( parameter+=ParameterReturn )+ '}'
+		//           )
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'return'
 		public Keyword getReturnKeyword_1_3_0() { return cReturnKeyword_1_3_0; }
 		
-		//(parameter+=ParameterReturn | '{' parameter+=ParameterReturn+ '}')
+		//( parameter+=ParameterReturn
+		//| '{' ( parameter+=ParameterReturn )+ '}'
+		//)
 		public Alternatives getAlternatives_1_3_1() { return cAlternatives_1_3_1; }
 		
 		//parameter+=ParameterReturn
@@ -13756,13 +16631,13 @@
 		//ParameterReturn
 		public RuleCall getParameterParameterReturnParserRuleCall_1_3_1_0_0() { return cParameterParameterReturnParserRuleCall_1_3_1_0_0; }
 		
-		//'{' parameter+=ParameterReturn+ '}'
+		//'{' ( parameter+=ParameterReturn )+ '}'
 		public Group getGroup_1_3_1_1() { return cGroup_1_3_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1_3_1_1_0() { return cLeftCurlyBracketKeyword_1_3_1_1_0; }
 		
-		//parameter+=ParameterReturn+
+		//( parameter+=ParameterReturn )+
 		public Assignment getParameterAssignment_1_3_1_1_1() { return cParameterAssignment_1_3_1_1_1; }
 		
 		//ParameterReturn
@@ -13792,21 +16667,28 @@
 		private final RuleCall cDefaultValueExpressionParserRuleCall_7_1_0 = (RuleCall)cDefaultValueAssignment_7_1.eContents().get(0);
 		private final Keyword cSemicolonKeyword_8 = (Keyword)cGroup.eContents().get(8);
 		
-		//Parameter fmlInfra::Parameter:
-		//	{fmlInfra::Parameter} visibility=VisibilityKind?
-		//	direction=ParameterDirectionKind
-		//	'var' type=DataType
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ';';
+		//Parameter returns fmlInfra::Parameter
+		//    : {fmlInfra::Parameter}
+		//        ( visibility=VisibilityKind )?
+		//        direction=ParameterDirectionKind
+		//        'var'  type=DataType
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '=' defaultValue=Expression )?  ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Parameter} visibility=VisibilityKind? direction=ParameterDirectionKind 'var' type=DataType name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ';'
+		//{fmlInfra::Parameter}
+		//       ( visibility=VisibilityKind )?
+		//       direction=ParameterDirectionKind
+		//       'var'  type=DataType
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '=' defaultValue=Expression )?  ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Parameter}
 		public Action getParameterAction_0() { return cParameterAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
@@ -13833,13 +16715,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_5_0() { return cNameESIdentifierParserRuleCall_5_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_6() { return cUnrestrictedNameAssignment_6; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_6_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_6_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_7() { return cGroup_7; }
 		
 		//'='
@@ -13871,14 +16753,18 @@
 		private final RuleCall cDefaultValueExpressionParserRuleCall_5_1_0 = (RuleCall)cDefaultValueAssignment_5_1.eContents().get(0);
 		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
-		//ParameterImpl fmlInfra::Parameter:
-		//	{fmlInfra::Parameter}
-		//	'var' type=DataType
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ';';
+		//ParameterImpl returns fmlInfra::Parameter
+		//    : {fmlInfra::Parameter}
+		//        'var'  type=DataType
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '=' defaultValue=Expression )?  ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Parameter} 'var' type=DataType name=ESIdentifier unrestrictedName=UnrestrictedName? ('='
-		//defaultValue=Expression)? ';'
+		//{fmlInfra::Parameter}
+		//       'var'  type=DataType
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '=' defaultValue=Expression )?  ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Parameter}
@@ -13899,13 +16785,13 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('=' defaultValue=Expression)?
+		//( '=' defaultValue=Expression )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'='
@@ -13924,8 +16810,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ParameterInput");
 		private final RuleCall cParameterImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ParameterInput fmlInfra::Parameter:
-		//	ParameterImpl;
+		//ParameterInput returns fmlInfra::Parameter
+		//    : ParameterImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//ParameterImpl
@@ -13935,8 +16822,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ParameterInout");
 		private final RuleCall cParameterImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ParameterInout fmlInfra::Parameter:
-		//	ParameterImpl;
+		//ParameterInout returns fmlInfra::Parameter
+		//    : ParameterImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//ParameterImpl
@@ -13946,8 +16834,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ParameterOutput");
 		private final RuleCall cParameterImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ParameterOutput fmlInfra::Parameter:
-		//	ParameterImpl;
+		//ParameterOutput returns fmlInfra::Parameter
+		//    : ParameterImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//ParameterImpl
@@ -13957,8 +16846,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ParameterReturn");
 		private final RuleCall cParameterImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ParameterReturn fmlInfra::Parameter:
-		//	ParameterImpl;
+		//ParameterReturn returns fmlInfra::Parameter
+		//    : ParameterImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//ParameterImpl
@@ -13995,40 +16885,49 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Buffer Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//BufferContainerType fmlType::CollectionType:
-		//	{fmlType::CollectionType} container=BufferContainerKind ('<' ('size:'? size=EInt | unbounded?='*')? '>'
-		//	| '[' ('size:'? size=EInt | unbounded?='*')? ']')?;
+		//BufferContainerType returns fmlType::CollectionType
+		//    : {fmlType::CollectionType}
+		//        container = BufferContainerKind
+		//        ( '<' ( ( 'size:' )? size=EInt | unbounded?='*' )? '>'
+		//        | '[' ( ( 'size:' )? size=EInt | unbounded?='*' )? ']'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::CollectionType} container=BufferContainerKind ('<' ('size:'? size=EInt | unbounded?='*')? '>' | '[' ('size:'?
-		//size=EInt | unbounded?='*')? ']')?
+		//{fmlType::CollectionType}
+		//       container = BufferContainerKind
+		//       ( '<' ( ( 'size:' )? size=EInt | unbounded?='*' )? '>'
+		//       | '[' ( ( 'size:' )? size=EInt | unbounded?='*' )? ']'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlType::CollectionType}
 		public Action getCollectionTypeAction_0() { return cCollectionTypeAction_0; }
 		
-		//container=BufferContainerKind
+		//container = BufferContainerKind
 		public Assignment getContainerAssignment_1() { return cContainerAssignment_1; }
 		
 		//BufferContainerKind
 		public RuleCall getContainerBufferContainerKindEnumRuleCall_1_0() { return cContainerBufferContainerKindEnumRuleCall_1_0; }
 		
-		//('<' ('size:'? size=EInt | unbounded?='*')? '>' | '[' ('size:'? size=EInt | unbounded?='*')? ']')?
+		//( '<' ( ( 'size:' )? size=EInt | unbounded?='*' )? '>'
+		//| '[' ( ( 'size:' )? size=EInt | unbounded?='*' )? ']'
+		//)?
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//'<' ('size:'? size=EInt | unbounded?='*')? '>'
+		//'<' ( ( 'size:' )? size=EInt | unbounded?='*' )? '>'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0_0() { return cLessThanSignKeyword_2_0_0; }
 		
-		//('size:'? size=EInt | unbounded?='*')?
+		//( ( 'size:' )? size=EInt | unbounded?='*' )?
 		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
 		
-		//'size:'? size=EInt
+		//( 'size:' )? size=EInt
 		public Group getGroup_2_0_1_0() { return cGroup_2_0_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_2_0_1_0_0() { return cSizeKeyword_2_0_1_0_0; }
 		
 		//size=EInt
@@ -14046,19 +16945,19 @@
 		//'>'
 		public Keyword getGreaterThanSignKeyword_2_0_2() { return cGreaterThanSignKeyword_2_0_2; }
 		
-		//'[' ('size:'? size=EInt | unbounded?='*')? ']'
+		//'[' ( ( 'size:' )? size=EInt | unbounded?='*' )? ']'
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'['
 		public Keyword getLeftSquareBracketKeyword_2_1_0() { return cLeftSquareBracketKeyword_2_1_0; }
 		
-		//('size:'? size=EInt | unbounded?='*')?
+		//( ( 'size:' )? size=EInt | unbounded?='*' )?
 		public Alternatives getAlternatives_2_1_1() { return cAlternatives_2_1_1; }
 		
-		//'size:'? size=EInt
+		//( 'size:' )? size=EInt
 		public Group getGroup_2_1_1_0() { return cGroup_2_1_1_0; }
 		
-		//'size:'?
+		//( 'size:' )?
 		public Keyword getSizeKeyword_2_1_1_0_0() { return cSizeKeyword_2_1_1_0_0; }
 		
 		//size=EInt
@@ -14094,21 +16993,30 @@
 		private final RuleCall cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0 = (RuleCall)cUnrestrictedNameAssignment_5.eContents().get(0);
 		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
-		//Buffer fmlInfra::Buffer:
-		//	{fmlInfra::Buffer} (visibility=VisibilityKind
-		//	& modifier=Modifier)?
-		//	'buffer' type=BufferContainerType
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ';';
+		//Buffer returns fmlInfra::Buffer
+		//    : {fmlInfra::Buffer}
+		//        ( visibility=VisibilityKind
+		//          & modifier=Modifier
+		//        )?
+		//        'buffer' type=BufferContainerType
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Buffer} (visibility=VisibilityKind & modifier=Modifier)? 'buffer' type=BufferContainerType name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ';'
+		//{fmlInfra::Buffer}
+		//       ( visibility=VisibilityKind
+		//         & modifier=Modifier
+		//       )?
+		//       'buffer' type=BufferContainerType
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Buffer}
 		public Action getBufferAction_0() { return cBufferAction_0; }
 		
-		//(visibility=VisibilityKind & modifier=Modifier)?
+		//( visibility=VisibilityKind
+		//  & modifier=Modifier
+		//)?
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
 		//visibility=VisibilityKind
@@ -14138,7 +17046,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
@@ -14162,20 +17070,24 @@
 		private final RuleCall cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0 = (RuleCall)cUnrestrictedNameAssignment_5.eContents().get(0);
 		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
-		//BufferImpl fmlInfra::Buffer:
-		//	{fmlInfra::Buffer} modifier=Modifier?
-		//	'buffer' type=BufferContainerType
-		//	name=ESIdentifier unrestrictedName=UnrestrictedName? ';';
+		//BufferImpl returns fmlInfra::Buffer
+		//    : {fmlInfra::Buffer}
+		//        ( modifier=Modifier )?
+		//        'buffer' type=BufferContainerType
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Buffer} modifier=Modifier? 'buffer' type=BufferContainerType name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ';'
+		//{fmlInfra::Buffer}
+		//       ( modifier=Modifier )?
+		//       'buffer' type=BufferContainerType
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Buffer}
 		public Action getBufferAction_0() { return cBufferAction_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
 		
 		//Modifier
@@ -14196,7 +17108,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
@@ -14209,8 +17121,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.BufferPublic");
 		private final RuleCall cBufferImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//BufferPublic fmlInfra::Buffer:
-		//	BufferImpl;
+		//BufferPublic returns fmlInfra::Buffer
+		//    : BufferImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//BufferImpl
@@ -14220,8 +17133,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.BufferProtected");
 		private final RuleCall cBufferImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//BufferProtected fmlInfra::Buffer:
-		//	BufferImpl;
+		//BufferProtected returns fmlInfra::Buffer
+		//    : BufferImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//BufferImpl
@@ -14231,8 +17145,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.BufferPrivate");
 		private final RuleCall cBufferImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//BufferPrivate fmlInfra::Buffer:
-		//	BufferImpl;
+		//BufferPrivate returns fmlInfra::Buffer
+		//    : BufferImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//BufferImpl
@@ -14270,23 +17185,38 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Port rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Port fmlInfra::Port:
-		//	{fmlInfra::Port} (visibility=VisibilityKind
-		//	& modifier=Modifier)? (direction=ChannelDirection 'port'
-		//	| 'port' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-		//	parameterSet=FormalParameterSet? ')')?
-		//	';';
+		//Port returns fmlInfra::Port
+		//    : {fmlInfra::Port}
+		//        ( visibility=VisibilityKind
+		//          & modifier=Modifier
+		//        )?
+		//        ( direction=ChannelDirection  'port'
+		//        | 'port'  ( direction=ChannelDirection )?
+		//        )
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Port} (visibility=VisibilityKind & modifier=Modifier)? (direction=ChannelDirection 'port' | 'port'
-		//direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet?
-		//')')? ';'
+		//{fmlInfra::Port}
+		//       ( visibility=VisibilityKind
+		//         & modifier=Modifier
+		//       )?
+		//       ( direction=ChannelDirection  'port'
+		//       | 'port'  ( direction=ChannelDirection )?
+		//       )
+		//       name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Port}
 		public Action getPortAction_0() { return cPortAction_0; }
 		
-		//(visibility=VisibilityKind & modifier=Modifier)?
+		//( visibility=VisibilityKind
+		//  & modifier=Modifier
+		//)?
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
 		//visibility=VisibilityKind
@@ -14301,10 +17231,12 @@
 		//Modifier
 		public RuleCall getModifierModifierParserRuleCall_1_1_0() { return cModifierModifierParserRuleCall_1_1_0; }
 		
-		//(direction=ChannelDirection 'port' | 'port' direction=ChannelDirection?)
+		//( direction=ChannelDirection  'port'
+		//| 'port'  ( direction=ChannelDirection )?
+		//)
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//direction=ChannelDirection 'port'
+		//direction=ChannelDirection  'port'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//direction=ChannelDirection
@@ -14316,13 +17248,13 @@
 		//'port'
 		public Keyword getPortKeyword_2_0_1() { return cPortKeyword_2_0_1; }
 		
-		//'port' direction=ChannelDirection?
+		//'port'  ( direction=ChannelDirection )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'port'
 		public Keyword getPortKeyword_2_1_0() { return cPortKeyword_2_1_0; }
 		
-		//direction=ChannelDirection?
+		//( direction=ChannelDirection )?
 		public Assignment getDirectionAssignment_2_1_1() { return cDirectionAssignment_2_1_1; }
 		
 		//ChannelDirection
@@ -14334,19 +17266,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0() { return cLeftParenthesisKeyword_5_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_5_1() { return cParameterSetAssignment_5_1; }
 		
 		//FormalParameterSet
@@ -14384,30 +17316,43 @@
 		private final Keyword cRightParenthesisKeyword_5_2 = (Keyword)cGroup_5.eContents().get(2);
 		private final Keyword cSemicolonKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
-		//PortImpl fmlInfra::Port:
-		//	{fmlInfra::Port} modifier=Modifier? (direction=ChannelDirection 'port'
-		//	| 'port' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-		//	parameterSet=FormalParameterSet? ')')?
-		//	';';
+		//PortImpl returns fmlInfra::Port
+		//    : {fmlInfra::Port}
+		//        ( modifier=Modifier )?
+		//        ( direction=ChannelDirection  'port'
+		//        | 'port'  ( direction=ChannelDirection )?
+		//        )
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Port} modifier=Modifier? (direction=ChannelDirection 'port' | 'port' direction=ChannelDirection?)
-		//name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? ';'
+		//{fmlInfra::Port}
+		//       ( modifier=Modifier )?
+		//       ( direction=ChannelDirection  'port'
+		//       | 'port'  ( direction=ChannelDirection )?
+		//       )
+		//       name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Port}
 		public Action getPortAction_0() { return cPortAction_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
 		
 		//Modifier
 		public RuleCall getModifierModifierParserRuleCall_1_0() { return cModifierModifierParserRuleCall_1_0; }
 		
-		//(direction=ChannelDirection 'port' | 'port' direction=ChannelDirection?)
+		//( direction=ChannelDirection  'port'
+		//| 'port'  ( direction=ChannelDirection )?
+		//)
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//direction=ChannelDirection 'port'
+		//direction=ChannelDirection  'port'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//direction=ChannelDirection
@@ -14419,13 +17364,13 @@
 		//'port'
 		public Keyword getPortKeyword_2_0_1() { return cPortKeyword_2_0_1; }
 		
-		//'port' direction=ChannelDirection?
+		//'port'  ( direction=ChannelDirection )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'port'
 		public Keyword getPortKeyword_2_1_0() { return cPortKeyword_2_1_0; }
 		
-		//direction=ChannelDirection?
+		//( direction=ChannelDirection )?
 		public Assignment getDirectionAssignment_2_1_1() { return cDirectionAssignment_2_1_1; }
 		
 		//ChannelDirection
@@ -14437,19 +17382,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0() { return cLeftParenthesisKeyword_5_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_5_1() { return cParameterSetAssignment_5_1; }
 		
 		//FormalParameterSet
@@ -14465,8 +17410,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PortPublic");
 		private final RuleCall cPortImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//PortPublic fmlInfra::Port:
-		//	PortImpl;
+		//PortPublic returns fmlInfra::Port
+		//    : PortImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//PortImpl
@@ -14476,8 +17422,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PortProtected");
 		private final RuleCall cPortImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//PortProtected fmlInfra::Port:
-		//	PortImpl;
+		//PortProtected returns fmlInfra::Port
+		//    : PortImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//PortImpl
@@ -14487,8 +17434,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PortPrivate");
 		private final RuleCall cPortImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//PortPrivate fmlInfra::Port:
-		//	PortImpl;
+		//PortPrivate returns fmlInfra::Port
+		//    : PortImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//PortImpl
@@ -14523,31 +17471,43 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Signal rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Signal fmlInfra::Signal:
-		//	{fmlInfra::Signal} visibility=VisibilityKind? (direction=ChannelDirection 'signal'
-		//	| 'signal' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-		//	parameterSet=FormalParameterSet? ')')?
-		//	';';
+		//Signal returns fmlInfra::Signal
+		//    : {fmlInfra::Signal}
+		//        ( visibility=VisibilityKind )?
+		//        ( direction=ChannelDirection  'signal'
+		//        | 'signal'  ( direction=ChannelDirection )?
+		//        )
+		//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Signal} visibility=VisibilityKind? (direction=ChannelDirection 'signal' | 'signal'
-		//direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet?
-		//')')? ';'
+		//{fmlInfra::Signal}
+		//       ( visibility=VisibilityKind )?
+		//       ( direction=ChannelDirection  'signal'
+		//       | 'signal'  ( direction=ChannelDirection )?
+		//       )
+		//       name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Signal}
 		public Action getSignalAction_0() { return cSignalAction_0; }
 		
-		//visibility=VisibilityKind?
+		//( visibility=VisibilityKind )?
 		public Assignment getVisibilityAssignment_1() { return cVisibilityAssignment_1; }
 		
 		//VisibilityKind
 		public RuleCall getVisibilityVisibilityKindEnumRuleCall_1_0() { return cVisibilityVisibilityKindEnumRuleCall_1_0; }
 		
-		//(direction=ChannelDirection 'signal' | 'signal' direction=ChannelDirection?)
+		//( direction=ChannelDirection  'signal'
+		//| 'signal'  ( direction=ChannelDirection )?
+		//)
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//direction=ChannelDirection 'signal'
+		//direction=ChannelDirection  'signal'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//direction=ChannelDirection
@@ -14559,13 +17519,13 @@
 		//'signal'
 		public Keyword getSignalKeyword_2_0_1() { return cSignalKeyword_2_0_1; }
 		
-		//'signal' direction=ChannelDirection?
+		//'signal'  ( direction=ChannelDirection )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//'signal'
 		public Keyword getSignalKeyword_2_1_0() { return cSignalKeyword_2_1_0; }
 		
-		//direction=ChannelDirection?
+		//( direction=ChannelDirection )?
 		public Assignment getDirectionAssignment_2_1_1() { return cDirectionAssignment_2_1_1; }
 		
 		//ChannelDirection
@@ -14577,19 +17537,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_4_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_4_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_5() { return cGroup_5; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_5_0() { return cLeftParenthesisKeyword_5_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_5_1() { return cParameterSetAssignment_5_1; }
 		
 		//FormalParameterSet
@@ -14625,24 +17585,35 @@
 		private final Keyword cRightParenthesisKeyword_4_2 = (Keyword)cGroup_4.eContents().get(2);
 		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//SignalImpl fmlInfra::Signal:
-		//	{fmlInfra::Signal} (direction=ChannelDirection 'signal'
-		//	| 'signal' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-		//	parameterSet=FormalParameterSet? ')')?
-		//	';';
+		//SignalImpl returns fmlInfra::Signal
+		//    : {fmlInfra::Signal}
+		//        ( direction=ChannelDirection  'signal'
+		//        | 'signal'  ( direction=ChannelDirection )?
+		//        )
+		//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//        ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Signal} (direction=ChannelDirection 'signal' | 'signal' direction=ChannelDirection?) name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? ';'
+		//{fmlInfra::Signal}
+		//       ( direction=ChannelDirection  'signal'
+		//       | 'signal'  ( direction=ChannelDirection )?
+		//       )
+		//       name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+		//       ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+		//       ';'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Signal}
 		public Action getSignalAction_0() { return cSignalAction_0; }
 		
-		//(direction=ChannelDirection 'signal' | 'signal' direction=ChannelDirection?)
+		//( direction=ChannelDirection  'signal'
+		//| 'signal'  ( direction=ChannelDirection )?
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//direction=ChannelDirection 'signal'
+		//direction=ChannelDirection  'signal'
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//direction=ChannelDirection
@@ -14654,13 +17625,13 @@
 		//'signal'
 		public Keyword getSignalKeyword_1_0_1() { return cSignalKeyword_1_0_1; }
 		
-		//'signal' direction=ChannelDirection?
+		//'signal'  ( direction=ChannelDirection )?
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'signal'
 		public Keyword getSignalKeyword_1_1_0() { return cSignalKeyword_1_1_0; }
 		
-		//direction=ChannelDirection?
+		//( direction=ChannelDirection )?
 		public Assignment getDirectionAssignment_1_1_1() { return cDirectionAssignment_1_1_1; }
 		
 		//ChannelDirection
@@ -14672,19 +17643,19 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_2_0() { return cNameESIdentifierParserRuleCall_2_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_3() { return cUnrestrictedNameAssignment_3; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_3_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_3_0; }
 		
-		//('(' parameterSet=FormalParameterSet? ')')?
+		//( '(' ( parameterSet=FormalParameterSet )? ')' )?
 		public Group getGroup_4() { return cGroup_4; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_4_0() { return cLeftParenthesisKeyword_4_0; }
 		
-		//parameterSet=FormalParameterSet?
+		//( parameterSet=FormalParameterSet )?
 		public Assignment getParameterSetAssignment_4_1() { return cParameterSetAssignment_4_1; }
 		
 		//FormalParameterSet
@@ -14700,8 +17671,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.SignalPublic");
 		private final RuleCall cSignalImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//SignalPublic fmlInfra::Signal:
-		//	SignalImpl;
+		//SignalPublic returns fmlInfra::Signal
+		//    : SignalImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//SignalImpl
@@ -14711,8 +17683,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.SignalProtected");
 		private final RuleCall cSignalImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//SignalProtected fmlInfra::Signal:
-		//	SignalImpl;
+		//SignalProtected returns fmlInfra::Signal
+		//    : SignalImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//SignalImpl
@@ -14722,8 +17695,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.SignalPrivate");
 		private final RuleCall cSignalImplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//SignalPrivate fmlInfra::Signal:
-		//	SignalImpl;
+		//SignalPrivate returns fmlInfra::Signal
+		//    : SignalImpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//SignalImpl
@@ -14750,22 +17724,34 @@
 		private final Keyword cSemicolonKeyword_6_1 = (Keyword)cGroup_6.eContents().get(1);
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
-		//Channel fmlInfra::Channel:
-		//	{fmlInfra::Channel} (visibility=VisibilityKind
-		//	& modifier=Modifier)?
-		//	'channel' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'{' (signal+=SignalReference ';')+
-		//	'}';
+		//Channel returns fmlInfra::Channel
+		//    : {fmlInfra::Channel}
+		//        ( visibility=VisibilityKind
+		//          & modifier=Modifier
+		//        )?
+		//        'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//            ( signal+=SignalReference ';' )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Channel} (visibility=VisibilityKind & modifier=Modifier)? 'channel' name=ESIdentifier
-		//unrestrictedName=UnrestrictedName? '{' (signal+=SignalReference ';')+ '}'
+		//{fmlInfra::Channel}
+		//       ( visibility=VisibilityKind
+		//         & modifier=Modifier
+		//       )?
+		//       'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       '{'
+		//           ( signal+=SignalReference ';' )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Channel}
 		public Action getChannelAction_0() { return cChannelAction_0; }
 		
-		//(visibility=VisibilityKind & modifier=Modifier)?
+		//( visibility=VisibilityKind
+		//  & modifier=Modifier
+		//)?
 		public UnorderedGroup getUnorderedGroup_1() { return cUnorderedGroup_1; }
 		
 		//visibility=VisibilityKind
@@ -14789,7 +17775,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -14798,7 +17784,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5() { return cLeftCurlyBracketKeyword_5; }
 		
-		//(signal+=SignalReference ';')+
+		//( signal+=SignalReference ';' )+
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//signal+=SignalReference
@@ -14821,14 +17807,15 @@
 		private final Assignment cNameAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cNameESIdentifierParserRuleCall_1_0 = (RuleCall)cNameAssignment_1.eContents().get(0);
 		
-		//SignalReference fmlInfra::Signal:
-		//	direction=ChannelDirection? name=ESIdentifier;
+		//SignalReference returns fmlInfra::Signal
+		//    : ( direction=ChannelDirection )? name=ESIdentifier
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//direction=ChannelDirection? name=ESIdentifier
+		//( direction=ChannelDirection )? name=ESIdentifier
 		public Group getGroup() { return cGroup; }
 		
-		//direction=ChannelDirection?
+		//( direction=ChannelDirection )?
 		public Assignment getDirectionAssignment_0() { return cDirectionAssignment_0; }
 		
 		//ChannelDirection
@@ -14858,21 +17845,28 @@
 		private final Keyword cSemicolonKeyword_6_1 = (Keyword)cGroup_6.eContents().get(1);
 		private final Keyword cRightCurlyBracketKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
-		//Channelimpl fmlInfra::Channel:
-		//	{fmlInfra::Channel} modifier=Modifier?
-		//	'channel' name=ESIdentifier unrestrictedName=UnrestrictedName?
-		//	'{' (signal+=SignalReference ';')+
-		//	'}';
+		//Channelimpl returns fmlInfra::Channel
+		//    : {fmlInfra::Channel}
+		//        ( modifier=Modifier )?
+		//        'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//        '{'
+		//            ( signal+=SignalReference ';' )+
+		//        '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::Channel} modifier=Modifier? 'channel' name=ESIdentifier unrestrictedName=UnrestrictedName? '{'
-		//(signal+=SignalReference ';')+ '}'
+		//{fmlInfra::Channel}
+		//       ( modifier=Modifier )?
+		//       'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+		//       '{'
+		//           ( signal+=SignalReference ';' )+
+		//       '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::Channel}
 		public Action getChannelAction_0() { return cChannelAction_0; }
 		
-		//modifier=Modifier?
+		//( modifier=Modifier )?
 		public Assignment getModifierAssignment_1() { return cModifierAssignment_1; }
 		
 		//Modifier
@@ -14887,7 +17881,7 @@
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_3_0() { return cNameESIdentifierParserRuleCall_3_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_4() { return cUnrestrictedNameAssignment_4; }
 		
 		//UnrestrictedName
@@ -14896,7 +17890,7 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_5() { return cLeftCurlyBracketKeyword_5; }
 		
-		//(signal+=SignalReference ';')+
+		//( signal+=SignalReference ';' )+
 		public Group getGroup_6() { return cGroup_6; }
 		
 		//signal+=SignalReference
@@ -14915,8 +17909,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ChannelPublic");
 		private final RuleCall cChannelimplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ChannelPublic fmlInfra::Channel:
-		//	Channelimpl;
+		//ChannelPublic returns fmlInfra::Channel
+		//    : Channelimpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//Channelimpl
@@ -14926,8 +17921,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ChannelProtected");
 		private final RuleCall cChannelimplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ChannelProtected fmlInfra::Channel:
-		//	Channelimpl;
+		//ChannelProtected returns fmlInfra::Channel
+		//    : Channelimpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//Channelimpl
@@ -14937,8 +17933,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ChannelPrivate");
 		private final RuleCall cChannelimplParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//ChannelPrivate fmlInfra::Channel:
-		//	Channelimpl;
+		//ChannelPrivate returns fmlInfra::Channel
+		//    : Channelimpl
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//Channelimpl
@@ -15025,35 +18022,92 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Section Transition Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Transition fmlStmchn::Transition:
-		//	{fmlStmchn::Transition} transient?='transient'? 'transition'
-		//	moe=TransitionMoe?
-		//	name=ESIdentifier? unrestrictedName=UnrestrictedName? ('{' (('@trigger:' trigger+=TransitionTrigger*)?
-		//	(guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-		//	'@effect:' effect=TransitionEffect?
-		//	| behavior=TransitionBehavior)?
-		//	'}' ('-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ';')?
-		//	| '-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ('{' (('@trigger:'
-		//	trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-		//	'@effect:' effect=TransitionEffect?
-		//	| behavior=TransitionBehavior)?
-		//	'}' | ';'));
+		//Transition returns fmlStmchn::Transition
+		//    : {fmlStmchn::Transition} (transient?='transient')? 'transition'
+		//        ( moe=TransitionMoe )?
+		//        ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+		////        ( ( behavior=BlockStatement '-->' target=[fmlStmchn::Vertex|ESUfid] ';' )
+		////        | ( '-->' target=[fmlStmchn::Vertex|ESUfid] (behavior=BlockStatement | ';') )
+		////        )
+		//        ( ( '{'
+		//            ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                ( guard  = TransitionGuard      | '@guard:' )?
+		//                ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                '@effect:'  ( effect = TransitionEffect  )?
+		//              )
+		//            | behavior=TransitionBehavior
+		//            )?
+		//            '}'
+		//            ( '-->'
+		//                ( target=[fmlStmchn::Vertex|ESUfid]
+		//                | targetExpression=ValuePureNamedMachineExpression
+		//                ) ';'
+		//            )?
+		//          )
+		//        | ( '-->'
+		//            ( target=[fmlStmchn::Vertex|ESUfid]
+		//            | targetExpression=ValuePureNamedMachineExpression
+		//            )
+		//            ( ( '{'
+		//                ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                    ( guard  = TransitionGuard      | '@guard:' )?
+		//                    ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                    '@effect:'  ( effect = TransitionEffect  )?
+		//                  )
+		//                | behavior=TransitionBehavior
+		//                )?
+		//                '}' )
+		//            | ';'
+		//            )
+		//          )
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmchn::Transition} transient?='transient'? 'transition' moe=TransitionMoe? name=ESIdentifier?
-		//unrestrictedName=UnrestrictedName? ('{' (('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard |
-		//'@guard:')? (tguard=TransitionTimedGuard | '@tguard:')? '@effect:' effect=TransitionEffect? |
-		//behavior=TransitionBehavior)? '}' ('-->' (target=[fmlStmchn::Vertex|ESUfid] |
-		//targetExpression=ValuePureNamedMachineExpression) ';')? | '-->' (target=[fmlStmchn::Vertex|ESUfid] |
-		//targetExpression=ValuePureNamedMachineExpression) ('{' (('@trigger:' trigger+=TransitionTrigger*)?
-		//(guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')? '@effect:' effect=TransitionEffect? |
-		//behavior=TransitionBehavior)? '}' | ';'))
+		// {fmlStmchn::Transition} (transient?='transient')? 'transition'
+		//        ( moe=TransitionMoe )?
+		//        ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+		////        ( ( behavior=BlockStatement '-->' target=[fmlStmchn::Vertex|ESUfid] ';' )
+		////        | ( '-->' target=[fmlStmchn::Vertex|ESUfid] (behavior=BlockStatement | ';') )
+		////        )
+		//        ( ( '{'
+		//            ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                ( guard  = TransitionGuard      | '@guard:' )?
+		//                ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                '@effect:'  ( effect = TransitionEffect  )?
+		//              )
+		//            | behavior=TransitionBehavior
+		//            )?
+		//            '}'
+		//            ( '-->'
+		//                ( target=[fmlStmchn::Vertex|ESUfid]
+		//                | targetExpression=ValuePureNamedMachineExpression
+		//                ) ';'
+		//            )?
+		//          )
+		//        | ( '-->'
+		//            ( target=[fmlStmchn::Vertex|ESUfid]
+		//            | targetExpression=ValuePureNamedMachineExpression
+		//            )
+		//            ( ( '{'
+		//                ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                    ( guard  = TransitionGuard      | '@guard:' )?
+		//                    ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                    '@effect:'  ( effect = TransitionEffect  )?
+		//                  )
+		//                | behavior=TransitionBehavior
+		//                )?
+		//                '}' )
+		//            | ';'
+		//            )
+		//          )
+		//        )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmchn::Transition}
 		public Action getTransitionAction_0() { return cTransitionAction_0; }
 		
-		//transient?='transient'?
+		//(transient?='transient')?
 		public Assignment getTransientAssignment_1() { return cTransientAssignment_1; }
 		
 		//'transient'
@@ -15062,64 +18116,113 @@
 		//'transition'
 		public Keyword getTransitionKeyword_2() { return cTransitionKeyword_2; }
 		
-		//moe=TransitionMoe?
+		//( moe=TransitionMoe )?
 		public Assignment getMoeAssignment_3() { return cMoeAssignment_3; }
 		
 		//TransitionMoe
 		public RuleCall getMoeTransitionMoeParserRuleCall_3_0() { return cMoeTransitionMoeParserRuleCall_3_0; }
 		
-		//name=ESIdentifier?
+		//( name=ESIdentifier )?
 		public Assignment getNameAssignment_4() { return cNameAssignment_4; }
 		
 		//ESIdentifier
 		public RuleCall getNameESIdentifierParserRuleCall_4_0() { return cNameESIdentifierParserRuleCall_4_0; }
 		
-		//unrestrictedName=UnrestrictedName?
+		//( unrestrictedName=UnrestrictedName )?
 		public Assignment getUnrestrictedNameAssignment_5() { return cUnrestrictedNameAssignment_5; }
 		
 		//UnrestrictedName
 		public RuleCall getUnrestrictedNameUnrestrictedNameParserRuleCall_5_0() { return cUnrestrictedNameUnrestrictedNameParserRuleCall_5_0; }
 		
-		//('{' (('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}' ('-->'
-		//(target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ';')? | '-->'
-		//(target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ('{' (('@trigger:'
-		//trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-		//'@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}' | ';'))
+		////        ( ( behavior=BlockStatement '-->' target=[fmlStmchn::Vertex|ESUfid] ';' )
+		////        | ( '-->' target=[fmlStmchn::Vertex|ESUfid] (behavior=BlockStatement | ';') )
+		////        )
+		//        ( ( '{'
+		//            ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                ( guard  = TransitionGuard      | '@guard:' )?
+		//                ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                '@effect:'  ( effect = TransitionEffect  )?
+		//              )
+		//            | behavior=TransitionBehavior
+		//            )?
+		//            '}'
+		//            ( '-->'
+		//                ( target=[fmlStmchn::Vertex|ESUfid]
+		//                | targetExpression=ValuePureNamedMachineExpression
+		//                ) ';'
+		//            )?
+		//          )
+		//        | ( '-->'
+		//            ( target=[fmlStmchn::Vertex|ESUfid]
+		//            | targetExpression=ValuePureNamedMachineExpression
+		//            )
+		//            ( ( '{'
+		//                ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                    ( guard  = TransitionGuard      | '@guard:' )?
+		//                    ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                    '@effect:'  ( effect = TransitionEffect  )?
+		//                  )
+		//                | behavior=TransitionBehavior
+		//                )?
+		//                '}' )
+		//            | ';'
+		//            )
+		//          )
+		//        )
 		public Alternatives getAlternatives_6() { return cAlternatives_6; }
 		
-		//'{' (('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}' ('-->'
-		//(target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ';')?
+		//( '{'
+		//           ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//               ( guard  = TransitionGuard      | '@guard:' )?
+		//               ( tguard = TransitionTimedGuard | '@tguard:')?
+		//               '@effect:'  ( effect = TransitionEffect  )?
+		//             )
+		//           | behavior=TransitionBehavior
+		//           )?
+		//           '}'
+		//           ( '-->'
+		//               ( target=[fmlStmchn::Vertex|ESUfid]
+		//               | targetExpression=ValuePureNamedMachineExpression
+		//               ) ';'
+		//           )?
+		//         )
 		public Group getGroup_6_0() { return cGroup_6_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6_0_0() { return cLeftCurlyBracketKeyword_6_0_0; }
 		
-		//(('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)?
+		//( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//    ( guard  = TransitionGuard      | '@guard:' )?
+		//    ( tguard = TransitionTimedGuard | '@tguard:')?
+		//    '@effect:'  ( effect = TransitionEffect  )?
+		//  )
+		//| behavior=TransitionBehavior
+		//)?
 		public Alternatives getAlternatives_6_0_1() { return cAlternatives_6_0_1; }
 		
-		//('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect?
+		//( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//               ( guard  = TransitionGuard      | '@guard:' )?
+		//               ( tguard = TransitionTimedGuard | '@tguard:')?
+		//               '@effect:'  ( effect = TransitionEffect  )?
+		//             )
 		public Group getGroup_6_0_1_0() { return cGroup_6_0_1_0; }
 		
-		//('@trigger:' trigger+=TransitionTrigger*)?
+		//( '@trigger:' ( trigger+= TransitionTrigger )* )?
 		public Group getGroup_6_0_1_0_0() { return cGroup_6_0_1_0_0; }
 		
 		//'@trigger:'
 		public Keyword getTriggerKeyword_6_0_1_0_0_0() { return cTriggerKeyword_6_0_1_0_0_0; }
 		
-		//trigger+=TransitionTrigger*
+		//( trigger+= TransitionTrigger )*
 		public Assignment getTriggerAssignment_6_0_1_0_0_1() { return cTriggerAssignment_6_0_1_0_0_1; }
 		
 		//TransitionTrigger
 		public RuleCall getTriggerTransitionTriggerParserRuleCall_6_0_1_0_0_1_0() { return cTriggerTransitionTriggerParserRuleCall_6_0_1_0_0_1_0; }
 		
-		//(guard=TransitionGuard | '@guard:')?
+		//( guard  = TransitionGuard      | '@guard:' )?
 		public Alternatives getAlternatives_6_0_1_0_1() { return cAlternatives_6_0_1_0_1; }
 		
-		//guard=TransitionGuard
+		//guard  = TransitionGuard
 		public Assignment getGuardAssignment_6_0_1_0_1_0() { return cGuardAssignment_6_0_1_0_1_0; }
 		
 		//TransitionGuard
@@ -15128,10 +18231,10 @@
 		//'@guard:'
 		public Keyword getGuardKeyword_6_0_1_0_1_1() { return cGuardKeyword_6_0_1_0_1_1; }
 		
-		//(tguard=TransitionTimedGuard | '@tguard:')?
+		//( tguard = TransitionTimedGuard | '@tguard:')?
 		public Alternatives getAlternatives_6_0_1_0_2() { return cAlternatives_6_0_1_0_2; }
 		
-		//tguard=TransitionTimedGuard
+		//tguard = TransitionTimedGuard
 		public Assignment getTguardAssignment_6_0_1_0_2_0() { return cTguardAssignment_6_0_1_0_2_0; }
 		
 		//TransitionTimedGuard
@@ -15143,7 +18246,7 @@
 		//'@effect:'
 		public Keyword getEffectKeyword_6_0_1_0_3() { return cEffectKeyword_6_0_1_0_3; }
 		
-		//effect=TransitionEffect?
+		//( effect = TransitionEffect  )?
 		public Assignment getEffectAssignment_6_0_1_0_4() { return cEffectAssignment_6_0_1_0_4; }
 		
 		//TransitionEffect
@@ -15158,13 +18261,19 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_6_0_2() { return cRightCurlyBracketKeyword_6_0_2; }
 		
-		//('-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ';')?
+		//( '-->'
+		//    ( target=[fmlStmchn::Vertex|ESUfid]
+		//    | targetExpression=ValuePureNamedMachineExpression
+		//    ) ';'
+		//)?
 		public Group getGroup_6_0_3() { return cGroup_6_0_3; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_6_0_3_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_6_0_3_0; }
 		
-		//(target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression)
+		//( target=[fmlStmchn::Vertex|ESUfid]
+		//| targetExpression=ValuePureNamedMachineExpression
+		//)
 		public Alternatives getAlternatives_6_0_3_1() { return cAlternatives_6_0_3_1; }
 		
 		//target=[fmlStmchn::Vertex|ESUfid]
@@ -15185,15 +18294,30 @@
 		//';'
 		public Keyword getSemicolonKeyword_6_0_3_2() { return cSemicolonKeyword_6_0_3_2; }
 		
-		//'-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ('{' (('@trigger:'
-		//trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-		//'@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}' | ';')
+		//( '-->'
+		//           ( target=[fmlStmchn::Vertex|ESUfid]
+		//           | targetExpression=ValuePureNamedMachineExpression
+		//           )
+		//           ( ( '{'
+		//               ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                   ( guard  = TransitionGuard      | '@guard:' )?
+		//                   ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                   '@effect:'  ( effect = TransitionEffect  )?
+		//                 )
+		//               | behavior=TransitionBehavior
+		//               )?
+		//               '}' )
+		//           | ';'
+		//           )
+		//         )
 		public Group getGroup_6_1() { return cGroup_6_1; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_6_1_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_6_1_0; }
 		
-		//(target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression)
+		//( target=[fmlStmchn::Vertex|ESUfid]
+		//| targetExpression=ValuePureNamedMachineExpression
+		//)
 		public Alternatives getAlternatives_6_1_1() { return cAlternatives_6_1_1; }
 		
 		//target=[fmlStmchn::Vertex|ESUfid]
@@ -15211,41 +18335,65 @@
 		//ValuePureNamedMachineExpression
 		public RuleCall getTargetExpressionValuePureNamedMachineExpressionParserRuleCall_6_1_1_1_0() { return cTargetExpressionValuePureNamedMachineExpressionParserRuleCall_6_1_1_1_0; }
 		
-		//('{' (('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}' | ';')
+		//( ( '{'
+		//    ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//        ( guard  = TransitionGuard      | '@guard:' )?
+		//        ( tguard = TransitionTimedGuard | '@tguard:')?
+		//        '@effect:'  ( effect = TransitionEffect  )?
+		//      )
+		//    | behavior=TransitionBehavior
+		//    )?
+		//    '}' )
+		//| ';'
+		//)
 		public Alternatives getAlternatives_6_1_2() { return cAlternatives_6_1_2; }
 		
-		//'{' (('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)? '}'
+		//( '{'
+		//               ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                   ( guard  = TransitionGuard      | '@guard:' )?
+		//                   ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                   '@effect:'  ( effect = TransitionEffect  )?
+		//                 )
+		//               | behavior=TransitionBehavior
+		//               )?
+		//               '}' )
 		public Group getGroup_6_1_2_0() { return cGroup_6_1_2_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_6_1_2_0_0() { return cLeftCurlyBracketKeyword_6_1_2_0_0; }
 		
-		//(('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect? | behavior=TransitionBehavior)?
+		//( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//    ( guard  = TransitionGuard      | '@guard:' )?
+		//    ( tguard = TransitionTimedGuard | '@tguard:')?
+		//    '@effect:'  ( effect = TransitionEffect  )?
+		//  )
+		//| behavior=TransitionBehavior
+		//)?
 		public Alternatives getAlternatives_6_1_2_0_1() { return cAlternatives_6_1_2_0_1; }
 		
-		//('@trigger:' trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard |
-		//'@tguard:')? '@effect:' effect=TransitionEffect?
+		//( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+		//                   ( guard  = TransitionGuard      | '@guard:' )?
+		//                   ( tguard = TransitionTimedGuard | '@tguard:')?
+		//                   '@effect:'  ( effect = TransitionEffect  )?
+		//                 )
 		public Group getGroup_6_1_2_0_1_0() { return cGroup_6_1_2_0_1_0; }
 		
-		//('@trigger:' trigger+=TransitionTrigger*)?
+		//( '@trigger:' ( trigger+= TransitionTrigger )* )?
 		public Group getGroup_6_1_2_0_1_0_0() { return cGroup_6_1_2_0_1_0_0; }
 		
 		//'@trigger:'
 		public Keyword getTriggerKeyword_6_1_2_0_1_0_0_0() { return cTriggerKeyword_6_1_2_0_1_0_0_0; }
 		
-		//trigger+=TransitionTrigger*
+		//( trigger+= TransitionTrigger )*
 		public Assignment getTriggerAssignment_6_1_2_0_1_0_0_1() { return cTriggerAssignment_6_1_2_0_1_0_0_1; }
 		
 		//TransitionTrigger
 		public RuleCall getTriggerTransitionTriggerParserRuleCall_6_1_2_0_1_0_0_1_0() { return cTriggerTransitionTriggerParserRuleCall_6_1_2_0_1_0_0_1_0; }
 		
-		//(guard=TransitionGuard | '@guard:')?
+		//( guard  = TransitionGuard      | '@guard:' )?
 		public Alternatives getAlternatives_6_1_2_0_1_0_1() { return cAlternatives_6_1_2_0_1_0_1; }
 		
-		//guard=TransitionGuard
+		//guard  = TransitionGuard
 		public Assignment getGuardAssignment_6_1_2_0_1_0_1_0() { return cGuardAssignment_6_1_2_0_1_0_1_0; }
 		
 		//TransitionGuard
@@ -15254,10 +18402,10 @@
 		//'@guard:'
 		public Keyword getGuardKeyword_6_1_2_0_1_0_1_1() { return cGuardKeyword_6_1_2_0_1_0_1_1; }
 		
-		//(tguard=TransitionTimedGuard | '@tguard:')?
+		//( tguard = TransitionTimedGuard | '@tguard:')?
 		public Alternatives getAlternatives_6_1_2_0_1_0_2() { return cAlternatives_6_1_2_0_1_0_2; }
 		
-		//tguard=TransitionTimedGuard
+		//tguard = TransitionTimedGuard
 		public Assignment getTguardAssignment_6_1_2_0_1_0_2_0() { return cTguardAssignment_6_1_2_0_1_0_2_0; }
 		
 		//TransitionTimedGuard
@@ -15269,7 +18417,7 @@
 		//'@effect:'
 		public Keyword getEffectKeyword_6_1_2_0_1_0_3() { return cEffectKeyword_6_1_2_0_1_0_3; }
 		
-		//effect=TransitionEffect?
+		//( effect = TransitionEffect  )?
 		public Assignment getEffectAssignment_6_1_2_0_1_0_4() { return cEffectAssignment_6_1_2_0_1_0_4; }
 		
 		//TransitionEffect
@@ -15315,34 +18463,54 @@
 		private final RuleCall cPriorityEIntParserRuleCall_1_1_1_0 = (RuleCall)cPriorityAssignment_1_1_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		
-		//TransitionMoe fmlStmchn::TransitionMoe:
-		//	'<' ('moc:'? (moc=TransitionMoc ('&' isElse?='else')?
-		//	| isElse?='else') (',' 'prior:'? priority=EInt)?
-		//	| 'prior:'? priority=EInt)
-		//	'>';
+		//TransitionMoe returns fmlStmchn::TransitionMoe
+		//    : '<'
+		//        ( ('moc:')?
+		//            ( moc=TransitionMoc  ( '&' isElse?='else' )?
+		//            | isElse?='else'
+		//            ) ( ',' ( 'prior:' )? priority=EInt )?
+		//        | ( 'prior:' )? priority=EInt
+		//        )
+		//      '>'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'<' ('moc:'? (moc=TransitionMoc ('&' isElse?='else')? | isElse?='else') (',' 'prior:'? priority=EInt)? | 'prior:'?
-		//priority=EInt) '>'
+		//'<'
+		//       ( ('moc:')?
+		//           ( moc=TransitionMoc  ( '&' isElse?='else' )?
+		//           | isElse?='else'
+		//           ) ( ',' ( 'prior:' )? priority=EInt )?
+		//       | ( 'prior:' )? priority=EInt
+		//       )
+		//     '>'
 		public Group getGroup() { return cGroup; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_0() { return cLessThanSignKeyword_0; }
 		
-		//('moc:'? (moc=TransitionMoc ('&' isElse?='else')? | isElse?='else') (',' 'prior:'? priority=EInt)? | 'prior:'?
-		//priority=EInt)
+		//( ('moc:')?
+		//    ( moc=TransitionMoc  ( '&' isElse?='else' )?
+		//    | isElse?='else'
+		//    ) ( ',' ( 'prior:' )? priority=EInt )?
+		//| ( 'prior:' )? priority=EInt
+		//)
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//'moc:'? (moc=TransitionMoc ('&' isElse?='else')? | isElse?='else') (',' 'prior:'? priority=EInt)?
+		//('moc:')?
+		//           ( moc=TransitionMoc  ( '&' isElse?='else' )?
+		//           | isElse?='else'
+		//           ) ( ',' ( 'prior:' )? priority=EInt )?
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
-		//'moc:'?
+		//('moc:')?
 		public Keyword getMocKeyword_1_0_0() { return cMocKeyword_1_0_0; }
 		
-		//(moc=TransitionMoc ('&' isElse?='else')? | isElse?='else')
+		//( moc=TransitionMoc  ( '&' isElse?='else' )?
+		//| isElse?='else'
+		//)
 		public Alternatives getAlternatives_1_0_1() { return cAlternatives_1_0_1; }
 		
-		//moc=TransitionMoc ('&' isElse?='else')?
+		//moc=TransitionMoc  ( '&' isElse?='else' )?
 		public Group getGroup_1_0_1_0() { return cGroup_1_0_1_0; }
 		
 		//moc=TransitionMoc
@@ -15351,7 +18519,7 @@
 		//TransitionMoc
 		public RuleCall getMocTransitionMocEnumRuleCall_1_0_1_0_0_0() { return cMocTransitionMocEnumRuleCall_1_0_1_0_0_0; }
 		
-		//('&' isElse?='else')?
+		//( '&' isElse?='else' )?
 		public Group getGroup_1_0_1_0_1() { return cGroup_1_0_1_0_1; }
 		
 		//'&'
@@ -15369,13 +18537,13 @@
 		//'else'
 		public Keyword getIsElseElseKeyword_1_0_1_1_0() { return cIsElseElseKeyword_1_0_1_1_0; }
 		
-		//(',' 'prior:'? priority=EInt)?
+		//( ',' ( 'prior:' )? priority=EInt )?
 		public Group getGroup_1_0_2() { return cGroup_1_0_2; }
 		
 		//','
 		public Keyword getCommaKeyword_1_0_2_0() { return cCommaKeyword_1_0_2_0; }
 		
-		//'prior:'?
+		//( 'prior:' )?
 		public Keyword getPriorKeyword_1_0_2_1() { return cPriorKeyword_1_0_2_1; }
 		
 		//priority=EInt
@@ -15384,10 +18552,10 @@
 		//EInt
 		public RuleCall getPriorityEIntParserRuleCall_1_0_2_2_0() { return cPriorityEIntParserRuleCall_1_0_2_2_0; }
 		
-		//'prior:'? priority=EInt
+		//( 'prior:' )? priority=EInt
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
-		//'prior:'?
+		//( 'prior:' )?
 		public Keyword getPriorKeyword_1_1_0() { return cPriorKeyword_1_1_0; }
 		
 		//priority=EInt
@@ -15408,24 +18576,28 @@
 		private final Assignment cStatementAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cStatementStatementParserRuleCall_2_0 = (RuleCall)cStatementAssignment_2.eContents().get(0);
 		
-		//TransitionBehavior fmlStmnt::BlockStatement:
-		//	{fmlStmnt::BlockStatement} op=BlockStatementScheduler?
-		//	statement+=Statement*;
+		//TransitionBehavior returns fmlStmnt::BlockStatement
+		//    : {fmlStmnt::BlockStatement}
+		//        ( op=BlockStatementScheduler )?
+		//         ( statement+=Statement )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::BlockStatement} op=BlockStatementScheduler? statement+=Statement*
+		//{fmlStmnt::BlockStatement}
+		//       ( op=BlockStatementScheduler )?
+		//        ( statement+=Statement )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::BlockStatement}
 		public Action getBlockStatementAction_0() { return cBlockStatementAction_0; }
 		
-		//op=BlockStatementScheduler?
+		//( op=BlockStatementScheduler )?
 		public Assignment getOpAssignment_1() { return cOpAssignment_1; }
 		
 		//BlockStatementScheduler
 		public RuleCall getOpBlockStatementSchedulerParserRuleCall_1_0() { return cOpBlockStatementSchedulerParserRuleCall_1_0; }
 		
-		//statement+=Statement*
+		//( statement+=Statement )*
 		public Assignment getStatementAssignment_2() { return cStatementAssignment_2; }
 		
 		//Statement
@@ -15435,8 +18607,9 @@
 		private final ParserRule rule = (ParserRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.TransitionTrigger");
 		private final RuleCall cInputComStatementParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
-		//TransitionTrigger fmlStmnt::InputComStatement:
-		//	InputComStatement;
+		//TransitionTrigger returns fmlStmnt::InputComStatement
+		//    : InputComStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//InputComStatement
@@ -15467,20 +18640,36 @@
 		private final RuleCall cEventGuardStatementParserRuleCall_1_1_2 = (RuleCall)cAlternatives_1_1.eContents().get(2);
 		private final RuleCall cCheckSatGuardStatementParserRuleCall_1_1_3 = (RuleCall)cAlternatives_1_1.eContents().get(3);
 		
-		//TransitionGuard fmlStmnt::AbstractGuardStatement:
-		//	{fmlStmnt::GuardStatement}
-		//	'@guard<' condition=TransitionGuardExpression
-		//	| '@guard:' ({fmlStmnt::GuardStatement} ('[' condition=Expression ']'
-		//	| condition=Expression) | GuardStatement
-		//	| EventGuardStatement
-		//	| CheckSatGuardStatement);
+		//TransitionGuard returns fmlStmnt::AbstractGuardStatement
+		//    : {fmlStmnt::GuardStatement}
+		//        '@guard<' condition=TransitionGuardExpression
+		//    | '@guard:'
+		//        ( {fmlStmnt::GuardStatement}
+		//            ( '[' condition=Expression ']'
+		//            | condition=Expression
+		//            )
+		//        | GuardStatement
+		//        | EventGuardStatement
+		//        | CheckSatGuardStatement
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::GuardStatement} '@guard<' condition=TransitionGuardExpression | '@guard:' ({fmlStmnt::GuardStatement} ('['
-		//condition=Expression ']' | condition=Expression) | GuardStatement | EventGuardStatement | CheckSatGuardStatement)
+		//{fmlStmnt::GuardStatement}
+		//       '@guard<' condition=TransitionGuardExpression
+		//   | '@guard:'
+		//       ( {fmlStmnt::GuardStatement}
+		//           ( '[' condition=Expression ']'
+		//           | condition=Expression
+		//           )
+		//       | GuardStatement
+		//       | EventGuardStatement
+		//       | CheckSatGuardStatement
+		//       )
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{fmlStmnt::GuardStatement} '@guard<' condition=TransitionGuardExpression
+		//{fmlStmnt::GuardStatement}
+		//       '@guard<' condition=TransitionGuardExpression
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{fmlStmnt::GuardStatement}
@@ -15495,24 +18684,42 @@
 		//TransitionGuardExpression
 		public RuleCall getConditionTransitionGuardExpressionParserRuleCall_0_2_0() { return cConditionTransitionGuardExpressionParserRuleCall_0_2_0; }
 		
-		//'@guard:' ({fmlStmnt::GuardStatement} ('[' condition=Expression ']' | condition=Expression) | GuardStatement |
-		//EventGuardStatement | CheckSatGuardStatement)
+		//'@guard:'
+		//       ( {fmlStmnt::GuardStatement}
+		//           ( '[' condition=Expression ']'
+		//           | condition=Expression
+		//           )
+		//       | GuardStatement
+		//       | EventGuardStatement
+		//       | CheckSatGuardStatement
+		//       )
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'@guard:'
 		public Keyword getGuardKeyword_1_0() { return cGuardKeyword_1_0; }
 		
-		//({fmlStmnt::GuardStatement} ('[' condition=Expression ']' | condition=Expression) | GuardStatement | EventGuardStatement
-		//| CheckSatGuardStatement)
+		//( {fmlStmnt::GuardStatement}
+		//    ( '[' condition=Expression ']'
+		//    | condition=Expression
+		//    )
+		//| GuardStatement
+		//| EventGuardStatement
+		//| CheckSatGuardStatement
+		//)
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
-		//{fmlStmnt::GuardStatement} ('[' condition=Expression ']' | condition=Expression)
+		//{fmlStmnt::GuardStatement}
+		//           ( '[' condition=Expression ']'
+		//           | condition=Expression
+		//           )
 		public Group getGroup_1_1_0() { return cGroup_1_1_0; }
 		
 		//{fmlStmnt::GuardStatement}
 		public Action getGuardStatementAction_1_1_0_0() { return cGuardStatementAction_1_1_0_0; }
 		
-		//('[' condition=Expression ']' | condition=Expression)
+		//( '[' condition=Expression ']'
+		//| condition=Expression
+		//)
 		public Alternatives getAlternatives_1_1_0_1() { return cAlternatives_1_1_0_1; }
 		
 		//'[' condition=Expression ']'
@@ -15559,21 +18766,25 @@
 		private final Assignment cOperandAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cOperandBitwiseOrExpressionParserRuleCall_3_0 = (RuleCall)cOperandAssignment_3.eContents().get(0);
 		
-		//TransitionGuardExpression fmlExpr::Expression:
-		//	{fmlExpr::LogicalAssociativeExpression} operator=('&&' | 'and' | '||' | 'or') '>:'
-		//	operand+=BitwiseOrExpression+;
+		//TransitionGuardExpression returns fmlExpr::Expression
+		//    : {fmlExpr::LogicalAssociativeExpression}
+		//        operator=( '&&' | 'and' | '||' | 'or' ) '>:'
+		//        ( operand+=BitwiseOrExpression )+
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LogicalAssociativeExpression} operator=('&&' | 'and' | '||' | 'or') '>:' operand+=BitwiseOrExpression+
+		//{fmlExpr::LogicalAssociativeExpression}
+		//       operator=( '&&' | 'and' | '||' | 'or' ) '>:'
+		//       ( operand+=BitwiseOrExpression )+
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LogicalAssociativeExpression}
 		public Action getLogicalAssociativeExpressionAction_0() { return cLogicalAssociativeExpressionAction_0; }
 		
-		//operator=('&&' | 'and' | '||' | 'or')
+		//operator=( '&&' | 'and' | '||' | 'or' )
 		public Assignment getOperatorAssignment_1() { return cOperatorAssignment_1; }
 		
-		//('&&' | 'and' | '||' | 'or')
+		//( '&&' | 'and' | '||' | 'or' )
 		public Alternatives getOperatorAlternatives_1_0() { return cOperatorAlternatives_1_0; }
 		
 		//'&&'
@@ -15591,7 +18802,7 @@
 		//'>:'
 		public Keyword getGreaterThanSignColonKeyword_2() { return cGreaterThanSignColonKeyword_2; }
 		
-		//operand+=BitwiseOrExpression+
+		//( operand+=BitwiseOrExpression )+
 		public Assignment getOperandAssignment_3() { return cOperandAssignment_3; }
 		
 		//BitwiseOrExpression
@@ -15620,18 +18831,32 @@
 		private final RuleCall cConditionExpressionParserRuleCall_1_1_0_1_1_0 = (RuleCall)cConditionAssignment_1_1_0_1_1.eContents().get(0);
 		private final RuleCall cTimedGuardStatementParserRuleCall_1_1_1 = (RuleCall)cAlternatives_1_1.eContents().get(1);
 		
-		//TransitionTimedGuard fmlStmnt::TimedGuardStatement:
-		//	{fmlStmnt::TimedGuardStatement}
-		//	'@tguard<' condition=TransitionGuardExpression
-		//	| '@tguard:' ({fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}'
-		//	| condition=Expression) | TimedGuardStatement);
+		//TransitionTimedGuard returns fmlStmnt::TimedGuardStatement
+		//    : {fmlStmnt::TimedGuardStatement}
+		//        '@tguard<' condition=TransitionGuardExpression
+		//    | '@tguard:'
+		//        ( {fmlStmnt::TimedGuardStatement}
+		//            ( '{' condition=Expression '}'
+		//            | condition=Expression
+		//            )
+		//        | TimedGuardStatement
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::TimedGuardStatement} '@tguard<' condition=TransitionGuardExpression | '@tguard:'
-		//({fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}' | condition=Expression) | TimedGuardStatement)
+		//{fmlStmnt::TimedGuardStatement}
+		//       '@tguard<' condition=TransitionGuardExpression
+		//   | '@tguard:'
+		//       ( {fmlStmnt::TimedGuardStatement}
+		//           ( '{' condition=Expression '}'
+		//           | condition=Expression
+		//           )
+		//       | TimedGuardStatement
+		//       )
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{fmlStmnt::TimedGuardStatement} '@tguard<' condition=TransitionGuardExpression
+		//{fmlStmnt::TimedGuardStatement}
+		//       '@tguard<' condition=TransitionGuardExpression
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//{fmlStmnt::TimedGuardStatement}
@@ -15646,22 +18871,38 @@
 		//TransitionGuardExpression
 		public RuleCall getConditionTransitionGuardExpressionParserRuleCall_0_2_0() { return cConditionTransitionGuardExpressionParserRuleCall_0_2_0; }
 		
-		//'@tguard:' ({fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}' | condition=Expression) | TimedGuardStatement)
+		//'@tguard:'
+		//       ( {fmlStmnt::TimedGuardStatement}
+		//           ( '{' condition=Expression '}'
+		//           | condition=Expression
+		//           )
+		//       | TimedGuardStatement
+		//       )
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'@tguard:'
 		public Keyword getTguardKeyword_1_0() { return cTguardKeyword_1_0; }
 		
-		//({fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}' | condition=Expression) | TimedGuardStatement)
+		//( {fmlStmnt::TimedGuardStatement}
+		//    ( '{' condition=Expression '}'
+		//    | condition=Expression
+		//    )
+		//| TimedGuardStatement
+		//)
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
-		//{fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}' | condition=Expression)
+		//{fmlStmnt::TimedGuardStatement}
+		//           ( '{' condition=Expression '}'
+		//           | condition=Expression
+		//           )
 		public Group getGroup_1_1_0() { return cGroup_1_1_0; }
 		
 		//{fmlStmnt::TimedGuardStatement}
 		public Action getTimedGuardStatementAction_1_1_0_0() { return cTimedGuardStatementAction_1_1_0_0; }
 		
-		//('{' condition=Expression '}' | condition=Expression)
+		//( '{' condition=Expression '}'
+		//| condition=Expression
+		//)
 		public Alternatives getAlternatives_1_1_0_1() { return cAlternatives_1_1_0_1; }
 		
 		//'{' condition=Expression '}'
@@ -15697,17 +18938,26 @@
 		private final Assignment cStatementAssignment_1_1 = (Assignment)cGroup_1.eContents().get(1);
 		private final RuleCall cStatementTransitionEffectStatementParserRuleCall_1_1_0 = (RuleCall)cStatementAssignment_1_1.eContents().get(0);
 		
-		//TransitionEffect fmlStmnt::Statement:
-		//	TransitionEffectStatement ({fmlStmnt::BlockStatement.statement+=current} statement+=TransitionEffectStatement)*;
+		//TransitionEffect returns fmlStmnt::Statement
+		//    : TransitionEffectStatement
+		//        ( {fmlStmnt::BlockStatement.statement+=current}
+		//            statement+=TransitionEffectStatement
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//TransitionEffectStatement ({fmlStmnt::BlockStatement.statement+=current} statement+=TransitionEffectStatement)*
+		//TransitionEffectStatement
+		//       ( {fmlStmnt::BlockStatement.statement+=current}
+		//           statement+=TransitionEffectStatement
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//TransitionEffectStatement
 		public RuleCall getTransitionEffectStatementParserRuleCall_0() { return cTransitionEffectStatementParserRuleCall_0; }
 		
-		//({fmlStmnt::BlockStatement.statement+=current} statement+=TransitionEffectStatement)*
+		//( {fmlStmnt::BlockStatement.statement+=current}
+		//    statement+=TransitionEffectStatement
+		//)*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlStmnt::BlockStatement.statement+=current}
@@ -15733,21 +18983,30 @@
 		private final RuleCall cActivityStatementParserRuleCall_8 = (RuleCall)cAlternatives.eContents().get(8);
 		private final RuleCall cInvokeStatementParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
 		
-		//TransitionEffectStatement fmlStmnt::Statement:
-		//	ExpressionStatement
-		//	| OutputComStatement
-		//	| IfStatement
-		//	| WhileDoStatement
-		//	| DoWhileStatement
-		//	| ForStatement
-		//	| ForEachStatement
-		//	| InterruptStatement
-		//	| ActivityStatement
-		//	| InvokeStatement;
+		//TransitionEffectStatement returns fmlStmnt::Statement
+		//    : ExpressionStatement
+		//    | OutputComStatement
+		//    | IfStatement
+		//    | WhileDoStatement
+		//    | DoWhileStatement
+		//    | ForStatement
+		//    | ForEachStatement
+		//    | InterruptStatement
+		//    | ActivityStatement
+		//    | InvokeStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//ExpressionStatement | OutputComStatement | IfStatement | WhileDoStatement | DoWhileStatement | ForStatement |
-		//ForEachStatement | InterruptStatement | ActivityStatement | InvokeStatement
+		//ExpressionStatement
+		//   | OutputComStatement
+		//   | IfStatement
+		//   | WhileDoStatement
+		//   | DoWhileStatement
+		//   | ForStatement
+		//   | ForEachStatement
+		//   | InterruptStatement
+		//   | ActivityStatement
+		//   | InvokeStatement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//ExpressionStatement
@@ -15804,32 +19063,46 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Statement Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Statement fmlStmnt::Statement:
-		//	BlockStatement
-		//	| ExpressionStatement
-		//	| GuardStatement
-		//	| TimedGuardStatement
-		//	| EventGuardStatement
-		//	| CheckSatGuardStatement
-		//	| InputComStatement
-		//	| OutputComStatement
-		//	| IfStatement
-		//	| WhileDoStatement
-		//	| DoWhileStatement
-		//	| ForStatement
-		//	| ForEachStatement
-		//	| InterruptStatement
-		//	| ActivityStatement
-		//	| InvokeStatement
-		//	//	| ObserverStatement
-		//
-		//	| MetaStatement;
+		//Statement returns fmlStmnt::Statement
+		//     : BlockStatement
+		//     | ExpressionStatement
+		//    | GuardStatement
+		//    | TimedGuardStatement
+		//    | EventGuardStatement
+		//    | CheckSatGuardStatement
+		//    | InputComStatement
+		//    | OutputComStatement
+		//    | IfStatement
+		//    | WhileDoStatement
+		//    | DoWhileStatement
+		//    | ForStatement
+		//    | ForEachStatement
+		//    | InterruptStatement
+		//    | ActivityStatement
+		//    | InvokeStatement
+		////    | ObserverStatement
+		//    | MetaStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//BlockStatement | ExpressionStatement | GuardStatement | TimedGuardStatement | EventGuardStatement |
-		//CheckSatGuardStatement | InputComStatement | OutputComStatement | IfStatement | WhileDoStatement | DoWhileStatement |
-		//ForStatement | ForEachStatement | InterruptStatement | ActivityStatement | InvokeStatement //	| ObserverStatement
-		//| MetaStatement
+		// BlockStatement
+		//     | ExpressionStatement
+		//    | GuardStatement
+		//    | TimedGuardStatement
+		//    | EventGuardStatement
+		//    | CheckSatGuardStatement
+		//    | InputComStatement
+		//    | OutputComStatement
+		//    | IfStatement
+		//    | WhileDoStatement
+		//    | DoWhileStatement
+		//    | ForStatement
+		//    | ForEachStatement
+		//    | InterruptStatement
+		//    | ActivityStatement
+		//    | InvokeStatement
+		////    | ObserverStatement
+		//    | MetaStatement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//BlockStatement
@@ -15894,15 +19167,20 @@
 		private final RuleCall cStatementStatementParserRuleCall_3_0 = (RuleCall)cStatementAssignment_3.eContents().get(0);
 		private final Keyword cRightCurlyBracketKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//BlockStatement fmlStmnt::BlockStatement:
-		//	{fmlStmnt::BlockStatement}
-		//	'{'
-		//	op=BlockStatementScheduler?
-		//	statement+=Statement*
-		//	'}';
+		//BlockStatement returns fmlStmnt::BlockStatement
+		//    : {fmlStmnt::BlockStatement}
+		//        '{'
+		//            ( op=BlockStatementScheduler )?
+		//             ( statement+=Statement )*
+		//         '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::BlockStatement} '{' op=BlockStatementScheduler? statement+=Statement* '}'
+		//{fmlStmnt::BlockStatement}
+		//       '{'
+		//           ( op=BlockStatementScheduler )?
+		//            ( statement+=Statement )*
+		//        '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::BlockStatement}
@@ -15911,13 +19189,13 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_1() { return cLeftCurlyBracketKeyword_1; }
 		
-		//op=BlockStatementScheduler?
+		//( op=BlockStatementScheduler )?
 		public Assignment getOpAssignment_2() { return cOpAssignment_2; }
 		
 		//BlockStatementScheduler
 		public RuleCall getOpBlockStatementSchedulerParserRuleCall_2_0() { return cOpBlockStatementSchedulerParserRuleCall_2_0; }
 		
-		//statement+=Statement*
+		//( statement+=Statement )*
 		public Assignment getStatementAssignment_3() { return cStatementAssignment_3; }
 		
 		//Statement
@@ -15952,22 +19230,30 @@
 		private final Keyword cForkKeyword_20 = (Keyword)cAlternatives.eContents().get(20);
 		private final Keyword cJoinKeyword_21 = (Keyword)cAlternatives.eContents().get(21);
 		
-		//BlockStatementScheduler:
-		//	'|;|' | '|§|' | '|;;|' | '|.|' | '|/;|'
-		//	| '|i|' | '|interleaving|'
-		//	| '|~|' | '|partial-order|'
-		//	| '|,|' | '|parallel|'
-		//	| '|a|' | '|async|'
-		//	| '|partial-order|'
-		//	| '|and|' | '|or|'
-		//	| '|and#then|' | '|or#else|'
-		//	| '|indet|' | '|/\\|'
-		//	| '|fork|' | '|join|';
+		//BlockStatementScheduler
+		//    : '|;|' | '|§|' | '|;;|' | '|.|' | '|/;|'
+		//    | '|i|' | '|interleaving|'
+		//    | '|~|' | '|partial-order|'
+		//    | '|,|' | '|parallel|'
+		//    | '|a|' | '|async|'
+		//    | '|partial-order|'
+		//    | '|and|' | '|or|'
+		//    | '|and#then|' | '|or#else|'
+		//    | '|indet|' | '|/\\|'
+		//    | '|fork|' | '|join|'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'|;|' | '|§|' | '|;;|' | '|.|' | '|/;|' | '|i|' | '|interleaving|' | '|~|' | '|partial-order|' | '|,|' | '|parallel|' |
-		//'|a|' | '|async|' | '|partial-order|' | '|and|' | '|or|' | '|and#then|' | '|or#else|' | '|indet|' | '|/\\|' | '|fork|'
-		//| '|join|'
+		//'|;|' | '|§|' | '|;;|' | '|.|' | '|/;|'
+		//   | '|i|' | '|interleaving|'
+		//   | '|~|' | '|partial-order|'
+		//   | '|,|' | '|parallel|'
+		//   | '|a|' | '|async|'
+		//   | '|partial-order|'
+		//   | '|and|' | '|or|'
+		//   | '|and#then|' | '|or#else|'
+		//   | '|indet|' | '|/\\|'
+		//   | '|fork|' | '|join|'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'|;|'
@@ -16063,19 +19349,20 @@
 		//// ++lv --lv
 		//// lv++  lv--
 		///////////////////////////////////////////
-		//ExpressionStatement fmlStmnt::ExpressionStatement:
-		//	expression=AssignmentExpression ';'
-		//	| expression=NewfreshExpression ';'
-		//	| expression=IncrementOrDecrementPrefixExpression ';'
-		//	| expression=IncrementOrDecrementPostfixExpression ';'
-		//	//	| expression=DynamicInstantiationExpression ';'
-		//
-		//	//	| expression=InvokeExpression ';'
-		//;
+		//ExpressionStatement returns fmlStmnt::ExpressionStatement
+		//    : expression=AssignmentExpression ';'
+		//    | expression=NewfreshExpression ';'
+		//    | expression=IncrementOrDecrementPrefixExpression  ';'
+		//    | expression=IncrementOrDecrementPostfixExpression ';'
+		////    | expression=DynamicInstantiationExpression ';'
+		////    | expression=InvokeExpression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//expression=AssignmentExpression ';' | expression=NewfreshExpression ';' |
-		//expression=IncrementOrDecrementPrefixExpression ';' | expression=IncrementOrDecrementPostfixExpression ';'
+		//expression=AssignmentExpression ';'
+		//   | expression=NewfreshExpression ';'
+		//   | expression=IncrementOrDecrementPrefixExpression  ';'
+		//   | expression=IncrementOrDecrementPostfixExpression ';'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//expression=AssignmentExpression ';'
@@ -16102,7 +19389,7 @@
 		//';'
 		public Keyword getSemicolonKeyword_1_1() { return cSemicolonKeyword_1_1; }
 		
-		//expression=IncrementOrDecrementPrefixExpression ';'
+		//expression=IncrementOrDecrementPrefixExpression  ';'
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//expression=IncrementOrDecrementPrefixExpression
@@ -16137,8 +19424,9 @@
 		/////////////////////////////////////////////
 		////// Guard Rules
 		/////////////////////////////////////////////
-		//GuardStatement fmlStmnt::GuardStatement:
-		//	'guard' condition=Expression ';';
+		//GuardStatement returns fmlStmnt::GuardStatement
+		//    : 'guard' condition=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'guard' condition=Expression ';'
@@ -16164,8 +19452,9 @@
 		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
 		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		
-		//TimedGuardStatement fmlStmnt::TimedGuardStatement:
-		//	'tguard' condition=Expression ';';
+		//TimedGuardStatement returns fmlStmnt::TimedGuardStatement
+		//    : 'tguard' condition=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'tguard' condition=Expression ';'
@@ -16191,8 +19480,9 @@
 		private final RuleCall cConditionExpressionParserRuleCall_1_0 = (RuleCall)cConditionAssignment_1.eContents().get(0);
 		private final Keyword cSemicolonKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		
-		//EventGuardStatement fmlStmnt::EventGuardStatement:
-		//	'event' condition=Expression ';';
+		//EventGuardStatement returns fmlStmnt::EventGuardStatement
+		//    : 'event' condition=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'event' condition=Expression ';'
@@ -16222,8 +19512,9 @@
 		private final RuleCall cConditionExpressionParserRuleCall_4_0 = (RuleCall)cConditionAssignment_4.eContents().get(0);
 		private final Keyword cSemicolonKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//CheckSatGuardStatement fmlStmnt::CheckSatGuardStatement:
-		//	'checksat' '<' solver=ESIdentifier '>' condition=Expression ';';
+		//CheckSatGuardStatement returns fmlStmnt::CheckSatGuardStatement
+		//    : 'checksat' '<' solver=ESIdentifier '>' condition=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'checksat' '<' solver=ESIdentifier '>' condition=Expression ';'
@@ -16286,14 +19577,22 @@
 		////
 		////// Communication Rules
 		/////////////////////////////////////////////
-		//InputComStatement fmlStmnt::InputComStatement:
-		//	'input' port=LitteralComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-		//	target=LiteralPureReferenceExpression)?
-		//	& (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+		//InputComStatement returns fmlStmnt::InputComStatement
+		//    : 'input' port=LitteralComElement //ExpressionAsPort
+		//        ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+		////        ( ( '<--' target=ValuePureNamedMachineExpression )?
+		//        ( ( '<--' target=LiteralPureReferenceExpression )?
+		//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'input' port=LitteralComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-		//target=LiteralPureReferenceExpression)? & (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';'
+		// 'input' port=LitteralComElement //ExpressionAsPort
+		//        ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+		////        ( ( '<--' target=ValuePureNamedMachineExpression )?
+		//        ( ( '<--' target=LiteralPureReferenceExpression )?
+		//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
 		public Group getGroup() { return cGroup; }
 		
 		//'input'
@@ -16305,7 +19604,8 @@
 		//LitteralComElement
 		public RuleCall getPortLitteralComElementParserRuleCall_1_0() { return cPortLitteralComElementParserRuleCall_1_0; }
 		
-		//('(' leftValue+=Expression (',' leftValue+=Expression)* ')')?
+		////ExpressionAsPort
+		//       ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -16317,13 +19617,13 @@
 		//Expression
 		public RuleCall getLeftValueExpressionParserRuleCall_2_1_0() { return cLeftValueExpressionParserRuleCall_2_1_0; }
 		
-		//(',' leftValue+=Expression)*
+		//( ',' leftValue+= Expression )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//','
 		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
 		
-		//leftValue+=Expression
+		//leftValue+= Expression
 		public Assignment getLeftValueAssignment_2_2_1() { return cLeftValueAssignment_2_2_1; }
 		
 		//Expression
@@ -16332,10 +19632,13 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_3() { return cRightParenthesisKeyword_2_3; }
 		
-		//(('<--' target=LiteralPureReferenceExpression)? & (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?)
+		////        ( ( '<--' target=ValuePureNamedMachineExpression )?
+		//        ( ( '<--' target=LiteralPureReferenceExpression )?
+		//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        )
 		public UnorderedGroup getUnorderedGroup_3() { return cUnorderedGroup_3; }
 		
-		//('<--' target=LiteralPureReferenceExpression)?
+		//( '<--' target=LiteralPureReferenceExpression )?
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'<--'
@@ -16347,10 +19650,10 @@
 		//LiteralPureReferenceExpression
 		public RuleCall getTargetLiteralPureReferenceExpressionParserRuleCall_3_0_1_0() { return cTargetLiteralPureReferenceExpressionParserRuleCall_3_0_1_0; }
 		
-		//(('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?
+		//( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
-		//('<==' | 'via')
+		//( '<==' | 'via' )
 		public Alternatives getAlternatives_3_1_0() { return cAlternatives_3_1_0; }
 		
 		//'<=='
@@ -16400,14 +19703,22 @@
 		private final RuleCall cRouteChannelESUfidParserRuleCall_3_1_1_0_1 = (RuleCall)cRouteChannelCrossReference_3_1_1_0.eContents().get(1);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//OutputComStatement fmlStmnt::OutputComStatement:
-		//	'output' port=LitteralComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-		//	target=LiteralPureReferenceExpression)?
-		//	& (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+		//OutputComStatement returns fmlStmnt::OutputComStatement
+		//    : 'output' port=LitteralComElement //port=ExpressionAsPort
+		//        ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+		////        ( ( '-->' target=ValuePureNamedMachineExpression )?
+		//        ( ( '-->' target=LiteralPureReferenceExpression )?
+		//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'output' port=LitteralComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-		//target=LiteralPureReferenceExpression)? & (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';'
+		// 'output' port=LitteralComElement //port=ExpressionAsPort
+		//        ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+		////        ( ( '-->' target=ValuePureNamedMachineExpression )?
+		//        ( ( '-->' target=LiteralPureReferenceExpression )?
+		//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
 		public Group getGroup() { return cGroup; }
 		
 		//'output'
@@ -16419,7 +19730,8 @@
 		//LitteralComElement
 		public RuleCall getPortLitteralComElementParserRuleCall_1_0() { return cPortLitteralComElementParserRuleCall_1_0; }
 		
-		//('(' rightValue+=Expression (',' rightValue+=Expression)* ')')?
+		////port=ExpressionAsPort
+		//       ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -16431,7 +19743,7 @@
 		//Expression
 		public RuleCall getRightValueExpressionParserRuleCall_2_1_0() { return cRightValueExpressionParserRuleCall_2_1_0; }
 		
-		//(',' rightValue+=Expression)*
+		//( ',' rightValue+=Expression )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//','
@@ -16446,10 +19758,13 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_3() { return cRightParenthesisKeyword_2_3; }
 		
-		//(('-->' target=LiteralPureReferenceExpression)? & (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?)
+		////        ( ( '-->' target=ValuePureNamedMachineExpression )?
+		//        ( ( '-->' target=LiteralPureReferenceExpression )?
+		//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        )
 		public UnorderedGroup getUnorderedGroup_3() { return cUnorderedGroup_3; }
 		
-		//('-->' target=LiteralPureReferenceExpression)?
+		//( '-->' target=LiteralPureReferenceExpression )?
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'-->'
@@ -16461,10 +19776,10 @@
 		//LiteralPureReferenceExpression
 		public RuleCall getTargetLiteralPureReferenceExpressionParserRuleCall_3_0_1_0() { return cTargetLiteralPureReferenceExpressionParserRuleCall_3_0_1_0; }
 		
-		//(('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?
+		//( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
-		//('==>' | 'via')
+		//( '==>' | 'via' )
 		public Alternatives getAlternatives_3_1_0() { return cAlternatives_3_1_0; }
 		
 		//'==>'
@@ -16491,8 +19806,12 @@
 		private final CrossReference cElementNamedElementCrossReference_0 = (CrossReference)cElementAssignment.eContents().get(0);
 		private final RuleCall cElementNamedElementESIdentifierParserRuleCall_0_1 = (RuleCall)cElementNamedElementCrossReference_0.eContents().get(1);
 		
-		//LitteralComElement fmlExpr::LiteralReferenceElement:
-		//	element=[fmlCommon::NamedElement|ESIdentifier];
+		//LitteralComElement returns fmlExpr::LiteralReferenceElement
+		//    : element=[fmlCommon::NamedElement|ESIdentifier]
+		////    | element=[fmlInfra::Port|ESIdentifier]
+		////    | element=[fmlInfra::Signal|ESIdentifier]
+		////    | element=[fmlInfra::Message|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//element=[fmlCommon::NamedElement|ESIdentifier]
@@ -16522,13 +19841,18 @@
 		/////////////////////////////////////////////
 		////// If - Conditional Rules
 		/////////////////////////////////////////////
-		//IfStatement fmlStmnt::IfStatement:
-		//	'if' condition=Expression
-		//	bodyBlock=BlockStatement
-		//	elseifStatement+=ElseIfStatement* ('else' elseBlock=BlockStatement)?;
+		//IfStatement returns fmlStmnt::IfStatement
+		//    : 'if' condition=Expression
+		//        bodyBlock=BlockStatement
+		//        ( elseifStatement+=ElseIfStatement )*
+		//        ( 'else' elseBlock=BlockStatement )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'if' condition=Expression bodyBlock=BlockStatement elseifStatement+=ElseIfStatement* ('else' elseBlock=BlockStatement)?
+		//'if' condition=Expression
+		//       bodyBlock=BlockStatement
+		//       ( elseifStatement+=ElseIfStatement )*
+		//       ( 'else' elseBlock=BlockStatement )?
 		public Group getGroup() { return cGroup; }
 		
 		//'if'
@@ -16546,13 +19870,13 @@
 		//BlockStatement
 		public RuleCall getBodyBlockBlockStatementParserRuleCall_2_0() { return cBodyBlockBlockStatementParserRuleCall_2_0; }
 		
-		//elseifStatement+=ElseIfStatement*
+		//( elseifStatement+=ElseIfStatement )*
 		public Assignment getElseifStatementAssignment_3() { return cElseifStatementAssignment_3; }
 		
 		//ElseIfStatement
 		public RuleCall getElseifStatementElseIfStatementParserRuleCall_3_0() { return cElseifStatementElseIfStatementParserRuleCall_3_0; }
 		
-		//('else' elseBlock=BlockStatement)?
+		//( 'else' elseBlock=BlockStatement )?
 		public Group getGroup_4() { return cGroup_4; }
 		
 		//'else'
@@ -16577,15 +19901,17 @@
 		private final Assignment cBodyBlockAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_2_0 = (RuleCall)cBodyBlockAssignment_2.eContents().get(0);
 		
-		//ElseIfStatement fmlStmnt::ConditionalBlockStatement:
-		//	('elseif' | 'else' 'if') condition=Expression
-		//	bodyBlock=BlockStatement;
+		//ElseIfStatement returns fmlStmnt::ConditionalBlockStatement
+		//    : ( 'elseif' | 'else' 'if' ) condition=Expression
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//('elseif' | 'else' 'if') condition=Expression bodyBlock=BlockStatement
+		//( 'elseif' | 'else' 'if' ) condition=Expression
+		//       bodyBlock=BlockStatement
 		public Group getGroup() { return cGroup; }
 		
-		//('elseif' | 'else' 'if')
+		//( 'elseif' | 'else' 'if' )
 		public Alternatives getAlternatives_0() { return cAlternatives_0; }
 		
 		//'elseif'
@@ -16624,11 +19950,12 @@
 		///////////////////////////////////////////
 		//// Loop - Iteration Rules
 		///////////////////////////////////////////
-		//WhileDoStatement fmlStmnt::WhileDoStatement:
-		//	'while' condition=Expression bodyBlock=BlockStatement;
+		//WhileDoStatement returns fmlStmnt::WhileDoStatement
+		//    : 'while' condition=Expression  bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'while' condition=Expression bodyBlock=BlockStatement
+		//'while' condition=Expression  bodyBlock=BlockStatement
 		public Group getGroup() { return cGroup; }
 		
 		//'while'
@@ -16657,11 +19984,12 @@
 		private final RuleCall cConditionExpressionParserRuleCall_3_0 = (RuleCall)cConditionAssignment_3.eContents().get(0);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//DoWhileStatement fmlStmnt::DoWhileStatement:
-		//	'do' bodyBlock=BlockStatement 'while' condition=Expression ';';
+		//DoWhileStatement returns fmlStmnt::DoWhileStatement
+		//    : 'do' bodyBlock=BlockStatement  'while' condition=Expression ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'do' bodyBlock=BlockStatement 'while' condition=Expression ';'
+		//'do' bodyBlock=BlockStatement  'while' condition=Expression ';'
 		public Group getGroup() { return cGroup; }
 		
 		//'do'
@@ -16715,28 +20043,33 @@
 		private final Assignment cBodyBlockAssignment_1_8 = (Assignment)cGroup_1.eContents().get(8);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_1_8_0 = (RuleCall)cBodyBlockAssignment_1_8.eContents().get(0);
 		
-		//ForStatement fmlStmnt::ForStatement:
-		//	'for' init=ForAssignmentExpression? ';'
-		//	condition=Expression ';' iterate=ForAssignmentExpression?
-		//	bodyBlock=BlockStatement
-		//	| 'for' '(' init=ForAssignmentExpression? ';'
-		//	condition=Expression ';' iterate=ForAssignmentExpression? ')'
-		//	bodyBlock=BlockStatement;
+		//ForStatement returns fmlStmnt::ForStatement
+		//    : 'for' ( init=ForAssignmentExpression ) ? ';'
+		//        condition=Expression ';' ( iterate=ForAssignmentExpression )?
+		//        bodyBlock=BlockStatement
+		//    | 'for' '(' ( init=ForAssignmentExpression ) ? ';'
+		//        condition=Expression ';' ( iterate=ForAssignmentExpression )? ')'
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'for' init=ForAssignmentExpression? ';' condition=Expression ';' iterate=ForAssignmentExpression?
-		//bodyBlock=BlockStatement | 'for' '(' init=ForAssignmentExpression? ';' condition=Expression ';'
-		//iterate=ForAssignmentExpression? ')' bodyBlock=BlockStatement
+		//'for' ( init=ForAssignmentExpression ) ? ';'
+		//       condition=Expression ';' ( iterate=ForAssignmentExpression )?
+		//       bodyBlock=BlockStatement
+		//   | 'for' '(' ( init=ForAssignmentExpression ) ? ';'
+		//       condition=Expression ';' ( iterate=ForAssignmentExpression )? ')'
+		//       bodyBlock=BlockStatement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//'for' init=ForAssignmentExpression? ';' condition=Expression ';' iterate=ForAssignmentExpression?
-		//bodyBlock=BlockStatement
+		//'for' ( init=ForAssignmentExpression ) ? ';'
+		//       condition=Expression ';' ( iterate=ForAssignmentExpression )?
+		//       bodyBlock=BlockStatement
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//'for'
 		public Keyword getForKeyword_0_0() { return cForKeyword_0_0; }
 		
-		//init=ForAssignmentExpression?
+		//( init=ForAssignmentExpression ) ?
 		public Assignment getInitAssignment_0_1() { return cInitAssignment_0_1; }
 		
 		//ForAssignmentExpression
@@ -16754,7 +20087,7 @@
 		//';'
 		public Keyword getSemicolonKeyword_0_4() { return cSemicolonKeyword_0_4; }
 		
-		//iterate=ForAssignmentExpression?
+		//( iterate=ForAssignmentExpression )?
 		public Assignment getIterateAssignment_0_5() { return cIterateAssignment_0_5; }
 		
 		//ForAssignmentExpression
@@ -16766,8 +20099,9 @@
 		//BlockStatement
 		public RuleCall getBodyBlockBlockStatementParserRuleCall_0_6_0() { return cBodyBlockBlockStatementParserRuleCall_0_6_0; }
 		
-		//'for' '(' init=ForAssignmentExpression? ';' condition=Expression ';' iterate=ForAssignmentExpression? ')'
-		//bodyBlock=BlockStatement
+		//'for' '(' ( init=ForAssignmentExpression ) ? ';'
+		//       condition=Expression ';' ( iterate=ForAssignmentExpression )? ')'
+		//       bodyBlock=BlockStatement
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'for'
@@ -16776,7 +20110,7 @@
 		//'('
 		public Keyword getLeftParenthesisKeyword_1_1() { return cLeftParenthesisKeyword_1_1; }
 		
-		//init=ForAssignmentExpression?
+		//( init=ForAssignmentExpression ) ?
 		public Assignment getInitAssignment_1_2() { return cInitAssignment_1_2; }
 		
 		//ForAssignmentExpression
@@ -16794,7 +20128,7 @@
 		//';'
 		public Keyword getSemicolonKeyword_1_5() { return cSemicolonKeyword_1_5; }
 		
-		//iterate=ForAssignmentExpression?
+		//( iterate=ForAssignmentExpression )?
 		public Assignment getIterateAssignment_1_6() { return cIterateAssignment_1_6; }
 		
 		//ForAssignmentExpression
@@ -16816,13 +20150,16 @@
 		private final RuleCall cIncrementOrDecrementPrefixExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		private final RuleCall cIncrementOrDecrementPostfixExpressionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		
-		//ForAssignmentExpression fmlExpr::Expression:
-		//	AssignmentExpression
-		//	| IncrementOrDecrementPrefixExpression
-		//	| IncrementOrDecrementPostfixExpression;
+		//ForAssignmentExpression returns fmlExpr::Expression
+		//    : AssignmentExpression
+		//    | IncrementOrDecrementPrefixExpression
+		//    | IncrementOrDecrementPostfixExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//AssignmentExpression | IncrementOrDecrementPrefixExpression | IncrementOrDecrementPostfixExpression
+		//AssignmentExpression
+		//   | IncrementOrDecrementPrefixExpression
+		//   | IncrementOrDecrementPostfixExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//AssignmentExpression
@@ -16858,18 +20195,22 @@
 		private final Assignment cBodyBlockAssignment_1_6 = (Assignment)cGroup_1.eContents().get(6);
 		private final RuleCall cBodyBlockBlockStatementParserRuleCall_1_6_0 = (RuleCall)cBodyBlockAssignment_1_6.eContents().get(0);
 		
-		//ForEachStatement fmlStmnt::ForEachStatement:
-		//	'for' iterator=LeftHandSideExpression ':' enumeration=Expression
-		//	bodyBlock=BlockStatement
-		//	| 'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
-		//	bodyBlock=BlockStatement;
+		//ForEachStatement returns fmlStmnt::ForEachStatement
+		//    : 'for' iterator=LeftHandSideExpression ':' enumeration=Expression
+		//        bodyBlock=BlockStatement
+		//    | 'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
+		//        bodyBlock=BlockStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'for' iterator=LeftHandSideExpression ':' enumeration=Expression bodyBlock=BlockStatement | 'for' '('
-		//iterator=LeftHandSideExpression ':' enumeration=Expression ')' bodyBlock=BlockStatement
+		//'for' iterator=LeftHandSideExpression ':' enumeration=Expression
+		//       bodyBlock=BlockStatement
+		//   | 'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
+		//       bodyBlock=BlockStatement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//'for' iterator=LeftHandSideExpression ':' enumeration=Expression bodyBlock=BlockStatement
+		//'for' iterator=LeftHandSideExpression ':' enumeration=Expression
+		//       bodyBlock=BlockStatement
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//'for'
@@ -16896,7 +20237,8 @@
 		//BlockStatement
 		public RuleCall getBodyBlockBlockStatementParserRuleCall_0_4_0() { return cBodyBlockBlockStatementParserRuleCall_0_4_0; }
 		
-		//'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')' bodyBlock=BlockStatement
+		//'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
+		//       bodyBlock=BlockStatement
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'for'
@@ -16951,12 +20293,18 @@
 		///////////////////////////////////////////
 		//// Interrupt Rules
 		///////////////////////////////////////////
-		//InterruptStatement fmlStmnt::InterruptStatement:
-		//	kind=InterruptStatementKind (expr+=Expression
-		//	| '(' expr+=Expression (',' expr+=Expression)* ')')? ';';
+		//InterruptStatement returns fmlStmnt::InterruptStatement
+		//    : kind=InterruptStatementKind
+		//        ( expr+=Expression
+		//        | '(' expr+=Expression ( ',' expr+=Expression )* ')'
+		//        )? ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//kind=InterruptStatementKind (expr+=Expression | '(' expr+=Expression (',' expr+=Expression)* ')')? ';'
+		//kind=InterruptStatementKind
+		//       ( expr+=Expression
+		//       | '(' expr+=Expression ( ',' expr+=Expression )* ')'
+		//       )? ';'
 		public Group getGroup() { return cGroup; }
 		
 		//kind=InterruptStatementKind
@@ -16965,7 +20313,9 @@
 		//InterruptStatementKind
 		public RuleCall getKindInterruptStatementKindEnumRuleCall_0_0() { return cKindInterruptStatementKindEnumRuleCall_0_0; }
 		
-		//(expr+=Expression | '(' expr+=Expression (',' expr+=Expression)* ')')?
+		//( expr+=Expression
+		//| '(' expr+=Expression ( ',' expr+=Expression )* ')'
+		//)?
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//expr+=Expression
@@ -16974,7 +20324,7 @@
 		//Expression
 		public RuleCall getExprExpressionParserRuleCall_1_0_0() { return cExprExpressionParserRuleCall_1_0_0; }
 		
-		//'(' expr+=Expression (',' expr+=Expression)* ')'
+		//'(' expr+=Expression ( ',' expr+=Expression )* ')'
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//'('
@@ -16986,7 +20336,7 @@
 		//Expression
 		public RuleCall getExprExpressionParserRuleCall_1_1_1_0() { return cExprExpressionParserRuleCall_1_1_1_0; }
 		
-		//(',' expr+=Expression)*
+		//( ',' expr+=Expression )*
 		public Group getGroup_1_1_2() { return cGroup_1_1_2; }
 		
 		//','
@@ -17031,17 +20381,28 @@
 		/////////////////////////////////////////////
 		////// Activity Rules
 		/////////////////////////////////////////////
-		//ActivityStatement fmlStmnt::ActivityStatement:
-		//	{fmlStmnt::ActivityStatement} op=OPERATOR_ACTIVITY (machine=ValuePureNamedMachineExpression
-		//	(tuple=TupleParameterExpression? ';'
-		//	//			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-		//
-		//	| '{' (slot+=SlotProperty ';')* '}') | ';')?;
+		//ActivityStatement returns fmlStmnt::ActivityStatement
+		//    : {fmlStmnt::ActivityStatement}
+		//        op=OPERATOR_ACTIVITY
+		//        ( machine=ValuePureNamedMachineExpression
+		//            ( ( tuple=TupleParameterExpression )? ';'
+		////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+		//            | '{' ( slot+=SlotProperty ';' )*  '}'
+		//            )
+		//        | ';'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::ActivityStatement} op=OPERATOR_ACTIVITY (machine=ValuePureNamedMachineExpression
-		//(tuple=TupleParameterExpression? ';' //			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-		//| '{' (slot+=SlotProperty ';')* '}') | ';')?
+		// {fmlStmnt::ActivityStatement}
+		//        op=OPERATOR_ACTIVITY
+		//        ( machine=ValuePureNamedMachineExpression
+		//            ( ( tuple=TupleParameterExpression )? ';'
+		////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+		//            | '{' ( slot+=SlotProperty ';' )*  '}'
+		//            )
+		//        | ';'
+		//        )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::ActivityStatement}
@@ -17053,12 +20414,20 @@
 		//OPERATOR_ACTIVITY
 		public RuleCall getOpOPERATOR_ACTIVITYEnumRuleCall_1_0() { return cOpOPERATOR_ACTIVITYEnumRuleCall_1_0; }
 		
-		//(machine=ValuePureNamedMachineExpression (tuple=TupleParameterExpression? ';' //			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-		//| '{' (slot+=SlotProperty ';')* '}') | ';')?
+		//        ( machine=ValuePureNamedMachineExpression
+		//            ( ( tuple=TupleParameterExpression )? ';'
+		////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+		//            | '{' ( slot+=SlotProperty ';' )*  '}'
+		//            )
+		//        | ';'
+		//        )?
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//machine=ValuePureNamedMachineExpression (tuple=TupleParameterExpression? ';' //			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-		//| '{' (slot+=SlotProperty ';')* '}')
+		// machine=ValuePureNamedMachineExpression
+		//            ( ( tuple=TupleParameterExpression )? ';'
+		////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+		//            | '{' ( slot+=SlotProperty ';' )*  '}'
+		//            )
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//machine=ValuePureNamedMachineExpression
@@ -17067,14 +20436,16 @@
 		//ValuePureNamedMachineExpression
 		public RuleCall getMachineValuePureNamedMachineExpressionParserRuleCall_2_0_0_0() { return cMachineValuePureNamedMachineExpressionParserRuleCall_2_0_0_0; }
 		
-		//(tuple=TupleParameterExpression? ';' //			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-		//| '{' (slot+=SlotProperty ';')* '}')
+		//            ( ( tuple=TupleParameterExpression )? ';'
+		////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+		//            | '{' ( slot+=SlotProperty ';' )*  '}'
+		//            )
 		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
 		
-		//tuple=TupleParameterExpression? ';'
+		//( tuple=TupleParameterExpression )? ';'
 		public Group getGroup_2_0_1_0() { return cGroup_2_0_1_0; }
 		
-		//tuple=TupleParameterExpression?
+		//( tuple=TupleParameterExpression )?
 		public Assignment getTupleAssignment_2_0_1_0_0() { return cTupleAssignment_2_0_1_0_0; }
 		
 		//TupleParameterExpression
@@ -17083,13 +20454,13 @@
 		//';'
 		public Keyword getSemicolonKeyword_2_0_1_0_1() { return cSemicolonKeyword_2_0_1_0_1; }
 		
-		//'{' (slot+=SlotProperty ';')* '}'
+		//'{' ( slot+=SlotProperty ';' )*  '}'
 		public Group getGroup_2_0_1_1() { return cGroup_2_0_1_1; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2_0_1_1_0() { return cLeftCurlyBracketKeyword_2_0_1_1_0; }
 		
-		//(slot+=SlotProperty ';')*
+		//( slot+=SlotProperty ';' )*
 		public Group getGroup_2_0_1_1_1() { return cGroup_2_0_1_1_1; }
 		
 		//slot+=SlotProperty
@@ -17214,32 +20585,66 @@
 		private final Keyword cRightParenthesisKeyword_3_3_1_1_3 = (Keyword)cGroup_3_3_1_1.eContents().get(3);
 		private final Keyword cSemicolonKeyword_3_4 = (Keyword)cGroup_3.eContents().get(4);
 		
-		//InvokeStatement fmlStmnt::InvokeStatement:
-		//	expression=InvokeExpressionDeprecated ';'
-		//	// Exec Routine
-		//	| invokable=[fmlCommon::NamedElement|ESUfid] execRoutine?='(' args=MixTupleExpressionList? ')' ('-->'
-		//	(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-		//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';'
-		//	// Exec Routine
-		//	| execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
-		//	'(' args=MixTupleExpressionList? ')' ('-->' (rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-		//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';'
-		//	// Call Procedure
-		//	| callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid] args=MixTupleExpressionList? ('-->'
-		//	(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-		//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';';
+		//InvokeStatement returns fmlStmnt::InvokeStatement
+		//    : expression=InvokeExpressionDeprecated ';'
+		//    // Exec Routine
+		//    |  invokable=[fmlCommon::NamedElement|ESUfid]
+		//        execRoutine?='(' ( args=MixTupleExpressionList )? ')'
+		//        ( '-->'
+		//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//            | '(' rets+=[fmlInfra::Variable]
+		//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//            )
+		//        )? ';'
+		//    // Exec Routine
+		//    | execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
+		//        '(' ( args=MixTupleExpressionList )? ')'
+		//        ( '-->'
+		//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//            | '(' rets+=[fmlInfra::Variable]
+		//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//            )
+		//        )? ';'
+		//    // Call Procedure
+		//    | callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid]
+		//        ( args=MixTupleExpressionList )?
+		//        ( '-->'
+		//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//            | '(' rets+=[fmlInfra::Variable]
+		//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//            )
+		//        )? ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//expression=InvokeExpressionDeprecated ';' // Exec Routine
-		//| invokable=[fmlCommon::NamedElement|ESUfid] execRoutine?='(' args=MixTupleExpressionList? ')' ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';' // Exec Routine
-		//| execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid] '(' args=MixTupleExpressionList? ')' ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';' // Call Procedure
-		//| callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid] args=MixTupleExpressionList? ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';'
+		//expression=InvokeExpressionDeprecated ';'
+		//   // Exec Routine
+		//   |  invokable=[fmlCommon::NamedElement|ESUfid]
+		//       execRoutine?='(' ( args=MixTupleExpressionList )? ')'
+		//       ( '-->'
+		//           ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//           | '(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//           )
+		//       )? ';'
+		//   // Exec Routine
+		//   | execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
+		//       '(' ( args=MixTupleExpressionList )? ')'
+		//       ( '-->'
+		//           ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//           | '(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//           )
+		//       )? ';'
+		//   // Call Procedure
+		//   | callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid]
+		//       ( args=MixTupleExpressionList )?
+		//       ( '-->'
+		//           ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//           | '(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//           )
+		//       )? ';'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//expression=InvokeExpressionDeprecated ';'
@@ -17254,9 +20659,14 @@
 		//';'
 		public Keyword getSemicolonKeyword_0_1() { return cSemicolonKeyword_0_1; }
 		
-		//invokable=[fmlCommon::NamedElement|ESUfid] execRoutine?='(' args=MixTupleExpressionList? ')' ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';'
+		//invokable=[fmlCommon::NamedElement|ESUfid]
+		//      execRoutine?='(' ( args=MixTupleExpressionList )? ')'
+		//      ( '-->'
+		//          ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//          | '(' rets+=[fmlInfra::Variable]
+		//              ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//          )
+		//      )? ';'
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//invokable=[fmlCommon::NamedElement|ESUfid]
@@ -17274,7 +20684,7 @@
 		//'('
 		public Keyword getExecRoutineLeftParenthesisKeyword_1_1_0() { return cExecRoutineLeftParenthesisKeyword_1_1_0; }
 		
-		//args=MixTupleExpressionList?
+		//( args=MixTupleExpressionList )?
 		public Assignment getArgsAssignment_1_2() { return cArgsAssignment_1_2; }
 		
 		//MixTupleExpressionList
@@ -17283,18 +20693,24 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_1_3() { return cRightParenthesisKeyword_1_3; }
 		
-		//('-->' (rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))?
+		//( '-->'
+		//    ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//    | '(' rets+=[fmlInfra::Variable]
+		//        ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//    )
+		//)?
 		public Group getGroup_1_4() { return cGroup_1_4; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_1_4_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_1_4_0; }
 		
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')')
+		//( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//| '(' rets+=[fmlInfra::Variable]
+		//    ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//)
 		public Alternatives getAlternatives_1_4_1() { return cAlternatives_1_4_1; }
 		
-		//rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
+		//rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_1_4_1_0() { return cGroup_1_4_1_0; }
 		
 		//rets+=[fmlInfra::Variable]
@@ -17306,7 +20722,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_1_4_1_0_0_0_1() { return cRetsVariableIDTerminalRuleCall_1_4_1_0_0_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_1_4_1_0_1() { return cGroup_1_4_1_0_1; }
 		
 		//','
@@ -17321,7 +20737,8 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_1_4_1_0_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_1_4_1_0_1_1_0_1; }
 		
-		//'(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'
+		//'(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
 		public Group getGroup_1_4_1_1() { return cGroup_1_4_1_1; }
 		
 		//'('
@@ -17336,7 +20753,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_1_4_1_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_1_4_1_1_1_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_1_4_1_1_2() { return cGroup_1_4_1_1_2; }
 		
 		//','
@@ -17357,9 +20774,14 @@
 		//';'
 		public Keyword getSemicolonKeyword_1_5() { return cSemicolonKeyword_1_5; }
 		
-		//execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid] '(' args=MixTupleExpressionList? ')' ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';'
+		//execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
+		//       '(' ( args=MixTupleExpressionList )? ')'
+		//       ( '-->'
+		//           ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//           | '(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//           )
+		//       )? ';'
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//execRoutine?='exec'
@@ -17380,7 +20802,7 @@
 		//'('
 		public Keyword getLeftParenthesisKeyword_2_2() { return cLeftParenthesisKeyword_2_2; }
 		
-		//args=MixTupleExpressionList?
+		//( args=MixTupleExpressionList )?
 		public Assignment getArgsAssignment_2_3() { return cArgsAssignment_2_3; }
 		
 		//MixTupleExpressionList
@@ -17389,18 +20811,24 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_4() { return cRightParenthesisKeyword_2_4; }
 		
-		//('-->' (rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))?
+		//( '-->'
+		//    ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//    | '(' rets+=[fmlInfra::Variable]
+		//        ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//    )
+		//)?
 		public Group getGroup_2_5() { return cGroup_2_5; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_2_5_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_2_5_0; }
 		
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')')
+		//( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//| '(' rets+=[fmlInfra::Variable]
+		//    ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//)
 		public Alternatives getAlternatives_2_5_1() { return cAlternatives_2_5_1; }
 		
-		//rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
+		//rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_2_5_1_0() { return cGroup_2_5_1_0; }
 		
 		//rets+=[fmlInfra::Variable]
@@ -17412,7 +20840,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_2_5_1_0_0_0_1() { return cRetsVariableIDTerminalRuleCall_2_5_1_0_0_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_2_5_1_0_1() { return cGroup_2_5_1_0_1; }
 		
 		//','
@@ -17427,7 +20855,8 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_2_5_1_0_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_2_5_1_0_1_1_0_1; }
 		
-		//'(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'
+		//'(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
 		public Group getGroup_2_5_1_1() { return cGroup_2_5_1_1; }
 		
 		//'('
@@ -17442,7 +20871,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_2_5_1_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_2_5_1_1_1_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_2_5_1_1_2() { return cGroup_2_5_1_1_2; }
 		
 		//','
@@ -17463,9 +20892,14 @@
 		//';'
 		public Keyword getSemicolonKeyword_2_6() { return cSemicolonKeyword_2_6; }
 		
-		//callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid] args=MixTupleExpressionList? ('-->'
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))? ';'
+		//callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid]
+		//       ( args=MixTupleExpressionList )?
+		//       ( '-->'
+		//           ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//           | '(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//           )
+		//       )? ';'
 		public Group getGroup_3() { return cGroup_3; }
 		
 		//callProcedure?='call'
@@ -17483,24 +20917,30 @@
 		//ESUfid
 		public RuleCall getInvokableNamedElementESUfidParserRuleCall_3_1_0_1() { return cInvokableNamedElementESUfidParserRuleCall_3_1_0_1; }
 		
-		//args=MixTupleExpressionList?
+		//( args=MixTupleExpressionList )?
 		public Assignment getArgsAssignment_3_2() { return cArgsAssignment_3_2; }
 		
 		//MixTupleExpressionList
 		public RuleCall getArgsMixTupleExpressionListParserRuleCall_3_2_0() { return cArgsMixTupleExpressionListParserRuleCall_3_2_0; }
 		
-		//('-->' (rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')'))?
+		//( '-->'
+		//    ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//    | '(' rets+=[fmlInfra::Variable]
+		//        ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//    )
+		//)?
 		public Group getGroup_3_3() { return cGroup_3_3; }
 		
 		//'-->'
 		public Keyword getHyphenMinusHyphenMinusGreaterThanSignKeyword_3_3_0() { return cHyphenMinusHyphenMinusGreaterThanSignKeyword_3_3_0; }
 		
-		//(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* | '(' rets+=[fmlInfra::Variable] (','
-		//rets+=[fmlInfra::Variable])* ')')
+		//( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+		//| '(' rets+=[fmlInfra::Variable]
+		//    ( ',' rets+=[fmlInfra::Variable] )* ')'
+		//)
 		public Alternatives getAlternatives_3_3_1() { return cAlternatives_3_3_1; }
 		
-		//rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
+		//rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_3_3_1_0() { return cGroup_3_3_1_0; }
 		
 		//rets+=[fmlInfra::Variable]
@@ -17512,7 +20952,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_3_3_1_0_0_0_1() { return cRetsVariableIDTerminalRuleCall_3_3_1_0_0_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_3_3_1_0_1() { return cGroup_3_3_1_0_1; }
 		
 		//','
@@ -17527,7 +20967,8 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_3_3_1_0_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_3_3_1_0_1_1_0_1; }
 		
-		//'(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'
+		//'(' rets+=[fmlInfra::Variable]
+		//               ( ',' rets+=[fmlInfra::Variable] )* ')'
 		public Group getGroup_3_3_1_1() { return cGroup_3_3_1_1; }
 		
 		//'('
@@ -17542,7 +20983,7 @@
 		//ID
 		public RuleCall getRetsVariableIDTerminalRuleCall_3_3_1_1_1_0_1() { return cRetsVariableIDTerminalRuleCall_3_3_1_1_1_0_1; }
 		
-		//(',' rets+=[fmlInfra::Variable])*
+		//( ',' rets+=[fmlInfra::Variable] )*
 		public Group getGroup_3_3_1_1_2() { return cGroup_3_3_1_1_2; }
 		
 		//','
@@ -17596,23 +21037,40 @@
 		/////////////////////////////////////////////
 		////// ObsStatement Rules
 		/////////////////////////////////////////////
-		//ObserverStatement fmlStmnt::ObserverStatement:
-		//	{fmlStmnt::ObserverStatement} ('@observe' | '@obs') ('(' 'ctx:' context=ValuePureNamedMachineExpression ')')?
-		//	'{'
-		//	statement=ObservableStatement
-		//	'}' (('provided:' postCondition=Expression
-		//	| '[' postCondition=Expression ']')
-		//	';')?;
+		//ObserverStatement returns fmlStmnt::ObserverStatement
+		//    : {fmlStmnt::ObserverStatement}
+		//        ( '@observe' | '@obs' )
+		//        ( '('  'ctx:'  context=ValuePureNamedMachineExpression  ')'  )?
+		//          '{'
+		//               statement=ObservableStatement
+		//          '}'
+		//        (
+		//        ( 'provided:' postCondition=Expression
+		//         | '[' postCondition=Expression ']'
+		//         )
+		//        ';'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::ObserverStatement} ('@observe' | '@obs') ('(' 'ctx:' context=ValuePureNamedMachineExpression ')')? '{'
-		//statement=ObservableStatement '}' (('provided:' postCondition=Expression | '[' postCondition=Expression ']') ';')?
+		//{fmlStmnt::ObserverStatement}
+		//       ( '@observe' | '@obs' )
+		//       ( '('  'ctx:'  context=ValuePureNamedMachineExpression  ')'  )?
+		//         '{'
+		//              statement=ObservableStatement
+		//         '}'
+		//       (
+		//       ( 'provided:' postCondition=Expression
+		//        | '[' postCondition=Expression ']'
+		//        )
+		//       ';'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::ObserverStatement}
 		public Action getObserverStatementAction_0() { return cObserverStatementAction_0; }
 		
-		//('@observe' | '@obs')
+		//( '@observe' | '@obs' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'@observe'
@@ -17621,7 +21079,7 @@
 		//'@obs'
 		public Keyword getObsKeyword_1_1() { return cObsKeyword_1_1; }
 		
-		//('(' 'ctx:' context=ValuePureNamedMachineExpression ')')?
+		//( '('  'ctx:'  context=ValuePureNamedMachineExpression  ')'  )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -17651,10 +21109,17 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_5() { return cRightCurlyBracketKeyword_5; }
 		
-		//(('provided:' postCondition=Expression | '[' postCondition=Expression ']') ';')?
+		//(
+		//( 'provided:' postCondition=Expression
+		// | '[' postCondition=Expression ']'
+		// )
+		//';'
+		//)?
 		public Group getGroup_6() { return cGroup_6; }
 		
-		//('provided:' postCondition=Expression | '[' postCondition=Expression ']')
+		//( 'provided:' postCondition=Expression
+		// | '[' postCondition=Expression ']'
+		// )
 		public Alternatives getAlternatives_6_0() { return cAlternatives_6_0; }
 		
 		//'provided:' postCondition=Expression
@@ -17693,12 +21158,14 @@
 		private final RuleCall cObsInputComStatementParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cObsOutputComStatementParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//ObservableStatement fmlStmnt::Statement:
-		//	ObsInputComStatement
-		//	| ObsOutputComStatement;
+		//ObservableStatement returns fmlStmnt::Statement
+		//    : ObsInputComStatement
+		//    | ObsOutputComStatement
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//ObsInputComStatement | ObsOutputComStatement
+		//ObsInputComStatement
+		//   | ObsOutputComStatement
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//ObsInputComStatement
@@ -17736,14 +21203,20 @@
 		private final RuleCall cRouteChannelESUfidParserRuleCall_3_1_1_0_1 = (RuleCall)cRouteChannelCrossReference_3_1_1_0.eContents().get(1);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//ObsInputComStatement fmlStmnt::InputComStatement:
-		//	'input' port=ObsComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-		//	target=ValuePureNamedMachineExpression)?
-		//	& (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+		//ObsInputComStatement returns fmlStmnt::InputComStatement
+		//    : 'input' port=ObsComElement
+		//        ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+		//        ( ( '<--' target=ValuePureNamedMachineExpression )?
+		//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'input' port=ObsComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-		//target=ValuePureNamedMachineExpression)? & (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';'
+		//'input' port=ObsComElement
+		//       ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+		//       ( ( '<--' target=ValuePureNamedMachineExpression )?
+		//       & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//       ) ';'
 		public Group getGroup() { return cGroup; }
 		
 		//'input'
@@ -17755,7 +21228,7 @@
 		//ObsComElement
 		public RuleCall getPortObsComElementParserRuleCall_1_0() { return cPortObsComElementParserRuleCall_1_0; }
 		
-		//('(' leftValue+=Expression (',' leftValue+=Expression)* ')')?
+		//( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -17767,13 +21240,13 @@
 		//Expression
 		public RuleCall getLeftValueExpressionParserRuleCall_2_1_0() { return cLeftValueExpressionParserRuleCall_2_1_0; }
 		
-		//(',' leftValue+=Expression)*
+		//( ',' leftValue+= Expression )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//','
 		public Keyword getCommaKeyword_2_2_0() { return cCommaKeyword_2_2_0; }
 		
-		//leftValue+=Expression
+		//leftValue+= Expression
 		public Assignment getLeftValueAssignment_2_2_1() { return cLeftValueAssignment_2_2_1; }
 		
 		//Expression
@@ -17782,10 +21255,12 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_3() { return cRightParenthesisKeyword_2_3; }
 		
-		//(('<--' target=ValuePureNamedMachineExpression)? & (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?)
+		//( ( '<--' target=ValuePureNamedMachineExpression )?
+		//& ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//)
 		public UnorderedGroup getUnorderedGroup_3() { return cUnorderedGroup_3; }
 		
-		//('<--' target=ValuePureNamedMachineExpression)?
+		//( '<--' target=ValuePureNamedMachineExpression )?
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'<--'
@@ -17797,10 +21272,10 @@
 		//ValuePureNamedMachineExpression
 		public RuleCall getTargetValuePureNamedMachineExpressionParserRuleCall_3_0_1_0() { return cTargetValuePureNamedMachineExpressionParserRuleCall_3_0_1_0; }
 		
-		//(('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?
+		//( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
-		//('<==' | 'via')
+		//( '<==' | 'via' )
 		public Alternatives getAlternatives_3_1_0() { return cAlternatives_3_1_0; }
 		
 		//'<=='
@@ -17850,14 +21325,20 @@
 		private final RuleCall cRouteChannelESUfidParserRuleCall_3_1_1_0_1 = (RuleCall)cRouteChannelCrossReference_3_1_1_0.eContents().get(1);
 		private final Keyword cSemicolonKeyword_4 = (Keyword)cGroup.eContents().get(4);
 		
-		//ObsOutputComStatement fmlStmnt::OutputComStatement:
-		//	'output' port=ObsComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-		//	target=ValuePureNamedMachineExpression)?
-		//	& (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+		//ObsOutputComStatement returns fmlStmnt::OutputComStatement
+		//    : 'output' port=ObsComElement
+		//        ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+		//        ( ( '-->' target=ValuePureNamedMachineExpression )?
+		//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//        ) ';'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'output' port=ObsComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-		//target=ValuePureNamedMachineExpression)? & (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';'
+		//'output' port=ObsComElement
+		//       ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+		//       ( ( '-->' target=ValuePureNamedMachineExpression )?
+		//       & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//       ) ';'
 		public Group getGroup() { return cGroup; }
 		
 		//'output'
@@ -17869,7 +21350,7 @@
 		//ObsComElement
 		public RuleCall getPortObsComElementParserRuleCall_1_0() { return cPortObsComElementParserRuleCall_1_0; }
 		
-		//('(' rightValue+=Expression (',' rightValue+=Expression)* ')')?
+		//( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
@@ -17881,7 +21362,7 @@
 		//Expression
 		public RuleCall getRightValueExpressionParserRuleCall_2_1_0() { return cRightValueExpressionParserRuleCall_2_1_0; }
 		
-		//(',' rightValue+=Expression)*
+		//( ',' rightValue+=Expression )*
 		public Group getGroup_2_2() { return cGroup_2_2; }
 		
 		//','
@@ -17896,10 +21377,12 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_3() { return cRightParenthesisKeyword_2_3; }
 		
-		//(('-->' target=ValuePureNamedMachineExpression)? & (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?)
+		//( ( '-->' target=ValuePureNamedMachineExpression )?
+		//& ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+		//)
 		public UnorderedGroup getUnorderedGroup_3() { return cUnorderedGroup_3; }
 		
-		//('-->' target=ValuePureNamedMachineExpression)?
+		//( '-->' target=ValuePureNamedMachineExpression )?
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//'-->'
@@ -17911,10 +21394,10 @@
 		//ValuePureNamedMachineExpression
 		public RuleCall getTargetValuePureNamedMachineExpressionParserRuleCall_3_0_1_0() { return cTargetValuePureNamedMachineExpressionParserRuleCall_3_0_1_0; }
 		
-		//(('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?
+		//( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
-		//('==>' | 'via')
+		//( '==>' | 'via' )
 		public Alternatives getAlternatives_3_1_0() { return cAlternatives_3_1_0; }
 		
 		//'==>'
@@ -17944,25 +21427,29 @@
 		private final CrossReference cElementNamedElementCrossReference_1_0 = (CrossReference)cElementAssignment_1.eContents().get(0);
 		private final RuleCall cElementNamedElementESIdentifierParserRuleCall_1_0_1 = (RuleCall)cElementNamedElementCrossReference_1_0.eContents().get(1);
 		
-		//ObsComElement fmlExpr::ValueElementSpecification:
-		//	parent=LiteralPureReferenceExpression
-		//	//	: ( parent=ValuePureNamedInstanceExpression
-		//	//		// ( '.' | '->' ) element
-		//	//		kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-		//?
-		//	element=[fmlCommon::NamedElement|ESIdentifier];
+		//ObsComElement returns fmlExpr::ValueElementSpecification
+		//    : ( parent=LiteralPureReferenceExpression
+		////    : ( parent=ValuePureNamedInstanceExpression
+		////        // ( '.' | '->' ) element
+		////        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//      )?
+		//      element=[fmlCommon::NamedElement|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//parent=LiteralPureReferenceExpression //	: ( parent=ValuePureNamedInstanceExpression
-		////		// ( '.' | '->' ) element
-		////		kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-		//? element=[fmlCommon::NamedElement|ESIdentifier]
+		// ( parent=LiteralPureReferenceExpression
+		////    : ( parent=ValuePureNamedInstanceExpression
+		////        // ( '.' | '->' ) element
+		////        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//      )?
+		//      element=[fmlCommon::NamedElement|ESIdentifier]
 		public Group getGroup() { return cGroup; }
 		
-		//parent=LiteralPureReferenceExpression //	: ( parent=ValuePureNamedInstanceExpression
-		////		// ( '.' | '->' ) element
-		////		kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-		//?
+		// ( parent=LiteralPureReferenceExpression
+		////    : ( parent=ValuePureNamedInstanceExpression
+		////        // ( '.' | '->' ) element
+		////        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//      )?
 		public Assignment getParentAssignment_0() { return cParentAssignment_0; }
 		
 		//LiteralPureReferenceExpression
@@ -17998,27 +21485,40 @@
 		private final Keyword cSemicolonKeyword_2_1_1 = (Keyword)cGroup_2_1.eContents().get(1);
 		
 		////ValuePureNamedInstanceExpression returns fmlExpr::Expression
-		////	: LiteralPureReferenceExpression
+		////    : LiteralPureReferenceExpression
 		////
-		////		// ( '.' | '->' ) element
-		////		( { fmlExpr::ValueElementSpecification.parent=current }
-		//////			kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-		////			kind=ValueDotFieldExpressionKind
-		////			element=[fmlCommon::NamedElement|ESIdentifier]
-		////		)*
-		////	;
+		////        // ( '.' | '->' ) element
+		////        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//////            kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		////            kind=ValueDotFieldExpressionKind
+		////            element=[fmlCommon::NamedElement|ESIdentifier]
+		////        )*
+		////    ;
 		/////////////////////////////////////////////
 		////// MetaStatement Rules
 		/////////////////////////////////////////////
-		//MetaStatement fmlStmnt::MetaStatement:
-		//	{fmlStmnt::MetaStatement} op=OPERATOR_META ('{' (operand+=Statement+
-		//	| operand+=Expression+)
-		//	'}'
-		//	| operand+=Expression+ ';');
+		//MetaStatement returns fmlStmnt::MetaStatement
+		//    : {fmlStmnt::MetaStatement}
+		//        op=OPERATOR_META
+		//        ( '{'
+		//            ( ( operand+=Statement  )+
+		//            | ( operand+=Expression )+
+		//            )
+		//            '}'
+		//        | ( operand+=Expression )+  ';'
+		//          )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlStmnt::MetaStatement} op=OPERATOR_META ('{' (operand+=Statement+ | operand+=Expression+) '}' | operand+=Expression+
-		//';')
+		//{fmlStmnt::MetaStatement}
+		//       op=OPERATOR_META
+		//       ( '{'
+		//           ( ( operand+=Statement  )+
+		//           | ( operand+=Expression )+
+		//           )
+		//           '}'
+		//       | ( operand+=Expression )+  ';'
+		//         )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlStmnt::MetaStatement}
@@ -18030,25 +21530,37 @@
 		//OPERATOR_META
 		public RuleCall getOpOPERATOR_METAEnumRuleCall_1_0() { return cOpOPERATOR_METAEnumRuleCall_1_0; }
 		
-		//('{' (operand+=Statement+ | operand+=Expression+) '}' | operand+=Expression+ ';')
+		//( '{'
+		//    ( ( operand+=Statement  )+
+		//    | ( operand+=Expression )+
+		//    )
+		//    '}'
+		//| ( operand+=Expression )+  ';'
+		//  )
 		public Alternatives getAlternatives_2() { return cAlternatives_2; }
 		
-		//'{' (operand+=Statement+ | operand+=Expression+) '}'
+		//'{'
+		//           ( ( operand+=Statement  )+
+		//           | ( operand+=Expression )+
+		//           )
+		//           '}'
 		public Group getGroup_2_0() { return cGroup_2_0; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2_0_0() { return cLeftCurlyBracketKeyword_2_0_0; }
 		
-		//(operand+=Statement+ | operand+=Expression+)
+		//( ( operand+=Statement  )+
+		//| ( operand+=Expression )+
+		//)
 		public Alternatives getAlternatives_2_0_1() { return cAlternatives_2_0_1; }
 		
-		//operand+=Statement+
+		//( operand+=Statement  )+
 		public Assignment getOperandAssignment_2_0_1_0() { return cOperandAssignment_2_0_1_0; }
 		
 		//Statement
 		public RuleCall getOperandStatementParserRuleCall_2_0_1_0_0() { return cOperandStatementParserRuleCall_2_0_1_0_0; }
 		
-		//operand+=Expression+
+		//( operand+=Expression )+
 		public Assignment getOperandAssignment_2_0_1_1() { return cOperandAssignment_2_0_1_1; }
 		
 		//Expression
@@ -18057,10 +21569,10 @@
 		//'}'
 		public Keyword getRightCurlyBracketKeyword_2_0_2() { return cRightCurlyBracketKeyword_2_0_2; }
 		
-		//operand+=Expression+ ';'
+		//( operand+=Expression )+  ';'
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
-		//operand+=Expression+
+		//( operand+=Expression )+
 		public Assignment getOperandAssignment_2_1_0() { return cOperandAssignment_2_1_0; }
 		
 		//Expression
@@ -18078,12 +21590,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//Expression fmlExpr::Expression:
-		//	AssignmentExpression
-		//	| ConditionalTestExpression;
+		//Expression returns fmlExpr::Expression
+		//    : AssignmentExpression
+		//    | ConditionalTestExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//AssignmentExpression | ConditionalTestExpression
+		//AssignmentExpression
+		//   | ConditionalTestExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//AssignmentExpression
@@ -18103,12 +21617,14 @@
 		private final RuleCall cRightHandSideExpressionParserRuleCall_2_0 = (RuleCall)cRightHandSideAssignment_2.eContents().get(0);
 		
 		//// Assignment Expression
-		//AssignmentExpression fmlExpr::AssignmentExpression:
-		//	leftHandSide=LeftHandSideExpression
-		//	operator=AssignmentOperator rightHandSide=Expression;
+		//AssignmentExpression returns fmlExpr::AssignmentExpression
+		//    : leftHandSide=LeftHandSideExpression
+		//        operator=AssignmentOperator rightHandSide=Expression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//leftHandSide=LeftHandSideExpression operator=AssignmentOperator rightHandSide=Expression
+		//leftHandSide=LeftHandSideExpression
+		//       operator=AssignmentOperator rightHandSide=Expression
 		public Group getGroup() { return cGroup; }
 		
 		//leftHandSide=LeftHandSideExpression
@@ -18153,22 +21669,32 @@
 		private final Keyword cCircumflexAccentEqualsSignGreaterThanSignKeyword_18 = (Keyword)cAlternatives.eContents().get(18);
 		private final Keyword cGreaterThanSignEqualsSignGreaterThanSignKeyword_19 = (Keyword)cAlternatives.eContents().get(19);
 		
-		//AssignmentOperator:
-		//	'=' | ':=' | '::='
-		//	| '+=' | '-='
-		//	| '*=' | '/=' | '%='
-		//	| '&&=' | '||='
-		//	| '&=' | '|=' | '^='
-		//	| '<<=' | '>>=' | '>>>='
-		//	// queue operation: push, assign_top, top, pop
-		//	| '<=<'
-		//	| '^=<'
-		//	| '^=>'
-		//	| '>=>';
+		//AssignmentOperator
+		//    : '='   | ':='  | '::='
+		//    | '+='  | '-='
+		//    | '*='  | '/='  | '%='
+		//    | '&&=' | '||='
+		//    | '&='  | '|='    | '^='
+		//    | '<<=' | '>>=' | '>>>='
+		//// queue operation: push, assign_top, top, pop
+		//    | '<=<'
+		//    | '^=<'
+		//    | '^=>'
+		//    | '>=>'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'=' | ':=' | '::=' | '+=' | '-=' | '*=' | '/=' | '%=' | '&&=' | '||=' | '&=' | '|=' | '^=' | '<<=' | '>>=' | '>>>=' // queue operation: push, assign_top, top, pop
-		//| '<=<' | '^=<' | '^=>' | '>=>'
+		// '='   | ':='  | '::='
+		//    | '+='  | '-='
+		//    | '*='  | '/='  | '%='
+		//    | '&&=' | '||='
+		//    | '&='  | '|='    | '^='
+		//    | '<<=' | '>>=' | '>>>='
+		//// queue operation: push, assign_top, top, pop
+		//    | '<=<'
+		//    | '^=<'
+		//    | '^=>'
+		//    | '>=>'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'='
@@ -18244,18 +21770,29 @@
 		private final RuleCall cLvalueValueSelectionExpressionParserRuleCall_1_1_1_0 = (RuleCall)cLvalueAssignment_1_1_1.eContents().get(0);
 		private final Keyword cRightParenthesisKeyword_1_1_2 = (Keyword)cGroup_1_1.eContents().get(2);
 		
-		//LeftHandSideExpression fmlExpr::LeftHandSideExpression:
-		//	{fmlExpr::LeftHandSideExpression} (lvalue=ValueSelectionExpression
-		//	| '(' lvalue=ValueSelectionExpression ')');
+		//LeftHandSideExpression returns fmlExpr::LeftHandSideExpression
+		//    : { fmlExpr::LeftHandSideExpression }
+		////        lvalue=PrimaryExpression
+		//        ( lvalue=ValueSelectionExpression
+		//        | '(' lvalue=ValueSelectionExpression ')'
+		//        )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LeftHandSideExpression} (lvalue=ValueSelectionExpression | '(' lvalue=ValueSelectionExpression ')')
+		// { fmlExpr::LeftHandSideExpression }
+		////        lvalue=PrimaryExpression
+		//        ( lvalue=ValueSelectionExpression
+		//        | '(' lvalue=ValueSelectionExpression ')'
+		//        )
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlExpr::LeftHandSideExpression}
+		//{ fmlExpr::LeftHandSideExpression }
 		public Action getLeftHandSideExpressionAction_0() { return cLeftHandSideExpressionAction_0; }
 		
-		//(lvalue=ValueSelectionExpression | '(' lvalue=ValueSelectionExpression ')')
+		////        lvalue=PrimaryExpression
+		//        ( lvalue=ValueSelectionExpression
+		//        | '(' lvalue=ValueSelectionExpression ')'
+		//        )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//lvalue=ValueSelectionExpression
@@ -18295,21 +21832,29 @@
 		private final RuleCall cElseOperandExpressionParserRuleCall_1_4_0 = (RuleCall)cElseOperandAssignment_1_4.eContents().get(0);
 		
 		//// Conditional Test Expression
-		//ConditionalTestExpression fmlExpr::Expression:
-		//	LogicalOrExpression ({fmlExpr::ConditionalTestExpression.condition=current} operator='?' thenOperand=Expression
-		//	elseSeparator=':'
-		//	elseOperand=Expression)?;
+		//ConditionalTestExpression returns fmlExpr::Expression
+		//    : LogicalOrExpression
+		//        ( {fmlExpr::ConditionalTestExpression.condition=current}
+		//            operator='?' thenOperand=Expression elseSeparator=':'
+		//            elseOperand=Expression
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LogicalOrExpression ({fmlExpr::ConditionalTestExpression.condition=current} operator='?' thenOperand=Expression
-		//elseSeparator=':' elseOperand=Expression)?
+		//LogicalOrExpression
+		//       ( {fmlExpr::ConditionalTestExpression.condition=current}
+		//           operator='?' thenOperand=Expression elseSeparator=':'
+		//           elseOperand=Expression
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//LogicalOrExpression
 		public RuleCall getLogicalOrExpressionParserRuleCall_0() { return cLogicalOrExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ConditionalTestExpression.condition=current} operator='?' thenOperand=Expression elseSeparator=':'
-		//elseOperand=Expression)?
+		//( {fmlExpr::ConditionalTestExpression.condition=current}
+		//    operator='?' thenOperand=Expression elseSeparator=':'
+		//    elseOperand=Expression
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::ConditionalTestExpression.condition=current}
@@ -18359,29 +21904,38 @@
 		private final RuleCall cOperandLogicalAndExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
 		//// Logical Expression
-		//LogicalOrExpression fmlExpr::Expression:
-		//	LogicalAndExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('||' | 'or')
-		//	operand+=LogicalAndExpression (('||' | 'or') operand+=LogicalAndExpression)*)?;
+		//LogicalOrExpression returns fmlExpr::Expression
+		//    : LogicalAndExpression
+		//        ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//            operator=( '||' | 'or' ) operand+=LogicalAndExpression
+		//            ( ( '||' | 'or' ) operand+=LogicalAndExpression )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LogicalAndExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('||' | 'or')
-		//operand+=LogicalAndExpression (('||' | 'or') operand+=LogicalAndExpression)*)?
+		//LogicalAndExpression
+		//       ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//           operator=( '||' | 'or' ) operand+=LogicalAndExpression
+		//           ( ( '||' | 'or' ) operand+=LogicalAndExpression )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//LogicalAndExpression
 		public RuleCall getLogicalAndExpressionParserRuleCall_0() { return cLogicalAndExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('||' | 'or') operand+=LogicalAndExpression (('||' |
-		//'or') operand+=LogicalAndExpression)*)?
+		//( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//    operator=( '||' | 'or' ) operand+=LogicalAndExpression
+		//    ( ( '||' | 'or' ) operand+=LogicalAndExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::LogicalAssociativeExpression.operand+=current}
 		public Action getLogicalAssociativeExpressionOperandAction_1_0() { return cLogicalAssociativeExpressionOperandAction_1_0; }
 		
-		//operator=('||' | 'or')
+		//operator=( '||' | 'or' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('||' | 'or')
+		//( '||' | 'or' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'||'
@@ -18396,10 +21950,10 @@
 		//LogicalAndExpression
 		public RuleCall getOperandLogicalAndExpressionParserRuleCall_1_2_0() { return cOperandLogicalAndExpressionParserRuleCall_1_2_0; }
 		
-		//(('||' | 'or') operand+=LogicalAndExpression)*
+		//( ( '||' | 'or' ) operand+=LogicalAndExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
-		//('||' | 'or')
+		//( '||' | 'or' )
 		public Alternatives getAlternatives_1_3_0() { return cAlternatives_1_3_0; }
 		
 		//'||'
@@ -18433,29 +21987,38 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandBitwiseOrExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//LogicalAndExpression fmlExpr::Expression:
-		//	BitwiseOrExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('&&' | 'and')
-		//	operand+=BitwiseOrExpression (('&&' | 'and') operand+=BitwiseOrExpression)*)?;
+		//LogicalAndExpression returns fmlExpr::Expression
+		//    : BitwiseOrExpression
+		//        ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//            operator=( '&&' | 'and' ) operand+=BitwiseOrExpression
+		//            ( ( '&&' | 'and' ) operand+=BitwiseOrExpression )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//BitwiseOrExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('&&' | 'and')
-		//operand+=BitwiseOrExpression (('&&' | 'and') operand+=BitwiseOrExpression)*)?
+		//BitwiseOrExpression
+		//       ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//           operator=( '&&' | 'and' ) operand+=BitwiseOrExpression
+		//           ( ( '&&' | 'and' ) operand+=BitwiseOrExpression )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//BitwiseOrExpression
 		public RuleCall getBitwiseOrExpressionParserRuleCall_0() { return cBitwiseOrExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('&&' | 'and') operand+=BitwiseOrExpression (('&&' |
-		//'and') operand+=BitwiseOrExpression)*)?
+		//( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+		//    operator=( '&&' | 'and' ) operand+=BitwiseOrExpression
+		//    ( ( '&&' | 'and' ) operand+=BitwiseOrExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::LogicalAssociativeExpression.operand+=current}
 		public Action getLogicalAssociativeExpressionOperandAction_1_0() { return cLogicalAssociativeExpressionOperandAction_1_0; }
 		
-		//operator=('&&' | 'and')
+		//operator=( '&&' | 'and' )
 		public Assignment getOperatorAssignment_1_1() { return cOperatorAssignment_1_1; }
 		
-		//('&&' | 'and')
+		//( '&&' | 'and' )
 		public Alternatives getOperatorAlternatives_1_1_0() { return cOperatorAlternatives_1_1_0; }
 		
 		//'&&'
@@ -18470,10 +22033,10 @@
 		//BitwiseOrExpression
 		public RuleCall getOperandBitwiseOrExpressionParserRuleCall_1_2_0() { return cOperandBitwiseOrExpressionParserRuleCall_1_2_0; }
 		
-		//(('&&' | 'and') operand+=BitwiseOrExpression)*
+		//( ( '&&' | 'and' ) operand+=BitwiseOrExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
-		//('&&' | 'and')
+		//( '&&' | 'and' )
 		public Alternatives getAlternatives_1_3_0() { return cAlternatives_1_3_0; }
 		
 		//'&&'
@@ -18504,20 +22067,29 @@
 		private final RuleCall cOperandBitwiseXorExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
 		//// Bitwise Expression
-		//BitwiseOrExpression fmlExpr::Expression:
-		//	BitwiseXorExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='|'
-		//	operand+=BitwiseXorExpression ('|' operand+=BitwiseXorExpression)*)?;
+		//BitwiseOrExpression returns fmlExpr::Expression
+		//    : BitwiseXorExpression
+		//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//            operator='|' operand+=BitwiseXorExpression
+		//            ( '|' operand+=BitwiseXorExpression )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//BitwiseXorExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='|'
-		//operand+=BitwiseXorExpression ('|' operand+=BitwiseXorExpression)*)?
+		//BitwiseXorExpression
+		//       ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//           operator='|' operand+=BitwiseXorExpression
+		//           ( '|' operand+=BitwiseXorExpression )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//BitwiseXorExpression
 		public RuleCall getBitwiseXorExpressionParserRuleCall_0() { return cBitwiseXorExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='|' operand+=BitwiseXorExpression ('|'
-		//operand+=BitwiseXorExpression)*)?
+		//( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//    operator='|' operand+=BitwiseXorExpression
+		//    ( '|' operand+=BitwiseXorExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::BitwiseAssociativeExpression.operand+=current}
@@ -18535,7 +22107,7 @@
 		//BitwiseXorExpression
 		public RuleCall getOperandBitwiseXorExpressionParserRuleCall_1_2_0() { return cOperandBitwiseXorExpressionParserRuleCall_1_2_0; }
 		
-		//('|' operand+=BitwiseXorExpression)*
+		//( '|' operand+=BitwiseXorExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'|'
@@ -18562,20 +22134,29 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandBitwiseAndExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//BitwiseXorExpression fmlExpr::Expression:
-		//	BitwiseAndExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='^'
-		//	operand+=BitwiseAndExpression ('^' operand+=BitwiseAndExpression)*)?;
+		//BitwiseXorExpression returns fmlExpr::Expression
+		//    : BitwiseAndExpression
+		//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//            operator='^' operand+=BitwiseAndExpression
+		//            ( '^' operand+=BitwiseAndExpression )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//BitwiseAndExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='^'
-		//operand+=BitwiseAndExpression ('^' operand+=BitwiseAndExpression)*)?
+		//BitwiseAndExpression
+		//       ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//           operator='^' operand+=BitwiseAndExpression
+		//           ( '^' operand+=BitwiseAndExpression )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//BitwiseAndExpression
 		public RuleCall getBitwiseAndExpressionParserRuleCall_0() { return cBitwiseAndExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='^' operand+=BitwiseAndExpression ('^'
-		//operand+=BitwiseAndExpression)*)?
+		//( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//    operator='^' operand+=BitwiseAndExpression
+		//    ( '^' operand+=BitwiseAndExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::BitwiseAssociativeExpression.operand+=current}
@@ -18593,7 +22174,7 @@
 		//BitwiseAndExpression
 		public RuleCall getOperandBitwiseAndExpressionParserRuleCall_1_2_0() { return cOperandBitwiseAndExpressionParserRuleCall_1_2_0; }
 		
-		//('^' operand+=BitwiseAndExpression)*
+		//( '^' operand+=BitwiseAndExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'^'
@@ -18620,20 +22201,29 @@
 		private final Assignment cOperandAssignment_1_3_1 = (Assignment)cGroup_1_3.eContents().get(1);
 		private final RuleCall cOperandEqualityExpressionParserRuleCall_1_3_1_0 = (RuleCall)cOperandAssignment_1_3_1.eContents().get(0);
 		
-		//BitwiseAndExpression fmlExpr::Expression:
-		//	EqualityExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='&' operand+=EqualityExpression
-		//	('&' operand+=EqualityExpression)*)?;
+		//BitwiseAndExpression returns fmlExpr::Expression
+		//    : EqualityExpression
+		//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//            operator='&' operand+=EqualityExpression
+		//            ( '&' operand+=EqualityExpression )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//EqualityExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='&' operand+=EqualityExpression
-		//('&' operand+=EqualityExpression)*)?
+		//EqualityExpression
+		//       ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//           operator='&' operand+=EqualityExpression
+		//           ( '&' operand+=EqualityExpression )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//EqualityExpression
 		public RuleCall getEqualityExpressionParserRuleCall_0() { return cEqualityExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='&' operand+=EqualityExpression ('&'
-		//operand+=EqualityExpression)*)?
+		//( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+		//    operator='&' operand+=EqualityExpression
+		//    ( '&' operand+=EqualityExpression )*
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::BitwiseAssociativeExpression.operand+=current}
@@ -18651,7 +22241,7 @@
 		//EqualityExpression
 		public RuleCall getOperandEqualityExpressionParserRuleCall_1_2_0() { return cOperandEqualityExpressionParserRuleCall_1_2_0; }
 		
-		//('&' operand+=EqualityExpression)*
+		//( '&' operand+=EqualityExpression )*
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//'&'
@@ -18675,19 +22265,26 @@
 		private final RuleCall cRightOperandRelationalExpressionParserRuleCall_1_2_0 = (RuleCall)cRightOperandAssignment_1_2.eContents().get(0);
 		
 		//// Equality Expression
-		//EqualityExpression fmlExpr::Expression:
-		//	RelationalExpression ({fmlExpr::EqualityBinaryExpression.leftOperand=current} operator=EqualityOperator
-		//	rightOperand=RelationalExpression)?;
+		//EqualityExpression returns fmlExpr::Expression
+		//    : RelationalExpression
+		//        ( {fmlExpr::EqualityBinaryExpression.leftOperand=current}
+		//            operator=EqualityOperator rightOperand=RelationalExpression
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//RelationalExpression ({fmlExpr::EqualityBinaryExpression.leftOperand=current} operator=EqualityOperator
-		//rightOperand=RelationalExpression)?
+		//RelationalExpression
+		//       ( {fmlExpr::EqualityBinaryExpression.leftOperand=current}
+		//           operator=EqualityOperator rightOperand=RelationalExpression
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//RelationalExpression
 		public RuleCall getRelationalExpressionParserRuleCall_0() { return cRelationalExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::EqualityBinaryExpression.leftOperand=current} operator=EqualityOperator rightOperand=RelationalExpression)?
+		//( {fmlExpr::EqualityBinaryExpression.leftOperand=current}
+		//    operator=EqualityOperator rightOperand=RelationalExpression
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::EqualityBinaryExpression.leftOperand=current}
@@ -18715,8 +22312,9 @@
 		private final Keyword cEqualsSignExclamationMarkEqualsSignKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
 		private final Keyword cEqualsSignSolidusEqualsSignKeyword_5 = (Keyword)cAlternatives.eContents().get(5);
 		
-		//EqualityOperator:
-		//	'==' | '!=' | '===' | '!==' | '=!=' | '=/=';
+		//EqualityOperator
+		//    : '==' | '!=' | '===' | '!==' | '=!=' | '=/='
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'==' | '!=' | '===' | '!==' | '=!=' | '=/='
@@ -18758,23 +22356,35 @@
 		private final RuleCall cRightOperandAdditiveExpressionParserRuleCall_1_3_2_0 = (RuleCall)cRightOperandAssignment_1_3_2.eContents().get(0);
 		
 		//// Relational Binary Expression
-		//RelationalExpression fmlExpr::Expression:
-		//	AdditiveExpression ({fmlExpr::RelationalBinaryExpression.leftOperand=current} operator=RelationalOperator
-		//	rightOperand=AdditiveExpression ({fmlExpr::RelationalTernaryExpression.leftRelation=current}
-		//	rightOperator=RelationalOperator rightOperand=AdditiveExpression)?)?;
+		//RelationalExpression returns fmlExpr::Expression
+		//    : AdditiveExpression
+		//        ( {fmlExpr::RelationalBinaryExpression.leftOperand=current}
+		//            operator=RelationalOperator rightOperand=AdditiveExpression
+		//            ( {fmlExpr::RelationalTernaryExpression.leftRelation=current}
+		//                rightOperator=RelationalOperator rightOperand=AdditiveExpression
+		//            )?
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//AdditiveExpression ({fmlExpr::RelationalBinaryExpression.leftOperand=current} operator=RelationalOperator
-		//rightOperand=AdditiveExpression ({fmlExpr::RelationalTernaryExpression.leftRelation=current}
-		//rightOperator=RelationalOperator rightOperand=AdditiveExpression)?)?
+		//AdditiveExpression
+		//       ( {fmlExpr::RelationalBinaryExpression.leftOperand=current}
+		//           operator=RelationalOperator rightOperand=AdditiveExpression
+		//           ( {fmlExpr::RelationalTernaryExpression.leftRelation=current}
+		//               rightOperator=RelationalOperator rightOperand=AdditiveExpression
+		//           )?
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//AdditiveExpression
 		public RuleCall getAdditiveExpressionParserRuleCall_0() { return cAdditiveExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::RelationalBinaryExpression.leftOperand=current} operator=RelationalOperator rightOperand=AdditiveExpression
-		//({fmlExpr::RelationalTernaryExpression.leftRelation=current} rightOperator=RelationalOperator
-		//rightOperand=AdditiveExpression)?)?
+		//( {fmlExpr::RelationalBinaryExpression.leftOperand=current}
+		//    operator=RelationalOperator rightOperand=AdditiveExpression
+		//    ( {fmlExpr::RelationalTernaryExpression.leftRelation=current}
+		//        rightOperator=RelationalOperator rightOperand=AdditiveExpression
+		//    )?
+		//)?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlExpr::RelationalBinaryExpression.leftOperand=current}
@@ -18792,8 +22402,9 @@
 		//AdditiveExpression
 		public RuleCall getRightOperandAdditiveExpressionParserRuleCall_1_2_0() { return cRightOperandAdditiveExpressionParserRuleCall_1_2_0; }
 		
-		//({fmlExpr::RelationalTernaryExpression.leftRelation=current} rightOperator=RelationalOperator
-		//rightOperand=AdditiveExpression)?
+		//( {fmlExpr::RelationalTernaryExpression.leftRelation=current}
+		//    rightOperator=RelationalOperator rightOperand=AdditiveExpression
+		//)?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//{fmlExpr::RelationalTernaryExpression.leftRelation=current}
@@ -18820,8 +22431,9 @@
 		private final Keyword cGreaterThanSignEqualsSignKeyword_3 = (Keyword)cAlternatives.eContents().get(3);
 		private final Keyword cInKeyword_4 = (Keyword)cAlternatives.eContents().get(4);
 		
-		//RelationalOperator:
-		//	'<' | '>' | '<=' | '>=' | 'in';
+		//RelationalOperator
+		//    : '<' | '>' | '<=' | '>=' | 'in'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'<' | '>' | '<=' | '>=' | 'in'
@@ -18869,29 +22481,43 @@
 		private final RuleCall cOperandMultiplicativeExpressionParserRuleCall_1_1_3_1_0 = (RuleCall)cOperandAssignment_1_1_3_1.eContents().get(0);
 		
 		//// Arithmetic Associative (left) Expression
-		//AdditiveExpression fmlExpr::Expression:
-		//	MultiplicativeExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='+'
-		//	operand+=MultiplicativeExpression ('+' operand+=MultiplicativeExpression)* |
-		//	{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='-' operand+=MultiplicativeExpression ('-'
-		//	operand+=MultiplicativeExpression)*)*;
+		//AdditiveExpression returns fmlExpr::Expression
+		//    : MultiplicativeExpression
+		//        ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='+' operand+=MultiplicativeExpression
+		//            ( '+' operand+=MultiplicativeExpression )* )
+		//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='-' operand+=MultiplicativeExpression
+		//            ( '-' operand+=MultiplicativeExpression )* )
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//MultiplicativeExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='+'
-		//operand+=MultiplicativeExpression ('+' operand+=MultiplicativeExpression)* |
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='-' operand+=MultiplicativeExpression ('-'
-		//operand+=MultiplicativeExpression)*)*
+		//MultiplicativeExpression
+		//       ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='+' operand+=MultiplicativeExpression
+		//           ( '+' operand+=MultiplicativeExpression )* )
+		//       | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='-' operand+=MultiplicativeExpression
+		//           ( '-' operand+=MultiplicativeExpression )* )
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//MultiplicativeExpression
 		public RuleCall getMultiplicativeExpressionParserRuleCall_0() { return cMultiplicativeExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='+' operand+=MultiplicativeExpression ('+'
-		//operand+=MultiplicativeExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='-'
-		//operand+=MultiplicativeExpression ('-' operand+=MultiplicativeExpression)*)*
+		//( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='+' operand+=MultiplicativeExpression
+		//    ( '+' operand+=MultiplicativeExpression )* )
+		//| ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='-' operand+=MultiplicativeExpression
+		//    ( '-' operand+=MultiplicativeExpression )* )
+		//)*
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='+' operand+=MultiplicativeExpression ('+'
-		//operand+=MultiplicativeExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='+' operand+=MultiplicativeExpression
+		//           ( '+' operand+=MultiplicativeExpression )* )
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -18909,7 +22535,7 @@
 		//MultiplicativeExpression
 		public RuleCall getOperandMultiplicativeExpressionParserRuleCall_1_0_2_0() { return cOperandMultiplicativeExpressionParserRuleCall_1_0_2_0; }
 		
-		//('+' operand+=MultiplicativeExpression)*
+		//( '+' operand+=MultiplicativeExpression )*
 		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
 		
 		//'+'
@@ -18921,8 +22547,9 @@
 		//MultiplicativeExpression
 		public RuleCall getOperandMultiplicativeExpressionParserRuleCall_1_0_3_1_0() { return cOperandMultiplicativeExpressionParserRuleCall_1_0_3_1_0; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='-' operand+=MultiplicativeExpression ('-'
-		//operand+=MultiplicativeExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='-' operand+=MultiplicativeExpression
+		//           ( '-' operand+=MultiplicativeExpression )* )
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -18940,7 +22567,7 @@
 		//MultiplicativeExpression
 		public RuleCall getOperandMultiplicativeExpressionParserRuleCall_1_1_2_0() { return cOperandMultiplicativeExpressionParserRuleCall_1_1_2_0; }
 		
-		//('-' operand+=MultiplicativeExpression)*
+		//( '-' operand+=MultiplicativeExpression )*
 		public Group getGroup_1_1_3() { return cGroup_1_1_3; }
 		
 		//'-'
@@ -18998,36 +22625,61 @@
 		private final Assignment cOperandAssignment_1_3_3_1 = (Assignment)cGroup_1_3_3.eContents().get(1);
 		private final RuleCall cOperandUnaryExpressionParserRuleCall_1_3_3_1_0 = (RuleCall)cOperandAssignment_1_3_3_1.eContents().get(0);
 		
-		//MultiplicativeExpression fmlExpr::Expression:
-		//	UnaryExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='*' operand+=UnaryExpression
-		//	('*' operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='**'
-		//	operand+=UnaryExpression ('**' operand+=UnaryExpression)* |
-		//	{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='/' operand+=UnaryExpression ('/'
-		//	operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='%'
-		//	operand+=UnaryExpression ('%' operand+=UnaryExpression)*)*;
+		//MultiplicativeExpression returns fmlExpr::Expression
+		//    : UnaryExpression
+		//        ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='*' operand+=UnaryExpression
+		//            ( '*' operand+=UnaryExpression )* )
+		//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='**' operand+=UnaryExpression
+		//            ( '**' operand+=UnaryExpression )* )
+		//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='/' operand+=UnaryExpression
+		//            ( '/' operand+=UnaryExpression )* )
+		//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//            operator='%' operand+=UnaryExpression
+		//            ( '%' operand+=UnaryExpression )* )
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//UnaryExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='*' operand+=UnaryExpression ('*'
-		//operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='**'
-		//operand+=UnaryExpression ('**' operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
-		//operator='/' operand+=UnaryExpression ('/' operand+=UnaryExpression)* |
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='%' operand+=UnaryExpression ('%'
-		//operand+=UnaryExpression)*)*
+		//UnaryExpression
+		//       ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='*' operand+=UnaryExpression
+		//           ( '*' operand+=UnaryExpression )* )
+		//       | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='**' operand+=UnaryExpression
+		//           ( '**' operand+=UnaryExpression )* )
+		//       | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='/' operand+=UnaryExpression
+		//           ( '/' operand+=UnaryExpression )* )
+		//       | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='%' operand+=UnaryExpression
+		//           ( '%' operand+=UnaryExpression )* )
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//UnaryExpression
 		public RuleCall getUnaryExpressionParserRuleCall_0() { return cUnaryExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='*' operand+=UnaryExpression ('*'
-		//operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='**'
-		//operand+=UnaryExpression ('**' operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
-		//operator='/' operand+=UnaryExpression ('/' operand+=UnaryExpression)* |
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='%' operand+=UnaryExpression ('%'
-		//operand+=UnaryExpression)*)*
+		//( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='*' operand+=UnaryExpression
+		//    ( '*' operand+=UnaryExpression )* )
+		//| ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='**' operand+=UnaryExpression
+		//    ( '**' operand+=UnaryExpression )* )
+		//| ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='/' operand+=UnaryExpression
+		//    ( '/' operand+=UnaryExpression )* )
+		//| ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//    operator='%' operand+=UnaryExpression
+		//    ( '%' operand+=UnaryExpression )* )
+		//)*
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='*' operand+=UnaryExpression ('*'
-		//operand+=UnaryExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='*' operand+=UnaryExpression
+		//           ( '*' operand+=UnaryExpression )* )
 		public Group getGroup_1_0() { return cGroup_1_0; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -19045,7 +22697,7 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_0_2_0() { return cOperandUnaryExpressionParserRuleCall_1_0_2_0; }
 		
-		//('*' operand+=UnaryExpression)*
+		//( '*' operand+=UnaryExpression )*
 		public Group getGroup_1_0_3() { return cGroup_1_0_3; }
 		
 		//'*'
@@ -19057,8 +22709,9 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_0_3_1_0() { return cOperandUnaryExpressionParserRuleCall_1_0_3_1_0; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='**' operand+=UnaryExpression ('**'
-		//operand+=UnaryExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='**' operand+=UnaryExpression
+		//           ( '**' operand+=UnaryExpression )* )
 		public Group getGroup_1_1() { return cGroup_1_1; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -19076,7 +22729,7 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_1_2_0() { return cOperandUnaryExpressionParserRuleCall_1_1_2_0; }
 		
-		//('**' operand+=UnaryExpression)*
+		//( '**' operand+=UnaryExpression )*
 		public Group getGroup_1_1_3() { return cGroup_1_1_3; }
 		
 		//'**'
@@ -19088,8 +22741,9 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_1_3_1_0() { return cOperandUnaryExpressionParserRuleCall_1_1_3_1_0; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='/' operand+=UnaryExpression ('/'
-		//operand+=UnaryExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='/' operand+=UnaryExpression
+		//           ( '/' operand+=UnaryExpression )* )
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -19107,7 +22761,7 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_2_2_0() { return cOperandUnaryExpressionParserRuleCall_1_2_2_0; }
 		
-		//('/' operand+=UnaryExpression)*
+		//( '/' operand+=UnaryExpression )*
 		public Group getGroup_1_2_3() { return cGroup_1_2_3; }
 		
 		//'/'
@@ -19119,8 +22773,9 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_2_3_1_0() { return cOperandUnaryExpressionParserRuleCall_1_2_3_1_0; }
 		
-		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='%' operand+=UnaryExpression ('%'
-		//operand+=UnaryExpression)*
+		//( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+		//           operator='%' operand+=UnaryExpression
+		//           ( '%' operand+=UnaryExpression )* )
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//{fmlExpr::ArithmeticAssociativeExpression.operand+=current}
@@ -19138,7 +22793,7 @@
 		//UnaryExpression
 		public RuleCall getOperandUnaryExpressionParserRuleCall_1_3_2_0() { return cOperandUnaryExpressionParserRuleCall_1_3_2_0; }
 		
-		//('%' operand+=UnaryExpression)*
+		//( '%' operand+=UnaryExpression )*
 		public Group getGroup_1_3_3() { return cGroup_1_3_3; }
 		
 		//'%'
@@ -19165,24 +22820,32 @@
 		private final RuleCall cPrimaryExpressionParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
 		
 		//// Unary Expression
-		//UnaryExpression fmlExpr::Expression:
-		//	LiteralTerminalExpression
-		//	| ArithmeticUnaryExpression
-		//	| LogicalUnaryExpression
-		//	| QuantifiedLogicalExpression
-		//	| BitwiseUnaryExpression
-		//	| NewfreshExpression
-		//	| CastExpression
-		//	//	| CollectionFunctionExpression
-		//
-		//	| PrefixUnaryExpression
-		//	| PostfixUnaryExpression
-		//	| PrimaryExpression;
+		//UnaryExpression returns fmlExpr::Expression
+		//    : LiteralTerminalExpression
+		//    | ArithmeticUnaryExpression
+		//    | LogicalUnaryExpression
+		//    | QuantifiedLogicalExpression
+		//    | BitwiseUnaryExpression
+		//    | NewfreshExpression
+		//    | CastExpression
+		////    | CollectionFunctionExpression
+		//    | PrefixUnaryExpression
+		//    | PostfixUnaryExpression
+		//    | PrimaryExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralTerminalExpression | ArithmeticUnaryExpression | LogicalUnaryExpression | QuantifiedLogicalExpression |
-		//BitwiseUnaryExpression | NewfreshExpression | CastExpression //	| CollectionFunctionExpression
-		//| PrefixUnaryExpression | PostfixUnaryExpression | PrimaryExpression
+		// LiteralTerminalExpression
+		//    | ArithmeticUnaryExpression
+		//    | LogicalUnaryExpression
+		//    | QuantifiedLogicalExpression
+		//    | BitwiseUnaryExpression
+		//    | NewfreshExpression
+		//    | CastExpression
+		////    | CollectionFunctionExpression
+		//    | PrefixUnaryExpression
+		//    | PostfixUnaryExpression
+		//    | PrimaryExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralTerminalExpression
@@ -19220,8 +22883,9 @@
 		private final RuleCall cIncrementOrDecrementPostfixExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
 		//// Postfix Increment or Decrement Expression
-		//PostfixUnaryExpression fmlExpr::Expression:
-		//	IncrementOrDecrementPostfixExpression;
+		//PostfixUnaryExpression returns fmlExpr::Expression
+		//    : IncrementOrDecrementPostfixExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//IncrementOrDecrementPostfixExpression
@@ -19237,11 +22901,12 @@
 		private final RuleCall cOperatorAffixOperatorParserRuleCall_1_0_0 = (RuleCall)cOperatorAlternatives_1_0.eContents().get(0);
 		private final Keyword cOperatorGreaterThanSignEqualsSignGreaterThanSignKeyword_1_0_1 = (Keyword)cOperatorAlternatives_1_0.eContents().get(1);
 		
-		//IncrementOrDecrementPostfixExpression fmlExpr::IncrementOrDecrementPostfixExpression:
-		//	leftHandSide=LeftHandSideExpression operator=(AffixOperator | '>=>');
+		//IncrementOrDecrementPostfixExpression returns fmlExpr::IncrementOrDecrementPostfixExpression
+		//    : leftHandSide=LeftHandSideExpression operator=(AffixOperator  | '>=>')
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//leftHandSide=LeftHandSideExpression operator=(AffixOperator | '>=>')
+		//leftHandSide=LeftHandSideExpression operator=(AffixOperator  | '>=>')
 		public Group getGroup() { return cGroup; }
 		
 		//leftHandSide=LeftHandSideExpression
@@ -19250,10 +22915,10 @@
 		//LeftHandSideExpression
 		public RuleCall getLeftHandSideLeftHandSideExpressionParserRuleCall_0_0() { return cLeftHandSideLeftHandSideExpressionParserRuleCall_0_0; }
 		
-		//operator=(AffixOperator | '>=>')
+		//operator=(AffixOperator  | '>=>')
 		public Assignment getOperatorAssignment_1() { return cOperatorAssignment_1; }
 		
-		//(AffixOperator | '>=>')
+		//(AffixOperator  | '>=>')
 		public Alternatives getOperatorAlternatives_1_0() { return cOperatorAlternatives_1_0; }
 		
 		//AffixOperator
@@ -19267,8 +22932,9 @@
 		private final RuleCall cIncrementOrDecrementPrefixExpressionParserRuleCall = (RuleCall)rule.eContents().get(1);
 		
 		//// Prefix Increment or Decrement Expression
-		//PrefixUnaryExpression fmlExpr::Expression:
-		//	IncrementOrDecrementPrefixExpression;
+		//PrefixUnaryExpression returns fmlExpr::Expression
+		//    : IncrementOrDecrementPrefixExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//IncrementOrDecrementPrefixExpression
@@ -19282,8 +22948,9 @@
 		private final Assignment cLeftHandSideAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cLeftHandSideLeftHandSideExpressionParserRuleCall_1_0 = (RuleCall)cLeftHandSideAssignment_1.eContents().get(0);
 		
-		//IncrementOrDecrementPrefixExpression fmlExpr::IncrementOrDecrementPrefixExpression:
-		//	operator=AffixOperator leftHandSide=LeftHandSideExpression;
+		//IncrementOrDecrementPrefixExpression returns fmlExpr::IncrementOrDecrementPrefixExpression
+		//    : operator=AffixOperator leftHandSide=LeftHandSideExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//operator=AffixOperator leftHandSide=LeftHandSideExpression
@@ -19307,8 +22974,9 @@
 		private final Keyword cPlusSignPlusSignKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
 		private final Keyword cHyphenMinusHyphenMinusKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
 		
-		//AffixOperator:
-		//	'++' | '--';
+		//AffixOperator
+		//    : '++' | '--'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'++' | '--'
@@ -19335,12 +23003,14 @@
 		private final Keyword cRightParenthesisKeyword_1_3 = (Keyword)cGroup_1.eContents().get(3);
 		
 		//// Newfresh Unary Expression
-		//NewfreshExpression fmlExpr::NewfreshExpression:
-		//	'newfresh' leftHandSide=LeftHandSideExpression
-		//	| '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')';
+		//NewfreshExpression returns fmlExpr::NewfreshExpression
+		//    : 'newfresh' leftHandSide=LeftHandSideExpression
+		//    | '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'newfresh' leftHandSide=LeftHandSideExpression | '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')'
+		//'newfresh' leftHandSide=LeftHandSideExpression
+		//   | '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//'newfresh' leftHandSide=LeftHandSideExpression
@@ -19388,12 +23058,14 @@
 		private final Keyword cRightParenthesisKeyword_6 = (Keyword)cGroup.eContents().get(6);
 		
 		//// Cast Expression
-		//CastExpression fmlExpr::CastExpression:
-		//	'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>'
-		//	'(' operand=Expression ')';
+		//CastExpression returns fmlExpr::CastExpression
+		//    : 'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>'
+		//         '(' operand=Expression ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>' '(' operand=Expression ')'
+		//'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>'
+		//        '(' operand=Expression ')'
 		public Group getGroup() { return cGroup; }
 		
 		//'ctor'
@@ -19443,16 +23115,19 @@
 		private final Keyword cRightParenthesisKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
 		////CollectionFunctionExpression  fmlExpr::MixTupleExpression
-		//CollectionFunctionExpression fmlExpr::Expression:
-		//	'empty(' Expression ')'
-		//	| 'nonempty(' Expression ')'
-		//	| 'size(' Expression ')';
+		//CollectionFunctionExpression returns fmlExpr::Expression
+		//    : 'empty('    Expression ')'
+		//    | 'nonempty(' Expression ')'
+		//    | 'size('     Expression ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'empty(' Expression ')' | 'nonempty(' Expression ')' | 'size(' Expression ')'
+		//'empty('    Expression ')'
+		//   | 'nonempty(' Expression ')'
+		//   | 'size('     Expression ')'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//'empty(' Expression ')'
+		//'empty('    Expression ')'
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//'empty('
@@ -19476,7 +23151,7 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_1_2() { return cRightParenthesisKeyword_1_2; }
 		
-		//'size(' Expression ')'
+		//'size('     Expression ')'
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'size('
@@ -19497,8 +23172,9 @@
 		private final RuleCall cOperandUnaryExpressionParserRuleCall_1_0 = (RuleCall)cOperandAssignment_1.eContents().get(0);
 		
 		//// Arithmetic Unary Expression
-		//ArithmeticUnaryExpression fmlExpr::ArithmeticUnaryExpression:
-		//	operator=ArithmeticUnaryOperator operand=UnaryExpression;
+		//ArithmeticUnaryExpression returns fmlExpr::ArithmeticUnaryExpression
+		//    : operator=ArithmeticUnaryOperator operand=UnaryExpression
+		//;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//operator=ArithmeticUnaryOperator operand=UnaryExpression
@@ -19522,8 +23198,9 @@
 		private final Keyword cPlusSignKeyword_0 = (Keyword)cAlternatives.eContents().get(0);
 		private final Keyword cHyphenMinusKeyword_1 = (Keyword)cAlternatives.eContents().get(1);
 		
-		//ArithmeticUnaryOperator:
-		//	'+' | '-';
+		//ArithmeticUnaryOperator
+		//    : '+' | '-'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//'+' | '-'
@@ -19556,20 +23233,22 @@
 		private final Keyword cRightParenthesisKeyword_7 = (Keyword)cGroup.eContents().get(7);
 		
 		//// Logical Quantified Expression
-		//QuantifiedLogicalExpression fmlExpr::QuantifiedLogicalExpression:
-		//	quantifier=('forall' | 'exists')
-		//	'<' variable+=BoundVariable (',' variable+=BoundVariable)* '>'
-		//	'(' predicate=Expression ')';
+		//QuantifiedLogicalExpression returns fmlExpr::QuantifiedLogicalExpression
+		//    : quantifier=( 'forall' | 'exists' )
+		//      '<'  variable+=BoundVariable  ( ',' variable+=BoundVariable )*  '>'
+		//      '('  predicate=Expression  ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//quantifier=('forall' | 'exists') '<' variable+=BoundVariable (',' variable+=BoundVariable)* '>' '(' predicate=Expression
-		//')'
+		//quantifier=( 'forall' | 'exists' )
+		//     '<'  variable+=BoundVariable  ( ',' variable+=BoundVariable )*  '>'
+		//     '('  predicate=Expression  ')'
 		public Group getGroup() { return cGroup; }
 		
-		//quantifier=('forall' | 'exists')
+		//quantifier=( 'forall' | 'exists' )
 		public Assignment getQuantifierAssignment_0() { return cQuantifierAssignment_0; }
 		
-		//('forall' | 'exists')
+		//( 'forall' | 'exists' )
 		public Alternatives getQuantifierAlternatives_0_0() { return cQuantifierAlternatives_0_0; }
 		
 		//'forall'
@@ -19587,7 +23266,7 @@
 		//BoundVariable
 		public RuleCall getVariableBoundVariableParserRuleCall_2_0() { return cVariableBoundVariableParserRuleCall_2_0; }
 		
-		//(',' variable+=BoundVariable)*
+		//( ',' variable+=BoundVariable )*
 		public Group getGroup_3() { return cGroup_3; }
 		
 		//','
@@ -19623,11 +23302,12 @@
 		private final Assignment cTypeAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cTypeDataTypeParserRuleCall_2_0 = (RuleCall)cTypeAssignment_2.eContents().get(0);
 		
-		//BoundVariable fmlInfra::Variable:
-		//	name=ESIdentifier ':' type=DataType;
+		//BoundVariable returns fmlInfra::Variable
+		//    : name=ESIdentifier  ':'  type=DataType
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//name=ESIdentifier ':' type=DataType
+		//name=ESIdentifier  ':'  type=DataType
 		public Group getGroup() { return cGroup; }
 		
 		//name=ESIdentifier
@@ -19656,8 +23336,9 @@
 		private final RuleCall cOperandUnaryExpressionParserRuleCall_1_0 = (RuleCall)cOperandAssignment_1.eContents().get(0);
 		
 		//// Logical Unary Expression
-		//LogicalUnaryExpression fmlExpr::LogicalUnaryExpression:
-		//	operator=('!' | 'not') operand=UnaryExpression;
+		//LogicalUnaryExpression returns fmlExpr::LogicalUnaryExpression
+		//    : operator=('!' | 'not') operand=UnaryExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//operator=('!' | 'not') operand=UnaryExpression
@@ -19690,8 +23371,9 @@
 		private final RuleCall cOperandUnaryExpressionParserRuleCall_1_0 = (RuleCall)cOperandAssignment_1.eContents().get(0);
 		
 		//// Logical Unary Expression
-		//BitwiseUnaryExpression fmlExpr::BitwiseUnaryExpression:
-		//	operator='~' operand=UnaryExpression;
+		//BitwiseUnaryExpression returns fmlExpr::BitwiseUnaryExpression
+		//    :operator='~' operand=UnaryExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		//operator='~' operand=UnaryExpression
@@ -19771,55 +23453,111 @@
 		private final RuleCall cArgMixTupleExpressionListParserRuleCall_2_4_3_1_1_0 = (RuleCall)cArgAssignment_2_4_3_1_1.eContents().get(0);
 		private final Keyword cRightParenthesisKeyword_2_4_3_1_2 = (Keyword)cGroup_2_4_3_1.eContents().get(2);
 		
-		//PrimaryExpression fmlExpr::Expression:
-		//	BaseExpression ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'.' //kind=ValueDotFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	// '(' parameter ',' ... ',' parameter ')'
-		//	| kind=ValueParameterExpressionKind
-		//	arg=MixTupleExpressionList ')')?)* ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'->' //kind=ValueArrowFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	// '(' parameter ',' ... ',' parameter ')'
-		//	| kind=ValueParameterExpressionKind
-		//	arg=MixTupleExpressionList ')')? ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'.' //kind=ValueDotFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	// '(' parameter ',' ... ',' parameter ')'
-		//	| kind=ValueParameterExpressionKind
-		//	arg=MixTupleExpressionList ')')?)*)?;
+		//PrimaryExpression returns fmlExpr::Expression
+		//    : BaseExpression
+		//        // '.' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '.' //kind=ValueDotFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		//            // '(' parameter ',' ... ',' parameter ')'
+		//            | kind=ValueParameterExpressionKind
+		//                arg=MixTupleExpressionList  ')'
+		//            )?
+		//        )*
+		//        // '->' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '->' //kind=ValueArrowFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		//            // '(' parameter ',' ... ',' parameter ')'
+		//            | kind=ValueParameterExpressionKind
+		//                arg=MixTupleExpressionList  ')'
+		//            )?
+		//            // '.' element
+		//            ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                 '.' //kind=ValueDotFieldExpressionKind
+		//                element=[fmlCommon::NamedElement|ESIdentifier]
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		//                // '(' parameter ',' ... ',' parameter ')'
+		//                | kind=ValueParameterExpressionKind
+		//                    arg=MixTupleExpressionList  ')'
+		//                )?
+		//            )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//BaseExpression ({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?)*
-		//({fmlExpr::ValueElementSpecification.parent=current} '->' //kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?)*)?
+		//BaseExpression
+		//       // '.' element
+		//       ( { fmlExpr::ValueElementSpecification.parent=current }
+		//           '.' //kind=ValueDotFieldExpressionKind
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
+		//           // '[' index ',' ... ',' index ']'
+		//           ( kind=ValueIndexExpressionKind
+		//               arg=PositionalTupleExpressionList  ']'
+		//           // '(' parameter ',' ... ',' parameter ')'
+		//           | kind=ValueParameterExpressionKind
+		//               arg=MixTupleExpressionList  ')'
+		//           )?
+		//       )*
+		//       // '->' element
+		//       ( { fmlExpr::ValueElementSpecification.parent=current }
+		//           '->' //kind=ValueArrowFieldExpressionKind
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
+		//           // '[' index ',' ... ',' index ']'
+		//           ( kind=ValueIndexExpressionKind
+		//               arg=PositionalTupleExpressionList  ']'
+		//           // '(' parameter ',' ... ',' parameter ')'
+		//           | kind=ValueParameterExpressionKind
+		//               arg=MixTupleExpressionList  ')'
+		//           )?
+		//           // '.' element
+		//           ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                '.' //kind=ValueDotFieldExpressionKind
+		//               element=[fmlCommon::NamedElement|ESIdentifier]
+		//               // '[' index ',' ... ',' index ']'
+		//               ( kind=ValueIndexExpressionKind
+		//                   arg=PositionalTupleExpressionList  ']'
+		//               // '(' parameter ',' ... ',' parameter ')'
+		//               | kind=ValueParameterExpressionKind
+		//                   arg=MixTupleExpressionList  ')'
+		//               )?
+		//           )*
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//BaseExpression
 		public RuleCall getBaseExpressionParserRuleCall_0() { return cBaseExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?)*
+		//// '.' element
+		//( { fmlExpr::ValueElementSpecification.parent=current }
+		//    '.' //kind=ValueDotFieldExpressionKind
+		//    element=[fmlCommon::NamedElement|ESIdentifier]
+		//    // '[' index ',' ... ',' index ']'
+		//    ( kind=ValueIndexExpressionKind
+		//        arg=PositionalTupleExpressionList  ']'
+		//    // '(' parameter ',' ... ',' parameter ')'
+		//    | kind=ValueParameterExpressionKind
+		//        arg=MixTupleExpressionList  ')'
+		//    )?
+		//)*
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_1_0() { return cValueElementSpecificationParentAction_1_0; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_1_1() { return cFullStopKeyword_1_1; }
 		
 		////kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_1_2() { return cElementAssignment_1_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -19828,11 +23566,17 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_1_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_1_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
+		//// '[' index ',' ... ',' index ']'
+		//( kind=ValueIndexExpressionKind
+		//    arg=PositionalTupleExpressionList  ']'
+		//// '(' parameter ',' ... ',' parameter ')'
+		//| kind=ValueParameterExpressionKind
+		//    arg=MixTupleExpressionList  ')'
+		//)?
 		public Alternatives getAlternatives_1_3() { return cAlternatives_1_3; }
 		
-		//kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']'
+		//kind=ValueIndexExpressionKind
+		//               arg=PositionalTupleExpressionList  ']'
 		public Group getGroup_1_3_0() { return cGroup_1_3_0; }
 		
 		//kind=ValueIndexExpressionKind
@@ -19850,7 +23594,8 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_1_3_0_2() { return cRightSquareBracketKeyword_1_3_0_2; }
 		
-		//kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')'
+		//kind=ValueParameterExpressionKind
+		//               arg=MixTupleExpressionList  ')'
 		public Group getGroup_1_3_1() { return cGroup_1_3_1; }
 		
 		//kind=ValueParameterExpressionKind
@@ -19868,22 +23613,40 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_1_3_1_2() { return cRightParenthesisKeyword_1_3_1_2; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '->' //kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?)*)?
+		//// '->' element
+		//( { fmlExpr::ValueElementSpecification.parent=current }
+		//    '->' //kind=ValueArrowFieldExpressionKind
+		//    element=[fmlCommon::NamedElement|ESIdentifier]
+		//    // '[' index ',' ... ',' index ']'
+		//    ( kind=ValueIndexExpressionKind
+		//        arg=PositionalTupleExpressionList  ']'
+		//    // '(' parameter ',' ... ',' parameter ')'
+		//    | kind=ValueParameterExpressionKind
+		//        arg=MixTupleExpressionList  ')'
+		//    )?
+		//    // '.' element
+		//    ( { fmlExpr::ValueElementSpecification.parent=current }
+		//         '.' //kind=ValueDotFieldExpressionKind
+		//        element=[fmlCommon::NamedElement|ESIdentifier]
+		//        // '[' index ',' ... ',' index ']'
+		//        ( kind=ValueIndexExpressionKind
+		//            arg=PositionalTupleExpressionList  ']'
+		//        // '(' parameter ',' ... ',' parameter ')'
+		//        | kind=ValueParameterExpressionKind
+		//            arg=MixTupleExpressionList  ')'
+		//        )?
+		//    )*
+		//)?
 		public Group getGroup_2() { return cGroup_2; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_2_0() { return cValueElementSpecificationParentAction_2_0; }
 		
 		//'->'
 		public Keyword getHyphenMinusGreaterThanSignKeyword_2_1() { return cHyphenMinusGreaterThanSignKeyword_2_1; }
 		
 		////kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_2_2() { return cElementAssignment_2_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -19892,11 +23655,17 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_2_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_2_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
+		//// '[' index ',' ... ',' index ']'
+		//( kind=ValueIndexExpressionKind
+		//    arg=PositionalTupleExpressionList  ']'
+		//// '(' parameter ',' ... ',' parameter ')'
+		//| kind=ValueParameterExpressionKind
+		//    arg=MixTupleExpressionList  ')'
+		//)?
 		public Alternatives getAlternatives_2_3() { return cAlternatives_2_3; }
 		
-		//kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']'
+		//kind=ValueIndexExpressionKind
+		//               arg=PositionalTupleExpressionList  ']'
 		public Group getGroup_2_3_0() { return cGroup_2_3_0; }
 		
 		//kind=ValueIndexExpressionKind
@@ -19914,7 +23683,8 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_2_3_0_2() { return cRightSquareBracketKeyword_2_3_0_2; }
 		
-		//kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')'
+		//kind=ValueParameterExpressionKind
+		//               arg=MixTupleExpressionList  ')'
 		public Group getGroup_2_3_1() { return cGroup_2_3_1; }
 		
 		//kind=ValueParameterExpressionKind
@@ -19932,19 +23702,28 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_3_1_2() { return cRightParenthesisKeyword_2_3_1_2; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?)*
+		//// '.' element
+		//( { fmlExpr::ValueElementSpecification.parent=current }
+		//     '.' //kind=ValueDotFieldExpressionKind
+		//    element=[fmlCommon::NamedElement|ESIdentifier]
+		//    // '[' index ',' ... ',' index ']'
+		//    ( kind=ValueIndexExpressionKind
+		//        arg=PositionalTupleExpressionList  ']'
+		//    // '(' parameter ',' ... ',' parameter ')'
+		//    | kind=ValueParameterExpressionKind
+		//        arg=MixTupleExpressionList  ')'
+		//    )?
+		//)*
 		public Group getGroup_2_4() { return cGroup_2_4; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_2_4_0() { return cValueElementSpecificationParentAction_2_4_0; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_2_4_1() { return cFullStopKeyword_2_4_1; }
 		
 		////kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//               element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_2_4_2() { return cElementAssignment_2_4_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -19953,11 +23732,17 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_2_4_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_2_4_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
+		//// '[' index ',' ... ',' index ']'
+		//( kind=ValueIndexExpressionKind
+		//    arg=PositionalTupleExpressionList  ']'
+		//// '(' parameter ',' ... ',' parameter ')'
+		//| kind=ValueParameterExpressionKind
+		//    arg=MixTupleExpressionList  ')'
+		//)?
 		public Alternatives getAlternatives_2_4_3() { return cAlternatives_2_4_3; }
 		
-		//kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']'
+		//kind=ValueIndexExpressionKind
+		//                   arg=PositionalTupleExpressionList  ']'
 		public Group getGroup_2_4_3_0() { return cGroup_2_4_3_0; }
 		
 		//kind=ValueIndexExpressionKind
@@ -19975,7 +23760,8 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_2_4_3_0_2() { return cRightSquareBracketKeyword_2_4_3_0_2; }
 		
-		//kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')'
+		//kind=ValueParameterExpressionKind
+		//                   arg=MixTupleExpressionList  ')'
 		public Group getGroup_2_4_3_1() { return cGroup_2_4_3_1; }
 		
 		//kind=ValueParameterExpressionKind
@@ -20004,16 +23790,19 @@
 		private final RuleCall cInvokeExpressionDeprecatedParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cDynamicInstantiationExpressionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
-		//BaseExpression fmlExpr::Expression:
-		//	LiteralReferenceableExpression
-		//	| '(' Expression ')'
-		//	| InvokeExpressionDeprecated
-		//	| DynamicInstantiationExpression
-		//	//	| NamedExpression
-		//;
+		//BaseExpression returns fmlExpr::Expression
+		//    : LiteralReferenceableExpression
+		//    | '(' Expression ')'
+		//    | InvokeExpressionDeprecated
+		//    | DynamicInstantiationExpression
+		////    | NamedExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralReferenceableExpression | '(' Expression ')' | InvokeExpressionDeprecated | DynamicInstantiationExpression
+		//LiteralReferenceableExpression
+		//   | '(' Expression ')'
+		//   | InvokeExpressionDeprecated
+		//   | DynamicInstantiationExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralReferenceableExpression
@@ -20045,11 +23834,14 @@
 		private final RuleCall cInvokableValueSelectionExpressionParserRuleCall_1_0 = (RuleCall)cInvokableAssignment_1.eContents().get(0);
 		
 		//// Behavior Invoke Expression
-		//InvokeExpression fmlExpr::InvokeExpression:
-		//	{fmlExpr::InvokeExpression} invokable=ValueSelectionExpression;
+		//InvokeExpression returns fmlExpr::InvokeExpression
+		//    : {fmlExpr::InvokeExpression}
+		//        invokable=ValueSelectionExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::InvokeExpression} invokable=ValueSelectionExpression
+		//{fmlExpr::InvokeExpression}
+		//       invokable=ValueSelectionExpression
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::InvokeExpression}
@@ -20074,12 +23866,14 @@
 		private final RuleCall cArgsExpressionParserRuleCall_4_0 = (RuleCall)cArgsAssignment_4.eContents().get(0);
 		private final Keyword cRightParenthesisKeyword_5 = (Keyword)cGroup.eContents().get(5);
 		
-		//InvokeExpressionDeprecated fmlExpr::InvokeExpression:
-		//	{fmlExpr::InvokeExpression}
-		//	'(:' args+=Expression invokable=LiteralReferenceElement args+=Expression* ')';
+		//InvokeExpressionDeprecated returns fmlExpr::InvokeExpression
+		//    : {fmlExpr::InvokeExpression}
+		//        '(:' args+=Expression invokable=LiteralReferenceElement ( args+=Expression )* ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::InvokeExpression} '(:' args+=Expression invokable=LiteralReferenceElement args+=Expression* ')'
+		//{fmlExpr::InvokeExpression}
+		//       '(:' args+=Expression invokable=LiteralReferenceElement ( args+=Expression )* ')'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::InvokeExpression}
@@ -20100,7 +23894,7 @@
 		//LiteralReferenceElement
 		public RuleCall getInvokableLiteralReferenceElementParserRuleCall_3_0() { return cInvokableLiteralReferenceElementParserRuleCall_3_0; }
 		
-		//args+=Expression*
+		//( args+=Expression )*
 		public Assignment getArgsAssignment_4() { return cArgsAssignment_4; }
 		
 		//Expression
@@ -20117,12 +23911,14 @@
 		private final Assignment cInstanceAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cInstanceInstanceSpecificationParserRuleCall_2_0 = (RuleCall)cInstanceAssignment_2.eContents().get(0);
 		
-		//DynamicInstantiationExpression fmlExpr::InstantiationExpression:
-		//	{fmlExpr::InstantiationExpression}
-		//	'new' instance=InstanceSpecification;
+		//DynamicInstantiationExpression returns fmlExpr::InstantiationExpression
+		//    : {fmlExpr::InstantiationExpression}
+		//        'new' instance=InstanceSpecification
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::InstantiationExpression} 'new' instance=InstanceSpecification
+		//{fmlExpr::InstantiationExpression}
+		//       'new' instance=InstanceSpecification
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::InstantiationExpression}
@@ -20162,13 +23958,20 @@
 		private final Keyword cSemicolonKeyword_3_1_1 = (Keyword)cGroup_3_1.eContents().get(1);
 		private final Keyword cRightCurlyBracketKeyword_3_2 = (Keyword)cGroup_3.eContents().get(2);
 		
-		//InstanceSpecification fmlInfra::InstanceMachine:
-		//	{fmlInfra::InstanceMachine} model=[fmlInfra::Machine|ESIdentifier] ('(' (slot+=SlotParameter (','
-		//	slot+=SlotParameter)*)? ')')? ('{' (slot+=SlotProperty ';')* '}')?;
+		//InstanceSpecification returns fmlInfra::InstanceMachine
+		//    : {fmlInfra::InstanceMachine}
+		//        model=[fmlInfra::Machine|ESIdentifier]
+		////        ( '(' arg=MixTupleExpressionList ')'
+		//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+		//        ( '{' ( slot+=SlotProperty ';' )*  '}' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlInfra::InstanceMachine} model=[fmlInfra::Machine|ESIdentifier] ('(' (slot+=SlotParameter (','
-		//slot+=SlotParameter)*)? ')')? ('{' (slot+=SlotProperty ';')* '}')?
+		// {fmlInfra::InstanceMachine}
+		//        model=[fmlInfra::Machine|ESIdentifier]
+		////        ( '(' arg=MixTupleExpressionList ')'
+		//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+		//        ( '{' ( slot+=SlotProperty ';' )*  '}' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlInfra::InstanceMachine}
@@ -20183,13 +23986,14 @@
 		//ESIdentifier
 		public RuleCall getModelMachineESIdentifierParserRuleCall_1_0_1() { return cModelMachineESIdentifierParserRuleCall_1_0_1; }
 		
-		//('(' (slot+=SlotParameter (',' slot+=SlotParameter)*)? ')')?
+		////        ( '(' arg=MixTupleExpressionList ')'
+		//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'('
 		public Keyword getLeftParenthesisKeyword_2_0() { return cLeftParenthesisKeyword_2_0; }
 		
-		//(slot+=SlotParameter (',' slot+=SlotParameter)*)?
+		//( slot+=SlotParameter ( ',' slot+=SlotParameter )* )?
 		public Group getGroup_2_1() { return cGroup_2_1; }
 		
 		//slot+=SlotParameter
@@ -20198,7 +24002,7 @@
 		//SlotParameter
 		public RuleCall getSlotSlotParameterParserRuleCall_2_1_0_0() { return cSlotSlotParameterParserRuleCall_2_1_0_0; }
 		
-		//(',' slot+=SlotParameter)*
+		//( ',' slot+=SlotParameter )*
 		public Group getGroup_2_1_1() { return cGroup_2_1_1; }
 		
 		//','
@@ -20213,13 +24017,13 @@
 		//')'
 		public Keyword getRightParenthesisKeyword_2_2() { return cRightParenthesisKeyword_2_2; }
 		
-		//('{' (slot+=SlotProperty ';')* '}')?
+		//( '{' ( slot+=SlotProperty ';' )*  '}' )?
 		public Group getGroup_3() { return cGroup_3; }
 		
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_3_0() { return cLeftCurlyBracketKeyword_3_0; }
 		
-		//(slot+=SlotProperty ';')*
+		//( slot+=SlotProperty ';' )*
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//slot+=SlotProperty
@@ -20242,11 +24046,12 @@
 		private final Keyword cRightParenthesisKeyword_2 = (Keyword)cGroup.eContents().get(2);
 		
 		//// Tuple Expression
-		//TupleParameterExpression fmlExpr::TupleExpression:
-		//	'(' MixTupleExpressionList ')';
+		//TupleParameterExpression returns fmlExpr::TupleExpression
+		//    : '('  MixTupleExpressionList  ')'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//'(' MixTupleExpressionList ')'
+		//'('  MixTupleExpressionList  ')'
 		public Group getGroup() { return cGroup; }
 		
 		//'('
@@ -20273,20 +24078,25 @@
 		private final RuleCall cValueExpressionParserRuleCall_2_1_0_0 = (RuleCall)cValueAlternatives_2_1_0.eContents().get(0);
 		private final RuleCall cValueNamedExpressionParserRuleCall_2_1_0_1 = (RuleCall)cValueAlternatives_2_1_0.eContents().get(1);
 		
-		//MixTupleExpressionList fmlExpr::MixTupleExpression:
-		//	{fmlExpr::MixTupleExpression} value+=(Expression | NamedExpression) (',' value+=(Expression | NamedExpression))*;
+		//MixTupleExpressionList returns fmlExpr::MixTupleExpression
+		//    : {fmlExpr::MixTupleExpression}
+		//        value+=( Expression | NamedExpression )
+		//        ( ',' value+=( Expression | NamedExpression ) )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::MixTupleExpression} value+=(Expression | NamedExpression) (',' value+=(Expression | NamedExpression))*
+		//{fmlExpr::MixTupleExpression}
+		//       value+=( Expression | NamedExpression )
+		//       ( ',' value+=( Expression | NamedExpression ) )*
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::MixTupleExpression}
 		public Action getMixTupleExpressionAction_0() { return cMixTupleExpressionAction_0; }
 		
-		//value+=(Expression | NamedExpression)
+		//value+=( Expression | NamedExpression )
 		public Assignment getValueAssignment_1() { return cValueAssignment_1; }
 		
-		//(Expression | NamedExpression)
+		//( Expression | NamedExpression )
 		public Alternatives getValueAlternatives_1_0() { return cValueAlternatives_1_0; }
 		
 		//Expression
@@ -20295,16 +24105,16 @@
 		//NamedExpression
 		public RuleCall getValueNamedExpressionParserRuleCall_1_0_1() { return cValueNamedExpressionParserRuleCall_1_0_1; }
 		
-		//(',' value+=(Expression | NamedExpression))*
+		//( ',' value+=( Expression | NamedExpression ) )*
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//','
 		public Keyword getCommaKeyword_2_0() { return cCommaKeyword_2_0; }
 		
-		//value+=(Expression | NamedExpression)
+		//value+=( Expression | NamedExpression )
 		public Assignment getValueAssignment_2_1() { return cValueAssignment_2_1; }
 		
-		//(Expression | NamedExpression)
+		//( Expression | NamedExpression )
 		public Alternatives getValueAlternatives_2_1_0() { return cValueAlternatives_2_1_0; }
 		
 		//Expression
@@ -20325,32 +24135,33 @@
 		
 		////// At least one NamedExpression
 		////FormalMixTupleExpressionList returns fmlExpr::MixTupleExpression
-		////	: {fmlExpr::MixTupleExpression}
-		////		( value+=Expression  ( ',' value+=Expression )*
-		////			( ',' value+=NamedExpression )
-		////		| value+=NamedExpression
-		////		)
-		////		( ',' value+=( Expression | NamedExpression ) )*
-		////	;
+		////    : {fmlExpr::MixTupleExpression}
+		////        ( value+=Expression  ( ',' value+=Expression )*
+		////            ( ',' value+=NamedExpression )
+		////        | value+=NamedExpression
+		////        )
+		////        ( ',' value+=( Expression | NamedExpression ) )*
+		////    ;
 		////
 		////// NamedExpression only at the end
 		////EndingMixTupleExpressionList returns fmlExpr::MixTupleExpression
-		////	: {fmlExpr::MixTupleExpression}
-		////		( value+=Expression  ( ',' value+=Expression )*
-		////		| value+=NamedExpression
-		////		)
-		////		( ',' value+=NamedExpression )*
-		////	;
+		////    : {fmlExpr::MixTupleExpression}
+		////        ( value+=Expression  ( ',' value+=Expression )*
+		////        | value+=NamedExpression
+		////        )
+		////        ( ',' value+=NamedExpression )*
+		////    ;
 		////
 		////
 		////NamedTupleExpressionList returns fmlExpr::NamedTupleExpression
-		////	: value+=NamedExpression ( ',' value+=NamedExpression )*
-		////	;
-		//PositionalTupleExpressionList fmlExpr::PositionalTupleExpression:
-		//	value+=Expression (',' value+=Expression)*;
+		////    : value+=NamedExpression ( ',' value+=NamedExpression )*
+		////    ;
+		//PositionalTupleExpressionList returns fmlExpr::PositionalTupleExpression
+		//    : value+=Expression ( ',' value+=Expression )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//value+=Expression (',' value+=Expression)*
+		//value+=Expression ( ',' value+=Expression )*
 		public Group getGroup() { return cGroup; }
 		
 		//value+=Expression
@@ -20359,7 +24170,7 @@
 		//Expression
 		public RuleCall getValueExpressionParserRuleCall_0_0() { return cValueExpressionParserRuleCall_0_0; }
 		
-		//(',' value+=Expression)*
+		//( ',' value+=Expression )*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//','
@@ -20383,22 +24194,26 @@
 		private final Assignment cExpressionAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cExpressionExpressionParserRuleCall_2_0 = (RuleCall)cExpressionAssignment_2.eContents().get(0);
 		
-		//NamedExpression fmlExpr::NamedExpression:
-		//	name=XLIA_ID (':' | '=>' | '<-') expression=Expression;
+		//NamedExpression returns fmlExpr::NamedExpression
+		//    : //target=[fmlCommon::NamedElement|ESIdentifier]
+		//        name=XLIA_ID
+		//        ( ':' | '=>' | '<-' ) expression=Expression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
 		////target=[fmlCommon::NamedElement|ESIdentifier]
-		//name=XLIA_ID (':' | '=>' | '<-') expression=Expression
+		//       name=XLIA_ID
+		//       ( ':' | '=>' | '<-' ) expression=Expression
 		public Group getGroup() { return cGroup; }
 		
 		////target=[fmlCommon::NamedElement|ESIdentifier]
-		//name=XLIA_ID
+		//       name=XLIA_ID
 		public Assignment getNameAssignment_0() { return cNameAssignment_0; }
 		
 		//XLIA_ID
 		public RuleCall getNameXLIA_IDTerminalRuleCall_0_0() { return cNameXLIA_IDTerminalRuleCall_0_0; }
 		
-		//(':' | '=>' | '<-')
+		//( ':' | '=>' | '<-' )
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//':'
@@ -20423,18 +24238,20 @@
 		private final RuleCall cLiteralReferenceableExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
 		////NotificationComExpression returns fmlExpr::Expression
-		////	: { fmlExpr::Expression }
-		////		symbol=( 'present' | 'absent' )  operand+=Expression
-		////	;
+		////    : { fmlExpr::Expression }
+		////        symbol=( 'present' | 'absent' )  operand+=Expression
+		////    ;
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralExpression fmlExpr::LiteralExpression:
-		//	LiteralTerminalExpression
-		//	| LiteralReferenceableExpression;
+		//LiteralExpression returns fmlExpr::LiteralExpression
+		//    : LiteralTerminalExpression
+		//    | LiteralReferenceableExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralTerminalExpression | LiteralReferenceableExpression
+		//LiteralTerminalExpression
+		//   | LiteralReferenceableExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralTerminalExpression
@@ -20449,12 +24266,14 @@
 		private final RuleCall cLiteralCollectionExpressionParserRuleCall_0 = (RuleCall)cAlternatives.eContents().get(0);
 		private final RuleCall cLiteralReferenceExpressionParserRuleCall_1 = (RuleCall)cAlternatives.eContents().get(1);
 		
-		//LiteralReferenceableExpression fmlExpr::LiteralExpression:
-		//	LiteralCollectionExpression
-		//	| LiteralReferenceExpression;
+		//LiteralReferenceableExpression returns fmlExpr::LiteralExpression
+		//    : LiteralCollectionExpression
+		//    | LiteralReferenceExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralCollectionExpression | LiteralReferenceExpression
+		//LiteralCollectionExpression
+		//   | LiteralReferenceExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralCollectionExpression
@@ -20478,23 +24297,32 @@
 		private final RuleCall cLiteralNoneValueExpressionParserRuleCall_9 = (RuleCall)cAlternatives.eContents().get(9);
 		private final RuleCall cLiteralAnyOrNoneValueExpressionParserRuleCall_10 = (RuleCall)cAlternatives.eContents().get(10);
 		
-		//LiteralTerminalExpression fmlExpr::LiteralExpression:
-		//	LiteralBooleanExpression
-		//	| LiteralIntegerExpression
-		//	| LiteralRationalExpression
-		//	| LiteralFloatExpression
-		//	| LiteralCharacterExpression
-		//	| LiteralStringExpression
-		//	| LiteralNullExpression
-		//	| LiteralAnyValueExpression
-		//	| LiteralOptionalValueExpression
-		//	| LiteralNoneValueExpression
-		//	| LiteralAnyOrNoneValueExpression;
+		//LiteralTerminalExpression returns fmlExpr::LiteralExpression
+		//    : LiteralBooleanExpression
+		//    | LiteralIntegerExpression
+		//    | LiteralRationalExpression
+		//    | LiteralFloatExpression
+		//    | LiteralCharacterExpression
+		//    | LiteralStringExpression
+		//    | LiteralNullExpression
+		//    | LiteralAnyValueExpression
+		//    | LiteralOptionalValueExpression
+		//    | LiteralNoneValueExpression
+		//    | LiteralAnyOrNoneValueExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralBooleanExpression | LiteralIntegerExpression | LiteralRationalExpression | LiteralFloatExpression |
-		//LiteralCharacterExpression | LiteralStringExpression | LiteralNullExpression | LiteralAnyValueExpression |
-		//LiteralOptionalValueExpression | LiteralNoneValueExpression | LiteralAnyOrNoneValueExpression
+		//LiteralBooleanExpression
+		//   | LiteralIntegerExpression
+		//   | LiteralRationalExpression
+		//   | LiteralFloatExpression
+		//   | LiteralCharacterExpression
+		//   | LiteralStringExpression
+		//   | LiteralNullExpression
+		//   | LiteralAnyValueExpression
+		//   | LiteralOptionalValueExpression
+		//   | LiteralNoneValueExpression
+		//   | LiteralAnyOrNoneValueExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralBooleanExpression
@@ -20540,11 +24368,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Boolean / Numeric Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralBooleanExpression fmlExpr::LiteralBooleanExpression:
-		//	{fmlExpr::LiteralBooleanExpression} value=EBoolean;
+		//LiteralBooleanExpression returns fmlExpr::LiteralBooleanExpression
+		//    : {fmlExpr::LiteralBooleanExpression}
+		//        value=EBoolean
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralBooleanExpression} value=EBoolean
+		//{fmlExpr::LiteralBooleanExpression}
+		//       value=EBoolean
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralBooleanExpression}
@@ -20563,11 +24394,14 @@
 		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cValueEIntegerParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
 		
-		//LiteralIntegerExpression fmlExpr::LiteralIntegerExpression:
-		//	{fmlExpr::LiteralIntegerExpression} value=EInteger;
+		//LiteralIntegerExpression returns fmlExpr::LiteralIntegerExpression
+		//    : {fmlExpr::LiteralIntegerExpression}
+		//        value=EInteger
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralIntegerExpression} value=EInteger
+		//{fmlExpr::LiteralIntegerExpression}
+		//       value=EInteger
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralIntegerExpression}
@@ -20589,11 +24423,14 @@
 		private final Assignment cDenominatorAssignment_3 = (Assignment)cGroup.eContents().get(3);
 		private final RuleCall cDenominatorEIntegerParserRuleCall_3_0 = (RuleCall)cDenominatorAssignment_3.eContents().get(0);
 		
-		//LiteralRationalExpression fmlExpr::LiteralRationalExpression:
-		//	{fmlExpr::LiteralRationalExpression} numerator=EInteger '/' denominator=EInteger;
+		//LiteralRationalExpression returns fmlExpr::LiteralRationalExpression
+		//    : {fmlExpr::LiteralRationalExpression}
+		//        numerator=EInteger '/' denominator=EInteger
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralRationalExpression} numerator=EInteger '/' denominator=EInteger
+		//{fmlExpr::LiteralRationalExpression}
+		//       numerator=EInteger '/' denominator=EInteger
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralRationalExpression}
@@ -20621,11 +24458,14 @@
 		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cValueEDoubleParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
 		
-		//LiteralFloatExpression fmlExpr::LiteralFloatExpression:
-		//	{fmlExpr::LiteralFloatExpression} value=EDouble;
+		//LiteralFloatExpression returns fmlExpr::LiteralFloatExpression
+		//    : {fmlExpr::LiteralFloatExpression}
+		//        value=EDouble
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralFloatExpression} value=EDouble
+		//{fmlExpr::LiteralFloatExpression}
+		//       value=EDouble
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralFloatExpression}
@@ -20647,11 +24487,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Character / String Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralCharacterExpression fmlExpr::LiteralCharacterExpression:
-		//	{fmlExpr::LiteralCharacterExpression} value=ECharacter;
+		//LiteralCharacterExpression returns fmlExpr::LiteralCharacterExpression
+		//    : {fmlExpr::LiteralCharacterExpression}
+		//        value=ECharacter
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralCharacterExpression} value=ECharacter
+		//{fmlExpr::LiteralCharacterExpression}
+		//       value=ECharacter
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralCharacterExpression}
@@ -20670,11 +24513,14 @@
 		private final Assignment cValueAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cValueEStringParserRuleCall_1_0 = (RuleCall)cValueAssignment_1.eContents().get(0);
 		
-		//LiteralStringExpression fmlExpr::LiteralStringExpression:
-		//	{fmlExpr::LiteralStringExpression} value=EString;
+		//LiteralStringExpression returns fmlExpr::LiteralStringExpression
+		//    : {fmlExpr::LiteralStringExpression}
+		//        value=EString
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralStringExpression} value=EString
+		//{fmlExpr::LiteralStringExpression}
+		//       value=EString
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralStringExpression}
@@ -20700,12 +24546,16 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Null Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralNullExpression fmlExpr::LiteralNullExpression:
-		//	{fmlExpr::LiteralNullExpression}
-		//	'$null' ('<' type=NullPrimitiveInstanceType '>')?;
+		//LiteralNullExpression returns fmlExpr::LiteralNullExpression
+		//    : {fmlExpr::LiteralNullExpression}
+		//        '$null' //type=AnyNullPrimitiveInstanceType
+		//        ( '<'  type=NullPrimitiveInstanceType  '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralNullExpression} '$null' ('<' type=NullPrimitiveInstanceType '>')?
+		//{fmlExpr::LiteralNullExpression}
+		//       '$null' //type=AnyNullPrimitiveInstanceType
+		//       ( '<'  type=NullPrimitiveInstanceType  '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralNullExpression}
@@ -20714,7 +24564,8 @@
 		//'$null'
 		public Keyword getNullKeyword_1() { return cNullKeyword_1; }
 		
-		//('<' type=NullPrimitiveInstanceType '>')?
+		////type=AnyNullPrimitiveInstanceType
+		//       ( '<'  type=NullPrimitiveInstanceType  '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -20736,14 +24587,17 @@
 		private final Assignment cExpectedAssignment_1 = (Assignment)cGroup.eContents().get(1);
 		private final RuleCall cExpectedAnyPrimitiveInstanceKindEnumRuleCall_1_0 = (RuleCall)cExpectedAssignment_1.eContents().get(0);
 		
-		//AnyNullPrimitiveInstanceType fmlType::PrimitiveInstanceType:
-		//	{fmlType::PrimitiveInstanceType} expected=AnyPrimitiveInstanceKind;
+		//AnyNullPrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+		//    : { fmlType::PrimitiveInstanceType }
+		//        expected=AnyPrimitiveInstanceKind
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveInstanceType} expected=AnyPrimitiveInstanceKind
+		//{ fmlType::PrimitiveInstanceType }
+		//       expected=AnyPrimitiveInstanceKind
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlType::PrimitiveInstanceType}
+		//{ fmlType::PrimitiveInstanceType }
 		public Action getPrimitiveInstanceTypeAction_0() { return cPrimitiveInstanceTypeAction_0; }
 		
 		//expected=AnyPrimitiveInstanceKind
@@ -20765,19 +24619,25 @@
 		private final CrossReference cModelNamedElementCrossReference_1_1_0 = (CrossReference)cModelAssignment_1_1.eContents().get(0);
 		private final RuleCall cModelNamedElementESIdentifierParserRuleCall_1_1_0_1 = (RuleCall)cModelNamedElementCrossReference_1_1_0.eContents().get(1);
 		
-		//NullPrimitiveInstanceType fmlType::PrimitiveInstanceType:
-		//	{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind
-		//	| {fmlType::PrimitiveInstanceType} model=[fmlCommon::NamedElement|ESIdentifier];
+		//NullPrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+		//    : { fmlType::PrimitiveInstanceType }
+		//        expected=PrimitiveInstanceKind
+		//    | { fmlType::PrimitiveInstanceType }
+		//        model=[fmlCommon::NamedElement|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind | {fmlType::PrimitiveInstanceType}
-		//model=[fmlCommon::NamedElement|ESIdentifier]
+		//{ fmlType::PrimitiveInstanceType }
+		//       expected=PrimitiveInstanceKind
+		//   | { fmlType::PrimitiveInstanceType }
+		//       model=[fmlCommon::NamedElement|ESIdentifier]
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind
+		//{ fmlType::PrimitiveInstanceType }
+		//       expected=PrimitiveInstanceKind
 		public Group getGroup_0() { return cGroup_0; }
 		
-		//{fmlType::PrimitiveInstanceType}
+		//{ fmlType::PrimitiveInstanceType }
 		public Action getPrimitiveInstanceTypeAction_0_0() { return cPrimitiveInstanceTypeAction_0_0; }
 		
 		//expected=PrimitiveInstanceKind
@@ -20786,10 +24646,11 @@
 		//PrimitiveInstanceKind
 		public RuleCall getExpectedPrimitiveInstanceKindEnumRuleCall_0_1_0() { return cExpectedPrimitiveInstanceKindEnumRuleCall_0_1_0; }
 		
-		//{fmlType::PrimitiveInstanceType} model=[fmlCommon::NamedElement|ESIdentifier]
+		//{ fmlType::PrimitiveInstanceType }
+		//       model=[fmlCommon::NamedElement|ESIdentifier]
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{fmlType::PrimitiveInstanceType}
+		//{ fmlType::PrimitiveInstanceType }
 		public Action getPrimitiveInstanceTypeAction_1_0() { return cPrimitiveInstanceTypeAction_1_0; }
 		
 		//model=[fmlCommon::NamedElement|ESIdentifier]
@@ -20826,23 +24687,38 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Predefined Constant Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//AnyDataTypeReference fmlType::DataType:
-		//	SimpleDataType ({fmlType::DataTypeReference.support=current}
-		//	'[' multiplicity=DataTypeMultiplicity ']')?
-		//	| {fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?;
+		//AnyDataTypeReference returns fmlType::DataType
+		//    : SimpleDataType
+		//        ( {fmlType::DataTypeReference.support=current}
+		//            '[' multiplicity=DataTypeMultiplicity ']'
+		//        )?
+		//    | {fmlType::DataTypeReference}
+		//        typeref=[fmlType::DataType|ESUfid]
+		//        ( '[' multiplicity=DataTypeMultiplicity ']' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//SimpleDataType ({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')? |
-		//{fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?
+		//SimpleDataType
+		//       ( {fmlType::DataTypeReference.support=current}
+		//           '[' multiplicity=DataTypeMultiplicity ']'
+		//       )?
+		//   | {fmlType::DataTypeReference}
+		//       typeref=[fmlType::DataType|ESUfid]
+		//       ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//SimpleDataType ({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')?
+		//SimpleDataType
+		//       ( {fmlType::DataTypeReference.support=current}
+		//           '[' multiplicity=DataTypeMultiplicity ']'
+		//       )?
 		public Group getGroup_0() { return cGroup_0; }
 		
 		//SimpleDataType
 		public RuleCall getSimpleDataTypeParserRuleCall_0_0() { return cSimpleDataTypeParserRuleCall_0_0; }
 		
-		//({fmlType::DataTypeReference.support=current} '[' multiplicity=DataTypeMultiplicity ']')?
+		//( {fmlType::DataTypeReference.support=current}
+		//    '[' multiplicity=DataTypeMultiplicity ']'
+		//)?
 		public Group getGroup_0_1() { return cGroup_0_1; }
 		
 		//{fmlType::DataTypeReference.support=current}
@@ -20860,7 +24736,9 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_0_1_3() { return cRightSquareBracketKeyword_0_1_3; }
 		
-		//{fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?
+		//{fmlType::DataTypeReference}
+		//       typeref=[fmlType::DataType|ESUfid]
+		//       ( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//{fmlType::DataTypeReference}
@@ -20875,7 +24753,7 @@
 		//ESUfid
 		public RuleCall getTyperefDataTypeESUfidParserRuleCall_1_1_0_1() { return cTyperefDataTypeESUfidParserRuleCall_1_1_0_1; }
 		
-		//('[' multiplicity=DataTypeMultiplicity ']')?
+		//( '[' multiplicity=DataTypeMultiplicity ']' )?
 		public Group getGroup_1_2() { return cGroup_1_2; }
 		
 		//'['
@@ -20901,12 +24779,16 @@
 		private final RuleCall cTypeAnyDataTypeReferenceParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//LiteralAnyValueExpression fmlExpr::LiteralAnyValueExpression:
-		//	{fmlExpr::LiteralAnyValueExpression}
-		//	'$any' ('<' type=AnyDataTypeReference '>')?;
+		//LiteralAnyValueExpression returns fmlExpr::LiteralAnyValueExpression
+		//    : {fmlExpr::LiteralAnyValueExpression}
+		//        '$any'
+		//        ( '<'  type=AnyDataTypeReference  '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralAnyValueExpression} '$any' ('<' type=AnyDataTypeReference '>')?
+		//{fmlExpr::LiteralAnyValueExpression}
+		//       '$any'
+		//       ( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralAnyValueExpression}
@@ -20915,7 +24797,7 @@
 		//'$any'
 		public Keyword getAnyKeyword_1() { return cAnyKeyword_1; }
 		
-		//('<' type=AnyDataTypeReference '>')?
+		//( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -20941,12 +24823,16 @@
 		private final RuleCall cTypeAnyDataTypeReferenceParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//LiteralOptionalValueExpression fmlExpr::LiteralOptionalValueExpression:
-		//	{fmlExpr::LiteralOptionalValueExpression}
-		//	'$optional' ('<' type=AnyDataTypeReference '>')?;
+		//LiteralOptionalValueExpression returns fmlExpr::LiteralOptionalValueExpression
+		//    : {fmlExpr::LiteralOptionalValueExpression}
+		//        '$optional'
+		//        ( '<'  type=AnyDataTypeReference  '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralOptionalValueExpression} '$optional' ('<' type=AnyDataTypeReference '>')?
+		//{fmlExpr::LiteralOptionalValueExpression}
+		//       '$optional'
+		//       ( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralOptionalValueExpression}
@@ -20955,7 +24841,7 @@
 		//'$optional'
 		public Keyword getOptionalKeyword_1() { return cOptionalKeyword_1; }
 		
-		//('<' type=AnyDataTypeReference '>')?
+		//( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -20981,12 +24867,16 @@
 		private final RuleCall cTypeAnyDataTypeReferenceParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//LiteralNoneValueExpression fmlExpr::LiteralNoneValueExpression:
-		//	{fmlExpr::LiteralNoneValueExpression}
-		//	'$none' ('<' type=AnyDataTypeReference '>')?;
+		//LiteralNoneValueExpression returns fmlExpr::LiteralNoneValueExpression
+		//    : {fmlExpr::LiteralNoneValueExpression}
+		//        '$none'
+		//        ( '<'  type=AnyDataTypeReference  '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralNoneValueExpression} '$none' ('<' type=AnyDataTypeReference '>')?
+		//{fmlExpr::LiteralNoneValueExpression}
+		//       '$none'
+		//       ( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralNoneValueExpression}
@@ -20995,7 +24885,7 @@
 		//'$none'
 		public Keyword getNoneKeyword_1() { return cNoneKeyword_1; }
 		
-		//('<' type=AnyDataTypeReference '>')?
+		//( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -21021,12 +24911,16 @@
 		private final RuleCall cTypeAnyDataTypeReferenceParserRuleCall_2_1_0 = (RuleCall)cTypeAssignment_2_1.eContents().get(0);
 		private final Keyword cGreaterThanSignKeyword_2_2 = (Keyword)cGroup_2.eContents().get(2);
 		
-		//LiteralAnyOrNoneValueExpression fmlExpr::LiteralAnyOrNoneValueExpression:
-		//	{fmlExpr::LiteralAnyOrNoneValueExpression}
-		//	'$any$none' ('<' type=AnyDataTypeReference '>')?;
+		//LiteralAnyOrNoneValueExpression returns fmlExpr::LiteralAnyOrNoneValueExpression
+		//    : {fmlExpr::LiteralAnyOrNoneValueExpression}
+		//        '$any$none'
+		//        ( '<'  type=AnyDataTypeReference  '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralAnyOrNoneValueExpression} '$any$none' ('<' type=AnyDataTypeReference '>')?
+		//{fmlExpr::LiteralAnyOrNoneValueExpression}
+		//       '$any$none'
+		//       ( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralAnyOrNoneValueExpression}
@@ -21035,7 +24929,7 @@
 		//'$any$none'
 		public Keyword getAnyNoneKeyword_1() { return cAnyNoneKeyword_1; }
 		
-		//('<' type=AnyDataTypeReference '>')?
+		//( '<'  type=AnyDataTypeReference  '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
@@ -21078,19 +24972,31 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Collection Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralCollectionExpression fmlExpr::LiteralCollectionExpression:
-		//	{fmlExpr::LiteralCollectionExpression} ('<' datatype=DataType '>')?
-		//	'{' ((value+=Expression | value+=NamedExpression) (',' (value+=Expression | value+=NamedExpression))*)? '}';
+		//LiteralCollectionExpression returns fmlExpr::LiteralCollectionExpression
+		//    : {fmlExpr::LiteralCollectionExpression}
+		////        ( 'new' datatype=DataType )?
+		//        ( '<' datatype=DataType '>')?
+		//        '{' (
+		//            ( value+=Expression | value+=NamedExpression )
+		//            ( ',' ( value+=Expression | value+=NamedExpression ) )*
+		//        )? '}'
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralCollectionExpression} ('<' datatype=DataType '>')? '{' ((value+=Expression | value+=NamedExpression)
-		//(',' (value+=Expression | value+=NamedExpression))*)? '}'
+		// {fmlExpr::LiteralCollectionExpression}
+		////        ( 'new' datatype=DataType )?
+		//        ( '<' datatype=DataType '>')?
+		//        '{' (
+		//            ( value+=Expression | value+=NamedExpression )
+		//            ( ',' ( value+=Expression | value+=NamedExpression ) )*
+		//        )? '}'
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralCollectionExpression}
 		public Action getLiteralCollectionExpressionAction_0() { return cLiteralCollectionExpressionAction_0; }
 		
-		//('<' datatype=DataType '>')?
+		////        ( 'new' datatype=DataType )?
+		//        ( '<' datatype=DataType '>')?
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//'<'
@@ -21108,10 +25014,13 @@
 		//'{'
 		public Keyword getLeftCurlyBracketKeyword_2() { return cLeftCurlyBracketKeyword_2; }
 		
-		//((value+=Expression | value+=NamedExpression) (',' (value+=Expression | value+=NamedExpression))*)?
+		//(
+		//           ( value+=Expression | value+=NamedExpression )
+		//           ( ',' ( value+=Expression | value+=NamedExpression ) )*
+		//       )?
 		public Group getGroup_3() { return cGroup_3; }
 		
-		//(value+=Expression | value+=NamedExpression)
+		//( value+=Expression | value+=NamedExpression )
 		public Alternatives getAlternatives_3_0() { return cAlternatives_3_0; }
 		
 		//value+=Expression
@@ -21126,13 +25035,13 @@
 		//NamedExpression
 		public RuleCall getValueNamedExpressionParserRuleCall_3_0_1_0() { return cValueNamedExpressionParserRuleCall_3_0_1_0; }
 		
-		//(',' (value+=Expression | value+=NamedExpression))*
+		//( ',' ( value+=Expression | value+=NamedExpression ) )*
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//','
 		public Keyword getCommaKeyword_3_1_0() { return cCommaKeyword_3_1_0; }
 		
-		//(value+=Expression | value+=NamedExpression)
+		//( value+=Expression | value+=NamedExpression )
 		public Alternatives getAlternatives_3_1_1() { return cAlternatives_3_1_1; }
 		
 		//value+=Expression
@@ -21161,14 +25070,18 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Literal Reference Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralReferenceExpression fmlExpr::LiteralReferenceExpression:
-		//	LiteralReferenceElement
-		//	| LiteralReferenceVariableContext
-		//	| LiteralReferenceMachineContext
-		//	| LiteralEnvExpression;
+		//LiteralReferenceExpression returns fmlExpr::LiteralReferenceExpression
+		//    : LiteralReferenceElement
+		//    | LiteralReferenceVariableContext
+		//    | LiteralReferenceMachineContext
+		//    | LiteralEnvExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralReferenceElement | LiteralReferenceVariableContext | LiteralReferenceMachineContext | LiteralEnvExpression
+		//LiteralReferenceElement
+		//   | LiteralReferenceVariableContext
+		//   | LiteralReferenceMachineContext
+		//   | LiteralEnvExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralReferenceElement
@@ -21207,24 +25120,34 @@
 		private final RuleCall cArgMixTupleExpressionListParserRuleCall_3_1_1_0 = (RuleCall)cArgAssignment_3_1_1.eContents().get(0);
 		private final Keyword cRightParenthesisKeyword_3_1_2 = (Keyword)cGroup_3_1.eContents().get(2);
 		
-		//LiteralReferenceElement fmlExpr::LiteralReferenceElement:
-		//	{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier]
-		//	(kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	// '(' parameter ',' ... ',' parameter ')'
-		//	| kind=ValueParameterExpressionKind
-		//	arg=MixTupleExpressionList ')')?;
+		//LiteralReferenceElement returns fmlExpr::LiteralReferenceElement
+		//    : {fmlExpr::LiteralReferenceElement}
+		//        ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
+		//        // '[' index ',' ... ',' index ']'
+		//        ( kind=ValueIndexExpressionKind
+		//            arg=PositionalTupleExpressionList  ']'
+		//        // '(' parameter ',' ... ',' parameter ')'
+		//        | kind=ValueParameterExpressionKind
+		//            arg=MixTupleExpressionList  ')'
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier]
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
+		//{fmlExpr::LiteralReferenceElement}
+		//       ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
+		//       // '[' index ',' ... ',' index ']'
+		//       ( kind=ValueIndexExpressionKind
+		//           arg=PositionalTupleExpressionList  ']'
+		//       // '(' parameter ',' ... ',' parameter ')'
+		//       | kind=ValueParameterExpressionKind
+		//           arg=MixTupleExpressionList  ')'
+		//       )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralReferenceElement}
 		public Action getLiteralReferenceElementAction_0() { return cLiteralReferenceElementAction_0; }
 		
-		//('spec::' | '::')?
+		//( 'spec::' | '::' )?
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'spec::'
@@ -21242,11 +25165,17 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' // '(' parameter ',' ... ',' parameter ')'
-		//| kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')')?
+		//// '[' index ',' ... ',' index ']'
+		//( kind=ValueIndexExpressionKind
+		//    arg=PositionalTupleExpressionList  ']'
+		//// '(' parameter ',' ... ',' parameter ')'
+		//| kind=ValueParameterExpressionKind
+		//    arg=MixTupleExpressionList  ')'
+		//)?
 		public Alternatives getAlternatives_3() { return cAlternatives_3; }
 		
-		//kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']'
+		//kind=ValueIndexExpressionKind
+		//           arg=PositionalTupleExpressionList  ']'
 		public Group getGroup_3_0() { return cGroup_3_0; }
 		
 		//kind=ValueIndexExpressionKind
@@ -21264,7 +25193,8 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_3_0_2() { return cRightSquareBracketKeyword_3_0_2; }
 		
-		//kind=ValueParameterExpressionKind arg=MixTupleExpressionList ')'
+		//kind=ValueParameterExpressionKind
+		//           arg=MixTupleExpressionList  ')'
 		public Group getGroup_3_1() { return cGroup_3_1; }
 		
 		//kind=ValueParameterExpressionKind
@@ -21293,17 +25223,20 @@
 		private final CrossReference cElementNamedElementCrossReference_2_0 = (CrossReference)cElementAssignment_2.eContents().get(0);
 		private final RuleCall cElementNamedElementESIdentifierParserRuleCall_2_0_1 = (RuleCall)cElementNamedElementCrossReference_2_0.eContents().get(1);
 		
-		//LiteralPureReferenceElement fmlExpr::LiteralReferenceElement:
-		//	{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier];
+		//LiteralPureReferenceElement returns fmlExpr::LiteralReferenceElement
+		//    : {fmlExpr::LiteralReferenceElement}
+		//        ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier]
+		//{fmlExpr::LiteralReferenceElement}
+		//       ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralReferenceElement}
 		public Action getLiteralReferenceElementAction_0() { return cLiteralReferenceElementAction_0; }
 		
-		//('spec::' | '::')?
+		//( 'spec::' | '::' )?
 		public Alternatives getAlternatives_1() { return cAlternatives_1; }
 		
 		//'spec::'
@@ -21329,14 +25262,18 @@
 		private final RuleCall cLiteralTimeInitialExpressionParserRuleCall_2 = (RuleCall)cAlternatives.eContents().get(2);
 		private final RuleCall cLiteralTimeDeltaInitialExpressionParserRuleCall_3 = (RuleCall)cAlternatives.eContents().get(3);
 		
-		//LiteralReferenceVariableContext fmlExpr::LiteralReferenceExpression:
-		//	LiteralTimeExpression
-		//	| LiteralTimeDeltaExpression
-		//	| LiteralTimeInitialExpression
-		//	| LiteralTimeDeltaInitialExpression;
+		//LiteralReferenceVariableContext returns fmlExpr::LiteralReferenceExpression
+		//    : LiteralTimeExpression
+		//    | LiteralTimeDeltaExpression
+		//    | LiteralTimeInitialExpression
+		//    | LiteralTimeDeltaInitialExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralTimeExpression | LiteralTimeDeltaExpression | LiteralTimeInitialExpression | LiteralTimeDeltaInitialExpression
+		//LiteralTimeExpression
+		//   | LiteralTimeDeltaExpression
+		//   | LiteralTimeInitialExpression
+		//   | LiteralTimeDeltaInitialExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralTimeExpression
@@ -21357,17 +25294,18 @@
 		private final Action cLiteralTimeExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cTimeKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralTimeExpression fmlExpr::LiteralTimeExpression:
-		//	{fmlExpr::LiteralTimeExpression} '$time';
+		//LiteralTimeExpression returns fmlExpr::LiteralTimeExpression
+		//    : {fmlExpr::LiteralTimeExpression} ( '$time' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralTimeExpression} '$time'
+		//{fmlExpr::LiteralTimeExpression} ( '$time' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralTimeExpression}
 		public Action getLiteralTimeExpressionAction_0() { return cLiteralTimeExpressionAction_0; }
 		
-		//'$time'
+		//( '$time' )
 		public Keyword getTimeKeyword_1() { return cTimeKeyword_1; }
 	}
 	public class LiteralTimeInitialExpressionElements extends AbstractParserRuleElementFinder {
@@ -21376,17 +25314,18 @@
 		private final Action cLiteralTimeExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cTimeInitialKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralTimeInitialExpression fmlExpr::LiteralTimeExpression:
-		//	{fmlExpr::LiteralTimeExpression} '$time#initial';
+		//LiteralTimeInitialExpression returns fmlExpr::LiteralTimeExpression
+		//    : {fmlExpr::LiteralTimeExpression} ( '$time#initial' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralTimeExpression} '$time#initial'
+		//{fmlExpr::LiteralTimeExpression} ( '$time#initial' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralTimeExpression}
 		public Action getLiteralTimeExpressionAction_0() { return cLiteralTimeExpressionAction_0; }
 		
-		//'$time#initial'
+		//( '$time#initial' )
 		public Keyword getTimeInitialKeyword_1() { return cTimeInitialKeyword_1; }
 	}
 	public class LiteralTimeDeltaExpressionElements extends AbstractParserRuleElementFinder {
@@ -21395,17 +25334,18 @@
 		private final Action cLiteralTimeDeltaExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cDeltaKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralTimeDeltaExpression fmlExpr::LiteralTimeDeltaExpression:
-		//	{fmlExpr::LiteralTimeDeltaExpression} '$delta';
+		//LiteralTimeDeltaExpression returns fmlExpr::LiteralTimeDeltaExpression
+		//    : {fmlExpr::LiteralTimeDeltaExpression} ( '$delta' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralTimeDeltaExpression} '$delta'
+		//{fmlExpr::LiteralTimeDeltaExpression} ( '$delta' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralTimeDeltaExpression}
 		public Action getLiteralTimeDeltaExpressionAction_0() { return cLiteralTimeDeltaExpressionAction_0; }
 		
-		//'$delta'
+		//( '$delta' )
 		public Keyword getDeltaKeyword_1() { return cDeltaKeyword_1; }
 	}
 	public class LiteralTimeDeltaInitialExpressionElements extends AbstractParserRuleElementFinder {
@@ -21414,17 +25354,18 @@
 		private final Action cLiteralTimeDeltaExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cDeltaInitialKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralTimeDeltaInitialExpression fmlExpr::LiteralTimeDeltaExpression:
-		//	{fmlExpr::LiteralTimeDeltaExpression} '$delta#initial';
+		//LiteralTimeDeltaInitialExpression returns fmlExpr::LiteralTimeDeltaExpression
+		//    : {fmlExpr::LiteralTimeDeltaExpression} ( '$delta#initial' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralTimeDeltaExpression} '$delta#initial'
+		//{fmlExpr::LiteralTimeDeltaExpression} ( '$delta#initial' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralTimeDeltaExpression}
 		public Action getLiteralTimeDeltaExpressionAction_0() { return cLiteralTimeDeltaExpressionAction_0; }
 		
-		//'$delta#initial'
+		//( '$delta#initial' )
 		public Keyword getDeltaInitialKeyword_1() { return cDeltaInitialKeyword_1; }
 	}
 	public class LiteralReferenceMachineContextElements extends AbstractParserRuleElementFinder {
@@ -21437,17 +25378,22 @@
 		private final RuleCall cLiteralSystemExpressionParserRuleCall_4 = (RuleCall)cAlternatives.eContents().get(4);
 		private final RuleCall cLiteralEnvExpressionParserRuleCall_5 = (RuleCall)cAlternatives.eContents().get(5);
 		
-		//LiteralReferenceMachineContext fmlExpr::LiteralReferenceExpression:
-		//	LiteralThisExpression
-		//	| LiteralSelfExpression
-		//	| LiteralParentExpression
-		//	| LiteralSuperExpression
-		//	| LiteralSystemExpression
-		//	| LiteralEnvExpression;
+		//LiteralReferenceMachineContext returns fmlExpr::LiteralReferenceExpression
+		//    : LiteralThisExpression
+		//    | LiteralSelfExpression
+		//    | LiteralParentExpression
+		//    | LiteralSuperExpression
+		//    | LiteralSystemExpression
+		//    | LiteralEnvExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralThisExpression | LiteralSelfExpression | LiteralParentExpression | LiteralSuperExpression |
-		//LiteralSystemExpression | LiteralEnvExpression
+		//LiteralThisExpression
+		//   | LiteralSelfExpression
+		//   | LiteralParentExpression
+		//   | LiteralSuperExpression
+		//   | LiteralSystemExpression
+		//   | LiteralEnvExpression
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralThisExpression
@@ -21474,17 +25420,18 @@
 		private final Action cLiteralThisExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cThisKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralThisExpression fmlExpr::LiteralThisExpression:
-		//	{fmlExpr::LiteralThisExpression} '$this';
+		//LiteralThisExpression returns fmlExpr::LiteralThisExpression
+		//    : {fmlExpr::LiteralThisExpression} ( '$this' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralThisExpression} '$this'
+		//{fmlExpr::LiteralThisExpression} ( '$this' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralThisExpression}
 		public Action getLiteralThisExpressionAction_0() { return cLiteralThisExpressionAction_0; }
 		
-		//'$this'
+		//( '$this' )
 		public Keyword getThisKeyword_1() { return cThisKeyword_1; }
 	}
 	public class LiteralSelfExpressionElements extends AbstractParserRuleElementFinder {
@@ -21500,26 +25447,29 @@
 		private final RuleCall cModelMachineESUfidParserRuleCall_2_2_0_1 = (RuleCall)cModelMachineCrossReference_2_2_0.eContents().get(1);
 		private final Keyword cGreaterThanSignKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
 		
-		//LiteralSelfExpression fmlExpr::LiteralSelfExpression:
-		//	{fmlExpr::LiteralSelfExpression} '$self' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+		//LiteralSelfExpression returns fmlExpr::LiteralSelfExpression
+		//    : {fmlExpr::LiteralSelfExpression} ( '$self' )
+		//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralSelfExpression} '$self' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//{fmlExpr::LiteralSelfExpression} ( '$self' )
+		//       ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralSelfExpression}
 		public Action getLiteralSelfExpressionAction_0() { return cLiteralSelfExpressionAction_0; }
 		
-		//'$self'
+		//( '$self' )
 		public Keyword getSelfKeyword_1() { return cSelfKeyword_1; }
 		
-		//('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'model:'?
+		//( 'model:' )?
 		public Keyword getModelKeyword_2_1() { return cModelKeyword_2_1; }
 		
 		//model=[fmlInfra::Machine|ESUfid]
@@ -21547,26 +25497,29 @@
 		private final RuleCall cModelMachineESUfidParserRuleCall_2_2_0_1 = (RuleCall)cModelMachineCrossReference_2_2_0.eContents().get(1);
 		private final Keyword cGreaterThanSignKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
 		
-		//LiteralParentExpression fmlExpr::LiteralParentExpression:
-		//	{fmlExpr::LiteralParentExpression} '$parent' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+		//LiteralParentExpression returns fmlExpr::LiteralParentExpression
+		//    : {fmlExpr::LiteralParentExpression} ( '$parent' )
+		//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralParentExpression} '$parent' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//{fmlExpr::LiteralParentExpression} ( '$parent' )
+		//       ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralParentExpression}
 		public Action getLiteralParentExpressionAction_0() { return cLiteralParentExpressionAction_0; }
 		
-		//'$parent'
+		//( '$parent' )
 		public Keyword getParentKeyword_1() { return cParentKeyword_1; }
 		
-		//('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'model:'?
+		//( 'model:' )?
 		public Keyword getModelKeyword_2_1() { return cModelKeyword_2_1; }
 		
 		//model=[fmlInfra::Machine|ESUfid]
@@ -21594,26 +25547,29 @@
 		private final RuleCall cModelMachineESUfidParserRuleCall_2_2_0_1 = (RuleCall)cModelMachineCrossReference_2_2_0.eContents().get(1);
 		private final Keyword cGreaterThanSignKeyword_2_3 = (Keyword)cGroup_2.eContents().get(3);
 		
-		//LiteralSuperExpression fmlExpr::LiteralSuperExpression:
-		//	{fmlExpr::LiteralSuperExpression} '$super' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+		//LiteralSuperExpression returns fmlExpr::LiteralSuperExpression
+		//    : {fmlExpr::LiteralSuperExpression} ( '$super' )
+		//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralSuperExpression} '$super' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//{fmlExpr::LiteralSuperExpression} ( '$super' )
+		//       ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralSuperExpression}
 		public Action getLiteralSuperExpressionAction_0() { return cLiteralSuperExpressionAction_0; }
 		
-		//'$super'
+		//( '$super' )
 		public Keyword getSuperKeyword_1() { return cSuperKeyword_1; }
 		
-		//('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?
+		//( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
 		public Group getGroup_2() { return cGroup_2; }
 		
 		//'<'
 		public Keyword getLessThanSignKeyword_2_0() { return cLessThanSignKeyword_2_0; }
 		
-		//'model:'?
+		//( 'model:' )?
 		public Keyword getModelKeyword_2_1() { return cModelKeyword_2_1; }
 		
 		//model=[fmlInfra::Machine|ESUfid]
@@ -21634,17 +25590,18 @@
 		private final Action cLiteralSystemExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cSystemKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralSystemExpression fmlExpr::LiteralSystemExpression:
-		//	{fmlExpr::LiteralSystemExpression} '$system';
+		//LiteralSystemExpression returns fmlExpr::LiteralSystemExpression
+		//    : {fmlExpr::LiteralSystemExpression} ( '$system' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralSystemExpression} '$system'
+		//{fmlExpr::LiteralSystemExpression} ( '$system' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralSystemExpression}
 		public Action getLiteralSystemExpressionAction_0() { return cLiteralSystemExpressionAction_0; }
 		
-		//'$system'
+		//( '$system' )
 		public Keyword getSystemKeyword_1() { return cSystemKeyword_1; }
 	}
 	public class LiteralEnvExpressionElements extends AbstractParserRuleElementFinder {
@@ -21653,17 +25610,18 @@
 		private final Action cLiteralEnvExpressionAction_0 = (Action)cGroup.eContents().get(0);
 		private final Keyword cEnvKeyword_1 = (Keyword)cGroup.eContents().get(1);
 		
-		//LiteralEnvExpression fmlExpr::LiteralEnvExpression:
-		//	{fmlExpr::LiteralEnvExpression} '$env';
+		//LiteralEnvExpression returns fmlExpr::LiteralEnvExpression
+		//    : {fmlExpr::LiteralEnvExpression} ( '$env' )
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralEnvExpression} '$env'
+		//{fmlExpr::LiteralEnvExpression} ( '$env' )
 		public Group getGroup() { return cGroup; }
 		
 		//{fmlExpr::LiteralEnvExpression}
 		public Action getLiteralEnvExpressionAction_0() { return cLiteralEnvExpressionAction_0; }
 		
-		//'$env'
+		//( '$env' )
 		public Keyword getEnvKeyword_1() { return cEnvKeyword_1; }
 	}
 	public class LiteralPureReferenceExpressionElements extends AbstractParserRuleElementFinder {
@@ -21675,12 +25633,14 @@
 		//////////////////////////////////////////////////////////////////////////////////
 		//// Value Element Specification Expression Rules
 		//////////////////////////////////////////////////////////////////////////////////
-		//LiteralPureReferenceExpression fmlExpr::LiteralReferenceExpression:
-		//	LiteralPureReferenceElement
-		//	| LiteralReferenceMachineContext;
+		//LiteralPureReferenceExpression returns fmlExpr::LiteralReferenceExpression
+		//    : LiteralPureReferenceElement
+		//    | LiteralReferenceMachineContext
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralPureReferenceElement | LiteralReferenceMachineContext
+		//LiteralPureReferenceElement
+		//   | LiteralReferenceMachineContext
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//LiteralPureReferenceElement
@@ -21702,19 +25662,22 @@
 		private final Assignment cElementAssignment_2 = (Assignment)cGroup.eContents().get(2);
 		private final RuleCall cElementLiteralReferenceExpressionParserRuleCall_2_0 = (RuleCall)cElementAssignment_2.eContents().get(0);
 		
-		//LiteralReferenceSpecification fmlExpr::LiteralReferenceSpecification:
-		//	{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-		//	element=LiteralReferenceExpression;
+		//LiteralReferenceSpecification returns fmlExpr::LiteralReferenceSpecification
+		//    : { fmlExpr::LiteralReferenceSpecification }
+		//        ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+		//        element=LiteralReferenceExpression
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-		//element=LiteralReferenceExpression
+		//{ fmlExpr::LiteralReferenceSpecification }
+		//       ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+		//       element=LiteralReferenceExpression
 		public Group getGroup() { return cGroup; }
 		
-		//{fmlExpr::LiteralReferenceSpecification}
+		//{ fmlExpr::LiteralReferenceSpecification }
 		public Action getLiteralReferenceSpecificationAction_0() { return cLiteralReferenceSpecificationAction_0; }
 		
-		//(parent+=LiteralReferenceExpression ('.' | '->'))*
+		//( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
 		public Group getGroup_1() { return cGroup_1; }
 		
 		//parent+=LiteralReferenceExpression
@@ -21723,7 +25686,7 @@
 		//LiteralReferenceExpression
 		public RuleCall getParentLiteralReferenceExpressionParserRuleCall_1_0_0() { return cParentLiteralReferenceExpressionParserRuleCall_1_0_0; }
 		
-		//('.' | '->')
+		//( '.'  |  '->' )
 		public Alternatives getAlternatives_1_1() { return cAlternatives_1_1; }
 		
 		//'.'
@@ -21779,64 +25742,111 @@
 		private final RuleCall cArgPositionalTupleExpressionListParserRuleCall_2_4_3_1_0 = (RuleCall)cArgAssignment_2_4_3_1.eContents().get(0);
 		private final Keyword cRightSquareBracketKeyword_2_4_3_2 = (Keyword)cGroup_2_4_3.eContents().get(2);
 		
-		//ValueSelectionExpression fmlExpr::Expression:
-		//	LiteralReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'.' //kind=ValueDotFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	//			// TODO '(' parameter ',' ... ',' parameter ')'
-		//	//			| kind=ValueParameterExpressionKind
-		//	//				arg=MixTupleExpressionList  ')'
-		//)?)* ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'->' //kind=ValueArrowFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	//			// TODO '(' parameter ',' ... ',' parameter ')'
-		//	//			| kind=ValueParameterExpressionKind
-		//	//				arg=MixTupleExpressionList  ')'
-		//)? ({fmlExpr::ValueElementSpecification.parent=current}
-		//	'.' //kind=ValueDotFieldExpressionKind
-		//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-		//	arg=PositionalTupleExpressionList ']'
-		//	//				// TODO '(' parameter ',' ... ',' parameter ')'
-		//	//				| kind=ValueParameterExpressionKind
-		//	//					arg=MixTupleExpressionList  ')'
-		//)?)*)?;
+		//ValueSelectionExpression returns fmlExpr::Expression
+		//    : LiteralReferenceExpression
+		//        // '.' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '.' //kind=ValueDotFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//        )*
+		//        // '->' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '->' //kind=ValueArrowFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//            // '.' element
+		//            ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                 '.' //kind=ValueDotFieldExpressionKind
+		//                element=[fmlCommon::NamedElement|ESIdentifier]
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		////                // TODO '(' parameter ',' ... ',' parameter ')'
+		////                | kind=ValueParameterExpressionKind
+		////                    arg=MixTupleExpressionList  ')'
+		//                )?
+		//            )*
+		//        )?
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)?)* ({fmlExpr::ValueElementSpecification.parent=current} '->' //kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)? ({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //				// TODO '(' parameter ',' ... ',' parameter ')'
-		////				| kind=ValueParameterExpressionKind
-		////					arg=MixTupleExpressionList  ')'
-		//)?)*)?
+		// LiteralReferenceExpression
+		//        // '.' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '.' //kind=ValueDotFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//        )*
+		//        // '->' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '->' //kind=ValueArrowFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//            // '.' element
+		//            ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                 '.' //kind=ValueDotFieldExpressionKind
+		//                element=[fmlCommon::NamedElement|ESIdentifier]
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		////                // TODO '(' parameter ',' ... ',' parameter ')'
+		////                | kind=ValueParameterExpressionKind
+		////                    arg=MixTupleExpressionList  ')'
+		//                )?
+		//            )*
+		//        )?
 		public Group getGroup() { return cGroup; }
 		
 		//LiteralReferenceExpression
 		public RuleCall getLiteralReferenceExpressionParserRuleCall_0() { return cLiteralReferenceExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)?)*
+		//        // '.' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '.' //kind=ValueDotFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//        )*
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_1_0() { return cValueElementSpecificationParentAction_1_0; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_1_1() { return cFullStopKeyword_1_1; }
 		
 		////kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_1_2() { return cElementAssignment_1_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -21845,10 +25855,13 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_1_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_1_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)?
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
 		public Group getGroup_1_3() { return cGroup_1_3; }
 		
 		//kind=ValueIndexExpressionKind
@@ -21866,25 +25879,40 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_1_3_2() { return cRightSquareBracketKeyword_1_3_2; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '->' //kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)? ({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //				// TODO '(' parameter ',' ... ',' parameter ')'
-		////				| kind=ValueParameterExpressionKind
-		////					arg=MixTupleExpressionList  ')'
-		//)?)*)?
+		//        // '->' element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            '->' //kind=ValueArrowFieldExpressionKind
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
+		//            // '.' element
+		//            ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                 '.' //kind=ValueDotFieldExpressionKind
+		//                element=[fmlCommon::NamedElement|ESIdentifier]
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		////                // TODO '(' parameter ',' ... ',' parameter ')'
+		////                | kind=ValueParameterExpressionKind
+		////                    arg=MixTupleExpressionList  ')'
+		//                )?
+		//            )*
+		//        )?
 		public Group getGroup_2() { return cGroup_2; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_2_0() { return cValueElementSpecificationParentAction_2_0; }
 		
 		//'->'
 		public Keyword getHyphenMinusGreaterThanSignKeyword_2_1() { return cHyphenMinusGreaterThanSignKeyword_2_1; }
 		
 		////kind=ValueArrowFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_2_2() { return cElementAssignment_2_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -21893,10 +25921,13 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_2_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_2_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //			// TODO '(' parameter ',' ... ',' parameter ')'
-		////			| kind=ValueParameterExpressionKind
-		////				arg=MixTupleExpressionList  ')'
-		//)?
+		//            // '[' index ',' ... ',' index ']'
+		//            ( kind=ValueIndexExpressionKind
+		//                arg=PositionalTupleExpressionList  ']'
+		////            // TODO '(' parameter ',' ... ',' parameter ')'
+		////            | kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList  ')'
+		//            )?
 		public Group getGroup_2_3() { return cGroup_2_3; }
 		
 		//kind=ValueIndexExpressionKind
@@ -21914,21 +25945,28 @@
 		//']'
 		public Keyword getRightSquareBracketKeyword_2_3_2() { return cRightSquareBracketKeyword_2_3_2; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} '.' //kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //				// TODO '(' parameter ',' ... ',' parameter ')'
-		////				| kind=ValueParameterExpressionKind
-		////					arg=MixTupleExpressionList  ')'
-		//)?)*
+		//            // '.' element
+		//            ( { fmlExpr::ValueElementSpecification.parent=current }
+		//                 '.' //kind=ValueDotFieldExpressionKind
+		//                element=[fmlCommon::NamedElement|ESIdentifier]
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		////                // TODO '(' parameter ',' ... ',' parameter ')'
+		////                | kind=ValueParameterExpressionKind
+		////                    arg=MixTupleExpressionList  ')'
+		//                )?
+		//            )*
 		public Group getGroup_2_4() { return cGroup_2_4; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_2_4_0() { return cValueElementSpecificationParentAction_2_4_0; }
 		
 		//'.'
 		public Keyword getFullStopKeyword_2_4_1() { return cFullStopKeyword_2_4_1; }
 		
 		////kind=ValueDotFieldExpressionKind
-		//element=[fmlCommon::NamedElement|ESIdentifier]
+		//               element=[fmlCommon::NamedElement|ESIdentifier]
 		public Assignment getElementAssignment_2_4_2() { return cElementAssignment_2_4_2; }
 		
 		//[fmlCommon::NamedElement|ESIdentifier]
@@ -21937,10 +25975,13 @@
 		//ESIdentifier
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_2_4_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_2_4_2_0_1; }
 		
-		//(kind=ValueIndexExpressionKind arg=PositionalTupleExpressionList ']' //				// TODO '(' parameter ',' ... ',' parameter ')'
-		////				| kind=ValueParameterExpressionKind
-		////					arg=MixTupleExpressionList  ')'
-		//)?
+		//                // '[' index ',' ... ',' index ']'
+		//                ( kind=ValueIndexExpressionKind
+		//                    arg=PositionalTupleExpressionList  ']'
+		////                // TODO '(' parameter ',' ... ',' parameter ')'
+		////                | kind=ValueParameterExpressionKind
+		////                    arg=MixTupleExpressionList  ')'
+		//                )?
 		public Group getGroup_2_4_3() { return cGroup_2_4_3; }
 		
 		//kind=ValueIndexExpressionKind
@@ -21974,49 +26015,61 @@
 		
 		////ValuePureNamedElementExpression
 		////ValuePureNamedElementExpression returns fmlExpr::Expression
-		////	: LiteralPureReferenceExpression
+		////    : LiteralPureReferenceExpression
 		////
-		////		// '.' element
-		////		( { fmlExpr::ValueElementSpecification.parent=current }
-		////			kind=ValueDotFieldExpressionKind
-		////			element=[fmlCommon::NamedElement|ESIdentifier]
-		////		)*
+		////        // '.' element
+		////        ( { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueDotFieldExpressionKind
+		////            element=[fmlCommon::NamedElement|ESIdentifier]
+		////        )*
 		////
-		////		// '->' element
-		////		( { fmlExpr::ValueElementSpecification.parent=current }
-		////			kind=ValueArrowFieldExpressionKind
-		////			element=[fmlCommon::NamedElement|ESIdentifier]
+		////        // '->' element
+		////        ( { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueArrowFieldExpressionKind
+		////            element=[fmlCommon::NamedElement|ESIdentifier]
 		////
-		////			// '.' element
-		////			( { fmlExpr::ValueElementSpecification.parent=current }
-		////				kind=ValueDotFieldExpressionKind
-		////				element=[fmlCommon::NamedElement|ESIdentifier]
-		////			)*
-		////		)?
-		////	;
-		//ValuePureNamedMachineExpression fmlExpr::Expression:
-		//	LiteralPureReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current} kind=(ValueDotFieldExpressionKind
-		//	| ValueArrowFieldExpressionKind) element=[fmlCommon::NamedElement|ESIdentifier])*;
+		////            // '.' element
+		////            ( { fmlExpr::ValueElementSpecification.parent=current }
+		////                kind=ValueDotFieldExpressionKind
+		////                element=[fmlCommon::NamedElement|ESIdentifier]
+		////            )*
+		////        )?
+		////    ;
+		//ValuePureNamedMachineExpression returns fmlExpr::Expression
+		//    : LiteralPureReferenceExpression
+		//        // ( '.' | '->' ) element
+		//        ( { fmlExpr::ValueElementSpecification.parent=current }
+		//            kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//            element=[fmlCommon::NamedElement|ESIdentifier]
+		//        )*
+		//    ;
 		@Override public ParserRule getRule() { return rule; }
 		
-		//LiteralPureReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current} kind=(ValueDotFieldExpressionKind |
-		//ValueArrowFieldExpressionKind) element=[fmlCommon::NamedElement|ESIdentifier])*
+		//LiteralPureReferenceExpression
+		//       // ( '.' | '->' ) element
+		//       ( { fmlExpr::ValueElementSpecification.parent=current }
+		//           kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//           element=[fmlCommon::NamedElement|ESIdentifier]
+		//       )*
 		public Group getGroup() { return cGroup; }
 		
 		//LiteralPureReferenceExpression
 		public RuleCall getLiteralPureReferenceExpressionParserRuleCall_0() { return cLiteralPureReferenceExpressionParserRuleCall_0; }
 		
-		//({fmlExpr::ValueElementSpecification.parent=current} kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind)
-		//element=[fmlCommon::NamedElement|ESIdentifier])*
+		//// ( '.' | '->' ) element
+		//( { fmlExpr::ValueElementSpecification.parent=current }
+		//    kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+		//    element=[fmlCommon::NamedElement|ESIdentifier]
+		//)*
 		public Group getGroup_1() { return cGroup_1; }
 		
-		//{fmlExpr::ValueElementSpecification.parent=current}
+		//{ fmlExpr::ValueElementSpecification.parent=current }
 		public Action getValueElementSpecificationParentAction_1_0() { return cValueElementSpecificationParentAction_1_0; }
 		
-		//kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind)
+		//kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
 		public Assignment getKindAssignment_1_1() { return cKindAssignment_1_1; }
 		
-		//(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind)
+		//(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
 		public Alternatives getKindAlternatives_1_1_0() { return cKindAlternatives_1_1_0; }
 		
 		//ValueDotFieldExpressionKind
@@ -22035,7 +26088,7 @@
 		public RuleCall getElementNamedElementESIdentifierParserRuleCall_1_2_0_1() { return cElementNamedElementESIdentifierParserRuleCall_1_2_0_1; }
 	}
 	
-	public class VisibilityKindElements extends AbstractEnumRuleElementFinder {
+	public class VisibilityKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.VisibilityKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cPublicEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22047,38 +26100,45 @@
 		private final EnumLiteralDeclaration cPackageEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cPackagePackageKeyword_3_0 = (Keyword)cPackageEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum VisibilityKind returns fmlCommon::VisibilityKind:
-		//	public | private | protected | package;
+		//enum VisibilityKind returns fmlCommon::VisibilityKind
+		//    : public   ='public'
+		//    | private  ='private'
+		//    | protected='protected'
+		//    | package  ='package'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//public | private | protected | package
+		//public   ='public'
+		//   | private  ='private'
+		//   | protected='protected'
+		//   | package  ='package'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//public
+		//public   ='public'
 		public EnumLiteralDeclaration getPublicEnumLiteralDeclaration_0() { return cPublicEnumLiteralDeclaration_0; }
 		
 		//'public'
 		public Keyword getPublicPublicKeyword_0_0() { return cPublicPublicKeyword_0_0; }
 		
-		//private
+		//private  ='private'
 		public EnumLiteralDeclaration getPrivateEnumLiteralDeclaration_1() { return cPrivateEnumLiteralDeclaration_1; }
 		
 		//'private'
 		public Keyword getPrivatePrivateKeyword_1_0() { return cPrivatePrivateKeyword_1_0; }
 		
-		//protected
+		//protected='protected'
 		public EnumLiteralDeclaration getProtectedEnumLiteralDeclaration_2() { return cProtectedEnumLiteralDeclaration_2; }
 		
 		//'protected'
 		public Keyword getProtectedProtectedKeyword_2_0() { return cProtectedProtectedKeyword_2_0; }
 		
-		//package
+		//package  ='package'
 		public EnumLiteralDeclaration getPackageEnumLiteralDeclaration_3() { return cPackageEnumLiteralDeclaration_3; }
 		
 		//'package'
 		public Keyword getPackagePackageKeyword_3_0() { return cPackagePackageKeyword_3_0; }
 	}
-	public class DesignKindElements extends AbstractEnumRuleElementFinder {
+	public class DesignKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.DesignKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cModelEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22090,54 +26150,64 @@
 		private final EnumLiteralDeclaration cPrototypeEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cPrototypePrototypeKeyword_3_0 = (Keyword)cPrototypeEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum DesignKind returns fmlInfra::DesignKind:
-		//	model | prototype | model='#model'
-		//	| prototype='#prototype';
+		//////////////////////////////////////////////////////////////////////////////////
+		//// Machine PropertyDefinition Rules
+		//////////////////////////////////////////////////////////////////////////////////
+		//enum DesignKind returns fmlInfra::DesignKind
+		//    : model     = 'model'
+		//    | prototype = 'prototype'
+		//    | model     = '#model'
+		//    | prototype = '#prototype'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//model | prototype | model='#model' | prototype='#prototype'
+		//model     = 'model'
+		//   | prototype = 'prototype'
+		//   | model     = '#model'
+		//   | prototype = '#prototype'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//model
+		//model     = 'model'
 		public EnumLiteralDeclaration getModelEnumLiteralDeclaration_0() { return cModelEnumLiteralDeclaration_0; }
 		
 		//'model'
 		public Keyword getModelModelKeyword_0_0() { return cModelModelKeyword_0_0; }
 		
-		//prototype
+		//prototype = 'prototype'
 		public EnumLiteralDeclaration getPrototypeEnumLiteralDeclaration_1() { return cPrototypeEnumLiteralDeclaration_1; }
 		
 		//'prototype'
 		public Keyword getPrototypePrototypeKeyword_1_0() { return cPrototypePrototypeKeyword_1_0; }
 		
-		//model='#model'
+		//model     = '#model'
 		public EnumLiteralDeclaration getModelEnumLiteralDeclaration_2() { return cModelEnumLiteralDeclaration_2; }
 		
 		//'#model'
 		public Keyword getModelModelKeyword_2_0() { return cModelModelKeyword_2_0; }
 		
-		//prototype='#prototype'
+		//prototype = '#prototype'
 		public EnumLiteralDeclaration getPrototypeEnumLiteralDeclaration_3() { return cPrototypeEnumLiteralDeclaration_3; }
 		
 		//'#prototype'
 		public Keyword getPrototypePrototypeKeyword_3_0() { return cPrototypePrototypeKeyword_3_0; }
 	}
-	public class DesignInstanceKindElements extends AbstractEnumRuleElementFinder {
+	public class DesignInstanceKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.DesignInstanceKind");
 		private final EnumLiteralDeclaration cInstanceEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cInstanceInstanceKeyword_0 = (Keyword)cInstanceEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum DesignInstanceKind returns fmlInfra::DesignKind:
-		//	instance;
+		//enum DesignInstanceKind returns fmlInfra::DesignKind
+		//    : instance  = 'instance'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//instance
+		//instance  = 'instance'
 		public EnumLiteralDeclaration getInstanceEnumLiteralDeclaration() { return cInstanceEnumLiteralDeclaration; }
 		
 		//'instance'
 		public Keyword getInstanceInstanceKeyword_0() { return cInstanceInstanceKeyword_0; }
 	}
-	public class PseudostateKindElements extends AbstractEnumRuleElementFinder {
+	public class PseudostateKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PseudostateKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cJunctionEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22157,27 +26227,34 @@
 		private final EnumLiteralDeclaration cShallowHistoryEnumLiteralDeclaration_7 = (EnumLiteralDeclaration)cAlternatives.eContents().get(7);
 		private final Keyword cShallowHistoryShistoryKeyword_7_0 = (Keyword)cShallowHistoryEnumLiteralDeclaration_7.eContents().get(0);
 		
-		//enum PseudostateKind returns fmlStmchn::PseudostateKind:
-		//	Junction='junction'
-		//	| Choice='choice'
-		//	| EntryPoint='entryPoint'
-		//	| ExitPoint='exitPoint'
-		//	//	| Initial ='initial'
-		//	//		
-		//	//	| Terminal='terminal'
-		//	//	| Return   ='return'
-		//
-		//	| Fork='fork'
-		//	| Join='join'
-		//	| DeepHistory='dhistory'
-		//	| ShallowHistory='shistory';
+		//enum PseudostateKind returns fmlStmchn::PseudostateKind
+		//    : Junction='junction'
+		//    | Choice  ='choice'
+		//    | EntryPoint='entryPoint'
+		//    | ExitPoint  ='exitPoint'
+		////    | Initial ='initial'
+		////
+		////    | Terminal='terminal'
+		////    | Return   ='return'
+		//    | Fork='fork'
+		//    | Join='join'
+		//    | DeepHistory   ='dhistory'
+		//    | ShallowHistory='shistory'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//Junction='junction' | Choice='choice' | EntryPoint='entryPoint' | ExitPoint='exitPoint' //	| Initial ='initial'
-		////		
-		////	| Terminal='terminal'
-		////	| Return   ='return'
-		//| Fork='fork' | Join='join' | DeepHistory='dhistory' | ShallowHistory='shistory'
+		// Junction='junction'
+		//    | Choice  ='choice'
+		//    | EntryPoint='entryPoint'
+		//    | ExitPoint  ='exitPoint'
+		////    | Initial ='initial'
+		////
+		////    | Terminal='terminal'
+		////    | Return   ='return'
+		//    | Fork='fork'
+		//    | Join='join'
+		//    | DeepHistory   ='dhistory'
+		//    | ShallowHistory='shistory'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//Junction='junction'
@@ -22186,7 +26263,7 @@
 		//'junction'
 		public Keyword getJunctionJunctionKeyword_0_0() { return cJunctionJunctionKeyword_0_0; }
 		
-		//Choice='choice'
+		//Choice  ='choice'
 		public EnumLiteralDeclaration getChoiceEnumLiteralDeclaration_1() { return cChoiceEnumLiteralDeclaration_1; }
 		
 		//'choice'
@@ -22198,7 +26275,7 @@
 		//'entryPoint'
 		public Keyword getEntryPointEntryPointKeyword_2_0() { return cEntryPointEntryPointKeyword_2_0; }
 		
-		//ExitPoint='exitPoint'
+		//ExitPoint  ='exitPoint'
 		public EnumLiteralDeclaration getExitPointEnumLiteralDeclaration_3() { return cExitPointEnumLiteralDeclaration_3; }
 		
 		//'exitPoint'
@@ -22216,7 +26293,7 @@
 		//'join'
 		public Keyword getJoinJoinKeyword_5_0() { return cJoinJoinKeyword_5_0; }
 		
-		//DeepHistory='dhistory'
+		//DeepHistory   ='dhistory'
 		public EnumLiteralDeclaration getDeepHistoryEnumLiteralDeclaration_6() { return cDeepHistoryEnumLiteralDeclaration_6; }
 		
 		//'dhistory'
@@ -22228,22 +26305,23 @@
 		//'shistory'
 		public Keyword getShallowHistoryShistoryKeyword_7_0() { return cShallowHistoryShistoryKeyword_7_0; }
 	}
-	public class PseudostateInitialKindElements extends AbstractEnumRuleElementFinder {
+	public class PseudostateInitialKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PseudostateInitialKind");
 		private final EnumLiteralDeclaration cInitialEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cInitialInitialKeyword_0 = (Keyword)cInitialEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum PseudostateInitialKind returns fmlStmchn::PseudostateKind:
-		//	Initial='initial';
+		//enum PseudostateInitialKind returns fmlStmchn::PseudostateKind
+		//    : Initial ='initial'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//Initial='initial'
+		//Initial ='initial'
 		public EnumLiteralDeclaration getInitialEnumLiteralDeclaration() { return cInitialEnumLiteralDeclaration; }
 		
 		//'initial'
 		public Keyword getInitialInitialKeyword_0() { return cInitialInitialKeyword_0; }
 	}
-	public class EndingPseudostateKindElements extends AbstractEnumRuleElementFinder {
+	public class EndingPseudostateKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.EndingPseudostateKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cTerminalEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22251,12 +26329,14 @@
 		private final EnumLiteralDeclaration cReturnEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
 		private final Keyword cReturnReturnKeyword_1_0 = (Keyword)cReturnEnumLiteralDeclaration_1.eContents().get(0);
 		
-		//enum EndingPseudostateKind returns fmlStmchn::PseudostateKind:
-		//	Terminal='terminal'
-		//	| Return='return';
+		//enum EndingPseudostateKind returns fmlStmchn::PseudostateKind
+		//    : Terminal='terminal'
+		//    | Return='return'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//Terminal='terminal' | Return='return'
+		//Terminal='terminal'
+		//   | Return='return'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//Terminal='terminal'
@@ -22271,7 +26351,7 @@
 		//'return'
 		public Keyword getReturnReturnKeyword_1_0() { return cReturnReturnKeyword_1_0; }
 	}
-	public class ComProtocolKindElements extends AbstractEnumRuleElementFinder {
+	public class ComProtocolKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ComProtocolKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cEnvEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22281,32 +26361,37 @@
 		private final EnumLiteralDeclaration cMulti_rdvEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
 		private final Keyword cMulti_rdvMultirdvKeyword_2_0 = (Keyword)cMulti_rdvEnumLiteralDeclaration_2.eContents().get(0);
 		
-		//enum ComProtocolKind returns fmlInfra::ComProtocolKind:
-		//	env | rdv | multi_rdv='multirdv';
+		//enum ComProtocolKind returns fmlInfra::ComProtocolKind
+		//    : env       = 'env'
+		//    | rdv       = 'rdv'
+		//    | multi_rdv = 'multirdv'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//env | rdv | multi_rdv='multirdv'
+		//env       = 'env'
+		//   | rdv       = 'rdv'
+		//   | multi_rdv = 'multirdv'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//env
+		//env       = 'env'
 		public EnumLiteralDeclaration getEnvEnumLiteralDeclaration_0() { return cEnvEnumLiteralDeclaration_0; }
 		
 		//'env'
 		public Keyword getEnvEnvKeyword_0_0() { return cEnvEnvKeyword_0_0; }
 		
-		//rdv
+		//rdv       = 'rdv'
 		public EnumLiteralDeclaration getRdvEnumLiteralDeclaration_1() { return cRdvEnumLiteralDeclaration_1; }
 		
 		//'rdv'
 		public Keyword getRdvRdvKeyword_1_0() { return cRdvRdvKeyword_1_0; }
 		
-		//multi_rdv='multirdv'
+		//multi_rdv = 'multirdv'
 		public EnumLiteralDeclaration getMulti_rdvEnumLiteralDeclaration_2() { return cMulti_rdvEnumLiteralDeclaration_2; }
 		
 		//'multirdv'
 		public Keyword getMulti_rdvMultirdvKeyword_2_0() { return cMulti_rdvMultirdvKeyword_2_0; }
 	}
-	public class ComEnvRdvProtocolKindElements extends AbstractEnumRuleElementFinder {
+	public class ComEnvRdvProtocolKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ComEnvRdvProtocolKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cEnvEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22314,56 +26399,61 @@
 		private final EnumLiteralDeclaration cRdvEnumLiteralDeclaration_1 = (EnumLiteralDeclaration)cAlternatives.eContents().get(1);
 		private final Keyword cRdvRdvKeyword_1_0 = (Keyword)cRdvEnumLiteralDeclaration_1.eContents().get(0);
 		
-		//enum ComEnvRdvProtocolKind returns fmlInfra::ComProtocolKind:
-		//	env | rdv;
+		//enum ComEnvRdvProtocolKind returns fmlInfra::ComProtocolKind
+		//    : env = 'env'
+		//    | rdv = 'rdv'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//env | rdv
+		//env = 'env'
+		//   | rdv = 'rdv'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//env
+		//env = 'env'
 		public EnumLiteralDeclaration getEnvEnumLiteralDeclaration_0() { return cEnvEnumLiteralDeclaration_0; }
 		
 		//'env'
 		public Keyword getEnvEnvKeyword_0_0() { return cEnvEnvKeyword_0_0; }
 		
-		//rdv
+		//rdv = 'rdv'
 		public EnumLiteralDeclaration getRdvEnumLiteralDeclaration_1() { return cRdvEnumLiteralDeclaration_1; }
 		
 		//'rdv'
 		public Keyword getRdvRdvKeyword_1_0() { return cRdvRdvKeyword_1_0; }
 	}
-	public class ComMultiRdvProtocolKindElements extends AbstractEnumRuleElementFinder {
+	public class ComMultiRdvProtocolKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ComMultiRdvProtocolKind");
 		private final EnumLiteralDeclaration cMulti_rdvEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cMulti_rdvMultirdvKeyword_0 = (Keyword)cMulti_rdvEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ComMultiRdvProtocolKind returns fmlInfra::ComProtocolKind:
-		//	multi_rdv='multirdv';
+		//enum ComMultiRdvProtocolKind returns fmlInfra::ComProtocolKind
+		//    : multi_rdv = 'multirdv'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//multi_rdv='multirdv'
+		//multi_rdv = 'multirdv'
 		public EnumLiteralDeclaration getMulti_rdvEnumLiteralDeclaration() { return cMulti_rdvEnumLiteralDeclaration; }
 		
 		//'multirdv'
 		public Keyword getMulti_rdvMultirdvKeyword_0() { return cMulti_rdvMultirdvKeyword_0; }
 	}
-	public class BufferProtocolKindElements extends AbstractEnumRuleElementFinder {
+	public class BufferProtocolKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.BufferProtocolKind");
 		private final EnumLiteralDeclaration cBufferEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cBufferBufferKeyword_0 = (Keyword)cBufferEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum BufferProtocolKind returns fmlInfra::ComProtocolKind:
-		//	buffer;
+		//enum BufferProtocolKind returns fmlInfra::ComProtocolKind
+		//    : buffer = 'buffer'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//buffer
+		//buffer = 'buffer'
 		public EnumLiteralDeclaration getBufferEnumLiteralDeclaration() { return cBufferEnumLiteralDeclaration; }
 		
 		//'buffer'
 		public Keyword getBufferBufferKeyword_0() { return cBufferBufferKeyword_0; }
 	}
-	public class ComCastKingElements extends AbstractEnumRuleElementFinder {
+	public class ComCastKingElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ComCastKing");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cUnicastEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22375,38 +26465,45 @@
 		private final EnumLiteralDeclaration cBroadcastEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cBroadcastBroadcastKeyword_3_0 = (Keyword)cBroadcastEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum ComCastKing returns fmlInfra::ComCastKind:
-		//	unicast | anycast | multicast | broadcast;
+		//enum ComCastKing returns fmlInfra::ComCastKind
+		//    : unicast   = 'unicast'
+		//    | anycast   = 'anycast'
+		//    | multicast = 'multicast'
+		//    | broadcast = 'broadcast'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//unicast | anycast | multicast | broadcast
+		//unicast   = 'unicast'
+		//   | anycast   = 'anycast'
+		//   | multicast = 'multicast'
+		//   | broadcast = 'broadcast'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//unicast
+		//unicast   = 'unicast'
 		public EnumLiteralDeclaration getUnicastEnumLiteralDeclaration_0() { return cUnicastEnumLiteralDeclaration_0; }
 		
 		//'unicast'
 		public Keyword getUnicastUnicastKeyword_0_0() { return cUnicastUnicastKeyword_0_0; }
 		
-		//anycast
+		//anycast   = 'anycast'
 		public EnumLiteralDeclaration getAnycastEnumLiteralDeclaration_1() { return cAnycastEnumLiteralDeclaration_1; }
 		
 		//'anycast'
 		public Keyword getAnycastAnycastKeyword_1_0() { return cAnycastAnycastKeyword_1_0; }
 		
-		//multicast
+		//multicast = 'multicast'
 		public EnumLiteralDeclaration getMulticastEnumLiteralDeclaration_2() { return cMulticastEnumLiteralDeclaration_2; }
 		
 		//'multicast'
 		public Keyword getMulticastMulticastKeyword_2_0() { return cMulticastMulticastKeyword_2_0; }
 		
-		//broadcast
+		//broadcast = 'broadcast'
 		public EnumLiteralDeclaration getBroadcastEnumLiteralDeclaration_3() { return cBroadcastEnumLiteralDeclaration_3; }
 		
 		//'broadcast'
 		public Keyword getBroadcastBroadcastKeyword_3_0() { return cBroadcastBroadcastKeyword_3_0; }
 	}
-	public class PrimitiveNumberSignElements extends AbstractEnumRuleElementFinder {
+	public class PrimitiveNumberSignElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PrimitiveNumberSign");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cPositiveEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22418,14 +26515,18 @@
 		private final EnumLiteralDeclaration cNegative_strictEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cNegative_strictHyphenMinusHyphenMinusKeyword_3_0 = (Keyword)cNegative_strictEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum PrimitiveNumberSign returns fmlType::PrimitiveNumberSign:
-		//	positive='+'
-		//	| positive_strict='++'
-		//	| negative='-'
-		//	| negative_strict='--';
+		//enum PrimitiveNumberSign returns fmlType::PrimitiveNumberSign
+		//    : positive='+'
+		//    | positive_strict='++'
+		//    | negative='-'
+		//    | negative_strict='--'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//positive='+' | positive_strict='++' | negative='-' | negative_strict='--'
+		//positive='+'
+		//   | positive_strict='++'
+		//   | negative='-'
+		//   | negative_strict='--'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
 		//positive='+'
@@ -22452,7 +26553,7 @@
 		//'--'
 		public Keyword getNegative_strictHyphenMinusHyphenMinusKeyword_3_0() { return cNegative_strictHyphenMinusHyphenMinusKeyword_3_0; }
 	}
-	public class PrimitiveInstanceKindElements extends AbstractEnumRuleElementFinder {
+	public class PrimitiveInstanceKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.PrimitiveInstanceKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cBufferEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22468,50 +26569,61 @@
 		private final EnumLiteralDeclaration cVertexEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
 		private final Keyword cVertexVertexKeyword_5_0 = (Keyword)cVertexEnumLiteralDeclaration_5.eContents().get(0);
 		
-		//enum PrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind:
-		//	buffer | message | port | signal | machine | vertex;
+		//enum PrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind
+		//    : buffer='buffer'
+		//    | message='message'
+		//    | port='port'
+		//    | signal='signal'
+		//    | machine='machine'
+		//    | vertex='vertex'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//buffer | message | port | signal | machine | vertex
+		//buffer='buffer'
+		//   | message='message'
+		//   | port='port'
+		//   | signal='signal'
+		//   | machine='machine'
+		//   | vertex='vertex'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//buffer
+		//buffer='buffer'
 		public EnumLiteralDeclaration getBufferEnumLiteralDeclaration_0() { return cBufferEnumLiteralDeclaration_0; }
 		
 		//'buffer'
 		public Keyword getBufferBufferKeyword_0_0() { return cBufferBufferKeyword_0_0; }
 		
-		//message
+		//message='message'
 		public EnumLiteralDeclaration getMessageEnumLiteralDeclaration_1() { return cMessageEnumLiteralDeclaration_1; }
 		
 		//'message'
 		public Keyword getMessageMessageKeyword_1_0() { return cMessageMessageKeyword_1_0; }
 		
-		//port
+		//port='port'
 		public EnumLiteralDeclaration getPortEnumLiteralDeclaration_2() { return cPortEnumLiteralDeclaration_2; }
 		
 		//'port'
 		public Keyword getPortPortKeyword_2_0() { return cPortPortKeyword_2_0; }
 		
-		//signal
+		//signal='signal'
 		public EnumLiteralDeclaration getSignalEnumLiteralDeclaration_3() { return cSignalEnumLiteralDeclaration_3; }
 		
 		//'signal'
 		public Keyword getSignalSignalKeyword_3_0() { return cSignalSignalKeyword_3_0; }
 		
-		//machine
+		//machine='machine'
 		public EnumLiteralDeclaration getMachineEnumLiteralDeclaration_4() { return cMachineEnumLiteralDeclaration_4; }
 		
 		//'machine'
 		public Keyword getMachineMachineKeyword_4_0() { return cMachineMachineKeyword_4_0; }
 		
-		//vertex
+		//vertex='vertex'
 		public EnumLiteralDeclaration getVertexEnumLiteralDeclaration_5() { return cVertexEnumLiteralDeclaration_5; }
 		
 		//'vertex'
 		public Keyword getVertexVertexKeyword_5_0() { return cVertexVertexKeyword_5_0; }
 	}
-	public class CollectionKindElements extends AbstractEnumRuleElementFinder {
+	public class CollectionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.CollectionKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cVectorEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22529,56 +26641,69 @@
 		private final EnumLiteralDeclaration cLifoEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
 		private final Keyword cLifoLifoKeyword_6_0 = (Keyword)cLifoEnumLiteralDeclaration_6.eContents().get(0);
 		
-		//enum CollectionKind returns fmlType::CollectionKind:
-		//	vector | rvector | list | set | bag | fifo | lifo;
+		//enum CollectionKind returns fmlType::CollectionKind
+		//    : vector = 'vector'
+		//    | rvector = 'rvector'
+		//    | list='list'
+		//    | set = 'set'
+		//    | bag = 'bag'
+		//    | fifo = 'fifo'
+		//    | lifo = 'lifo'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//vector | rvector | list | set | bag | fifo | lifo
+		//vector = 'vector'
+		//   | rvector = 'rvector'
+		//   | list='list'
+		//   | set = 'set'
+		//   | bag = 'bag'
+		//   | fifo = 'fifo'
+		//   | lifo = 'lifo'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//vector
+		//vector = 'vector'
 		public EnumLiteralDeclaration getVectorEnumLiteralDeclaration_0() { return cVectorEnumLiteralDeclaration_0; }
 		
 		//'vector'
 		public Keyword getVectorVectorKeyword_0_0() { return cVectorVectorKeyword_0_0; }
 		
-		//rvector
+		//rvector = 'rvector'
 		public EnumLiteralDeclaration getRvectorEnumLiteralDeclaration_1() { return cRvectorEnumLiteralDeclaration_1; }
 		
 		//'rvector'
 		public Keyword getRvectorRvectorKeyword_1_0() { return cRvectorRvectorKeyword_1_0; }
 		
-		//list
+		//list='list'
 		public EnumLiteralDeclaration getListEnumLiteralDeclaration_2() { return cListEnumLiteralDeclaration_2; }
 		
 		//'list'
 		public Keyword getListListKeyword_2_0() { return cListListKeyword_2_0; }
 		
-		//set
+		//set = 'set'
 		public EnumLiteralDeclaration getSetEnumLiteralDeclaration_3() { return cSetEnumLiteralDeclaration_3; }
 		
 		//'set'
 		public Keyword getSetSetKeyword_3_0() { return cSetSetKeyword_3_0; }
 		
-		//bag
+		//bag = 'bag'
 		public EnumLiteralDeclaration getBagEnumLiteralDeclaration_4() { return cBagEnumLiteralDeclaration_4; }
 		
 		//'bag'
 		public Keyword getBagBagKeyword_4_0() { return cBagBagKeyword_4_0; }
 		
-		//fifo
+		//fifo = 'fifo'
 		public EnumLiteralDeclaration getFifoEnumLiteralDeclaration_5() { return cFifoEnumLiteralDeclaration_5; }
 		
 		//'fifo'
 		public Keyword getFifoFifoKeyword_5_0() { return cFifoFifoKeyword_5_0; }
 		
-		//lifo
+		//lifo = 'lifo'
 		public EnumLiteralDeclaration getLifoEnumLiteralDeclaration_6() { return cLifoEnumLiteralDeclaration_6; }
 		
 		//'lifo'
 		public Keyword getLifoLifoKeyword_6_0() { return cLifoLifoKeyword_6_0; }
 	}
-	public class ParameterDirectionKindElements extends AbstractEnumRuleElementFinder {
+	public class ParameterDirectionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ParameterDirectionKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cInEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22594,52 +26719,64 @@
 		private final EnumLiteralDeclaration cReturnEnumLiteralDeclaration_5 = (EnumLiteralDeclaration)cAlternatives.eContents().get(5);
 		private final Keyword cReturnReturnKeyword_5_0 = (Keyword)cReturnEnumLiteralDeclaration_5.eContents().get(0);
 		
-		//enum ParameterDirectionKind returns fmlInfra::ParameterDirectionKind:
-		//	in | in='input'
-		//	| inout | out | out='output'
-		//	| return;
+		//////////////////////////////////////////////////////////////////////////////////
+		//// Functional ParameterSet Rules
+		//////////////////////////////////////////////////////////////////////////////////
+		//enum ParameterDirectionKind returns fmlInfra::ParameterDirectionKind
+		//    : in     = 'in'
+		//    | in     = 'input'
+		//    | inout  = 'inout'
+		//    | out    = 'out'
+		//    | out    = 'output'
+		//    | return = 'return'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//in | in='input' | inout | out | out='output' | return
+		//in     = 'in'
+		//   | in     = 'input'
+		//   | inout  = 'inout'
+		//   | out    = 'out'
+		//   | out    = 'output'
+		//   | return = 'return'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//in
+		//in     = 'in'
 		public EnumLiteralDeclaration getInEnumLiteralDeclaration_0() { return cInEnumLiteralDeclaration_0; }
 		
 		//'in'
 		public Keyword getInInKeyword_0_0() { return cInInKeyword_0_0; }
 		
-		//in='input'
+		//in     = 'input'
 		public EnumLiteralDeclaration getInEnumLiteralDeclaration_1() { return cInEnumLiteralDeclaration_1; }
 		
 		//'input'
 		public Keyword getInInputKeyword_1_0() { return cInInputKeyword_1_0; }
 		
-		//inout
+		//inout  = 'inout'
 		public EnumLiteralDeclaration getInoutEnumLiteralDeclaration_2() { return cInoutEnumLiteralDeclaration_2; }
 		
 		//'inout'
 		public Keyword getInoutInoutKeyword_2_0() { return cInoutInoutKeyword_2_0; }
 		
-		//out
+		//out    = 'out'
 		public EnumLiteralDeclaration getOutEnumLiteralDeclaration_3() { return cOutEnumLiteralDeclaration_3; }
 		
 		//'out'
 		public Keyword getOutOutKeyword_3_0() { return cOutOutKeyword_3_0; }
 		
-		//out='output'
+		//out    = 'output'
 		public EnumLiteralDeclaration getOutEnumLiteralDeclaration_4() { return cOutEnumLiteralDeclaration_4; }
 		
 		//'output'
 		public Keyword getOutOutputKeyword_4_0() { return cOutOutputKeyword_4_0; }
 		
-		//return
+		//return = 'return'
 		public EnumLiteralDeclaration getReturnEnumLiteralDeclaration_5() { return cReturnEnumLiteralDeclaration_5; }
 		
 		//'return'
 		public Keyword getReturnReturnKeyword_5_0() { return cReturnReturnKeyword_5_0; }
 	}
-	public class BufferContainerKindElements extends AbstractEnumRuleElementFinder {
+	public class BufferContainerKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.BufferContainerKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cSetEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22651,38 +26788,45 @@
 		private final EnumLiteralDeclaration cLifoEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cLifoLifoKeyword_3_0 = (Keyword)cLifoEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum BufferContainerKind returns fmlType::CollectionKind:
-		//	set | bag | fifo | lifo;
+		//enum BufferContainerKind returns fmlType::CollectionKind
+		//    : set  = 'set'
+		//    | bag  = 'bag'
+		//    | fifo = 'fifo'
+		//    | lifo = 'lifo'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//set | bag | fifo | lifo
+		//set  = 'set'
+		//   | bag  = 'bag'
+		//   | fifo = 'fifo'
+		//   | lifo = 'lifo'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//set
+		//set  = 'set'
 		public EnumLiteralDeclaration getSetEnumLiteralDeclaration_0() { return cSetEnumLiteralDeclaration_0; }
 		
 		//'set'
 		public Keyword getSetSetKeyword_0_0() { return cSetSetKeyword_0_0; }
 		
-		//bag
+		//bag  = 'bag'
 		public EnumLiteralDeclaration getBagEnumLiteralDeclaration_1() { return cBagEnumLiteralDeclaration_1; }
 		
 		//'bag'
 		public Keyword getBagBagKeyword_1_0() { return cBagBagKeyword_1_0; }
 		
-		//fifo
+		//fifo = 'fifo'
 		public EnumLiteralDeclaration getFifoEnumLiteralDeclaration_2() { return cFifoEnumLiteralDeclaration_2; }
 		
 		//'fifo'
 		public Keyword getFifoFifoKeyword_2_0() { return cFifoFifoKeyword_2_0; }
 		
-		//lifo
+		//lifo = 'lifo'
 		public EnumLiteralDeclaration getLifoEnumLiteralDeclaration_3() { return cLifoEnumLiteralDeclaration_3; }
 		
 		//'lifo'
 		public Keyword getLifoLifoKeyword_3_0() { return cLifoLifoKeyword_3_0; }
 	}
-	public class ChannelDirectionElements extends AbstractEnumRuleElementFinder {
+	public class ChannelDirectionElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ChannelDirection");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cInputEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22692,32 +26836,40 @@
 		private final EnumLiteralDeclaration cOutputEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
 		private final Keyword cOutputOutputKeyword_2_0 = (Keyword)cOutputEnumLiteralDeclaration_2.eContents().get(0);
 		
-		//enum ChannelDirection returns fmlInfra::ChannelDirection:
-		//	input | inout | output;
+		//////////////////////////////////////////////////////////////////////////////////
+		//// Channel rules
+		//////////////////////////////////////////////////////////////////////////////////
+		//enum ChannelDirection returns fmlInfra::ChannelDirection
+		//    : input  = 'input'
+		//    | inout  = 'inout'
+		//    | output = 'output'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//input | inout | output
+		//input  = 'input'
+		//   | inout  = 'inout'
+		//   | output = 'output'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//input
+		//input  = 'input'
 		public EnumLiteralDeclaration getInputEnumLiteralDeclaration_0() { return cInputEnumLiteralDeclaration_0; }
 		
 		//'input'
 		public Keyword getInputInputKeyword_0_0() { return cInputInputKeyword_0_0; }
 		
-		//inout
+		//inout  = 'inout'
 		public EnumLiteralDeclaration getInoutEnumLiteralDeclaration_1() { return cInoutEnumLiteralDeclaration_1; }
 		
 		//'inout'
 		public Keyword getInoutInoutKeyword_1_0() { return cInoutInoutKeyword_1_0; }
 		
-		//output
+		//output = 'output'
 		public EnumLiteralDeclaration getOutputEnumLiteralDeclaration_2() { return cOutputEnumLiteralDeclaration_2; }
 		
 		//'output'
 		public Keyword getOutputOutputKeyword_2_0() { return cOutputOutputKeyword_2_0; }
 	}
-	public class TransitionMocElements extends AbstractEnumRuleElementFinder {
+	public class TransitionMocElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.TransitionMoc");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cSimpleEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22727,32 +26879,37 @@
 		private final EnumLiteralDeclaration cFinalEnumLiteralDeclaration_2 = (EnumLiteralDeclaration)cAlternatives.eContents().get(2);
 		private final Keyword cFinalFinalKeyword_2_0 = (Keyword)cFinalEnumLiteralDeclaration_2.eContents().get(0);
 		
-		//enum TransitionMoc returns fmlStmchn::TransitionMoc:
-		//	simple | abort | final;
+		//enum TransitionMoc returns fmlStmchn::TransitionMoc
+		//    : simple = 'simple'
+		//    | abort  = 'abort'
+		//    | final  = 'final'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//simple | abort | final
+		//simple = 'simple'
+		//   | abort  = 'abort'
+		//   | final  = 'final'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//simple
+		//simple = 'simple'
 		public EnumLiteralDeclaration getSimpleEnumLiteralDeclaration_0() { return cSimpleEnumLiteralDeclaration_0; }
 		
 		//'simple'
 		public Keyword getSimpleSimpleKeyword_0_0() { return cSimpleSimpleKeyword_0_0; }
 		
-		//abort
+		//abort  = 'abort'
 		public EnumLiteralDeclaration getAbortEnumLiteralDeclaration_1() { return cAbortEnumLiteralDeclaration_1; }
 		
 		//'abort'
 		public Keyword getAbortAbortKeyword_1_0() { return cAbortAbortKeyword_1_0; }
 		
-		//final
+		//final  = 'final'
 		public EnumLiteralDeclaration getFinalEnumLiteralDeclaration_2() { return cFinalEnumLiteralDeclaration_2; }
 		
 		//'final'
 		public Keyword getFinalFinalKeyword_2_0() { return cFinalFinalKeyword_2_0; }
 	}
-	public class InterruptStatementKindElements extends AbstractEnumRuleElementFinder {
+	public class InterruptStatementKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.InterruptStatementKind");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cBreakEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22764,38 +26921,45 @@
 		private final EnumLiteralDeclaration cExitEnumLiteralDeclaration_3 = (EnumLiteralDeclaration)cAlternatives.eContents().get(3);
 		private final Keyword cExitExitKeyword_3_0 = (Keyword)cExitEnumLiteralDeclaration_3.eContents().get(0);
 		
-		//enum InterruptStatementKind returns fmlStmnt::InterruptStatementKind:
-		//	break | continue | return | exit;
+		//enum InterruptStatementKind returns fmlStmnt::InterruptStatementKind
+		//    : break    = 'break'
+		//    | continue = 'continue'
+		//    | return   = 'return'
+		//    | exit     = 'exit'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//break | continue | return | exit
+		//break    = 'break'
+		//   | continue = 'continue'
+		//   | return   = 'return'
+		//   | exit     = 'exit'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//break
+		//break    = 'break'
 		public EnumLiteralDeclaration getBreakEnumLiteralDeclaration_0() { return cBreakEnumLiteralDeclaration_0; }
 		
 		//'break'
 		public Keyword getBreakBreakKeyword_0_0() { return cBreakBreakKeyword_0_0; }
 		
-		//continue
+		//continue = 'continue'
 		public EnumLiteralDeclaration getContinueEnumLiteralDeclaration_1() { return cContinueEnumLiteralDeclaration_1; }
 		
 		//'continue'
 		public Keyword getContinueContinueKeyword_1_0() { return cContinueContinueKeyword_1_0; }
 		
-		//return
+		//return   = 'return'
 		public EnumLiteralDeclaration getReturnEnumLiteralDeclaration_2() { return cReturnEnumLiteralDeclaration_2; }
 		
 		//'return'
 		public Keyword getReturnReturnKeyword_2_0() { return cReturnReturnKeyword_2_0; }
 		
-		//exit
+		//exit     = 'exit'
 		public EnumLiteralDeclaration getExitEnumLiteralDeclaration_3() { return cExitEnumLiteralDeclaration_3; }
 		
 		//'exit'
 		public Keyword getExitExitKeyword_3_0() { return cExitExitKeyword_3_0; }
 	}
-	public class OPERATOR_ACTIVITYElements extends AbstractEnumRuleElementFinder {
+	public class OPERATOR_ACTIVITYElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.OPERATOR_ACTIVITY");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cInitEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22835,124 +26999,157 @@
 		private final EnumLiteralDeclaration cRtcEnumLiteralDeclaration_17 = (EnumLiteralDeclaration)cAlternatives.eContents().get(17);
 		private final Keyword cRtcRtcKeyword_17_0 = (Keyword)cRtcEnumLiteralDeclaration_17.eContents().get(0);
 		
-		//enum OPERATOR_ACTIVITY returns fmlStmnt::ActivityStatementKind:
-		//	init | final | new | destroy | start | stop | restart | suspend | resume | wait | disable | enable | abort | goto |
-		//	schedule | irun | run | rtc;
+		//enum OPERATOR_ACTIVITY returns fmlStmnt::ActivityStatementKind
+		//    : init     = 'init'
+		//    | final    = 'final'
+		//    | new      = 'new'
+		//    | destroy  = 'destroy'
+		//    | start    = 'start'
+		//    | stop     = 'stop'
+		//    | restart  = 'restart'
+		//    | suspend  = 'suspend'
+		//    | resume   = 'resume'
+		//    | wait     = 'wait'
+		//    | disable  = 'disable'
+		//    | enable   = 'enable'
+		//    | abort    = 'abort'
+		//    | goto     = 'goto'
+		//    | schedule = 'schedule'
+		//    | irun = 'irun'
+		//    | run  = 'run'
+		//    | rtc  = 'rtc'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//init | final | new | destroy | start | stop | restart | suspend | resume | wait | disable | enable | abort | goto |
-		//schedule | irun | run | rtc
+		//init     = 'init'
+		//   | final    = 'final'
+		//   | new      = 'new'
+		//   | destroy  = 'destroy'
+		//   | start    = 'start'
+		//   | stop     = 'stop'
+		//   | restart  = 'restart'
+		//   | suspend  = 'suspend'
+		//   | resume   = 'resume'
+		//   | wait     = 'wait'
+		//   | disable  = 'disable'
+		//   | enable   = 'enable'
+		//   | abort    = 'abort'
+		//   | goto     = 'goto'
+		//   | schedule = 'schedule'
+		//   | irun = 'irun'
+		//   | run  = 'run'
+		//   | rtc  = 'rtc'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//init
+		//init     = 'init'
 		public EnumLiteralDeclaration getInitEnumLiteralDeclaration_0() { return cInitEnumLiteralDeclaration_0; }
 		
 		//'init'
 		public Keyword getInitInitKeyword_0_0() { return cInitInitKeyword_0_0; }
 		
-		//final
+		//final    = 'final'
 		public EnumLiteralDeclaration getFinalEnumLiteralDeclaration_1() { return cFinalEnumLiteralDeclaration_1; }
 		
 		//'final'
 		public Keyword getFinalFinalKeyword_1_0() { return cFinalFinalKeyword_1_0; }
 		
-		//new
+		//new      = 'new'
 		public EnumLiteralDeclaration getNewEnumLiteralDeclaration_2() { return cNewEnumLiteralDeclaration_2; }
 		
 		//'new'
 		public Keyword getNewNewKeyword_2_0() { return cNewNewKeyword_2_0; }
 		
-		//destroy
+		//destroy  = 'destroy'
 		public EnumLiteralDeclaration getDestroyEnumLiteralDeclaration_3() { return cDestroyEnumLiteralDeclaration_3; }
 		
 		//'destroy'
 		public Keyword getDestroyDestroyKeyword_3_0() { return cDestroyDestroyKeyword_3_0; }
 		
-		//start
+		//start    = 'start'
 		public EnumLiteralDeclaration getStartEnumLiteralDeclaration_4() { return cStartEnumLiteralDeclaration_4; }
 		
 		//'start'
 		public Keyword getStartStartKeyword_4_0() { return cStartStartKeyword_4_0; }
 		
-		//stop
+		//stop     = 'stop'
 		public EnumLiteralDeclaration getStopEnumLiteralDeclaration_5() { return cStopEnumLiteralDeclaration_5; }
 		
 		//'stop'
 		public Keyword getStopStopKeyword_5_0() { return cStopStopKeyword_5_0; }
 		
-		//restart
+		//restart  = 'restart'
 		public EnumLiteralDeclaration getRestartEnumLiteralDeclaration_6() { return cRestartEnumLiteralDeclaration_6; }
 		
 		//'restart'
 		public Keyword getRestartRestartKeyword_6_0() { return cRestartRestartKeyword_6_0; }
 		
-		//suspend
+		//suspend  = 'suspend'
 		public EnumLiteralDeclaration getSuspendEnumLiteralDeclaration_7() { return cSuspendEnumLiteralDeclaration_7; }
 		
 		//'suspend'
 		public Keyword getSuspendSuspendKeyword_7_0() { return cSuspendSuspendKeyword_7_0; }
 		
-		//resume
+		//resume   = 'resume'
 		public EnumLiteralDeclaration getResumeEnumLiteralDeclaration_8() { return cResumeEnumLiteralDeclaration_8; }
 		
 		//'resume'
 		public Keyword getResumeResumeKeyword_8_0() { return cResumeResumeKeyword_8_0; }
 		
-		//wait
+		//wait     = 'wait'
 		public EnumLiteralDeclaration getWaitEnumLiteralDeclaration_9() { return cWaitEnumLiteralDeclaration_9; }
 		
 		//'wait'
 		public Keyword getWaitWaitKeyword_9_0() { return cWaitWaitKeyword_9_0; }
 		
-		//disable
+		//disable  = 'disable'
 		public EnumLiteralDeclaration getDisableEnumLiteralDeclaration_10() { return cDisableEnumLiteralDeclaration_10; }
 		
 		//'disable'
 		public Keyword getDisableDisableKeyword_10_0() { return cDisableDisableKeyword_10_0; }
 		
-		//enable
+		//enable   = 'enable'
 		public EnumLiteralDeclaration getEnableEnumLiteralDeclaration_11() { return cEnableEnumLiteralDeclaration_11; }
 		
 		//'enable'
 		public Keyword getEnableEnableKeyword_11_0() { return cEnableEnableKeyword_11_0; }
 		
-		//abort
+		//abort    = 'abort'
 		public EnumLiteralDeclaration getAbortEnumLiteralDeclaration_12() { return cAbortEnumLiteralDeclaration_12; }
 		
 		//'abort'
 		public Keyword getAbortAbortKeyword_12_0() { return cAbortAbortKeyword_12_0; }
 		
-		//goto
+		//goto     = 'goto'
 		public EnumLiteralDeclaration getGotoEnumLiteralDeclaration_13() { return cGotoEnumLiteralDeclaration_13; }
 		
 		//'goto'
 		public Keyword getGotoGotoKeyword_13_0() { return cGotoGotoKeyword_13_0; }
 		
-		//schedule
+		//schedule = 'schedule'
 		public EnumLiteralDeclaration getScheduleEnumLiteralDeclaration_14() { return cScheduleEnumLiteralDeclaration_14; }
 		
 		//'schedule'
 		public Keyword getScheduleScheduleKeyword_14_0() { return cScheduleScheduleKeyword_14_0; }
 		
-		//irun
+		//irun = 'irun'
 		public EnumLiteralDeclaration getIrunEnumLiteralDeclaration_15() { return cIrunEnumLiteralDeclaration_15; }
 		
 		//'irun'
 		public Keyword getIrunIrunKeyword_15_0() { return cIrunIrunKeyword_15_0; }
 		
-		//run
+		//run  = 'run'
 		public EnumLiteralDeclaration getRunEnumLiteralDeclaration_16() { return cRunEnumLiteralDeclaration_16; }
 		
 		//'run'
 		public Keyword getRunRunKeyword_16_0() { return cRunRunKeyword_16_0; }
 		
-		//rtc
+		//rtc  = 'rtc'
 		public EnumLiteralDeclaration getRtcEnumLiteralDeclaration_17() { return cRtcEnumLiteralDeclaration_17; }
 		
 		//'rtc'
 		public Keyword getRtcRtcKeyword_17_0() { return cRtcRtcKeyword_17_0; }
 	}
-	public class OPERATOR_METAElements extends AbstractEnumRuleElementFinder {
+	public class OPERATOR_METAElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.OPERATOR_META");
 		private final Alternatives cAlternatives = (Alternatives)rule.eContents().get(1);
 		private final EnumLiteralDeclaration cInformalEnumLiteralDeclaration_0 = (EnumLiteralDeclaration)cAlternatives.eContents().get(0);
@@ -22970,68 +27167,76 @@
 		private final EnumLiteralDeclaration cRunEnumLiteralDeclaration_6 = (EnumLiteralDeclaration)cAlternatives.eContents().get(6);
 		private final Keyword cRunRunKeyword_6_0 = (Keyword)cRunEnumLiteralDeclaration_6.eContents().get(0);
 		
-		//enum OPERATOR_META returns fmlStmnt::MetaStatementKind:
-		//	informal='@informal'
-		//	| trace='@trace'
-		//	| debug='@debug'
-		//	| comment='@comment'
-		//	| quote='@quote'
-		//	| eval='@eval'
-		//	| run='@run';
+		//enum OPERATOR_META returns fmlStmnt::MetaStatementKind
+		//    : informal = '@informal'
+		//    | trace    = '@trace'
+		//    | debug    = '@debug'
+		//    | comment  = '@comment'
+		//    | quote    = '@quote'
+		//    | eval     = '@eval'
+		//    | run      = '@run'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
-		//informal='@informal' | trace='@trace' | debug='@debug' | comment='@comment' | quote='@quote' | eval='@eval' | run='@run'
+		//informal = '@informal'
+		//   | trace    = '@trace'
+		//   | debug    = '@debug'
+		//   | comment  = '@comment'
+		//   | quote    = '@quote'
+		//   | eval     = '@eval'
+		//   | run      = '@run'
 		public Alternatives getAlternatives() { return cAlternatives; }
 		
-		//informal='@informal'
+		//informal = '@informal'
 		public EnumLiteralDeclaration getInformalEnumLiteralDeclaration_0() { return cInformalEnumLiteralDeclaration_0; }
 		
 		//'@informal'
 		public Keyword getInformalInformalKeyword_0_0() { return cInformalInformalKeyword_0_0; }
 		
-		//trace='@trace'
+		//trace    = '@trace'
 		public EnumLiteralDeclaration getTraceEnumLiteralDeclaration_1() { return cTraceEnumLiteralDeclaration_1; }
 		
 		//'@trace'
 		public Keyword getTraceTraceKeyword_1_0() { return cTraceTraceKeyword_1_0; }
 		
-		//debug='@debug'
+		//debug    = '@debug'
 		public EnumLiteralDeclaration getDebugEnumLiteralDeclaration_2() { return cDebugEnumLiteralDeclaration_2; }
 		
 		//'@debug'
 		public Keyword getDebugDebugKeyword_2_0() { return cDebugDebugKeyword_2_0; }
 		
-		//comment='@comment'
+		//comment  = '@comment'
 		public EnumLiteralDeclaration getCommentEnumLiteralDeclaration_3() { return cCommentEnumLiteralDeclaration_3; }
 		
 		//'@comment'
 		public Keyword getCommentCommentKeyword_3_0() { return cCommentCommentKeyword_3_0; }
 		
-		//quote='@quote'
+		//quote    = '@quote'
 		public EnumLiteralDeclaration getQuoteEnumLiteralDeclaration_4() { return cQuoteEnumLiteralDeclaration_4; }
 		
 		//'@quote'
 		public Keyword getQuoteQuoteKeyword_4_0() { return cQuoteQuoteKeyword_4_0; }
 		
-		//eval='@eval'
+		//eval     = '@eval'
 		public EnumLiteralDeclaration getEvalEnumLiteralDeclaration_5() { return cEvalEnumLiteralDeclaration_5; }
 		
 		//'@eval'
 		public Keyword getEvalEvalKeyword_5_0() { return cEvalEvalKeyword_5_0; }
 		
-		//run='@run'
+		//run      = '@run'
 		public EnumLiteralDeclaration getRunEnumLiteralDeclaration_6() { return cRunEnumLiteralDeclaration_6; }
 		
 		//'@run'
 		public Keyword getRunRunKeyword_6_0() { return cRunRunKeyword_6_0; }
 	}
-	public class AnyPrimitiveInstanceKindElements extends AbstractEnumRuleElementFinder {
+	public class AnyPrimitiveInstanceKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.AnyPrimitiveInstanceKind");
 		private final EnumLiteralDeclaration cAnyEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cAnyNullKeyword_0 = (Keyword)cAnyEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum AnyPrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind:
-		//	any='$null';
+		//enum AnyPrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind
+		//    : any='$null'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//any='$null'
@@ -23040,13 +27245,59 @@
 		//'$null'
 		public Keyword getAnyNullKeyword_0() { return cAnyNullKeyword_0; }
 	}
-	public class ValueDotFieldExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueDotFieldExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueDotFieldExpressionKind");
 		private final EnumLiteralDeclaration cFieldEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cFieldFullStopKeyword_0 = (Keyword)cFieldEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueDotFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	field='.';
+		////ValueAnyElementExpression returns fmlExpr::ValueElementSpecification
+		////    : element=[fmlCommon::NamedElement|ESIdentifier]
+		////
+		////        // '.' element
+		////        ( { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueDotFieldExpressionKind
+		////            element=[fmlCommon::NamedElement|ESIdentifier]
+		////
+		////        // '[' index ',' ... ',' index ']'
+		////        | { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueIndexExpressionKind
+		////            arg=PositionalTupleExpressionList
+		////            ']'
+		////
+		////        // '(' parameter ',' ... ',' parameter ')'
+		////        | { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueParameterExpressionKind
+		////            arg=MixTupleExpressionList
+		////            ')'
+		////        )*
+		////
+		////        // '->' element
+		////        ( { fmlExpr::ValueElementSpecification.parent=current }
+		////            kind=ValueArrowFieldExpressionKind
+		////            element=[fmlCommon::NamedElement|ESIdentifier]
+		////
+		////            // '.' element
+		////            ( { fmlExpr::ValueElementSpecification.parent=current }
+		////                kind=ValueDotFieldExpressionKind
+		////                element=[fmlCommon::NamedElement|ESIdentifier]
+		////
+		////            // '[' index ',' ... ',' index ']'
+		////            | { fmlExpr::ValueElementSpecification.parent=current }
+		////                kind=ValueIndexExpressionKind
+		////                arg=PositionalTupleExpressionList
+		////                ']'
+		////
+		////            // '(' parameter ',' ... ',' parameter ')'
+		////            | { fmlExpr::ValueElementSpecification.parent=current }
+		////                kind=ValueParameterExpressionKind
+		////                arg=MixTupleExpressionList
+		////                ')'
+		////            )*
+		////        )?
+		////    ;
+		//enum ValueDotFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : field='.'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//field='.'
@@ -23055,13 +27306,14 @@
 		//'.'
 		public Keyword getFieldFullStopKeyword_0() { return cFieldFullStopKeyword_0; }
 	}
-	public class ValueColonFieldExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueColonFieldExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueColonFieldExpressionKind");
 		private final EnumLiteralDeclaration cFieldEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cFieldColonKeyword_0 = (Keyword)cFieldEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	field=':';
+		//enum ValueColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : field=':'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//field=':'
@@ -23070,13 +27322,14 @@
 		//':'
 		public Keyword getFieldColonKeyword_0() { return cFieldColonKeyword_0; }
 	}
-	public class ValueDoubleColonFieldExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueDoubleColonFieldExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueDoubleColonFieldExpressionKind");
 		private final EnumLiteralDeclaration cFieldEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cFieldColonColonKeyword_0 = (Keyword)cFieldEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueDoubleColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	field='::';
+		//enum ValueDoubleColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : field='::'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//field='::'
@@ -23085,13 +27338,14 @@
 		//'::'
 		public Keyword getFieldColonColonKeyword_0() { return cFieldColonColonKeyword_0; }
 	}
-	public class ValueArrowFieldExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueArrowFieldExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueArrowFieldExpressionKind");
 		private final EnumLiteralDeclaration cFieldEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cFieldHyphenMinusGreaterThanSignKeyword_0 = (Keyword)cFieldEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueArrowFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	field='->';
+		//enum ValueArrowFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : field='->'
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//field='->'
@@ -23100,13 +27354,14 @@
 		//'->'
 		public Keyword getFieldHyphenMinusGreaterThanSignKeyword_0() { return cFieldHyphenMinusGreaterThanSignKeyword_0; }
 	}
-	public class ValueIndexExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueIndexExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueIndexExpressionKind");
 		private final EnumLiteralDeclaration cIndexEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cIndexLeftSquareBracketKeyword_0 = (Keyword)cIndexEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueIndexExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	index='[';
+		//enum ValueIndexExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : index='['
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//index='['
@@ -23115,13 +27370,14 @@
 		//'['
 		public Keyword getIndexLeftSquareBracketKeyword_0() { return cIndexLeftSquareBracketKeyword_0; }
 	}
-	public class ValueParameterExpressionKindElements extends AbstractEnumRuleElementFinder {
+	public class ValueParameterExpressionKindElements extends AbstractElementFinder.AbstractEnumRuleElementFinder {
 		private final EnumRule rule = (EnumRule) GrammarUtil.findRuleForName(getGrammar(), "org.eclipse.efm.formalml.xtext.FormalML.ValueParameterExpressionKind");
 		private final EnumLiteralDeclaration cParameterEnumLiteralDeclaration = (EnumLiteralDeclaration)rule.eContents().get(1);
 		private final Keyword cParameterLeftParenthesisKeyword_0 = (Keyword)cParameterEnumLiteralDeclaration.eContents().get(0);
 		
-		//enum ValueParameterExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-		//	parameter='(';
+		//enum ValueParameterExpressionKind returns fmlExpr::ValueElementSpecificationKind
+		//    : parameter='('
+		//    ;
 		public EnumRule getRule() { return rule; }
 		
 		//parameter='('
@@ -23797,9 +28053,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Main Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Xlia fmlSpec::XliaModel:
-	//	prolog=XliaPrologObject
-	//	system=XliaSystem;
+	//Xlia returns fmlSpec::XliaModel
+	//    : prolog = XliaPrologObject
+	//          system = XliaSystem
+	//    ;
 	public XliaElements getXliaAccess() {
 		return pXlia;
 	}
@@ -23808,11 +28065,14 @@
 		return getXliaAccess().getRule();
 	}
 	
-	//XliaPrologObject fmlSpec::XliaObject:
-	//	name=('@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity')
-	//	'<'
-	//	elements+=XliaPrologAttribute '>:'
-	//	elements+=XliaOptionObject?;
+	//XliaPrologObject returns fmlSpec::XliaObject
+	//    : name=( '@FormalML' | '@xfml' | '@fml' | '@xlia' | '@xfsp' | '@diversity' )
+	//        '<'
+	//        ( elements+=XliaPrologAttribute )
+	////        ( ',' elements+=XliaPrologAttribute )+
+	//        '>:'
+	//        ( elements += XliaOptionObject )?
+	//    ;
 	public XliaPrologObjectElements getXliaPrologObjectAccess() {
 		return pXliaPrologObject;
 	}
@@ -23821,9 +28081,12 @@
 		return getXliaPrologObjectAccess().getRule();
 	}
 	
-	//XliaPrologAttribute fmlSpec::XliaAttribute:
-	//	name=('system' | 'package') (',' 'version:'?
-	//	value=(LiteralFloatExpression | LiteralStringExpression))?;
+	//XliaPrologAttribute returns fmlSpec::XliaAttribute
+	//    : name=( 'system' | 'package' )
+	//        ( ',' ( 'version:' )?
+	//            value=( LiteralFloatExpression | LiteralStringExpression )
+	//        )?
+	//    ;
 	public XliaPrologAttributeElements getXliaPrologAttributeAccess() {
 		return pXliaPrologAttribute;
 	}
@@ -23833,18 +28096,19 @@
 	}
 	
 	////XliaPrologAttribute returns XliaAttribute
-	////	: (name = 'model')?    value=XliaModelKind
-	////	| (name = 'version')?
-	////		value=( LiteralFloatExpression | LiteralStringExpression )
-	////	;
+	////    : (name = 'model')?    value=XliaModelKind
+	////    | (name = 'version')?
+	////        value=( LiteralFloatExpression | LiteralStringExpression )
+	////    ;
 	////
 	////XliaModelKind returns fmlExpr::LiteralStringExpression
-	////	: value=( 'system' | 'package' )
-	////	;
-	//XliaOptionObject fmlSpec::XliaObject:
-	//	name='@option' '{'
-	//	elements+=XliaNamedElement*
-	//	'}';
+	////    : value=( 'system' | 'package' )
+	////    ;
+	//XliaOptionObject returns fmlSpec::XliaObject
+	//    : name='@option'  '{'
+	//        ( elements+=XliaNamedElement )*
+	//      '}'
+	//    ;
 	public XliaOptionObjectElements getXliaOptionObjectAccess() {
 		return pXliaOptionObject;
 	}
@@ -23853,10 +28117,11 @@
 		return getXliaOptionObjectAccess().getRule();
 	}
 	
-	//XliaNamedElement fmlSpec::XliaNamedElement:
-	//	XliaObject
-	//	| XliaSection
-	//	| XliaAttribute;
+	//XliaNamedElement returns fmlSpec::XliaNamedElement
+	//    : XliaObject
+	//    | XliaSection
+	//    | XliaAttribute
+	//    ;
 	public XliaNamedElementElements getXliaNamedElementAccess() {
 		return pXliaNamedElement;
 	}
@@ -23865,10 +28130,11 @@
 		return getXliaNamedElementAccess().getRule();
 	}
 	
-	//XliaObject fmlSpec::XliaObject:
-	//	name=XLIA_ID '{'
-	//	elements+=XliaNamedElement*
-	//	'}';
+	//XliaObject returns fmlSpec::XliaObject
+	//    : name=XLIA_ID '{'
+	//        ( elements+=XliaNamedElement )*
+	//      '}'
+	//    ;
 	public XliaObjectElements getXliaObjectAccess() {
 		return pXliaObject;
 	}
@@ -23877,10 +28143,11 @@
 		return getXliaObjectAccess().getRule();
 	}
 	
-	//XliaSection fmlSpec::XliaSection:
-	//	name=XLIA_ID '['
-	//	elements+=XliaAttribute*
-	//	']';
+	//XliaSection returns fmlSpec::XliaSection
+	//    : name=XLIA_ID '['
+	//        ( elements+=XliaAttribute )*
+	//      ']'
+	//    ;
 	public XliaSectionElements getXliaSectionAccess() {
 		return pXliaSection;
 	}
@@ -23889,8 +28156,9 @@
 		return getXliaSectionAccess().getRule();
 	}
 	
-	//XliaAttribute fmlSpec::XliaAttribute:
-	//	name=XLIA_ID '=' value=Expression ';';
+	//XliaAttribute returns fmlSpec::XliaAttribute
+	//    : name=XLIA_ID '=' value=Expression ';'
+	//    ;
 	public XliaAttributeElements getXliaAttributeAccess() {
 		return pXliaAttribute;
 	}
@@ -23902,8 +28170,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Primitive Value
 	//////////////////////////////////////////////////////////////////////////////////
-	//EBoolean ecore::EBoolean:
-	//	'true' | 'false';
+	//EBoolean returns ecore::EBoolean
+	//    : 'true' | 'false'
+	//    ;
 	public EBooleanElements getEBooleanAccess() {
 		return pEBoolean;
 	}
@@ -23912,15 +28181,16 @@
 		return getEBooleanAccess().getRule();
 	}
 	
+	//// Comment @Override for Eclipse/Neon compatibility
 	//@Override
-	//terminal INT returns ecore::EInt:
-	//	'0'..'9'+;
+	//terminal INT returns ecore::EInt: ('0'..'9')+;
 	public TerminalRule getINTRule() {
 		return tINT;
 	}
 	
-	//EInt ecore::EInt:
-	//	'-'? INT;
+	//EInt returns ecore::EInt
+	//    : '-'? INT
+	//    ;
 	public EIntElements getEIntAccess() {
 		return pEInt;
 	}
@@ -23929,8 +28199,9 @@
 		return getEIntAccess().getRule();
 	}
 	
-	//EInteger ecore::ELong:
-	//	'-'? INT;
+	//EInteger returns ecore::ELong
+	//    : '-'? INT
+	//    ;
 	public EIntegerElements getEIntegerAccess() {
 		return pEInteger;
 	}
@@ -23939,9 +28210,9 @@
 		return getEIntegerAccess().getRule();
 	}
 	
-	//EFloat ecore::EFloat:
-	//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
-	//;
+	//EFloat returns ecore::EFloat
+	//    : '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+	//    ;
 	public EFloatElements getEFloatAccess() {
 		return pEFloat;
 	}
@@ -23950,9 +28221,9 @@
 		return getEFloatAccess().getRule();
 	}
 	
-	//EDouble ecore::EDouble:
-	//	'-'? INT? '.' INT //(('E'|'e') '-'? INT)?
-	//;
+	//EDouble returns ecore::EDouble
+	//    : '-'? INT? '.' INT //(('E'|'e') '-'? INT)?
+	//    ;
 	public EDoubleElements getEDoubleAccess() {
 		return pEDouble;
 	}
@@ -23961,14 +28232,16 @@
 		return getEDoubleAccess().getRule();
 	}
 	
-	//terminal CHARACTER:
-	//	"'" . "'";
+	//terminal CHARACTER
+	//    : "'" . "'"
+	//    ;
 	public TerminalRule getCHARACTERRule() {
 		return tCHARACTER;
 	}
 	
-	//ECharacter ecore::EChar:
-	//	CHARACTER;
+	//ECharacter returns ecore::EChar
+	//    : CHARACTER
+	//    ;
 	public ECharacterElements getECharacterAccess() {
 		return pECharacter;
 	}
@@ -23977,8 +28250,9 @@
 		return getECharacterAccess().getRule();
 	}
 	
-	//EString:
-	//	STRING;
+	//EString returns ecore::EString
+	//    : STRING
+	//    ;
 	public EStringElements getEStringAccess() {
 		return pEString;
 	}
@@ -23987,14 +28261,15 @@
 		return getEStringAccess().getRule();
 	}
 	
-	//terminal OFFSET:
-	//	'$' INT? ':';
+	//terminal OFFSET
+	//    : '$' INT? ':'
+	//    ;
 	public TerminalRule getOFFSETRule() {
 		return tOFFSET;
 	}
 	
-	//EOffset:
-	//	OFFSET;
+	//EOffset returns ecore::EString
+	//    : OFFSET ;
 	public EOffsetElements getEOffsetAccess() {
 		return pEOffset;
 	}
@@ -24004,59 +28279,60 @@
 	}
 	
 	////QualifiedName returns ecore::EString
-	////	: ID ( '[' ID ']' )? '.' ID ( '[' ID ']' )? | ID
-	////	;
-	//ReservedKeyWord:
-	//	'package' | 'system' | 'machine' | 'executable'
-	//	| 'vertex' | 'pseudostate'
-	//	| 'state' | 'statemachine'
-	//	| 'macro' | 'routine'
-	//	| 'procedure' | 'transition'
-	//	| 'public' | 'private' | 'protected'
-	//	| 'static' | 'final'
-	//	| 'volatile' | 'transient'
-	//	| 'model' | 'prototype' | 'instance'
-	//	| 'timed' | 'timed#dense' | 'timed#discrete'
-	//	| 'unsafe' | 'input_enabled'
-	//	| 'port' | 'signal' | 'message'
-	//	| 'buffer' | 'channel' | 'via'
-	//	| 'var' | 'val' | 'const'
-	//	| 'input' | 'in' | 'inout'
-	//	| 'output' | 'out' | 'return'
-	//	| 'simple' | 'start' | 'final'
-	//	| 'initial' | 'terminal' | 'junction'
-	//	| 'choice' | 'fork' | 'join'
-	//	| 'dhistory' | 'shistory'
-	//	| 'route' | 'connector' | 'connect'
-	//	| 'env' | 'rdv' | 'multirdv'
-	//	| 'buffer' | 'unicast' | 'anycast'
-	//	| 'multicast' | 'broadcast'
-	//	| 'boolean' | 'bool'
-	//	| 'char' | 'string'
-	//	| 'integer' | 'int'
-	//	| 'uinteger' | 'uint'
-	//	| 'rational' | 'rat'
-	//	| 'urational' | 'urat'
-	//	| 'time' | 'clock'
-	//	| 'float' | 'double' | 'real'
-	//	| 'ufloat' | 'udouble' | 'ureal'
-	//	| 'interval' | 'enum' | 'struct' | 'union'
-	//	| 'vector' | 'rvector' | 'list'
-	//	| 'set' | 'bag' | 'multiset'
-	//	| 'fifo' | 'lifo'
-	//	| 'guard' | 'tguard'
-	//	| 'event' | 'checksat'
-	//	| 'break' | 'continue' | 'exit' | 'init'
-	//	| 'destroy' | 'stop' | 'abort' | 'restart'
-	//	| 'suspend' | 'resume' | 'wait'
-	//	| 'disable' | 'enable'
-	//	| 'schedule' | 'irun' | 'run' | 'rtc'
-	//	| 'call' | 'new' | 'ctor' | 'newfresh'
-	//	| 'this' | 'self' | 'parent' | 'super'
-	//	| 'null'
-	//	| '#model' | '#instance' | '#static' | '#dynamic'
-	//	| '#runtime' | '#static#instance' | '#dynamic#instance'
-	//	| '#prototype' | '#dynamic#prototype';
+	////    : ID ( '[' ID ']' )? '.' ID ( '[' ID ']' )? | ID
+	////    ;
+	//ReservedKeyWord
+	//    : 'package'   | 'system'      | 'machine'  | 'executable'
+	//    | 'vertex'    | 'pseudostate'
+	//    | 'state'     | 'statemachine'
+	//    | 'macro'     | 'routine'
+	//    | 'procedure' | 'transition'
+	//    | 'public'    | 'private'     | 'protected'
+	//    | 'static'    | 'final'
+	//    | 'volatile'  | 'transient'
+	//    | 'model'     | 'prototype'   | 'instance'
+	//    | 'timed'     | 'timed#dense' | 'timed#discrete'
+	//    | 'unsafe'    | 'input_enabled'
+	//    | 'port'      | 'signal'      | 'message'
+	//    | 'buffer'    | 'channel'     | 'via'
+	//    | 'var'       | 'val'         | 'const'
+	//    | 'input'     | 'in'          | 'inout'
+	//    | 'output'    | 'out'         | 'return'
+	//    | 'simple'    | 'start'       | 'final'
+	//    | 'initial'   | 'terminal'    | 'junction'
+	//    | 'choice'    | 'fork'        | 'join'
+	//    | 'dhistory'  | 'shistory'
+	//    | 'route'     | 'connector'   | 'connect'
+	//    | 'env'       | 'rdv'         | 'multirdv'
+	//    | 'buffer'    | 'unicast'     | 'anycast'
+	//    | 'multicast' | 'broadcast'
+	//    | 'boolean'   | 'bool'
+	//    | 'char'      | 'string'
+	//    | 'integer'   | 'int'
+	//    | 'uinteger'  | 'uint'
+	//    | 'rational'  | 'rat'
+	//    | 'urational' | 'urat'
+	//    | 'time'      | 'clock'
+	//    | 'float'     | 'double'      | 'real'
+	//    | 'ufloat'    | 'udouble'     | 'ureal'
+	//    | 'interval'  | 'enum'        | 'struct' | 'union'
+	//    | 'vector'    | 'rvector'     | 'list'
+	//    | 'set'       | 'bag'         | 'multiset'
+	//    | 'fifo'      | 'lifo'
+	//    | 'guard'     | 'tguard'
+	//    | 'event'     | 'checksat'
+	//    | 'break'     | 'continue'    | 'exit'   | 'init'
+	//    | 'destroy'   | 'stop'        | 'abort'  | 'restart'
+	//    | 'suspend'   | 'resume'      | 'wait'
+	//    | 'disable'   | 'enable'
+	//    | 'schedule'  | 'irun'        | 'run'    | 'rtc'
+	//    | 'call'      | 'new'         | 'ctor'   | 'newfresh'
+	//    | 'this'      | 'self'        | 'parent' | 'super'
+	//    | 'null'
+	//    | '#model'    | '#instance'        | '#static'   |  '#dynamic'
+	//    | '#runtime'  | '#static#instance' | '#dynamic#instance'
+	//    | '#prototype'| '#dynamic#prototype'
+	//    ;
 	public ReservedKeyWordElements getReservedKeyWordAccess() {
 		return pReservedKeyWord;
 	}
@@ -24065,14 +28341,16 @@
 		return getReservedKeyWordAccess().getRule();
 	}
 	
-	//terminal XLIA_ID:
-	//	('a'..'z' | 'A'..'Z' | '_' | '#') ('a'..'z' | 'A'..'Z' | '0'..'9' | '_' | '#')*;
+	//terminal XLIA_ID
+	//    : ('a'..'z'|'A'..'Z'|'_'|'#') ('a'..'z'|'A'..'Z'|'0'..'9'|'_'|'#')*
+	//    ;
 	public TerminalRule getXLIA_IDRule() {
 		return tXLIA_ID;
 	}
 	
-	//ESIdentifier:
-	//	XLIA_ID;
+	//ESIdentifier returns ecore::EString
+	//    : XLIA_ID
+	//    ;
 	public ESIdentifierElements getESIdentifierAccess() {
 		return pESIdentifier;
 	}
@@ -24081,8 +28359,9 @@
 		return getESIdentifierAccess().getRule();
 	}
 	
-	//ESUfid:
-	//	('spec::' | '::')? XLIA_ID (('.' | ':') XLIA_ID)*;
+	//ESUfid returns ecore::EString
+	//    : ( 'spec::' | '::' )?  XLIA_ID  ( ( '.' | ':' ) XLIA_ID )*
+	//    ;
 	public ESUfidElements getESUfidAccess() {
 		return pESUfid;
 	}
@@ -24091,8 +28370,9 @@
 		return getESUfidAccess().getRule();
 	}
 	
-	//UnrestrictedName:
-	//	STRING;
+	//UnrestrictedName returns ecore::EString
+	//    : STRING
+	//    ;
 	public UnrestrictedNameElements getUnrestrictedNameAccess() {
 		return pUnrestrictedName;
 	}
@@ -24101,8 +28381,11 @@
 		return getUnrestrictedNameAccess().getRule();
 	}
 	
-	//QualifiedName fmlCommon::QualifiedName:
-	//	UnqualifiedName ('::' nameBinding+=NameBinding)* ('.' nameBinding+=NameBinding)*;
+	//QualifiedName returns fmlCommon::QualifiedName
+	//    : UnqualifiedName
+	//        ( '::' nameBinding += NameBinding )*
+	//        ( '.' nameBinding += NameBinding )*
+	//    ;
 	public QualifiedNameElements getQualifiedNameAccess() {
 		return pQualifiedName;
 	}
@@ -24111,9 +28394,13 @@
 		return getQualifiedNameAccess().getRule();
 	}
 	
-	//PotentiallyAmbiguousQualifiedName fmlCommon::QualifiedName:
-	//	UnqualifiedName ('::' nameBinding+=NameBinding)* (isAmbiguous?='.' nameBinding+=NameBinding ('.'
-	//	nameBinding+=NameBinding)*)?;
+	//PotentiallyAmbiguousQualifiedName returns fmlCommon::QualifiedName
+	//    : UnqualifiedName
+	//        ( '::' nameBinding += NameBinding )*
+	//        ( isAmbiguous ?= '.' nameBinding += NameBinding
+	//            ( '.' nameBinding += NameBinding )*
+	//        )?
+	//    ;
 	public PotentiallyAmbiguousQualifiedNameElements getPotentiallyAmbiguousQualifiedNameAccess() {
 		return pPotentiallyAmbiguousQualifiedName;
 	}
@@ -24122,8 +28409,9 @@
 		return getPotentiallyAmbiguousQualifiedNameAccess().getRule();
 	}
 	
-	//ColonQualifiedName fmlCommon::QualifiedName:
-	//	UnqualifiedName ('::' nameBinding+=NameBinding)+;
+	//ColonQualifiedName returns fmlCommon::QualifiedName
+	//    : UnqualifiedName ( '::' nameBinding += NameBinding )+
+	//    ;
 	public ColonQualifiedNameElements getColonQualifiedNameAccess() {
 		return pColonQualifiedName;
 	}
@@ -24132,8 +28420,9 @@
 		return getColonQualifiedNameAccess().getRule();
 	}
 	
-	//DotQualifiedName fmlCommon::QualifiedName:
-	//	UnqualifiedName ('.' nameBinding+=NameBinding)+;
+	//DotQualifiedName returns fmlCommon::QualifiedName
+	//    : UnqualifiedName ( '.' nameBinding += NameBinding )+
+	//    ;
 	public DotQualifiedNameElements getDotQualifiedNameAccess() {
 		return pDotQualifiedName;
 	}
@@ -24142,8 +28431,9 @@
 		return getDotQualifiedNameAccess().getRule();
 	}
 	
-	//UnqualifiedName fmlCommon::QualifiedName:
-	//	nameBinding+=NameBinding;
+	//UnqualifiedName returns fmlCommon::QualifiedName
+	//    : nameBinding += NameBinding
+	//    ;
 	public UnqualifiedNameElements getUnqualifiedNameAccess() {
 		return pUnqualifiedName;
 	}
@@ -24152,8 +28442,9 @@
 		return getUnqualifiedNameAccess().getRule();
 	}
 	
-	//NameBinding:
-	//	XLIA_ID;
+	//NameBinding
+	//    : XLIA_ID
+	//    ;
 	public NameBindingElements getNameBindingAccess() {
 		return pNameBinding;
 	}
@@ -24162,8 +28453,12 @@
 		return getNameBindingAccess().getRule();
 	}
 	
-	//enum VisibilityKind returns fmlCommon::VisibilityKind:
-	//	public | private | protected | package;
+	//enum VisibilityKind returns fmlCommon::VisibilityKind
+	//    : public   ='public'
+	//    | private  ='private'
+	//    | protected='protected'
+	//    | package  ='package'
+	//    ;
 	public VisibilityKindElements getVisibilityKindAccess() {
 		return eVisibilityKind;
 	}
@@ -24172,26 +28467,27 @@
 		return getVisibilityKindAccess().getRule();
 	}
 	
-	//ModelOfComputationKing:
-	//	'and'
-	//	| 'or'
-	//	| 'start'
-	//	| '#STF'
-	//	| '#STS'
-	//	| '#DF'
-	//	| '#alt'
-	//	| '#opt'
-	//	| '#loop'
-	//	| '#break'
-	//	| '#par'
-	//	| '#strict'
-	//	| '#weak'
-	//	| '#seq'
-	//	| '#critical'
-	//	| '#ignore'
-	//	| '#consider'
-	//	| '#assert'
-	//	| '#neg';
+	//ModelOfComputationKing
+	//    : 'and'
+	//    | 'or'
+	//    | 'start'
+	//    | '#STF'
+	//    | '#STS'
+	//    | '#DF'
+	//    | '#alt'
+	//    | '#opt'
+	//    | '#loop'
+	//    | '#break'
+	//    | '#par'
+	//    | '#strict'
+	//    | '#weak'
+	//    | '#seq'
+	//    | '#critical'
+	//    | '#ignore'
+	//    | '#consider'
+	//    | '#assert'
+	//    | '#neg'
+	//    ;
 	public ModelOfComputationKingElements getModelOfComputationKingAccess() {
 		return pModelOfComputationKing;
 	}
@@ -24200,9 +28496,15 @@
 		return getModelOfComputationKingAccess().getRule();
 	}
 	
-	//enum DesignKind returns fmlInfra::DesignKind:
-	//	model | prototype | model='#model'
-	//	| prototype='#prototype';
+	//////////////////////////////////////////////////////////////////////////////////
+	//// Machine PropertyDefinition Rules
+	//////////////////////////////////////////////////////////////////////////////////
+	//enum DesignKind returns fmlInfra::DesignKind
+	//    : model     = 'model'
+	//    | prototype = 'prototype'
+	//    | model     = '#model'
+	//    | prototype = '#prototype'
+	//    ;
 	public DesignKindElements getDesignKindAccess() {
 		return eDesignKind;
 	}
@@ -24211,16 +28513,17 @@
 		return getDesignKindAccess().getRule();
 	}
 	
-	//DesignDebugTrace:
-	//	'#model'
-	//	| '#instance'
-	//	| '#static'
-	//	| '#dynamic'
-	//	| '#runtime'
-	//	| '#static#instance'
-	//	| '#dynamic#instance'
-	//	| '#prototype'
-	//	| '#dynamic#prototype';
+	//DesignDebugTrace
+	//    : '#model'
+	//    | '#instance'
+	//    | '#static'
+	//    | '#dynamic'
+	//    | '#runtime'
+	//    | '#static#instance'
+	//    | '#dynamic#instance'
+	//    | '#prototype'
+	//    | '#dynamic#prototype'
+	//    ;
 	public DesignDebugTraceElements getDesignDebugTraceAccess() {
 		return pDesignDebugTrace;
 	}
@@ -24229,8 +28532,9 @@
 		return getDesignDebugTraceAccess().getRule();
 	}
 	
-	//enum DesignInstanceKind returns fmlInfra::DesignKind:
-	//	instance;
+	//enum DesignInstanceKind returns fmlInfra::DesignKind
+	//    : instance  = 'instance'
+	//    ;
 	public DesignInstanceKindElements getDesignInstanceKindAccess() {
 		return eDesignInstanceKind;
 	}
@@ -24239,65 +28543,116 @@
 		return getDesignInstanceKindAccess().getRule();
 	}
 	
-	//XliaSystem fmlInfra::XliaSystem:
-	//	(visibility=VisibilityKind?
-	//	& timed?='timed'?
-	//	& dense_timed?='timed#dense'?
-	//	& discrete_timed?='timed#discrete'?
-	//	& input_enabled?='input_enabled'?
-	//	& unsafe?='unsafe'?)
-	//	'system' ('<' 'moc:'? ('and' | 'or') '>')?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'{' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	('@property:' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	| '@public:' (port+=PortPublic
-	//	| signal+=SignalPublic
-	//	| buffer+=BufferPublic
-	//	| channel+=ChannelPublic
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPublic
-	//	| variable+=VariablePublic)*
-	//	| '@protected:' (port+=PortProtected
-	//	| signal+=SignalProtected
-	//	| buffer+=BufferProtected
-	//	| channel+=ChannelProtected
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionProtected
-	//	| variable+=VariableProtected)*
-	//	| '@private:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-	//	| '@procedure:' procedure+=Procedure+)*
-	//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-	//	| instance+=InstanceMachine)+
-	//	| '@model:' machine+=AnyMachineBlock*
-	//	| '@prototype:' machine+=AnyMachineBlock*
-	//	| '@instance:' instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+
-	//	| '@statemachine:' behavior+=Statemachine+)*
-	//	main=MoeBehavior
-	//	//		// optional unnamed section for property full declaration / definition
-	//	//		propertyPart=PropertyPart
-	//	//
-	//	//		compositePart=CompositePart
-	//	//
-	//	//		behaviorPart=BehaviorPart
-	//	'}';
+	//XliaSystem returns fmlInfra::XliaSystem
+	//    : ( ( visibility=VisibilityKind )?
+	//        & ( timed?='timed' )?
+	//        & ( dense_timed?='timed#dense' )?
+	//        & ( discrete_timed?='timed#discrete' )?
+	//        & ( input_enabled ?= 'input_enabled' )?
+	//        & ( unsafe ?= 'unsafe' )?
+	//        )
+	//        'system' ('<' ( 'moc:' )? ( 'and' | 'or' ) '>')?
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        '{'
+	//        ( // optional unnamed section for property full declaration / definition
+	////            ( 'port'
+	////                ( port+=PortImpl
+	////                | '{' ( port+=PortImpl )+ '}'
+	////                )
+	////            | 'signal'
+	////                ( signal+=SignalImpl
+	////                | '{' ( signal+=SignalImpl )+ '}'
+	////                )
+	////            | 'buffer'
+	////                ( buffer+=BufferImpl
+	////                | '{' ( buffer+=BufferImpl )+ '}'
+	////                )
+	////            | channel+=Channel
+	////            | 'type'
+	////                ( typedef+=TypeDefinitionImpl
+	////                | '{' ( typedef+=TypeDefinitionImpl )+ '}'
+	////                )
+	////            | 'var'
+	////                ( property+=VariableImpl
+	////                | '{' ( variable+=VariableImpl )+ '}'
+	////                )
+	////            | ( 'val' | 'const' )
+	////                ( variable+=VariableImpl
+	////                | '{' ( variable+=VariableImpl )+ '}'
+	////                )
+	////            | variable+=Variable
+	////            )*
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        )
+	//        ( '@property:'
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        | '@public:'
+	//            ( port+=PortPublic
+	//            | signal+=SignalPublic
+	//            | buffer+=BufferPublic
+	//            | channel+=ChannelPublic
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPublic
+	//            | variable+=VariablePublic
+	//            )*
+	//        | '@protected:'
+	//            ( port+=PortProtected
+	//            | signal+=SignalProtected
+	//            | buffer+=BufferProtected
+	//            | channel+=ChannelProtected
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionProtected
+	//            | variable+=VariableProtected
+	//            )*
+	//        | '@private:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )*
+	//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+	//          | '@procedure:' ( procedure+=Procedure )+
+	//          )*
+	//        | ( routine+=Routine | procedure+=Procedure )+
+	//        )
+	//        ( ( '@composite:' | '@machine:' )
+	//            ( machine +=AnyMachineBlock
+	//            | instance+=InstanceMachine
+	//            )+
+	//        | '@model:'     ( machine +=AnyMachineBlock )*
+	//        | '@prototype:' ( machine +=AnyMachineBlock )*
+	//        | '@instance:'  ( instance+=InstanceMachine )*
+	//        )*
+	//        ( '@behavior:'     ( behavior+=Behavior )+
+	//        | '@statemachine:' ( behavior+=Statemachine )+
+	//        )*
+	//        main=MoeBehavior
+	////        // optional unnamed section for property full declaration / definition
+	////        propertyPart=PropertyPart
+	////
+	////        compositePart=CompositePart
+	////
+	////        behaviorPart=BehaviorPart
+	//        '}'
+	//    ;
 	public XliaSystemElements getXliaSystemAccess() {
 		return pXliaSystem;
 	}
@@ -24306,9 +28661,10 @@
 		return getXliaSystemAccess().getRule();
 	}
 	
-	//AnyMachineBlock fmlInfra::Machine:
-	//	MachineBlock
-	//	| Statemachine;
+	//AnyMachineBlock returns fmlInfra::Machine
+	//    : MachineBlock
+	//    | Statemachine
+	//    ;
 	public AnyMachineBlockElements getAnyMachineBlockAccess() {
 		return pAnyMachineBlock;
 	}
@@ -24317,12 +28673,15 @@
 		return getAnyMachineBlockAccess().getRule();
 	}
 	
-	//InstanceMachine fmlInfra::InstanceMachine:
-	//	'instance' ('machine' | 'statemachine')?
-	//	'<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' (slot+=SlotParameter (',' slot+=SlotParameter)*)? ')')? ('{'
-	//	(slot+=SlotProperty ';')* '}'
-	//	| ';');
+	//InstanceMachine returns fmlInfra::InstanceMachine
+	//    : 'instance' ( 'machine' | 'statemachine' ) ?
+	//        '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+	//        ( '{'  ( slot+=SlotProperty ';' )*  '}'
+	//        | ';'
+	//        )
+	//    ;
 	public InstanceMachineElements getInstanceMachineAccess() {
 		return pInstanceMachine;
 	}
@@ -24331,8 +28690,11 @@
 		return getInstanceMachineAccess().getRule();
 	}
 	
-	//SlotParameter fmlInfra::SlotProperty:
-	//	xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] (':' | '=' | ':=' | '::=') value=Expression;
+	//SlotParameter returns fmlInfra::SlotProperty
+	//    : ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+	////      | umlProperty=[uml::Property|ESIdentifier]
+	//      )  ( ':' | '='  | ':=' | '::=' )  value=Expression
+	//    ;
 	public SlotParameterElements getSlotParameterAccess() {
 		return pSlotParameter;
 	}
@@ -24341,8 +28703,11 @@
 		return getSlotParameterAccess().getRule();
 	}
 	
-	//SlotProperty fmlInfra::SlotProperty:
-	//	xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier] ('=' | ':' | ':=' | '::=') value=Expression;
+	//SlotProperty returns fmlInfra::SlotProperty
+	//    : ( xliaProperty=[fmlInfra::PropertyDefinition|ESIdentifier]
+	////      | umlProperty=[uml::Property|ESIdentifier]
+	//      ) ( '='  | ':' | ':=' | '::=' )  value=Expression
+	//    ;
 	public SlotPropertyElements getSlotPropertyAccess() {
 		return pSlotProperty;
 	}
@@ -24351,66 +28716,94 @@
 		return getSlotPropertyAccess().getRule();
 	}
 	
-	//MachineBlock fmlInfra::Machine:
-	//	(visibility=VisibilityKind?
-	//	& timed?='timed'?
-	//	& dense_timed?='timed#dense'?
-	//	& discrete_timed?='timed#discrete'?
-	//	& input_enabled?='input_enabled'?
-	//	& lifeline?='lifeline'?
-	//	& design=DesignKind?) ('machine' | 'executable') ('<' ('moc:'? ModelOfComputationKing)? ('instance:' '[' ('+' | '*'
-	//	| 'init:' EInteger 'max:' EInteger) ']')? '>')?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'{' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	('@property:' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	| '@public:' (port+=PortPublic
-	//	| signal+=SignalPublic
-	//	| buffer+=BufferPublic
-	//	| channel+=ChannelPublic
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPublic
-	//	| variable+=VariablePublic)*
-	//	| '@protected:' (port+=PortProtected
-	//	| signal+=SignalProtected
-	//	| buffer+=BufferProtected
-	//	| channel+=ChannelProtected
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionProtected
-	//	| variable+=VariableProtected)*
-	//	| '@private:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-	//	| '@procedure:' procedure+=Procedure+)*
-	//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-	//	| instance+=InstanceMachine)+
-	//	| '@model:' machine+=AnyMachineBlock*
-	//	| '@prototype:' machine+=AnyMachineBlock*
-	//	| '@instance:' instance+=InstanceMachine*)* ('@behavior:' behavior+=Behavior+
-	//	| '@statemachine:' behavior+=Statemachine+)*
-	//	main=MoeBehavior
-	//	//		// optional unnamed section for property full declaration / definition
-	//	//		propertyPart=PropertyPart
-	//	//
-	//	//		compositePart=CompositePart
-	//	//
-	//	//		behaviorPart=BehaviorPart
-	//	'}';
+	//MachineBlock returns fmlInfra::Machine
+	//    : ( ( visibility=VisibilityKind )?
+	//        & ( timed?='timed' )?
+	//        & ( dense_timed?='timed#dense' )?
+	//        & ( discrete_timed?='timed#discrete' )?
+	//        & ( input_enabled ?= 'input_enabled' )?
+	//        & ( lifeline?='lifeline' )?
+	//        & ( design=DesignKind )?
+	//        )
+	//        ( 'machine' | 'executable' )
+	//        ( '<' ( ( 'moc:' )?  ModelOfComputationKing )?
+	//            ( 'instance:' '[' ( '+' | '*'
+	//                | ( 'init:' EInteger 'max:' EInteger ) ) ']' )? '>'
+	//        )?
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        '{'
+	//        ( // optional unnamed section for property full declaration / definition
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        )
+	//        ( '@property:'
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        | '@public:'
+	//            ( port+=PortPublic
+	//            | signal+=SignalPublic
+	//            | buffer+=BufferPublic
+	//            | channel+=ChannelPublic
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPublic
+	//            | variable+=VariablePublic
+	//            )*
+	//        | '@protected:'
+	//            ( port+=PortProtected
+	//            | signal+=SignalProtected
+	//            | buffer+=BufferProtected
+	//            | channel+=ChannelProtected
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionProtected
+	//            | variable+=VariableProtected
+	//            )*
+	//        | '@private:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )*
+	//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+	//          | '@procedure:' ( procedure+=Procedure )+
+	//          )*
+	//        | ( routine+=Routine | procedure+=Procedure )+
+	//        )
+	//        ( ( '@composite:' | '@machine:' )
+	//            ( machine +=AnyMachineBlock
+	//            | instance+=InstanceMachine
+	//            )+
+	//        | '@model:'     ( machine +=AnyMachineBlock )*
+	//        | '@prototype:' ( machine +=AnyMachineBlock )*
+	//        | '@instance:'  ( instance+=InstanceMachine )*
+	//        )*
+	//        ( '@behavior:'     ( behavior+=Behavior )+
+	//        | '@statemachine:' ( behavior+=Statemachine )+
+	//        )*
+	//        main=MoeBehavior
+	////        // optional unnamed section for property full declaration / definition
+	////        propertyPart=PropertyPart
+	////
+	////        compositePart=CompositePart
+	////
+	////        behaviorPart=BehaviorPart
+	//        '}'
+	//    ;
 	public MachineBlockElements getMachineBlockAccess() {
 		return pMachineBlock;
 	}
@@ -24419,53 +28812,83 @@
 		return getMachineBlockAccess().getRule();
 	}
 	
-	//PropertyPart fmlInfra::PropertyPart:
-	//	{fmlInfra::PropertyPart} ('@parameter:' ('input' (parameter+=ParameterInput
-	//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-	//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-	//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-	//	| '{' parameter+=ParameterReturn+ '}'))*
-	//	| (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*) ('@input:'
-	//	parameter+=ParameterInput*
-	//	| '@inout:'
-	//	parameter+=ParameterInout*
-	//	| '@output:'
-	//	parameter+=ParameterOutput*
-	//	| '@return:'
-	//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	| '@public:' (port+=PortPublic
-	//	| signal+=SignalPublic
-	//	| buffer+=BufferPublic
-	//	| channel+=ChannelPublic
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPublic
-	//	| variable+=VariablePublic)*
-	//	| '@protected:' (port+=PortProtected
-	//	| signal+=SignalProtected
-	//	| buffer+=BufferProtected
-	//	| channel+=ChannelProtected
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionProtected
-	//	| variable+=VariableProtected)*
-	//	| '@private:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)*;
+	//PropertyPart returns fmlInfra::PropertyPart
+	//    : {fmlInfra::PropertyPart}
+	//        ( '@parameter:'
+	//            ( 'input'
+	//                ( parameter+=ParameterInput
+	//                | '{' ( parameter+=ParameterInput )+ '}'
+	//                )
+	//            | 'inout'
+	//                ( parameter+=ParameterInout
+	//                | '{' ( parameter+=ParameterInout )+ '}'
+	//                )
+	//            | 'output'
+	//                ( parameter+=ParameterOutput
+	//                | '{' ( parameter+=ParameterOutput )+ '}'
+	//                )
+	//            | 'return'
+	//                ( parameter+=ParameterReturn
+	//                | '{' ( parameter+=ParameterReturn )+ '}'
+	//                )
+	//            )*
+	//        | // optional unnamed section for property full declaration / definition
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        )
+	//        ( '@input:'
+	//            ( parameter+=ParameterInput  )*
+	//        | '@inout:'
+	//            ( parameter+=ParameterInout  )*
+	//        | '@output:'
+	//            ( parameter+=ParameterOutput )*
+	//        | '@return:'
+	//            ( parameter+=ParameterReturn )*
+	//        )*
+	//        ( '@property:'
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        | '@public:'
+	//            ( port+=PortPublic
+	//            | signal+=SignalPublic
+	//            | buffer+=BufferPublic
+	//            | channel+=ChannelPublic
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPublic
+	//            | variable+=VariablePublic
+	//            )*
+	//        | '@protected:'
+	//            ( port+=PortProtected
+	//            | signal+=SignalProtected
+	//            | buffer+=BufferProtected
+	//            | channel+=ChannelProtected
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionProtected
+	//            | variable+=VariableProtected
+	//            )*
+	//        | '@private:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )*
+	//    ;
 	public PropertyPartElements getPropertyPartAccess() {
 		return pPropertyPart;
 	}
@@ -24474,14 +28897,22 @@
 		return getPropertyPartAccess().getRule();
 	}
 	
-	//CompositePart fmlInfra::CompositePart:
-	//	{fmlInfra::CompositePart} ((('@routine:' | '@macro:') routine+=Routine+
-	//	| '@procedure:' procedure+=Procedure+)*
-	//	| (routine+=Routine | procedure+=Procedure)+) (('@composite:' | '@machine:') (machine+=AnyMachineBlock
-	//	| instance+=InstanceMachine)+
-	//	| '@model:' machine+=AnyMachineBlock*
-	//	| '@prototype:' machine+=AnyMachineBlock*
-	//	| '@instance:' instance+=InstanceMachine*)*;
+	//CompositePart returns fmlInfra::CompositePart
+	//    : {fmlInfra::CompositePart}
+	//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+	//          | '@procedure:' ( procedure+=Procedure )+
+	//          )*
+	//        | ( routine+=Routine | procedure+=Procedure )+
+	//        )
+	//        ( ( '@composite:' | '@machine:' )
+	//            ( machine +=AnyMachineBlock
+	//            | instance+=InstanceMachine
+	//            )+
+	//        | '@model:'     ( machine +=AnyMachineBlock )*
+	//        | '@prototype:' ( machine +=AnyMachineBlock )*
+	//        | '@instance:'  ( instance+=InstanceMachine )*
+	//        )*
+	//    ;
 	public CompositePartElements getCompositePartAccess() {
 		return pCompositePart;
 	}
@@ -24490,10 +28921,13 @@
 		return getCompositePartAccess().getRule();
 	}
 	
-	//BehaviorPart fmlInfra::BehaviorPart:
-	//	{fmlInfra::BehaviorPart} ('@behavior:' behavior+=Behavior+
-	//	| '@statemachine:' behavior+=Statemachine+)*
-	//	main=MoeBehavior;
+	//BehaviorPart returns fmlInfra::BehaviorPart
+	//    : {fmlInfra::BehaviorPart}
+	//        ( '@behavior:'     ( behavior+=Behavior )+
+	//        | '@statemachine:' ( behavior+=Statemachine )+
+	//        )*
+	//        main=MoeBehavior
+	//    ;
 	public BehaviorPartElements getBehaviorPartAccess() {
 		return pBehaviorPart;
 	}
@@ -24505,63 +28939,113 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Procedure View Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Procedure fmlInfra::Procedure:
-	//	visibility=VisibilityKind?
-	//	'procedure' ('<' 'moc:'? ('and' | 'or') '>')?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? (('(' (parameter+=FunctionalParameter (','
-	//	parameter+=FunctionalParameter)*)? ')')? ('-->' (parameter+=FormalParameter
-	//	| '(' parameter+=FormalParameter (',' parameter+=FormalParameter)* ')'))?)?
-	//	'{' ('@parameter:' ('input' (parameter+=ParameterInput
-	//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-	//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-	//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-	//	| '{' parameter+=ParameterReturn+ '}'))*
-	//	| (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*) ('@input:'
-	//	parameter+=ParameterInput*
-	//	| '@inout:'
-	//	parameter+=ParameterInout*
-	//	| '@output:'
-	//	parameter+=ParameterOutput*
-	//	| '@return:'
-	//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	| '@public:' (port+=PortPublic
-	//	| signal+=SignalPublic
-	//	| buffer+=BufferPublic
-	//	| channel+=ChannelPublic
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPublic
-	//	| variable+=VariablePublic)*
-	//	| '@protected:' (port+=PortProtected
-	//	| signal+=SignalProtected
-	//	| buffer+=BufferProtected
-	//	| channel+=ChannelProtected
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionProtected
-	//	| variable+=VariableProtected)*
-	//	| '@private:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-	//	| '@procedure:' procedure+=Procedure+)*
-	//	| (routine+=Routine | procedure+=Procedure)+) execution=ProcedureExecution?
-	//	//		& ( computation=ModelOfComputation )?
-	//	//		& ( interaction=ModelOfInteraction )?
-	//	'}';
+	//Procedure returns fmlInfra::Procedure
+	//    : ( visibility=VisibilityKind )?
+	//        'procedure' ( '<' ( 'moc:' )?  ( 'and' | 'or' ) '>' )?
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( ( '(' ( parameter+=FunctionalParameter
+	//            ( ',' parameter+=FunctionalParameter )* )? ')' )?
+	//             ( '-->'
+	//                 ( parameter+=FormalParameter
+	//                 | '('  parameter+=FormalParameter
+	//                     ( ',' parameter+=FormalParameter )* ')'
+	//                 )
+	//             )?
+	//         )?
+	//        '{'
+	//        ( '@parameter:'
+	//            ( 'input'
+	//                ( parameter+=ParameterInput
+	//                | '{' ( parameter+=ParameterInput )+ '}'
+	//                )
+	//            | 'inout'
+	//                ( parameter+=ParameterInout
+	//                | '{' ( parameter+=ParameterInout )+ '}'
+	//                )
+	//            | 'output'
+	//                ( parameter+=ParameterOutput
+	//                | '{' ( parameter+=ParameterOutput )+ '}'
+	//                )
+	//            | 'return'
+	//                ( parameter+=ParameterReturn
+	//                | '{' ( parameter+=ParameterReturn )+ '}'
+	//                )
+	//            )*
+	//        | // optional unnamed section for property full declaration / definition
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        )
+	//        ( '@input:'
+	//            ( parameter+=ParameterInput  )*
+	//        | '@inout:'
+	//            ( parameter+=ParameterInout  )*
+	//        | '@output:'
+	//            ( parameter+=ParameterOutput )*
+	//        | '@return:'
+	//            ( parameter+=ParameterReturn )*
+	//        )*
+	//        ( '@property:'
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        | '@public:'
+	//            ( port+=PortPublic
+	//            | signal+=SignalPublic
+	//            | buffer+=BufferPublic
+	//            | channel+=ChannelPublic
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPublic
+	//            | variable+=VariablePublic
+	//            )*
+	//        | '@protected:'
+	//            ( port+=PortProtected
+	//            | signal+=SignalProtected
+	//            | buffer+=BufferProtected
+	//            | channel+=ChannelProtected
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionProtected
+	//            | variable+=VariableProtected
+	//            )*
+	//        | '@private:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )*
+	//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+	//          | '@procedure:' ( procedure+=Procedure )+
+	//          )*
+	//        | ( routine+=Routine | procedure+=Procedure )+
+	//        )
+	////        // optional unnamed section for property full declaration / definition
+	////        propertyPart=PropertyPart
+	////
+	////        compositePart=CompositePart
+	////        ( region+=StatemachineRegion
+	////        | ( region+=StatemachineNamedRegion )+
+	////        | region+=StatemachineRegionLite
+	////        )?
+	//        ( ( execution=ProcedureExecution )?
+	////        & ( computation=ModelOfComputation )?
+	////        & ( interaction=ModelOfInteraction )?
+	//        )
+	//        '}'
+	//    ;
 	public ProcedureElements getProcedureAccess() {
 		return pProcedure;
 	}
@@ -24570,9 +29054,13 @@
 		return getProcedureAccess().getRule();
 	}
 	
-	//ProcedureExecution fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} '@moe:'? ((('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-	//	& ('@run' runRoutine=moeRoutine)?);
+	//ProcedureExecution returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//        ( '@moe:' )?
+	//        ( ( ( '@schedule' | '@xschedule' )  scheduleRoutine=moeRoutine )?
+	//        & ( '@run'  runRoutine=moeRoutine )?
+	//        )
+	//    ;
 	public ProcedureExecutionElements getProcedureExecutionAccess() {
 		return pProcedureExecution;
 	}
@@ -24584,8 +29072,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Behavior View Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Behavior fmlInfra::Behavior:
-	//	Statemachine;
+	//Behavior returns fmlInfra::Behavior
+	//    : Statemachine
+	//    ;
 	public BehaviorElements getBehaviorAccess() {
 		return pBehavior;
 	}
@@ -24594,16 +29083,23 @@
 		return getBehaviorAccess().getRule();
 	}
 	
-	//MoeBehavior fmlInfra::Behavior:
-	//	{fmlInfra::Behavior} ('@local:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)? (execution=ModelOfExecution?
-	//	//		& ( computation=ModelOfComputation )?
-	//	& interaction=ModelOfInteraction?);
+	//MoeBehavior returns fmlInfra::Behavior
+	//    : {fmlInfra::Behavior}
+	//        ( '@local:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )?
+	//        ( ( execution=ModelOfExecution )?
+	////        & ( computation=ModelOfComputation )?
+	//        & ( interaction=ModelOfInteraction )?
+	//        )
+	//    ;
 	public MoeBehaviorElements getMoeBehaviorAccess() {
 		return pMoeBehavior;
 	}
@@ -24615,74 +29111,125 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Statemachine Behavior View Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Statemachine fmlStmchn::Statemachine:
-	//	{fmlStmchn::Statemachine} (visibility=VisibilityKind?
-	//	& timed?='timed'?
-	//	& dense_timed?='timed#dense'?
-	//	& discrete_timed?='timed#discrete'?
-	//	& input_enabled?='input_enabled'?
-	//	& lifeline?='lifeline'?
-	//	& design=DesignKind?)
-	//	'statemachine' ('<' 'moc:'? ModelOfComputationKing '>')?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'{' ('@parameter:' ('input' (parameter+=ParameterInput
-	//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-	//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-	//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-	//	| '{' parameter+=ParameterReturn+ '}'))*
-	//	| (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*) ('@input:'
-	//	parameter+=ParameterInput*
-	//	| '@inout:'
-	//	parameter+=ParameterInout*
-	//	| '@output:'
-	//	parameter+=ParameterOutput*
-	//	| '@return:'
-	//	parameter+=ParameterReturn*)* ('@property:' (port+=Port
-	//	| signal+=Signal
-	//	| buffer+=Buffer
-	//	| channel+=Channel
-	//	| typedef+=TypeDefinition
-	//	| function+=Function
-	//	| variable+=Variable)*
-	//	| '@public:' (port+=PortPublic
-	//	| signal+=SignalPublic
-	//	| buffer+=BufferPublic
-	//	| channel+=ChannelPublic
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPublic
-	//	| variable+=VariablePublic)*
-	//	| '@protected:' (port+=PortProtected
-	//	| signal+=SignalProtected
-	//	| buffer+=BufferProtected
-	//	| channel+=ChannelProtected
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionProtected
-	//	| variable+=VariableProtected)*
-	//	| '@private:' (port+=PortPrivate
-	//	| signal+=SignalPrivate
-	//	| buffer+=BufferPrivate
-	//	| channel+=ChannelPrivate
-	//	| typedef+=TypeDefinition
-	//	| function+=FunctionPrivate
-	//	| variable+=VariablePrivate)*)* ((('@routine:' | '@macro:') routine+=Routine+
-	//	| '@procedure:' procedure+=Procedure+)*
-	//	| (routine+=Routine | procedure+=Procedure)+) (('@statemachine:' machine+=Statemachine+
-	//	| '@composite:' machine+=AnyMachineBlock*
-	//	| '@model:' machine+=AnyMachineBlock*
-	//	| '@prototype:' machine+=AnyMachineBlock*
-	//	| '@instance:' instance+=InstanceMachine*)+
-	//	| region+=StatemachineRegion
-	//	| region+=StatemachineNamedRegion+
-	//	| region+=StatemachineRegionLite) (execution=ModelOfExecution?
-	//	//		& ( computation=ModelOfComputation )?
-	//	& interaction=ModelOfInteraction?)
-	//	'}';
+	//Statemachine returns fmlStmchn::Statemachine
+	//    : { fmlStmchn::Statemachine }
+	//        ( ( visibility=VisibilityKind )?
+	//        & ( timed?='timed' )?
+	//        & ( dense_timed?='timed#dense' )?
+	//        & ( discrete_timed?='timed#discrete' )?
+	//        & ( input_enabled ?= 'input_enabled' )?
+	//        & ( lifeline?='lifeline' )?
+	//        & ( design=DesignKind )?
+	//        )
+	//        'statemachine' ( '<' ( 'moc:' )? ModelOfComputationKing '>' )?
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        '{'
+	//        ( '@parameter:'  //( parameter+=Parameter )+
+	//            ( 'input'
+	//                ( parameter+=ParameterInput
+	//                | '{' ( parameter+=ParameterInput )+ '}'
+	//                )
+	//            | 'inout'
+	//                ( parameter+=ParameterInout
+	//                | '{' ( parameter+=ParameterInout )+ '}'
+	//                )
+	//            | 'output'
+	//                ( parameter+=ParameterOutput
+	//                | '{' ( parameter+=ParameterOutput )+ '}'
+	//                )
+	//            | 'return'
+	//                ( parameter+=ParameterReturn
+	//                | '{' ( parameter+=ParameterReturn )+ '}'
+	//                )
+	//            )*
+	//        | // optional unnamed section for property full declaration / definition
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        )
+	//        ( '@input:'
+	//            ( parameter+=ParameterInput  )*
+	//        | '@inout:'
+	//            ( parameter+=ParameterInout  )*
+	//        | '@output:'
+	//            ( parameter+=ParameterOutput )*
+	//        | '@return:'
+	//            ( parameter+=ParameterReturn )*
+	//        )*
+	//        ( '@property:'
+	//            ( port+=Port
+	//            | signal+=Signal
+	//            | buffer+=Buffer
+	//            | channel+=Channel
+	//            | typedef+=TypeDefinition
+	//            | function+=Function
+	//            | variable+=Variable
+	//            )*
+	//        | '@public:'
+	//            ( port+=PortPublic
+	//            | signal+=SignalPublic
+	//            | buffer+=BufferPublic
+	//            | channel+=ChannelPublic
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPublic
+	//            | variable+=VariablePublic
+	//            )*
+	//        | '@protected:'
+	//            ( port+=PortProtected
+	//            | signal+=SignalProtected
+	//            | buffer+=BufferProtected
+	//            | channel+=ChannelProtected
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionProtected
+	//            | variable+=VariableProtected
+	//            )*
+	//        | '@private:'
+	//            ( port+=PortPrivate
+	//            | signal+=SignalPrivate
+	//            | buffer+=BufferPrivate
+	//            | channel+=ChannelPrivate
+	//            | typedef+=TypeDefinition
+	//            | function+=FunctionPrivate
+	//            | variable+=VariablePrivate
+	//            )*
+	//        )*
+	//        ( ( ( '@routine:' | '@macro:' ) ( routine+=Routine )+
+	//          | '@procedure:' ( procedure+=Procedure )+
+	//          )*
+	//        | ( routine+=Routine  | procedure+=Procedure )+
+	//        )
+	////        ( ( '@composite:' | '@statemachine:' )  ( machine +=Statemachine )+
+	//        ( ( '@statemachine:' ( machine +=Statemachine    )+
+	//            | '@composite:'  ( machine +=AnyMachineBlock )*
+	//            | '@model:'      ( machine +=AnyMachineBlock )*
+	//            | '@prototype:'  ( machine +=AnyMachineBlock )*
+	//            | '@instance:'   ( instance+=InstanceMachine )*
+	//            )+
+	//        | region+=StatemachineRegion
+	//        | ( region+=StatemachineNamedRegion )+
+	//        | region+=StatemachineRegionLite
+	//        )
+	////        // optional unnamed section for property full declaration / definition
+	////        propertyPart=PropertyPart
+	////
+	////        compositePart=CompositePart
+	////
+	////        ( region+=StatemachineRegion
+	////        | ( region+=StatemachineNamedRegion )+
+	////
+	////        | region+=StatemachineRegionLite
+	////        )
+	//        ( ( execution=ModelOfExecution )?
+	////        & ( computation=ModelOfComputation )?
+	//        & ( interaction=ModelOfInteraction )?
+	//        )
+	//        '}'
+	//    ;
 	public StatemachineElements getStatemachineAccess() {
 		return pStatemachine;
 	}
@@ -24691,9 +29238,13 @@
 		return getStatemachineAccess().getRule();
 	}
 	
-	//StatemachineRegion fmlStmchn::Region:
-	//	{fmlStmchn::Region} ('@state:' | '@region:') (vertex+=State
-	//	| vertex+=Pseudostate)+;
+	//StatemachineRegion returns fmlStmchn::Region
+	//    : {fmlStmchn::Region}
+	//        ( '@state:' | '@region:' )
+	//        ( vertex+=State
+	//        | vertex+=Pseudostate
+	//        )+
+	//    ;
 	public StatemachineRegionElements getStatemachineRegionAccess() {
 		return pStatemachineRegion;
 	}
@@ -24702,11 +29253,14 @@
 		return getStatemachineRegionAccess().getRule();
 	}
 	
-	//StatemachineNamedRegion fmlStmchn::Region:
-	//	{fmlStmchn::Region}
-	//	'@region(' ('id:' | 'name:')? name=ESIdentifier
-	//	unrestrictedName=UnrestrictedName? '):' (vertex+=State
-	//	| vertex+=Pseudostate)+;
+	//StatemachineNamedRegion returns fmlStmchn::Region
+	//    : {fmlStmchn::Region}
+	//        '@region(' ( 'id:' | 'name:' )?  name=ESIdentifier
+	//            ( unrestrictedName=UnrestrictedName )?  '):'
+	//        ( vertex+=State
+	//        | vertex+=Pseudostate
+	//        )+
+	//    ;
 	public StatemachineNamedRegionElements getStatemachineNamedRegionAccess() {
 		return pStatemachineNamedRegion;
 	}
@@ -24715,8 +29269,9 @@
 		return getStatemachineNamedRegionAccess().getRule();
 	}
 	
-	//StatemachineRegionLite fmlStmchn::Region:
-	//	(vertex+=State | vertex+=Pseudostate)+;
+	//StatemachineRegionLite returns fmlStmchn::Region
+	//    : ( vertex+=State | vertex+=Pseudostate )+
+	//    ;
 	public StatemachineRegionLiteElements getStatemachineRegionLiteAccess() {
 		return pStatemachineRegionLite;
 	}
@@ -24728,11 +29283,12 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// State Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//State fmlStmchn::State:
-	//	CompositeState
-	//	| StartState
-	//	| SimpleState
-	//	| FinalState;
+	//State returns fmlStmchn::State
+	//    : CompositeState
+	//    | StartState
+	//    | SimpleState
+	//    | FinalState
+	//    ;
 	public StateElements getStateAccess() {
 		return pState;
 	}
@@ -24744,16 +29300,26 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// CompositeState Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//CompositeState fmlStmchn::State:
-	//	{fmlStmchn::State} composite?='state' '<' 'moc:'? ('or' | orthogonal?='and') '>'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' ((region+=StatemachineRegion
-	//	| region+=StatemachineNamedRegion+) & ('@moe:' moe=moeCompositeStateRoutines)?
-	//	& '@transition:' transition+=Transition*
-	//	| region+=StatemachineRegionLite*
-	//	& moe=moeCompositeStateRoutines?
-	//	& transition+=Transition*)
-	//	'}'
-	//	| ';');
+	//CompositeState returns fmlStmchn::State
+	//    : { fmlStmchn::State }
+	//        composite?='state' '<' ( 'moc:' )? ( 'or' | orthogonal?='and' ) '>'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '{'
+	//            ( ( ( region+=StatemachineRegion
+	//                | ( region+=StatemachineNamedRegion )+
+	//                )
+	//              & ( '@moe:' moe=moeCompositeStateRoutines )?
+	//              & '@transition:' ( transition+=Transition )*
+	//              )
+	//            | ( ( region+=StatemachineRegionLite )*
+	//              & ( moe=moeCompositeStateRoutines  )?
+	//              & ( transition+=Transition )*
+	//              )
+	//            )
+	//          '}'
+	//        | ';'
+	//        )
+	//    ;
 	public CompositeStateElements getCompositeStateAccess() {
 		return pCompositeState;
 	}
@@ -24762,16 +29328,19 @@
 		return getCompositeStateAccess().getRule();
 	}
 	
-	//moeCompositeStateRoutines fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)?
-	//	& ('@init' initRoutine=moeRoutine)?
-	//	& ('@final' finalRoutine=moeRoutine)?
-	//	& ('@enable' enableRoutine=moeRoutine)?
-	//	& ('@disable' disableRoutine=moeRoutine)?
-	//	& ('@concurrency' concurrencyRoutine=moeRoutine)?
-	//	& (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-	//	& ('@irun' irunRoutine=moeRoutine)?
-	//	& ('@run' runRoutine=moeRoutine)?);
+	//moeCompositeStateRoutines returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    ( ( '@create' createRoutine=moeRoutine )?
+	//    & ( '@init'   initRoutine=moeRoutine   )?
+	//    & ( '@final'  finalRoutine=moeRoutine  )?
+	//    & ( '@enable'  enableRoutine=moeRoutine  )?
+	//    & ( '@disable' disableRoutine=moeRoutine )?
+	//    & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+	//    & ( ( '@schedule' | '@xschedule' ) scheduleRoutine=moeRoutine )?
+	//    & ( '@irun' irunRoutine=moeRoutine )?
+	//    & ( '@run'  runRoutine=moeRoutine  )?
+	//    )
+	//    ;
 	public MoeCompositeStateRoutinesElements getMoeCompositeStateRoutinesAccess() {
 		return pMoeCompositeStateRoutines;
 	}
@@ -24783,12 +29352,24 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// SimpleState Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//SimpleState fmlStmchn::State:
-	//	{fmlStmchn::State} simple?='state' ('<' 'moc:'? 'simple' '>')?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-	//	& moe=moeSimpleStateRoutines?)
-	//	'}'
-	//	| ';');
+	//SimpleState returns fmlStmchn::State
+	//    : { fmlStmchn::State }
+	//    simple?='state' ( '<' ( 'moc:' )? 'simple' '>' )?
+	//    name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//    ( '{'
+	//        (
+	//            ( ( transition+=Transition    )*
+	//            & ( moe=moeSimpleStateRoutines )?
+	//            )
+	////        |
+	////            ( ( '@transition:'  ( transition+=Transition )* )?
+	////            & ( '@moe:'         moe=moeSimpleStateRoutines  )?
+	////            )
+	//        )
+	//      '}'
+	//    | ';'
+	//    )
+	//    ;
 	public SimpleStateElements getSimpleStateAccess() {
 		return pSimpleState;
 	}
@@ -24797,12 +29378,14 @@
 		return getSimpleStateAccess().getRule();
 	}
 	
-	//moeSimpleStateRoutines fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-	//	& ('@disable' disableRoutine=moeRoutine)?
-	//	& ('@irun' irunRoutine=moeRoutine)?
-	//	//	& ( '@run'  runRoutine=moeRoutine  )?
-	//);
+	//moeSimpleStateRoutines returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+	//    & ( '@disable' disableRoutine=moeRoutine )?
+	//    & ( '@irun' irunRoutine=moeRoutine )?
+	////    & ( '@run'  runRoutine=moeRoutine  )?
+	//    )
+	//    ;
 	public MoeSimpleStateRoutinesElements getMoeSimpleStateRoutinesAccess() {
 		return pMoeSimpleStateRoutines;
 	}
@@ -24814,12 +29397,26 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// StartState Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//StartState fmlStmchn::StartState:
-	//	{fmlStmchn::StartState} (simple?='state' '<' 'moc:'? 'start' '>' name=ESIdentifier
-	//	| simple?='#start') unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-	//	& moe=moeStartStateRoutines?)
-	//	'}'
-	//	| ';');
+	//StartState returns fmlStmchn::StartState
+	//    : { fmlStmchn::StartState }
+	//    ( simple?='state' '<' ( 'moc:' )? 'start' '>' name=ESIdentifier
+	//    | simple?='#start'
+	//    )
+	//    ( unrestrictedName=UnrestrictedName )?
+	//    ( '{'
+	//        (
+	//            ( ( transition+=Transition    )*
+	//            & ( moe=moeStartStateRoutines )?
+	//            )
+	////        |
+	////            ( ( '@transition:'  ( transition+=Transition )* )?
+	////            & ( '@moe:'         moe=moeStartStateRoutines  )?
+	////            )
+	//        )
+	//      '}'
+	//    | ';'
+	//    )
+	//    ;
 	public StartStateElements getStartStateAccess() {
 		return pStartState;
 	}
@@ -24828,15 +29425,17 @@
 		return getStartStateAccess().getRule();
 	}
 	
-	//moeStartStateRoutines fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} (('@create' createRoutine=moeRoutine)?
-	//	& ('@init' initRoutine=moeRoutine)?
-	//	& ('@final' finalRoutine=moeRoutine)?
-	//	& ('@enable' enableRoutine=moeRoutine)?
-	//	& ('@disable' disableRoutine=moeRoutine)?
-	//	& ('@irun' irunRoutine=moeRoutine)?
-	//	//	& ( '@run'  runRoutine=moeRoutine  )?
-	//);
+	//moeStartStateRoutines returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    ( ( '@create' createRoutine=moeRoutine )?
+	//    & ( '@init'   initRoutine=moeRoutine   )?
+	//    & ( '@final'  finalRoutine=moeRoutine  )?
+	//    & ( '@enable'  enableRoutine=moeRoutine  )?
+	//    & ( '@disable' disableRoutine=moeRoutine )?
+	//    & ( '@irun' irunRoutine=moeRoutine )?
+	////    & ( '@run'  runRoutine=moeRoutine  )?
+	//    )
+	//    ;
 	public MoeStartStateRoutinesElements getMoeStartStateRoutinesAccess() {
 		return pMoeStartStateRoutines;
 	}
@@ -24848,11 +29447,18 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// FinalState Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//FinalState fmlStmchn::FinalState:
-	//	{fmlStmchn::FinalState} (simple?='state' '<' 'moc:'? 'final' '>' name=ESIdentifier
-	//	| simple?='#final') unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)?
-	//	'}'
-	//	| ';');
+	//FinalState returns fmlStmchn::FinalState
+	//    : { fmlStmchn::FinalState }
+	//    ( simple?='state' '<' ( 'moc:' )? 'final' '>' name=ESIdentifier
+	//    | simple?='#final'
+	//    )
+	//    ( unrestrictedName=UnrestrictedName )?
+	//    ( '{'
+	//        ( ( '@moe:' )?  moe=moeFinalStateRoutines )?
+	//      '}'
+	//    | ';'
+	//    )
+	//    ;
 	public FinalStateElements getFinalStateAccess() {
 		return pFinalState;
 	}
@@ -24861,11 +29467,13 @@
 		return getFinalStateAccess().getRule();
 	}
 	
-	//moeFinalStateRoutines fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-	//	& ('@final' finalRoutine=moeRoutine)?
-	//	//	& ( '@run'     runRoutine=moeRoutine    )?
-	//);
+	//moeFinalStateRoutines returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    ( ( '@enable'  enableRoutine=moeRoutine )?
+	//    & ( '@final'   finalRoutine=moeRoutine  )?
+	////    & ( '@run'     runRoutine=moeRoutine    )?
+	//    )
+	//    ;
 	public MoeFinalStateRoutinesElements getMoeFinalStateRoutinesAccess() {
 		return pMoeFinalStateRoutines;
 	}
@@ -24877,10 +29485,11 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Pseudostate Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Pseudostate fmlStmchn::Pseudostate:
-	//	PseudostateInitial
-	//	| EndingPseudostate
-	//	| OtherPseudostate;
+	//Pseudostate returns fmlStmchn::Pseudostate
+	//    : PseudostateInitial
+	//    | EndingPseudostate
+	//    | OtherPseudostate
+	//    ;
 	public PseudostateElements getPseudostateAccess() {
 		return pPseudostate;
 	}
@@ -24889,13 +29498,34 @@
 		return getPseudostateAccess().getRule();
 	}
 	
-	//OtherPseudostate fmlStmchn::Pseudostate:
-	//	{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=PseudostateKind '>'
-	//	name=ESIdentifier
-	//	unrestrictedName=UnrestrictedName? ('{' (transition+=Transition*
-	//	& moe=moePseudotateRoutines?)
-	//	'}'
-	//	| ';');
+	//OtherPseudostate returns fmlStmchn::Pseudostate
+	//    : { fmlStmchn::Pseudostate }
+	//        ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=PseudostateKind '>'
+	//        name=ESIdentifier
+	//        ( unrestrictedName=UnrestrictedName )?
+	//        ( '{'
+	//        (
+	//            ( ( transition+=Transition    )*
+	//            & ( moe=moePseudotateRoutines )?
+	//            )
+	////        |
+	////            ( ( '@transition:'  ( transition+=Transition )* )?
+	////            & ( '@moe:'         moe=moePseudotateRoutines  )?
+	////            )
+	//        )
+	//          '}'
+	//        | ';'
+	//        )
+	////    | PseudostateInitial
+	////    | PseudostateTerminal
+	////    | PseudostateReturn
+	////    | PseudostateJunction
+	////    | PseudostateChoice
+	////    | PseudostateFork
+	////    | PseudostateJoin
+	////    | PseudostateDeepHistory
+	////    | PseudostateShallowHistory
+	//    ;
 	public OtherPseudostateElements getOtherPseudostateAccess() {
 		return pOtherPseudostate;
 	}
@@ -24904,9 +29534,12 @@
 		return getOtherPseudostateAccess().getRule();
 	}
 	
-	//moePseudotateRoutines fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution} (('@enable' enableRoutine=moeRoutine)?
-	//	& ('@disable' disableRoutine=moeRoutine)?);
+	//moePseudotateRoutines returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    ( ( '@enable'  enableRoutine=moeRoutine  )?
+	//    & ( '@disable' disableRoutine=moeRoutine )?
+	//    )
+	//    ;
 	public MoePseudotateRoutinesElements getMoePseudotateRoutinesAccess() {
 		return pMoePseudotateRoutines;
 	}
@@ -24915,20 +29548,20 @@
 		return getMoePseudotateRoutinesAccess().getRule();
 	}
 	
-	//enum PseudostateKind returns fmlStmchn::PseudostateKind:
-	//	Junction='junction'
-	//	| Choice='choice'
-	//	| EntryPoint='entryPoint'
-	//	| ExitPoint='exitPoint'
-	//	//	| Initial ='initial'
-	//	//		
-	//	//	| Terminal='terminal'
-	//	//	| Return   ='return'
-	//
-	//	| Fork='fork'
-	//	| Join='join'
-	//	| DeepHistory='dhistory'
-	//	| ShallowHistory='shistory';
+	//enum PseudostateKind returns fmlStmchn::PseudostateKind
+	//    : Junction='junction'
+	//    | Choice  ='choice'
+	//    | EntryPoint='entryPoint'
+	//    | ExitPoint  ='exitPoint'
+	////    | Initial ='initial'
+	////
+	////    | Terminal='terminal'
+	////    | Return   ='return'
+	//    | Fork='fork'
+	//    | Join='join'
+	//    | DeepHistory   ='dhistory'
+	//    | ShallowHistory='shistory'
+	//    ;
 	public PseudostateKindElements getPseudostateKindAccess() {
 		return ePseudostateKind;
 	}
@@ -24937,12 +29570,18 @@
 		return getPseudostateKindAccess().getRule();
 	}
 	
-	//PseudostateInitial fmlStmchn::Pseudostate:
-	//	{fmlStmchn::Pseudostate} (('state' | 'pseudostate')
-	//	'<' 'moc:'? kind=PseudostateInitialKind '>'
-	//	name=(ESIdentifier | '#initial' | '#init') | name=('#initial' | '#init')) unrestrictedName=UnrestrictedName? ('{'
-	//	('@transition:'? transition+=Transition*)? '}'
-	//	| ';');
+	//PseudostateInitial returns fmlStmchn::Pseudostate
+	//    : { fmlStmchn::Pseudostate }
+	//    ( ( 'state' | 'pseudostate' )
+	//        '<' ( 'moc:' )? kind=PseudostateInitialKind '>'
+	//        name=(ESIdentifier | '#initial' | '#init' )
+	//    | name=( '#initial' | '#init' )
+	//    )
+	//    ( unrestrictedName=UnrestrictedName )?
+	//    ( '{'  ( ( '@transition:' )?  ( transition+=Transition )* )?  '}'
+	//    | ';'
+	//    )
+	//    ;
 	public PseudostateInitialElements getPseudostateInitialAccess() {
 		return pPseudostateInitial;
 	}
@@ -24951,8 +29590,9 @@
 		return getPseudostateInitialAccess().getRule();
 	}
 	
-	//enum PseudostateInitialKind returns fmlStmchn::PseudostateKind:
-	//	Initial='initial';
+	//enum PseudostateInitialKind returns fmlStmchn::PseudostateKind
+	//    : Initial ='initial'
+	//    ;
 	public PseudostateInitialKindElements getPseudostateInitialKindAccess() {
 		return ePseudostateInitialKind;
 	}
@@ -24961,10 +29601,14 @@
 		return getPseudostateInitialKindAccess().getRule();
 	}
 	
-	//EndingPseudostate fmlStmchn::Pseudostate:
-	//	{fmlStmchn::Pseudostate} ('state' | 'pseudostate') '<' 'moc:'? kind=EndingPseudostateKind '>'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('{' ('@moe:'? moe=moeFinalStateRoutines)? '}'
-	//	| ';');
+	//EndingPseudostate returns fmlStmchn::Pseudostate
+	//    : { fmlStmchn::Pseudostate }
+	//    ( 'state' | 'pseudostate' ) '<' ( 'moc:' )? kind=EndingPseudostateKind '>'
+	//    name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//    ( '{'  ( ( '@moe:' )?  moe=moeFinalStateRoutines )?  '}'
+	//    | ';'
+	//    )
+	//    ;
 	public EndingPseudostateElements getEndingPseudostateAccess() {
 		return pEndingPseudostate;
 	}
@@ -24973,9 +29617,10 @@
 		return getEndingPseudostateAccess().getRule();
 	}
 	
-	//enum EndingPseudostateKind returns fmlStmchn::PseudostateKind:
-	//	Terminal='terminal'
-	//	| Return='return';
+	//enum EndingPseudostateKind returns fmlStmchn::PseudostateKind
+	//    : Terminal='terminal'
+	//    | Return='return'
+	//    ;
 	public EndingPseudostateKindElements getEndingPseudostateKindAccess() {
 		return eEndingPseudostateKind;
 	}
@@ -24987,8 +29632,9 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Section Model Of Computation Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//ModelOfComputation fmlInfra::ModelOfComputation:
-	//	{fmlInfra::ModelOfComputation};
+	//ModelOfComputation returns fmlInfra::ModelOfComputation
+	//    : { fmlInfra::ModelOfComputation }
+	//    ;
 	public ModelOfComputationElements getModelOfComputationAccess() {
 		return pModelOfComputation;
 	}
@@ -25000,18 +29646,22 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Section Model Of Execution Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//ModelOfExecution fmlInfra::ModelOfExecution:
-	//	{fmlInfra::ModelOfExecution}
-	//	'@moe:'
-	//	routine+=Routine* (('@create' createRoutine=moeRoutine)?
-	//	& ('@init' initRoutine=moeRoutine)?
-	//	& ('@final' finalRoutine=moeRoutine)?
-	//	& ('@enable' enableRoutine=moeRoutine)?
-	//	& ('@disable' disableRoutine=moeRoutine)?
-	//	& ('@concurrency' concurrencyRoutine=moeRoutine)?
-	//	& (('@schedule' | '@xschedule') scheduleRoutine=moeRoutine)?
-	//	& ('@irun' irunRoutine=moeRoutine)?
-	//	& ('@run' runRoutine=moeRoutine)?) routine+=Routine*;
+	//ModelOfExecution returns fmlInfra::ModelOfExecution
+	//    : { fmlInfra::ModelOfExecution }
+	//    '@moe:'
+	//    ( routine+=Routine )*
+	//    ( ( '@create'  createRoutine=moeRoutine )?
+	//    & ( '@init'    initRoutine=moeRoutine   )?
+	//    & ( '@final'   finalRoutine=moeRoutine  )?
+	//    & ( '@enable'  enableRoutine=moeRoutine  )?
+	//    & ( '@disable' disableRoutine=moeRoutine )?
+	//    & ( '@concurrency' concurrencyRoutine=moeRoutine )?
+	//    & ( ( '@schedule' | '@xschedule' )    scheduleRoutine=moeRoutine )?
+	//    & ( '@irun' irunRoutine=moeRoutine )?
+	//    & ( '@run'  runRoutine=moeRoutine  )?
+	//    )
+	//    ( routine+=Routine )*
+	//    ;
 	public ModelOfExecutionElements getModelOfExecutionAccess() {
 		return pModelOfExecution;
 	}
@@ -25020,10 +29670,16 @@
 		return getModelOfExecutionAccess().getRule();
 	}
 	
-	//moeRoutine fmlInfra::Routine:
-	//	{fmlInfra::Routine} ('(' parameterSet=FormalParameterSet? ')')? ('->' (resultSet=FormalParameterSet
-	//	| '(' resultSet=FormalParameterSet ')'))?
-	//	bodyBlock=BlockStatement;
+	//moeRoutine returns fmlInfra::Routine
+	//    : { fmlInfra::Routine }
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ('->'
+	//            (     resultSet=FormalParameterSet
+	//            | '(' resultSet=FormalParameterSet ')'
+	//            )
+	//        )?
+	//        bodyBlock=BlockStatement
+	//    ;
 	public MoeRoutineElements getMoeRoutineAccess() {
 		return pMoeRoutine;
 	}
@@ -25032,13 +29688,18 @@
 		return getMoeRoutineAccess().getRule();
 	}
 	
-	//Routine fmlInfra::Routine:
-	//	visibility=VisibilityKind? macro?='macro'? DesignDebugTrace*
-	//	'routine'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')? ('-->'
-	//	(resultSet=FormalParameterSet
-	//	| '(' resultSet=FormalParameterSet ')'))?
-	//	bodyBlock=BlockStatement;
+	//Routine returns fmlInfra::Routine
+	//    : ( visibility=VisibilityKind )?  ( macro?='macro' )?  ( DesignDebugTrace )*
+	//        'routine'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ( '-->'
+	//            (     resultSet=FormalParameterSet
+	//            | '(' resultSet=FormalParameterSet ')'
+	//            )
+	//        )?
+	//        bodyBlock=BlockStatement
+	//    ;
 	public RoutineElements getRoutineAccess() {
 		return pRoutine;
 	}
@@ -25050,10 +29711,13 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Section Model Of Interaction / Communication Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//ModelOfInteraction fmlInfra::ModelOfInteraction:
-	//	{fmlInfra::ModelOfInteraction}
-	//	'@com:' (routes+=Route
-	//	| connectors+=Connector)*;
+	//ModelOfInteraction returns fmlInfra::ModelOfInteraction
+	//    : { fmlInfra::ModelOfInteraction }
+	//        '@com:'
+	//        ( routes+=Route
+	//        | connectors+=Connector
+	//        )*
+	//    ;
 	public ModelOfInteractionElements getModelOfInteractionAccess() {
 		return pModelOfInteraction;
 	}
@@ -25062,12 +29726,17 @@
 		return getModelOfInteractionAccess().getRule();
 	}
 	
-	//Route fmlInfra::Route:
-	//	{fmlInfra::Route}
-	//	'route' '<' protocol=ComRouteProtocol '>' (name=ESIdentifier unrestrictedName=UnrestrictedName?)?
-	//	'[' ('*'
-	//	| signals+=[fmlInfra::Signal|ESUfid] (',' signals+=[fmlInfra::Signal|ESUfid])*)
-	//	']' ';';
+	//Route returns fmlInfra::Route
+	//    : { fmlInfra::Route }
+	//        'route' '<' protocol=ComRouteProtocol '>'
+	//        ( name=ESIdentifier ( unrestrictedName=UnrestrictedName )? )?
+	//        '['
+	//        ( '*'
+	//        | signals+=[fmlInfra::Signal|ESUfid]
+	//            ( ',' signals+=[fmlInfra::Signal|ESUfid] )*
+	//        )
+	//        ']' ';'
+	//    ;
 	public RouteElements getRouteAccess() {
 		return pRoute;
 	}
@@ -25076,13 +29745,21 @@
 		return getRouteAccess().getRule();
 	}
 	
-	//ComRouteProtocol fmlInfra::ComProtocol:
-	//	protocol=ComProtocolKind
-	//	| protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) '>')?
-	//	| inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer;
+	//ComRouteProtocol returns fmlInfra::ComProtocol
+	//    : protocol=ComProtocolKind
+	//    | protocol=BufferProtocolKind
+	//        ( ':'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            )
+	//        | '<'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            ) '>'
+	//        )?
+	//    | inner_buffer=BufferContainerType
+	//    | buffer=ComBuffer
+	//    ;
 	public ComRouteProtocolElements getComRouteProtocolAccess() {
 		return pComRouteProtocol;
 	}
@@ -25091,10 +29768,11 @@
 		return getComRouteProtocolAccess().getRule();
 	}
 	
-	//Connector fmlInfra::Connector:
-	//	('connector' | 'connect') '<' protocol=ComProtocol '>'
-	//	name=ESIdentifier? unrestrictedName=UnrestrictedName?
-	//	'{' connectorEnd+=ConnectorEnd+ '}';
+	//Connector returns fmlInfra::Connector
+	//    : ( 'connector' | 'connect' ) '<' protocol=ComProtocol '>'
+	//        ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+	//        '{' (connectorEnd+=ConnectorEnd)+ '}'
+	//    ;
 	public ConnectorElements getConnectorAccess() {
 		return pConnector;
 	}
@@ -25103,15 +29781,23 @@
 		return getConnectorAccess().getRule();
 	}
 	
-	//ComProtocol fmlInfra::ComProtocol:
-	//	protocol=ComEnvRdvProtocolKind
-	//	| protocol=ComMultiRdvProtocolKind ('<' cast=ComCastKing '>')?
-	//	| protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) '>')?
-	//	| inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer
-	//	| cast=ComCastKing;
+	//ComProtocol returns fmlInfra::ComProtocol
+	//    : protocol=ComEnvRdvProtocolKind
+	//    | protocol=ComMultiRdvProtocolKind ( '<' cast=ComCastKing '>')?
+	//    | protocol=BufferProtocolKind
+	//        ( ':'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            )
+	//        | '<'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            ) '>'
+	//        )?
+	//    | inner_buffer=BufferContainerType
+	//    | buffer=ComBuffer
+	//    | cast=ComCastKing
+	//    ;
 	public ComProtocolElements getComProtocolAccess() {
 		return pComProtocol;
 	}
@@ -25120,8 +29806,11 @@
 		return getComProtocolAccess().getRule();
 	}
 	
-	//enum ComProtocolKind returns fmlInfra::ComProtocolKind:
-	//	env | rdv | multi_rdv='multirdv';
+	//enum ComProtocolKind returns fmlInfra::ComProtocolKind
+	//    : env       = 'env'
+	//    | rdv       = 'rdv'
+	//    | multi_rdv = 'multirdv'
+	//    ;
 	public ComProtocolKindElements getComProtocolKindAccess() {
 		return eComProtocolKind;
 	}
@@ -25130,8 +29819,10 @@
 		return getComProtocolKindAccess().getRule();
 	}
 	
-	//enum ComEnvRdvProtocolKind returns fmlInfra::ComProtocolKind:
-	//	env | rdv;
+	//enum ComEnvRdvProtocolKind returns fmlInfra::ComProtocolKind
+	//    : env = 'env'
+	//    | rdv = 'rdv'
+	//    ;
 	public ComEnvRdvProtocolKindElements getComEnvRdvProtocolKindAccess() {
 		return eComEnvRdvProtocolKind;
 	}
@@ -25140,8 +29831,9 @@
 		return getComEnvRdvProtocolKindAccess().getRule();
 	}
 	
-	//enum ComMultiRdvProtocolKind returns fmlInfra::ComProtocolKind:
-	//	multi_rdv='multirdv';
+	//enum ComMultiRdvProtocolKind returns fmlInfra::ComProtocolKind
+	//    : multi_rdv = 'multirdv'
+	//    ;
 	public ComMultiRdvProtocolKindElements getComMultiRdvProtocolKindAccess() {
 		return eComMultiRdvProtocolKind;
 	}
@@ -25150,8 +29842,9 @@
 		return getComMultiRdvProtocolKindAccess().getRule();
 	}
 	
-	//enum BufferProtocolKind returns fmlInfra::ComProtocolKind:
-	//	buffer;
+	//enum BufferProtocolKind returns fmlInfra::ComProtocolKind
+	//    : buffer = 'buffer'
+	//    ;
 	public BufferProtocolKindElements getBufferProtocolKindAccess() {
 		return eBufferProtocolKind;
 	}
@@ -25160,8 +29853,12 @@
 		return getBufferProtocolKindAccess().getRule();
 	}
 	
-	//enum ComCastKing returns fmlInfra::ComCastKind:
-	//	unicast | anycast | multicast | broadcast;
+	//enum ComCastKing returns fmlInfra::ComCastKind
+	//    : unicast   = 'unicast'
+	//    | anycast   = 'anycast'
+	//    | multicast = 'multicast'
+	//    | broadcast = 'broadcast'
+	//    ;
 	public ComCastKingElements getComCastKingAccess() {
 		return eComCastKing;
 	}
@@ -25170,10 +29867,14 @@
 		return getComCastKingAccess().getRule();
 	}
 	
-	//ConnectorEnd fmlInfra::ConnectorEnd:
-	//	{fmlInfra::ConnectorEnd} direction=ChannelDirection ('<' protocol=ComPointProtocol '>')? (points+=ComPoint ';'
-	//	| '[' points+=ComPoint (',' points+=ComPoint)* ']' ';'
-	//	| '{' (points+=ComPoint ';')+ '}');
+	//ConnectorEnd returns fmlInfra::ConnectorEnd
+	//    : { fmlInfra::ConnectorEnd }
+	//        direction=ChannelDirection ( '<' protocol=ComPointProtocol '>' )?
+	//        ( points+=ComPoint ';'
+	//        | '[' points+=ComPoint ( ',' points+=ComPoint )* ']' ';'
+	//        | '{' ( points+=ComPoint ';' )+ '}'
+	//        )
+	//    ;
 	public ConnectorEndElements getConnectorEndAccess() {
 		return pConnectorEnd;
 	}
@@ -25182,10 +29883,12 @@
 		return getConnectorEndAccess().getRule();
 	}
 	
-	//ComPoint fmlInfra::ComPoint:
-	//	{fmlInfra::ComPoint} (machine=[fmlCommon::NamedElement|ESIdentifier] ('->' | '.'))?
-	//	//		( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
-	//	port=[fmlInfra::Port|ESIdentifier];
+	//ComPoint returns fmlInfra::ComPoint
+	//    : { fmlInfra::ComPoint }
+	//        ( machine=[fmlCommon::NamedElement|ESIdentifier] ('->'| '.') )?
+	////        ( machine=ValuePureNamedMachineExpression  ('->'| '.') )?
+	//        port=[fmlInfra::Port|ESIdentifier]
+	//    ;
 	public ComPointElements getComPointAccess() {
 		return pComPoint;
 	}
@@ -25194,13 +29897,21 @@
 		return getComPointAccess().getRule();
 	}
 	
-	//ComPointProtocol fmlInfra::ComProtocol:
-	//	protocol=BufferProtocolKind (':' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) | '<' (inner_buffer=BufferContainerType
-	//	| buffer=ComBuffer) '>')?
-	//	| inner_buffer=BufferContainerType
-	//	//	| buffer=ComBuffer
-	//	| bufferRef=ComBufferRef;
+	//ComPointProtocol returns fmlInfra::ComProtocol
+	//    : protocol=BufferProtocolKind
+	//        ( ':'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            )
+	//        | '<'
+	//            ( inner_buffer=BufferContainerType
+	//            | buffer=ComBuffer
+	//            ) '>'
+	//        )?
+	//    | inner_buffer=BufferContainerType
+	////    | buffer=ComBuffer
+	//    | bufferRef=ComBufferRef
+	//    ;
 	public ComPointProtocolElements getComPointProtocolAccess() {
 		return pComPointProtocol;
 	}
@@ -25209,11 +29920,13 @@
 		return getComPointProtocolAccess().getRule();
 	}
 	
-	//ComBuffer fmlExpr::ValueElementSpecification:
-	//	(parent=LiteralPureReferenceMachine
-	//	// ( '.' | '->' ) element
-	//	kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind))?
-	//	element=[fmlInfra::Buffer|ESIdentifier];
+	//ComBuffer returns fmlExpr::ValueElementSpecification
+	//    : ( parent=LiteralPureReferenceMachine
+	//        // ( '.' | '->' ) element
+	//        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+	//      )?
+	//      element=[fmlInfra::Buffer|ESIdentifier]
+	//    ;
 	public ComBufferElements getComBufferAccess() {
 		return pComBuffer;
 	}
@@ -25222,9 +29935,11 @@
 		return getComBufferAccess().getRule();
 	}
 	
-	//ComBufferRef fmlExpr::LiteralReferenceSpecification:
-	//	{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-	//	element=BufferReferenceElement;
+	//ComBufferRef returns fmlExpr::LiteralReferenceSpecification
+	//    : { fmlExpr::LiteralReferenceSpecification }
+	//        ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+	//        element=BufferReferenceElement
+	//    ;
 	public ComBufferRefElements getComBufferRefAccess() {
 		return pComBufferRef;
 	}
@@ -25233,8 +29948,10 @@
 		return getComBufferRefAccess().getRule();
 	}
 	
-	//BufferReferenceElement fmlExpr::LiteralReferenceElement:
-	//	{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Buffer|ESIdentifier];
+	//BufferReferenceElement returns fmlExpr::LiteralReferenceElement
+	//    : {fmlExpr::LiteralReferenceElement}
+	//        element=[fmlInfra::Buffer|ESIdentifier]
+	//    ;
 	public BufferReferenceElementElements getBufferReferenceElementAccess() {
 		return pBufferReferenceElement;
 	}
@@ -25243,8 +29960,11 @@
 		return getBufferReferenceElementAccess().getRule();
 	}
 	
-	//LiteralPureReferenceMachine fmlExpr::LiteralReferenceExpression:
-	//	{fmlExpr::LiteralReferenceElement} element=[fmlInfra::Machine|ESIdentifier] | LiteralReferenceMachineContext;
+	//LiteralPureReferenceMachine returns fmlExpr::LiteralReferenceExpression
+	//    : {fmlExpr::LiteralReferenceElement}
+	//        element=[fmlInfra::Machine|ESIdentifier]
+	//    | LiteralReferenceMachineContext
+	//    ;
 	public LiteralPureReferenceMachineElements getLiteralPureReferenceMachineAccess() {
 		return pLiteralPureReferenceMachine;
 	}
@@ -25257,19 +29977,20 @@
 	//// Sections Declarations Data Rules
 	//////////////////////////////////////////////////////////////////////////////////
 	////TypeDefinition returns fmlType::DataType
-	////	: typedef?='type' name=ESIdentifier
-	////		( support=DataTypeReference ';'
-	////		| support=StructuredDataType
-	////		)
-	////	;
-	//TypeDefinition fmlType::DataType:
-	//	EnumerationTypeDefinition
-	//	| StructureTypeDefinition
-	//	| UnionTypeDefinition
-	//	| ChoiceTypeDefinition
-	//	| IntervalTypeDefinition
-	//	| CollectionTypeDefinition
-	//	| OtherDataTypeDefinition;
+	////    : typedef?='type' name=ESIdentifier
+	////        ( support=DataTypeReference ';'
+	////        | support=StructuredDataType
+	////        )
+	////    ;
+	//TypeDefinition returns fmlType::DataType
+	//    : EnumerationTypeDefinition
+	//    | StructureTypeDefinition
+	//    | UnionTypeDefinition
+	//    | ChoiceTypeDefinition
+	//    | IntervalTypeDefinition
+	//    | CollectionTypeDefinition
+	//    | OtherDataTypeDefinition
+	//    ;
 	public TypeDefinitionElements getTypeDefinitionAccess() {
 		return pTypeDefinition;
 	}
@@ -25279,25 +30000,26 @@
 	}
 	
 	////TypeDefinitionImpl returns fmlType::DataTypeReference
-	////	: name=ESIdentifier
-	////		( support=DataTypeReference ';'
-	////		| support=StructuredDataType
-	////		)
-	////	;
+	////    : name=ESIdentifier
+	////        ( support=DataTypeReference ';'
+	////        | support=StructuredDataType
+	////        )
+	////    ;
 	////TypeDefinitionImpl returns fmlType::DataType
-	////	: EnumerationTypeDefinitionImpl
-	////	| StructureTypeDefinitionImpl
-	////	| UnionTypeDefinitionImpl
-	////	| ChoiceTypeDefinitionImpl
+	////    : EnumerationTypeDefinitionImpl
+	////    | StructureTypeDefinitionImpl
+	////    | UnionTypeDefinitionImpl
+	////    | ChoiceTypeDefinitionImpl
 	////
-	////	| IntervalTypeDefinitionImpl
-	////	| CollectionTypeDefinitionImpl
+	////    | IntervalTypeDefinitionImpl
+	////    | CollectionTypeDefinitionImpl
 	////
-	////	| OtherDataTypeDefinitionImpl
-	////	;
-	//DataTypeMultiplicity fmlExpr::Expression:
-	//	LiteralIntegerExpression
-	//	| LiteralReferenceElement;
+	////    | OtherDataTypeDefinitionImpl
+	////    ;
+	//DataTypeMultiplicity returns fmlExpr::Expression
+	//    : LiteralIntegerExpression
+	//    | LiteralReferenceElement
+	//    ;
 	public DataTypeMultiplicityElements getDataTypeMultiplicityAccess() {
 		return pDataTypeMultiplicity;
 	}
@@ -25306,10 +30028,15 @@
 		return getDataTypeMultiplicityAccess().getRule();
 	}
 	
-	//DataTypeReference fmlType::DataType:
-	//	SimpleDataType ({fmlType::DataTypeReference.support=current}
-	//	'[' multiplicity=DataTypeMultiplicity ']')?
-	//	| {fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?;
+	//DataTypeReference returns fmlType::DataType
+	//    : SimpleDataType
+	//        ( {fmlType::DataTypeReference.support=current}
+	//            '[' multiplicity=DataTypeMultiplicity ']'
+	//        )?
+	//    | {fmlType::DataTypeReference}
+	//        typeref=[fmlType::DataType|ESUfid]
+	//        ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	//    ;
 	public DataTypeReferenceElements getDataTypeReferenceAccess() {
 		return pDataTypeReference;
 	}
@@ -25318,12 +30045,16 @@
 		return getDataTypeReferenceAccess().getRule();
 	}
 	
-	//OtherDataTypeDefinition fmlType::DataTypeReference:
-	//	{fmlType::DataTypeReference} visibility=VisibilityKind? typedef?='type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? (support=PrimitiveType ('[' multiplicity=DataTypeMultiplicity
-	//	']')?
-	//	| typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?) (constraint=TypeConstraintRoutine |
-	//	';');
+	//OtherDataTypeDefinition returns fmlType::DataTypeReference
+	//    : {fmlType::DataTypeReference}
+	//        ( visibility=VisibilityKind )?  typedef?='type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( support=PrimitiveType
+	//            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	//        | typeref=[fmlType::DataType|ESUfid]
+	//            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	//        )  ( constraint=TypeConstraintRoutine | ';' )
+	//    ;
 	public OtherDataTypeDefinitionElements getOtherDataTypeDefinitionAccess() {
 		return pOtherDataTypeDefinition;
 	}
@@ -25332,11 +30063,15 @@
 		return getOtherDataTypeDefinitionAccess().getRule();
 	}
 	
-	//TypeConstraintRoutine fmlInfra::Routine:
-	//	{fmlInfra::Routine} '{'
-	//	'@constraint' ('(' parameterSet=VariableRoutineParameterSet ')')? (bodyBlock=BlockStatement
-	//	| bodyBlock=ConditionalBlockStatement ';')
-	//	'}';
+	//TypeConstraintRoutine returns fmlInfra::Routine
+	//    : { fmlInfra::Routine } '{'
+	//        '@constraint'
+	//        ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+	//        ( bodyBlock=BlockStatement
+	//        | bodyBlock=ConditionalBlockStatement ';'
+	//        )
+	//        '}'
+	//    ;
 	public TypeConstraintRoutineElements getTypeConstraintRoutineAccess() {
 		return pTypeConstraintRoutine;
 	}
@@ -25345,8 +30080,10 @@
 		return getTypeConstraintRoutineAccess().getRule();
 	}
 	
-	//ConditionalBlockStatement fmlStmnt::BlockStatement:
-	//	{fmlStmnt::BlockStatement} statement+=GuardTestExpression;
+	//ConditionalBlockStatement returns fmlStmnt::BlockStatement
+	//    : {fmlStmnt::BlockStatement}
+	//        statement+=GuardTestExpression
+	//    ;
 	public ConditionalBlockStatementElements getConditionalBlockStatementAccess() {
 		return pConditionalBlockStatement;
 	}
@@ -25355,8 +30092,9 @@
 		return getConditionalBlockStatementAccess().getRule();
 	}
 	
-	//GuardTestExpression fmlStmnt::GuardStatement:
-	//	'|=>' condition=Expression;
+	//GuardTestExpression returns fmlStmnt::GuardStatement
+	//    : '|=>' condition=Expression
+	//    ;
 	public GuardTestExpressionElements getGuardTestExpressionAccess() {
 		return pGuardTestExpression;
 	}
@@ -25366,17 +30104,18 @@
 	}
 	
 	////OtherDataTypeDefinitionImpl returns fmlType::DataTypeReference
-	////	: {fmlType::DataTypeReference}
-	////		name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
-	////		( support=PrimitiveType
-	////			( '[' multiplicity=DataTypeMultiplicity ']' )?
-	////		| typeref=[fmlType::DataType|ESUfid]
-	////			( '[' multiplicity=DataTypeMultiplicity ']' )?
-	////		)  typedef?=';'
-	////	;
-	//DataType fmlType::DataType:
-	//	DataTypeReference
-	//	| StructuredDataType;
+	////    : {fmlType::DataTypeReference}
+	////        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	////        ( support=PrimitiveType
+	////            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	////        | typeref=[fmlType::DataType|ESUfid]
+	////            ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	////        )  typedef?=';'
+	////    ;
+	//DataType returns fmlType::DataType
+	//    : DataTypeReference
+	//    | StructuredDataType
+	//    ;
 	public DataTypeElements getDataTypeAccess() {
 		return pDataType;
 	}
@@ -25385,10 +30124,11 @@
 		return getDataTypeAccess().getRule();
 	}
 	
-	//SimpleDataType fmlType::DataType:
-	//	PrimitiveType
-	//	| IntervalType
-	//	| CollectionType;
+	//SimpleDataType returns fmlType::DataType
+	//    : PrimitiveType
+	//    | IntervalType
+	//    | CollectionType
+	//    ;
 	public SimpleDataTypeElements getSimpleDataTypeAccess() {
 		return pSimpleDataType;
 	}
@@ -25397,11 +30137,12 @@
 		return getSimpleDataTypeAccess().getRule();
 	}
 	
-	//StructuredDataType fmlType::DataType:
-	//	EnumerationType
-	//	| StructureType
-	//	| UnionType
-	//	| ChoiceType;
+	//StructuredDataType returns fmlType::DataType
+	//    : EnumerationType
+	//    | StructureType
+	//    | UnionType
+	//    | ChoiceType
+	//    ;
 	public StructuredDataTypeElements getStructuredDataTypeAccess() {
 		return pStructuredDataType;
 	}
@@ -25411,46 +30152,47 @@
 	}
 	
 	////PrimitiveType returns fmlType::PrimitiveType
-	////	: kind=NumberPrimitiveTypeKind ( '<' ( 'bit:' )? bitSize = EInt '>' )?
-	////	| kind=OtherPrimitiveKind
-	////	;
+	////    : kind=NumberPrimitiveTypeKind ( '<' ( 'bit:' )? bitSize = EInt '>' )?
+	////    | kind=OtherPrimitiveKind
+	////    ;
 	////
 	////enum OtherPrimitiveKind returns fmlType::PrimitiveTypeKind
-	////	: BOOLEAN   = 'boolean'
-	////	| BOOLEAN   = 'bool'
-	////	| CHAR      = 'char'
-	////	| STRING    = 'string'
-	////	| BUFFER    = 'buffer'
-	////	| MESSAGE   = 'message'
-	////	| PORT      = 'port'
-	////	| MACHINE   = 'machine'
-	////	;
+	////    : BOOLEAN   = 'boolean'
+	////    | BOOLEAN   = 'bool'
+	////    | CHAR      = 'char'
+	////    | STRING    = 'string'
+	////    | BUFFER    = 'buffer'
+	////    | MESSAGE   = 'message'
+	////    | PORT      = 'port'
+	////    | MACHINE   = 'machine'
+	////    ;
 	////
 	////
 	////enum NumberPrimitiveTypeKind returns fmlType::PrimitiveTypeKind
-	////	: INTEGER   = 'integer'
-	////	| RATIONAL  = 'rational'
-	////	| FLOAT     = 'float'
-	////	| DOUBLE    = 'double'
-	////	| REAL      = 'real'
+	////    : INTEGER   = 'integer'
+	////    | RATIONAL  = 'rational'
+	////    | FLOAT     = 'float'
+	////    | DOUBLE    = 'double'
+	////    | REAL      = 'real'
 	////
-	////	| TIME      = 'time'
+	////    | TIME      = 'time'
 	////
-	////	| UINTEGER  = 'uinteger'
-	////	| URATIONAL = 'urational'
-	////	| UFLOAT    = 'ufloat'
-	////	| UDOUBLE   = 'udouble'
-	////	| UREAL     = 'ureal'
+	////    | UINTEGER  = 'uinteger'
+	////    | URATIONAL = 'urational'
+	////    | UFLOAT    = 'ufloat'
+	////    | UDOUBLE   = 'udouble'
+	////    | UREAL     = 'ureal'
 	////
-	////	| INT       = 'int'
-	////	| RAT       = 'rat'
+	////    | INT       = 'int'
+	////    | RAT       = 'rat'
 	////
-	////	| UINT      = 'uint'
-	////	| URAT      = 'urat'
-	////	;
-	//PrimitiveType fmlType::PrimitiveType:
-	//	PrimitiveNumberType
-	//	| OtherPrimitiveType;
+	////    | UINT      = 'uint'
+	////    | URAT      = 'urat'
+	////    ;
+	//PrimitiveType returns fmlType::PrimitiveType
+	//    : PrimitiveNumberType
+	//    | OtherPrimitiveType
+	//    ;
 	public PrimitiveTypeElements getPrimitiveTypeAccess() {
 		return pPrimitiveType;
 	}
@@ -25459,12 +30201,13 @@
 		return getPrimitiveTypeAccess().getRule();
 	}
 	
-	//PrimitiveNumberType fmlType::PrimitiveNumberType:
-	//	PrimitiveIntegerType
-	//	| PrimitiveRationalType
-	//	| PrimitiveFloatType
-	//	| PrimitiveRealType
-	//	| PrimitiveTimeType;
+	//PrimitiveNumberType returns fmlType::PrimitiveNumberType
+	//    : PrimitiveIntegerType
+	//    | PrimitiveRationalType
+	//    | PrimitiveFloatType
+	//    | PrimitiveRealType
+	//    | PrimitiveTimeType
+	//    ;
 	public PrimitiveNumberTypeElements getPrimitiveNumberTypeAccess() {
 		return pPrimitiveNumberType;
 	}
@@ -25473,11 +30216,12 @@
 		return getPrimitiveNumberTypeAccess().getRule();
 	}
 	
-	//enum PrimitiveNumberSign returns fmlType::PrimitiveNumberSign:
-	//	positive='+'
-	//	| positive_strict='++'
-	//	| negative='-'
-	//	| negative_strict='--';
+	//enum PrimitiveNumberSign returns fmlType::PrimitiveNumberSign
+	//    : positive='+'
+	//    | positive_strict='++'
+	//    | negative='-'
+	//    | negative_strict='--'
+	//    ;
 	public PrimitiveNumberSignElements getPrimitiveNumberSignAccess() {
 		return ePrimitiveNumberSign;
 	}
@@ -25486,14 +30230,19 @@
 		return getPrimitiveNumberSignAccess().getRule();
 	}
 	
-	//PrimitiveIntegerType fmlType::PrimitiveIntegerType:
-	//	{fmlType::PrimitiveIntegerType} sign=PrimitiveNumberSign?
-	//	name=('integer'
-	//	| 'uinteger'
-	//	| 'pos_integer'
-	//	| 'int'
-	//	| 'uint') (':' size=EInt
-	//	| '<' 'size:'? size=EInt '>')?;
+	//PrimitiveIntegerType returns fmlType::PrimitiveIntegerType
+	//    : { fmlType::PrimitiveIntegerType }
+	//        ( sign=PrimitiveNumberSign )?
+	//        name=( 'integer'
+	//        | 'uinteger'
+	//        | 'pos_integer'
+	//        | 'int'
+	//        | 'uint'
+	//        )
+	//        ( ':' size = EInt
+	//            | '<' ( 'size:' )? size = EInt '>'
+	//        )?
+	//    ;
 	public PrimitiveIntegerTypeElements getPrimitiveIntegerTypeAccess() {
 		return pPrimitiveIntegerType;
 	}
@@ -25502,14 +30251,19 @@
 		return getPrimitiveIntegerTypeAccess().getRule();
 	}
 	
-	//PrimitiveRationalType fmlType::PrimitiveRationalType:
-	//	{fmlType::PrimitiveRationalType} sign=PrimitiveNumberSign?
-	//	name=('rational'
-	//	| 'urational'
-	//	| 'pos_rational'
-	//	| 'rat'
-	//	| 'urat') (':' size=EInt
-	//	| '<' 'size:'? size=EInt '>')?;
+	//PrimitiveRationalType returns fmlType::PrimitiveRationalType
+	//    : { fmlType::PrimitiveRationalType }
+	//        ( sign=PrimitiveNumberSign )?
+	//        name=( 'rational'
+	//        | 'urational'
+	//        | 'pos_rational'
+	//        | 'rat'
+	//        | 'urat'
+	//        )
+	//        ( ':' size = EInt
+	//            | '<' ( 'size:' )? size = EInt '>'
+	//        )?
+	//    ;
 	public PrimitiveRationalTypeElements getPrimitiveRationalTypeAccess() {
 		return pPrimitiveRationalType;
 	}
@@ -25518,14 +30272,19 @@
 		return getPrimitiveRationalTypeAccess().getRule();
 	}
 	
-	//PrimitiveFloatType fmlType::PrimitiveFloatType:
-	//	{fmlType::PrimitiveFloatType} sign=PrimitiveNumberSign?
-	//	name=('float'
-	//	| 'ufloat'
-	//	| 'pos_float'
-	//	| 'double'
-	//	| 'udouble') (':' size=EInt
-	//	| '<' 'size:'? size=EInt '>')?;
+	//PrimitiveFloatType returns fmlType::PrimitiveFloatType
+	//    : { fmlType::PrimitiveFloatType }
+	//        ( sign=PrimitiveNumberSign )?
+	//        name=( 'float'
+	//        | 'ufloat'
+	//        | 'pos_float'
+	//        | 'double'
+	//        | 'udouble'
+	//        )
+	//        ( ':' size = EInt
+	//            | '<' ( 'size:' )? size = EInt '>'
+	//        )?
+	//    ;
 	public PrimitiveFloatTypeElements getPrimitiveFloatTypeAccess() {
 		return pPrimitiveFloatType;
 	}
@@ -25534,12 +30293,17 @@
 		return getPrimitiveFloatTypeAccess().getRule();
 	}
 	
-	//PrimitiveRealType fmlType::PrimitiveRealType:
-	//	{fmlType::PrimitiveRealType} sign=PrimitiveNumberSign?
-	//	name=('real'
-	//	| 'ureal'
-	//	| 'pos_real') (':' size=EInt
-	//	| '<' 'size:'? size=EInt '>')?;
+	//PrimitiveRealType returns fmlType::PrimitiveRealType
+	//    : { fmlType::PrimitiveRealType }
+	//        ( sign=PrimitiveNumberSign )?
+	//        name=( 'real'
+	//        | 'ureal'
+	//        | 'pos_real'
+	//        )
+	//        ( ':' size = EInt
+	//            | '<' ( 'size:' )? size = EInt '>'
+	//        )?
+	//    ;
 	public PrimitiveRealTypeElements getPrimitiveRealTypeAccess() {
 		return pPrimitiveRealType;
 	}
@@ -25548,12 +30312,18 @@
 		return getPrimitiveRealTypeAccess().getRule();
 	}
 	
-	//PrimitiveTimeType fmlType::PrimitiveTimeType:
-	//	{fmlType::PrimitiveTimeType}
-	//	'time' ('<' support=PrimitiveTimeNumberType '>'
-	//	| support=PrimitiveTimeNumberType)?
-	//	| {fmlType::PrimitiveTimeType} clock?='clock' ('<' support=PrimitiveTimeNumberType '>'
-	//	| support=PrimitiveTimeNumberType)?;
+	//PrimitiveTimeType returns fmlType::PrimitiveTimeType
+	//    : { fmlType::PrimitiveTimeType }
+	//        'time'
+	//        ( '<' support=PrimitiveTimeNumberType '>'
+	//        | support=PrimitiveTimeNumberType
+	//        )?
+	//    | { fmlType::PrimitiveTimeType }
+	//        clock?='clock'
+	//        ( '<' support=PrimitiveTimeNumberType '>'
+	//        | support=PrimitiveTimeNumberType
+	//        )?
+	//    ;
 	public PrimitiveTimeTypeElements getPrimitiveTimeTypeAccess() {
 		return pPrimitiveTimeType;
 	}
@@ -25562,11 +30332,12 @@
 		return getPrimitiveTimeTypeAccess().getRule();
 	}
 	
-	//PrimitiveTimeNumberType fmlType::PrimitiveNumberType:
-	//	PrimitiveIntegerType
-	//	| PrimitiveRationalType
-	//	| PrimitiveFloatType
-	//	| PrimitiveRealType;
+	//PrimitiveTimeNumberType returns fmlType::PrimitiveNumberType
+	//    : PrimitiveIntegerType
+	//    | PrimitiveRationalType
+	//    | PrimitiveFloatType
+	//    | PrimitiveRealType
+	//    ;
 	public PrimitiveTimeNumberTypeElements getPrimitiveTimeNumberTypeAccess() {
 		return pPrimitiveTimeNumberType;
 	}
@@ -25575,11 +30346,12 @@
 		return getPrimitiveTimeNumberTypeAccess().getRule();
 	}
 	
-	//OtherPrimitiveType fmlType::PrimitiveType:
-	//	PrimitiveBooleanType
-	//	| PrimitiveCharacterType
-	//	| PrimitiveStringType
-	//	| PrimitiveInstanceType;
+	//OtherPrimitiveType returns fmlType::PrimitiveType
+	//    : PrimitiveBooleanType
+	//    | PrimitiveCharacterType
+	//    | PrimitiveStringType
+	//    | PrimitiveInstanceType
+	//    ;
 	public OtherPrimitiveTypeElements getOtherPrimitiveTypeAccess() {
 		return pOtherPrimitiveType;
 	}
@@ -25588,8 +30360,10 @@
 		return getOtherPrimitiveTypeAccess().getRule();
 	}
 	
-	//PrimitiveBooleanType fmlType::PrimitiveBooleanType:
-	//	{fmlType::PrimitiveBooleanType} name=('boolean' | 'bool');
+	//PrimitiveBooleanType returns fmlType::PrimitiveBooleanType
+	//    : { fmlType::PrimitiveBooleanType }
+	//        name=( 'boolean'| 'bool' )
+	//    ;
 	public PrimitiveBooleanTypeElements getPrimitiveBooleanTypeAccess() {
 		return pPrimitiveBooleanType;
 	}
@@ -25598,8 +30372,9 @@
 		return getPrimitiveBooleanTypeAccess().getRule();
 	}
 	
-	//PrimitiveCharacterType fmlType::PrimitiveCharacterType:
-	//	{fmlType::PrimitiveCharacterType} 'char';
+	//PrimitiveCharacterType returns fmlType::PrimitiveCharacterType
+	//    : { fmlType::PrimitiveCharacterType } 'char'
+	//    ;
 	public PrimitiveCharacterTypeElements getPrimitiveCharacterTypeAccess() {
 		return pPrimitiveCharacterType;
 	}
@@ -25608,9 +30383,13 @@
 		return getPrimitiveCharacterTypeAccess().getRule();
 	}
 	
-	//PrimitiveStringType fmlType::PrimitiveStringType:
-	//	{fmlType::PrimitiveStringType} name='string' (':' size=EInt
-	//	| '<' 'size:'? size=EInt '>')?;
+	//PrimitiveStringType returns fmlType::PrimitiveStringType
+	//    : { fmlType::PrimitiveStringType }
+	//        name='string'
+	//        ( ':' size = EInt
+	//        | '<' ( 'size:' )? size = EInt '>'
+	//        )?
+	//    ;
 	public PrimitiveStringTypeElements getPrimitiveStringTypeAccess() {
 		return pPrimitiveStringType;
 	}
@@ -25619,8 +30398,14 @@
 		return getPrimitiveStringTypeAccess().getRule();
 	}
 	
-	//enum PrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind:
-	//	buffer | message | port | signal | machine | vertex;
+	//enum PrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind
+	//    : buffer='buffer'
+	//    | message='message'
+	//    | port='port'
+	//    | signal='signal'
+	//    | machine='machine'
+	//    | vertex='vertex'
+	//    ;
 	public PrimitiveInstanceKindElements getPrimitiveInstanceKindAccess() {
 		return ePrimitiveInstanceKind;
 	}
@@ -25629,9 +30414,11 @@
 		return getPrimitiveInstanceKindAccess().getRule();
 	}
 	
-	//PrimitiveInstanceType fmlType::PrimitiveInstanceType:
-	//	{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind ('<' model=[fmlCommon::NamedElement|ESIdentifier]
-	//	'>')?;
+	//PrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+	//    : { fmlType::PrimitiveInstanceType }
+	//        expected=PrimitiveInstanceKind
+	//        ( '<' model=[fmlCommon::NamedElement|ESIdentifier] '>' )?
+	//    ;
 	public PrimitiveInstanceTypeElements getPrimitiveInstanceTypeAccess() {
 		return pPrimitiveInstanceType;
 	}
@@ -25640,11 +30427,16 @@
 		return getPrimitiveInstanceTypeAccess().getRule();
 	}
 	
-	//IntervalType fmlType::IntervalType:
-	//	{fmlType::IntervalType} name='interval'
-	//	'<'
-	//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-	//	'>';
+	//IntervalType returns fmlType::IntervalType
+	//    : {fmlType::IntervalType}
+	//        name='interval'
+	//        '<'
+	//            support=PrimitiveNumberType
+	//            ( lopen?=']' | '[' )
+	//            infimum=Expression ',' supremum=Expression
+	//            ( ']' |  ropen?='[' )
+	//        '>'
+	//    ;
 	public IntervalTypeElements getIntervalTypeAccess() {
 		return pIntervalType;
 	}
@@ -25653,13 +30445,18 @@
 		return getIntervalTypeAccess().getRule();
 	}
 	
-	//IntervalTypeDefinition fmlType::IntervalType:
-	//	{fmlType::IntervalType} visibility=VisibilityKind? 'type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'interval'
-	//	'<'
-	//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-	//	'>' ';';
+	//IntervalTypeDefinition returns fmlType::IntervalType
+	//    : {fmlType::IntervalType}
+	//        ( visibility=VisibilityKind )? 'type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'interval'
+	//        '<'
+	//            support=PrimitiveNumberType
+	//            ( lopen?=']' | '[' )
+	//            infimum=Expression ',' supremum=Expression
+	//            ( ']' |  ropen?='[' )
+	//        '>' ';'
+	//    ;
 	public IntervalTypeDefinitionElements getIntervalTypeDefinitionAccess() {
 		return pIntervalTypeDefinition;
 	}
@@ -25668,12 +30465,17 @@
 		return getIntervalTypeDefinitionAccess().getRule();
 	}
 	
-	//IntervalTypeDefinitionImpl fmlType::IntervalType:
-	//	{fmlType::IntervalType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'interval'
-	//	'<'
-	//	support=PrimitiveNumberType (lopen?=']' | '[') infimum=Expression ',' supremum=Expression (']' | ropen?='[')
-	//	'>' ';';
+	//IntervalTypeDefinitionImpl returns fmlType::IntervalType
+	//    : {fmlType::IntervalType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'interval'
+	//        '<'
+	//            support=PrimitiveNumberType
+	//            ( lopen?=']' | '[' )
+	//            infimum=Expression ',' supremum=Expression
+	//            ( ']' |  ropen?='[' )
+	//        '>' ';'
+	//    ;
 	public IntervalTypeDefinitionImplElements getIntervalTypeDefinitionImplAccess() {
 		return pIntervalTypeDefinitionImpl;
 	}
@@ -25685,10 +30487,14 @@
 	//// TODO
 	//// mettre à jour la grammaire par rapport au noyau, i.e.
 	//// CollectionKind | CollectionKind< size > | CollectionKind< type , size >
-	//CollectionType fmlType::CollectionType:
-	//	{fmlType::CollectionType} container=CollectionKind ('<'
-	//	support=DataType (',' (size=EInt | unbounded?='*'))?
-	//	'>')?;
+	//CollectionType returns fmlType::CollectionType
+	//    : {fmlType::CollectionType}
+	//        container = CollectionKind
+	//        ( '<'
+	//            support=DataType
+	//            ( ',' ( size=EInt | unbounded?='*' ) )?
+	//        '>' )?
+	//    ;
 	public CollectionTypeElements getCollectionTypeAccess() {
 		return pCollectionType;
 	}
@@ -25697,13 +30503,16 @@
 		return getCollectionTypeAccess().getRule();
 	}
 	
-	//CollectionTypeDefinition fmlType::CollectionType:
-	//	{fmlType::CollectionType} visibility=VisibilityKind? 'type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	container=CollectionKind
-	//	'<'
-	//	support=DataType (',' (size=EInt | unbounded?='*'))?
-	//	'>' ';';
+	//CollectionTypeDefinition returns fmlType::CollectionType
+	//    : {fmlType::CollectionType}
+	//        ( visibility=VisibilityKind )? 'type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        container = CollectionKind
+	//        '<'
+	//            support=DataType
+	//            ( ',' ( size=EInt | unbounded?='*' ) )?
+	//        '>' ';'
+	//    ;
 	public CollectionTypeDefinitionElements getCollectionTypeDefinitionAccess() {
 		return pCollectionTypeDefinition;
 	}
@@ -25712,12 +30521,15 @@
 		return getCollectionTypeDefinitionAccess().getRule();
 	}
 	
-	//CollectionTypeDefinitionImpl fmlType::CollectionType:
-	//	{fmlType::CollectionType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	container=CollectionKind
-	//	'<'
-	//	support=DataType (',' (size=EInt | unbounded?='*'))?
-	//	'>' ';';
+	//CollectionTypeDefinitionImpl returns fmlType::CollectionType
+	//    : {fmlType::CollectionType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        container = CollectionKind
+	//        '<'
+	//            support=DataType
+	//            ( ',' ( size=EInt | unbounded?='*' ) )?
+	//        '>' ';'
+	//    ;
 	public CollectionTypeDefinitionImplElements getCollectionTypeDefinitionImplAccess() {
 		return pCollectionTypeDefinitionImpl;
 	}
@@ -25726,8 +30538,15 @@
 		return getCollectionTypeDefinitionImplAccess().getRule();
 	}
 	
-	//enum CollectionKind returns fmlType::CollectionKind:
-	//	vector | rvector | list | set | bag | fifo | lifo;
+	//enum CollectionKind returns fmlType::CollectionKind
+	//    : vector = 'vector'
+	//    | rvector = 'rvector'
+	//    | list='list'
+	//    | set = 'set'
+	//    | bag = 'bag'
+	//    | fifo = 'fifo'
+	//    | lifo = 'lifo'
+	//    ;
 	public CollectionKindElements getCollectionKindAccess() {
 		return eCollectionKind;
 	}
@@ -25736,12 +30555,13 @@
 		return getCollectionKindAccess().getRule();
 	}
 	
-	//EnumerationType fmlType::EnumerationType:
-	//	{fmlType::EnumerationType}
-	//	'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-	//	'{'
-	//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-	//	'}';
+	//EnumerationType returns fmlType::EnumerationType
+	//    : {fmlType::EnumerationType}
+	//        'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+	//        '{'
+	//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+	//        '}'
+	//    ;
 	public EnumerationTypeElements getEnumerationTypeAccess() {
 		return pEnumerationType;
 	}
@@ -25750,13 +30570,15 @@
 		return getEnumerationTypeAccess().getRule();
 	}
 	
-	//EnumerationTypeDefinition fmlType::EnumerationType:
-	//	{fmlType::EnumerationType} visibility=VisibilityKind? typedef?='type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-	//	'{'
-	//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-	//	'}';
+	//EnumerationTypeDefinition returns fmlType::EnumerationType
+	//    : {fmlType::EnumerationType}
+	//        ( visibility=VisibilityKind )? typedef?='type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'enum'  ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+	//        '{'
+	//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+	//        '}'
+	//    ;
 	public EnumerationTypeDefinitionElements getEnumerationTypeDefinitionAccess() {
 		return pEnumerationTypeDefinition;
 	}
@@ -25765,12 +30587,15 @@
 		return getEnumerationTypeDefinitionAccess().getRule();
 	}
 	
-	//EnumerationTypeDefinitionImpl fmlType::EnumerationType:
-	//	{fmlType::EnumerationType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	typedef?='enum' ('<' 'super:'? superType=[fmlType::EnumerationType|ESUfid] '>')?
-	//	'{'
-	//	literal+=EnumerationLiteral (',' literal+=EnumerationLiteral)*
-	//	'}';
+	//EnumerationTypeDefinitionImpl returns fmlType::EnumerationType
+	//    : {fmlType::EnumerationType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        typedef?='enum'
+	//        ( '<' ( 'super:' )? superType=[fmlType::EnumerationType|ESUfid] '>') ?
+	//        '{'
+	//            literal+= EnumerationLiteral  ( ',' literal+= EnumerationLiteral )*
+	//        '}'
+	//    ;
 	public EnumerationTypeDefinitionImplElements getEnumerationTypeDefinitionImplAccess() {
 		return pEnumerationTypeDefinitionImpl;
 	}
@@ -25779,8 +30604,10 @@
 		return getEnumerationTypeDefinitionImplAccess().getRule();
 	}
 	
-	//EnumerationLiteral fmlType::EnumerationLiteral:
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' value=LiteralTerminalExpression)?;
+	//EnumerationLiteral returns fmlType::EnumerationLiteral
+	//    : name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '=' value=LiteralTerminalExpression )?
+	//    ;
 	public EnumerationLiteralElements getEnumerationLiteralAccess() {
 		return pEnumerationLiteral;
 	}
@@ -25789,13 +30616,14 @@
 		return getEnumerationLiteralAccess().getRule();
 	}
 	
-	//StructureType fmlType::StructureType:
-	//	{fmlType::StructureType}
-	//	'struct'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//StructureType returns fmlType::StructureType
+	//    : {fmlType::StructureType}
+	//        'struct'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public StructureTypeElements getStructureTypeAccess() {
 		return pStructureType;
 	}
@@ -25804,14 +30632,16 @@
 		return getStructureTypeAccess().getRule();
 	}
 	
-	//StructureTypeDefinition fmlType::StructureType:
-	//	{fmlType::StructureType} visibility=VisibilityKind? typedef?='type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'struct'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//StructureTypeDefinition returns fmlType::StructureType
+	//    : {fmlType::StructureType}
+	//        ( visibility=VisibilityKind )? typedef?='type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'struct'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public StructureTypeDefinitionElements getStructureTypeDefinitionAccess() {
 		return pStructureTypeDefinition;
 	}
@@ -25820,13 +30650,15 @@
 		return getStructureTypeDefinitionAccess().getRule();
 	}
 	
-	//StructureTypeDefinitionImpl fmlType::StructureType:
-	//	{fmlType::StructureType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	typedef?='struct'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//StructureTypeDefinitionImpl returns fmlType::StructureType
+	//    : {fmlType::StructureType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        typedef?='struct'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public StructureTypeDefinitionImplElements getStructureTypeDefinitionImplAccess() {
 		return pStructureTypeDefinitionImpl;
 	}
@@ -25835,13 +30667,14 @@
 		return getStructureTypeDefinitionImplAccess().getRule();
 	}
 	
-	//UnionType fmlType::UnionType:
-	//	{fmlType::UnionType}
-	//	'union'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//UnionType returns fmlType::UnionType
+	//    : {fmlType::UnionType}
+	//        'union'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public UnionTypeElements getUnionTypeAccess() {
 		return pUnionType;
 	}
@@ -25850,14 +30683,16 @@
 		return getUnionTypeAccess().getRule();
 	}
 	
-	//UnionTypeDefinition fmlType::UnionType:
-	//	{fmlType::UnionType} visibility=VisibilityKind? typedef?='type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'union'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//UnionTypeDefinition returns fmlType::UnionType
+	//    : {fmlType::UnionType}
+	//        ( visibility=VisibilityKind )? typedef?='type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'union'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public UnionTypeDefinitionElements getUnionTypeDefinitionAccess() {
 		return pUnionTypeDefinition;
 	}
@@ -25866,13 +30701,15 @@
 		return getUnionTypeDefinitionAccess().getRule();
 	}
 	
-	//UnionTypeDefinitionImpl fmlType::UnionType:
-	//	{fmlType::UnionType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	typedef?='union'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//UnionTypeDefinitionImpl returns fmlType::UnionType
+	//    : {fmlType::UnionType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        typedef?='union'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public UnionTypeDefinitionImplElements getUnionTypeDefinitionImplAccess() {
 		return pUnionTypeDefinitionImpl;
 	}
@@ -25881,13 +30718,14 @@
 		return getUnionTypeDefinitionImplAccess().getRule();
 	}
 	
-	//ChoiceType fmlType::ChoiceType:
-	//	{fmlType::ChoiceType}
-	//	'choice'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//ChoiceType returns fmlType::ChoiceType
+	//    : {fmlType::ChoiceType}
+	//        'choice'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public ChoiceTypeElements getChoiceTypeAccess() {
 		return pChoiceType;
 	}
@@ -25896,14 +30734,16 @@
 		return getChoiceTypeAccess().getRule();
 	}
 	
-	//ChoiceTypeDefinition fmlType::ChoiceType:
-	//	{fmlType::ChoiceType} visibility=VisibilityKind? typedef?='type'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'choice'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//ChoiceTypeDefinition returns fmlType::ChoiceType
+	//    : {fmlType::ChoiceType}
+	//        ( visibility=VisibilityKind )? typedef?='type'
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        'choice'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public ChoiceTypeDefinitionElements getChoiceTypeDefinitionAccess() {
 		return pChoiceTypeDefinition;
 	}
@@ -25912,13 +30752,15 @@
 		return getChoiceTypeDefinitionAccess().getRule();
 	}
 	
-	//ChoiceTypeDefinitionImpl fmlType::ChoiceType:
-	//	{fmlType::ChoiceType} name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	typedef?='choice'
-	//	'{'
-	//	'@property:'?
-	//	property+=Variable+
-	//	'}';
+	//ChoiceTypeDefinitionImpl returns fmlType::ChoiceType
+	//    : {fmlType::ChoiceType}
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        typedef?='choice'
+	//        '{'
+	//            ( '@property:' )?
+	//            ( property+=Variable )+
+	//        '}'
+	//    ;
 	public ChoiceTypeDefinitionImplElements getChoiceTypeDefinitionImplAccess() {
 		return pChoiceTypeDefinitionImpl;
 	}
@@ -25929,51 +30771,55 @@
 	
 	///*
 	//enum TypeSpecifyerKind returns TypeSpecifyerKind
-	//	: ALIAS = 'ALIAS'
-	//	| BOOLEAN = 'BOOLEAN'
-	//	| CHAR = 'CHAR'
-	//	| INT = 'INT'
-	//	| RATIONAL = 'RATIONAL'
-	//	| URATIONAL = 'URATIONAL'
-	//	| FLOAT = 'FLOAT'
-	//	| UFLOAT = 'UFLOAT'
-	//	| DOUBLE = 'DOUBLE'
-	//	| UDOUBLE = 'UDOUBLE'
-	//	| REAL = 'REAL'
-	//	| UREAL = 'UREAL'
-	//	| CTIME = 'CTIME'
-	//	| DTIME = 'DTIME'
-	//	| STRING = 'STRING'
-	//	| IDENTIFIER = 'IDENTIFIER'
-	//	| UFI = 'UFI'
-	//	| ARRAY = 'ARRAY'
-	//	| VECTOR = 'VECTOR'
-	//	| LIST = 'LIST'
-	//	| FIFO = 'FIFO'
-	//	| LIFO = 'LIFO'
-	//	| MULTISET = 'MULTISET'
-	//	| SET = 'SET'
-	//	| INTERVAL = 'INTERVAL'
-	//	| ENUM = 'ENUM'
-	//	| STRUCTURE = 'STRUCTURE'
-	//	| BUFFER = 'BUFFER'
-	//	| MESSAGE = 'MESSAGE'
-	//	| PORT = 'PORT'
-	//	| CONNECTION = 'CONNECTION'
-	//	| OPERATOR = 'OPERATOR'
-	//	| MACHINE = 'MACHINE'
-	//	| LAMBDA = 'LAMBDA'
-	//	| UNIVERSAL = 'UNIVERSAL'
-	//	;
-	//*/ ////////////////////////////////////////////////////////////////////////////////
+	//    : ALIAS = 'ALIAS'
+	//    | BOOLEAN = 'BOOLEAN'
+	//    | CHAR = 'CHAR'
+	//    | INT = 'INT'
+	//    | RATIONAL = 'RATIONAL'
+	//    | URATIONAL = 'URATIONAL'
+	//    | FLOAT = 'FLOAT'
+	//    | UFLOAT = 'UFLOAT'
+	//    | DOUBLE = 'DOUBLE'
+	//    | UDOUBLE = 'UDOUBLE'
+	//    | REAL = 'REAL'
+	//    | UREAL = 'UREAL'
+	//    | CTIME = 'CTIME'
+	//    | DTIME = 'DTIME'
+	//    | STRING = 'STRING'
+	//    | IDENTIFIER = 'IDENTIFIER'
+	//    | UFI = 'UFI'
+	//    | ARRAY = 'ARRAY'
+	//    | VECTOR = 'VECTOR'
+	//    | LIST = 'LIST'
+	//    | FIFO = 'FIFO'
+	//    | LIFO = 'LIFO'
+	//    | MULTISET = 'MULTISET'
+	//    | SET = 'SET'
+	//    | INTERVAL = 'INTERVAL'
+	//    | ENUM = 'ENUM'
+	//    | STRUCTURE = 'STRUCTURE'
+	//    | BUFFER = 'BUFFER'
+	//    | MESSAGE = 'MESSAGE'
+	//    | PORT = 'PORT'
+	//    | CONNECTION = 'CONNECTION'
+	//    | OPERATOR = 'OPERATOR'
+	//    | MACHINE = 'MACHINE'
+	//    | LAMBDA = 'LAMBDA'
+	//    | UNIVERSAL = 'UNIVERSAL'
+	//    ;
+	//*/
+	//////////////////////////////////////////////////////////////////////////////////
 	//// Modifier Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Modifier fmlInfra::Modifier:
-	//	{fmlInfra::Modifier} (static?='static'?
-	//	& final?='final'?
-	//	& volatile?='volatile'?
-	//	& transient?='transient'?
-	//	& optional?='optional'?);
+	//Modifier returns fmlInfra::Modifier
+	//    : {fmlInfra::Modifier}
+	//        ( ( static?='static' )?
+	//        & ( final ?='final'  )?
+	//        & ( volatile ?='volatile'  )?
+	//        & ( transient?='transient' )?
+	//        & ( optional?='optional' )?
+	//        )
+	//    ;
 	public ModifierElements getModifierAccess() {
 		return pModifier;
 	}
@@ -25985,14 +30831,20 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Function Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Function fmlInfra::Function:
-	//	{fmlInfra::Function} (visibility=VisibilityKind
-	//	& modifier=Modifier)?
-	//	'fun'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')?
-	//	'->' (resultSet=FormalParameterSet
-	//	| '(' resultSet=FormalParameterSet ')')
-	//	';';
+	//Function returns fmlInfra::Function
+	//    : {fmlInfra::Function}
+	//        ( visibility=VisibilityKind
+	//          & modifier=Modifier
+	//        )?
+	//        'fun'
+	//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        '->'
+	//        (     resultSet=FormalParameterSet
+	//        | '(' resultSet=FormalParameterSet ')'
+	//        )
+	//        ';'
+	//    ;
 	public FunctionElements getFunctionAccess() {
 		return pFunction;
 	}
@@ -26001,13 +30853,18 @@
 		return getFunctionAccess().getRule();
 	}
 	
-	//FunctionImpl fmlInfra::Function:
-	//	{fmlInfra::Function} modifier=Modifier?
-	//	'fun'
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('(' parameterSet=FormalParameterSet? ')')?
-	//	'->' (resultSet=FormalParameterSet
-	//	| '(' resultSet=FormalParameterSet ')')
-	//	';';
+	//FunctionImpl returns fmlInfra::Function
+	//    : {fmlInfra::Function}
+	//        ( modifier=Modifier )?
+	//        'fun'
+	//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        '->'
+	//        (     resultSet=FormalParameterSet
+	//        | '(' resultSet=FormalParameterSet ')'
+	//        )
+	//        ';'
+	//    ;
 	public FunctionImplElements getFunctionImplAccess() {
 		return pFunctionImpl;
 	}
@@ -26016,8 +30873,9 @@
 		return getFunctionImplAccess().getRule();
 	}
 	
-	//FunctionPublic fmlInfra::Function:
-	//	FunctionImpl;
+	//FunctionPublic returns fmlInfra::Function
+	//    : FunctionImpl
+	//    ;
 	public FunctionPublicElements getFunctionPublicAccess() {
 		return pFunctionPublic;
 	}
@@ -26026,8 +30884,9 @@
 		return getFunctionPublicAccess().getRule();
 	}
 	
-	//FunctionProtected fmlInfra::Function:
-	//	FunctionImpl;
+	//FunctionProtected returns fmlInfra::Function
+	//    : FunctionImpl
+	//    ;
 	public FunctionProtectedElements getFunctionProtectedAccess() {
 		return pFunctionProtected;
 	}
@@ -26036,8 +30895,9 @@
 		return getFunctionProtectedAccess().getRule();
 	}
 	
-	//FunctionPrivate fmlInfra::Function:
-	//	FunctionImpl;
+	//FunctionPrivate returns fmlInfra::Function
+	//    : FunctionImpl
+	//    ;
 	public FunctionPrivateElements getFunctionPrivateAccess() {
 		return pFunctionPrivate;
 	}
@@ -26049,11 +30909,14 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Variable Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//ModifierVar fmlInfra::Modifier:
-	//	{fmlInfra::Modifier} (static?='static'?
-	//	& final?=('final' | 'const')?
-	//	& volatile?='volatile'?
-	//	& transient?='transient'?);
+	//ModifierVar returns fmlInfra::Modifier
+	//    : {fmlInfra::Modifier}
+	//        ( ( static?='static' )?
+	//        & ( final ?=('final' | 'const') )?
+	//        & ( volatile ?='volatile'  )?
+	//        & ( transient?='transient' )?
+	//        )
+	//    ;
 	public ModifierVarElements getModifierVarAccess() {
 		return pModifierVar;
 	}
@@ -26062,13 +30925,21 @@
 		return getModifierVarAccess().getRule();
 	}
 	
-	//Variable fmlInfra::Variable:
-	//	(visibility=VisibilityKind?
-	//	& modifier=Modifier?) ('var' | const?='val'
-	//	| (const?='const' | const?='final') macro?='macro'? 'var'?
-	//	| macro?='macro' ('var' | const?='val')?) type=DataType reference?='&'?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine
-	//	'}' | ';');
+	//Variable returns fmlInfra::Variable
+	//    : ( ( visibility=VisibilityKind )?
+	//        & ( modifier=Modifier )?
+	//        )
+	//        ( 'var' | const?='val'
+	//        | ( const?='const' | const?='final' ) ( macro?='macro' )? ( 'var' )?
+	//        | macro?='macro' ( 'var' | const?='val' )?
+	//        )
+	//         type=DataType  ( reference?='&' )?
+	//         name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '=' defaultValue=Expression )?
+	//        ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+	//        | ';'
+	//        )
+	//    ;
 	public VariableElements getVariableAccess() {
 		return pVariable;
 	}
@@ -26077,12 +30948,19 @@
 		return getVariableAccess().getRule();
 	}
 	
-	//VariableImpl fmlInfra::Variable:
-	//	modifier=Modifier? ('var' | const?='val'
-	//	| const?='const' macro?='macro'? 'var'?
-	//	| macro?='macro' ('var' | const?='val')?) type=DataType reference?='&'?
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ('{' onWriteAction=OnWriteRoutine
-	//	'}' | ';');
+	//VariableImpl returns fmlInfra::Variable
+	//    : ( modifier=Modifier )?
+	//        ( 'var' | const?='val'
+	//        | const?='const' ( macro?='macro' )? ( 'var' )?
+	//        | macro?='macro' ( 'var' | const?='val' )?
+	//        )
+	//         type=DataType  ( reference?='&' )?
+	//         name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '=' defaultValue=Expression )?
+	//        ( ( '{' onWriteAction=OnWriteRoutine  '}' )
+	//        | ';'
+	//        )
+	//    ;
 	public VariableImplElements getVariableImplAccess() {
 		return pVariableImpl;
 	}
@@ -26091,9 +30969,12 @@
 		return getVariableImplAccess().getRule();
 	}
 	
-	//OnWriteRoutine fmlInfra::Routine:
-	//	{fmlInfra::Routine} ('@write' | '@on_write') ('(' parameterSet=VariableRoutineParameterSet ')')?
-	//	bodyBlock=BlockStatement;
+	//OnWriteRoutine returns fmlInfra::Routine
+	//    : { fmlInfra::Routine }
+	//        ( '@write' | '@on_write' )
+	//        ( '(' parameterSet=VariableRoutineParameterSet ')' )?
+	//        bodyBlock=BlockStatement
+	//    ;
 	public OnWriteRoutineElements getOnWriteRoutineAccess() {
 		return pOnWriteRoutine;
 	}
@@ -26102,8 +30983,10 @@
 		return getOnWriteRoutineAccess().getRule();
 	}
 	
-	//VariableRoutineParameterSet fmlInfra::ParameterSet:
-	//	{fmlInfra::ParameterSet} parameter+=VariableRoutineParameter;
+	//VariableRoutineParameterSet returns fmlInfra::ParameterSet
+	//    : {fmlInfra::ParameterSet}
+	//        parameter+=VariableRoutineParameter
+	//    ;
 	public VariableRoutineParameterSetElements getVariableRoutineParameterSetAccess() {
 		return pVariableRoutineParameterSet;
 	}
@@ -26112,11 +30995,13 @@
 		return getVariableRoutineParameterSetAccess().getRule();
 	}
 	
-	//VariableRoutineParameter fmlInfra::Parameter:
-	//	FormalParameterOffset?
-	//	direction=ParameterDirectionKind?
-	//	type=DataType?
-	//	name=ESIdentifier ('=' defaultValue=Expression)?;
+	//VariableRoutineParameter returns fmlInfra::Parameter
+	//    : ( FormalParameterOffset )?
+	//        ( direction=ParameterDirectionKind )?
+	//        ( type=DataType )?
+	//        name=ESIdentifier
+	//        ( '=' defaultValue=Expression )?
+	//    ;
 	public VariableRoutineParameterElements getVariableRoutineParameterAccess() {
 		return pVariableRoutineParameter;
 	}
@@ -26125,8 +31010,9 @@
 		return getVariableRoutineParameterAccess().getRule();
 	}
 	
-	//VariablePublic fmlInfra::Variable:
-	//	VariableImpl;
+	//VariablePublic returns fmlInfra::Variable
+	//    : VariableImpl
+	//    ;
 	public VariablePublicElements getVariablePublicAccess() {
 		return pVariablePublic;
 	}
@@ -26135,8 +31021,9 @@
 		return getVariablePublicAccess().getRule();
 	}
 	
-	//VariableProtected fmlInfra::Variable:
-	//	VariableImpl;
+	//VariableProtected returns fmlInfra::Variable
+	//    : VariableImpl
+	//    ;
 	public VariableProtectedElements getVariableProtectedAccess() {
 		return pVariableProtected;
 	}
@@ -26145,8 +31032,9 @@
 		return getVariableProtectedAccess().getRule();
 	}
 	
-	//VariablePrivate fmlInfra::Variable:
-	//	VariableImpl;
+	//VariablePrivate returns fmlInfra::Variable
+	//    : VariableImpl
+	//    ;
 	public VariablePrivateElements getVariablePrivateAccess() {
 		return pVariablePrivate;
 	}
@@ -26155,10 +31043,17 @@
 		return getVariablePrivateAccess().getRule();
 	}
 	
-	//enum ParameterDirectionKind returns fmlInfra::ParameterDirectionKind:
-	//	in | in='input'
-	//	| inout | out | out='output'
-	//	| return;
+	//////////////////////////////////////////////////////////////////////////////////
+	//// Functional ParameterSet Rules
+	//////////////////////////////////////////////////////////////////////////////////
+	//enum ParameterDirectionKind returns fmlInfra::ParameterDirectionKind
+	//    : in     = 'in'
+	//    | in     = 'input'
+	//    | inout  = 'inout'
+	//    | out    = 'out'
+	//    | out    = 'output'
+	//    | return = 'return'
+	//    ;
 	public ParameterDirectionKindElements getParameterDirectionKindAccess() {
 		return eParameterDirectionKind;
 	}
@@ -26167,8 +31062,11 @@
 		return getParameterDirectionKindAccess().getRule();
 	}
 	
-	//FunctionalParameterSet fmlInfra::ParameterSet:
-	//	{fmlInfra::ParameterSet} parameter+=FunctionalParameter (',' parameter+=FunctionalParameter)*;
+	//FunctionalParameterSet returns fmlInfra::ParameterSet
+	//    : {fmlInfra::ParameterSet}
+	//        parameter+=FunctionalParameter
+	//        ( ',' parameter+=FunctionalParameter )*
+	//    ;
 	public FunctionalParameterSetElements getFunctionalParameterSetAccess() {
 		return pFunctionalParameterSet;
 	}
@@ -26177,9 +31075,12 @@
 		return getFunctionalParameterSetAccess().getRule();
 	}
 	
-	//FunctionalParameter fmlInfra::Parameter:
-	//	{fmlInfra::Parameter} direction=ParameterDirectionKind? type=DataType
-	//	name=ESIdentifier ('=' defaultValue=Expression)?;
+	//FunctionalParameter returns fmlInfra::Parameter
+	//    : {fmlInfra::Parameter}
+	//        ( direction=ParameterDirectionKind )?  type=DataType
+	//         name=ESIdentifier
+	//        ( '=' defaultValue=Expression )?
+	//    ;
 	public FunctionalParameterElements getFunctionalParameterAccess() {
 		return pFunctionalParameter;
 	}
@@ -26188,8 +31089,11 @@
 		return getFunctionalParameterAccess().getRule();
 	}
 	
-	//FormalParameterSet fmlInfra::ParameterSet:
-	//	{fmlInfra::ParameterSet} parameter+=FormalParameter (',' parameter+=FormalParameter)*;
+	//FormalParameterSet returns fmlInfra::ParameterSet
+	//    : {fmlInfra::ParameterSet}
+	//        parameter+=FormalParameter
+	//        ( ',' parameter+=FormalParameter )*
+	//    ;
 	public FormalParameterSetElements getFormalParameterSetAccess() {
 		return pFormalParameterSet;
 	}
@@ -26198,10 +31102,13 @@
 		return getFormalParameterSetAccess().getRule();
 	}
 	
-	//FormalParameter fmlInfra::Parameter:
-	//	{fmlInfra::Parameter} FormalParameterOffset?
-	//	direction=ParameterDirectionKind? modifier=Modifier?
-	//	type=DataType name=ESIdentifier? ('=' defaultValue=Expression)?;
+	//FormalParameter returns fmlInfra::Parameter
+	//    : {fmlInfra::Parameter}
+	//        ( FormalParameterOffset )?
+	//        ( direction=ParameterDirectionKind )? ( modifier=Modifier )?
+	//        type=DataType  ( name=ESIdentifier )?
+	//        ( '=' defaultValue=Expression )?
+	//    ;
 	public FormalParameterElements getFormalParameterAccess() {
 		return pFormalParameter;
 	}
@@ -26210,8 +31117,9 @@
 		return getFormalParameterAccess().getRule();
 	}
 	
-	//FormalParameterOffset:
-	//	EOffset;
+	//FormalParameterOffset
+	//    : EOffset
+	//    ;
 	public FormalParameterOffsetElements getFormalParameterOffsetAccess() {
 		return pFormalParameterOffset;
 	}
@@ -26223,12 +31131,26 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Block ParameterSet Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//BlockParameterSet fmlInfra::ParameterSet:
-	//	{fmlInfra::ParameterSet} ('input' (parameter+=ParameterInput
-	//	| '{' parameter+=ParameterInput+ '}') | 'inout' (parameter+=ParameterInout
-	//	| '{' parameter+=ParameterInout+ '}') | 'output' (parameter+=ParameterOutput
-	//	| '{' parameter+=ParameterOutput+ '}') | 'return' (parameter+=ParameterReturn
-	//	| '{' parameter+=ParameterReturn+ '}'))*;
+	//BlockParameterSet returns fmlInfra::ParameterSet
+	//    : {fmlInfra::ParameterSet}
+	//        ( 'input'
+	//            ( parameter+=ParameterInput
+	//            | '{' ( parameter+=ParameterInput )+ '}'
+	//            )
+	//        | 'inout'
+	//            ( parameter+=ParameterInout
+	//            | '{' ( parameter+=ParameterInout )+ '}'
+	//            )
+	//        | 'output'
+	//            ( parameter+=ParameterOutput
+	//            | '{' ( parameter+=ParameterOutput )+ '}'
+	//            )
+	//        | 'return'
+	//            ( parameter+=ParameterReturn
+	//            | '{' ( parameter+=ParameterReturn )+ '}'
+	//            )
+	//        )*
+	//    ;
 	public BlockParameterSetElements getBlockParameterSetAccess() {
 		return pBlockParameterSet;
 	}
@@ -26237,11 +31159,14 @@
 		return getBlockParameterSetAccess().getRule();
 	}
 	
-	//Parameter fmlInfra::Parameter:
-	//	{fmlInfra::Parameter} visibility=VisibilityKind?
-	//	direction=ParameterDirectionKind
-	//	'var' type=DataType
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ';';
+	//Parameter returns fmlInfra::Parameter
+	//    : {fmlInfra::Parameter}
+	//        ( visibility=VisibilityKind )?
+	//        direction=ParameterDirectionKind
+	//        'var'  type=DataType
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '=' defaultValue=Expression )?  ';'
+	//    ;
 	public ParameterElements getParameterAccess() {
 		return pParameter;
 	}
@@ -26250,10 +31175,12 @@
 		return getParameterAccess().getRule();
 	}
 	
-	//ParameterImpl fmlInfra::Parameter:
-	//	{fmlInfra::Parameter}
-	//	'var' type=DataType
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ('=' defaultValue=Expression)? ';';
+	//ParameterImpl returns fmlInfra::Parameter
+	//    : {fmlInfra::Parameter}
+	//        'var'  type=DataType
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '=' defaultValue=Expression )?  ';'
+	//    ;
 	public ParameterImplElements getParameterImplAccess() {
 		return pParameterImpl;
 	}
@@ -26262,8 +31189,9 @@
 		return getParameterImplAccess().getRule();
 	}
 	
-	//ParameterInput fmlInfra::Parameter:
-	//	ParameterImpl;
+	//ParameterInput returns fmlInfra::Parameter
+	//    : ParameterImpl
+	//    ;
 	public ParameterInputElements getParameterInputAccess() {
 		return pParameterInput;
 	}
@@ -26272,8 +31200,9 @@
 		return getParameterInputAccess().getRule();
 	}
 	
-	//ParameterInout fmlInfra::Parameter:
-	//	ParameterImpl;
+	//ParameterInout returns fmlInfra::Parameter
+	//    : ParameterImpl
+	//    ;
 	public ParameterInoutElements getParameterInoutAccess() {
 		return pParameterInout;
 	}
@@ -26282,8 +31211,9 @@
 		return getParameterInoutAccess().getRule();
 	}
 	
-	//ParameterOutput fmlInfra::Parameter:
-	//	ParameterImpl;
+	//ParameterOutput returns fmlInfra::Parameter
+	//    : ParameterImpl
+	//    ;
 	public ParameterOutputElements getParameterOutputAccess() {
 		return pParameterOutput;
 	}
@@ -26292,8 +31222,9 @@
 		return getParameterOutputAccess().getRule();
 	}
 	
-	//ParameterReturn fmlInfra::Parameter:
-	//	ParameterImpl;
+	//ParameterReturn returns fmlInfra::Parameter
+	//    : ParameterImpl
+	//    ;
 	public ParameterReturnElements getParameterReturnAccess() {
 		return pParameterReturn;
 	}
@@ -26305,9 +31236,13 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Buffer Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//BufferContainerType fmlType::CollectionType:
-	//	{fmlType::CollectionType} container=BufferContainerKind ('<' ('size:'? size=EInt | unbounded?='*')? '>'
-	//	| '[' ('size:'? size=EInt | unbounded?='*')? ']')?;
+	//BufferContainerType returns fmlType::CollectionType
+	//    : {fmlType::CollectionType}
+	//        container = BufferContainerKind
+	//        ( '<' ( ( 'size:' )? size=EInt | unbounded?='*' )? '>'
+	//        | '[' ( ( 'size:' )? size=EInt | unbounded?='*' )? ']'
+	//        )?
+	//    ;
 	public BufferContainerTypeElements getBufferContainerTypeAccess() {
 		return pBufferContainerType;
 	}
@@ -26316,8 +31251,12 @@
 		return getBufferContainerTypeAccess().getRule();
 	}
 	
-	//enum BufferContainerKind returns fmlType::CollectionKind:
-	//	set | bag | fifo | lifo;
+	//enum BufferContainerKind returns fmlType::CollectionKind
+	//    : set  = 'set'
+	//    | bag  = 'bag'
+	//    | fifo = 'fifo'
+	//    | lifo = 'lifo'
+	//    ;
 	public BufferContainerKindElements getBufferContainerKindAccess() {
 		return eBufferContainerKind;
 	}
@@ -26326,11 +31265,14 @@
 		return getBufferContainerKindAccess().getRule();
 	}
 	
-	//Buffer fmlInfra::Buffer:
-	//	{fmlInfra::Buffer} (visibility=VisibilityKind
-	//	& modifier=Modifier)?
-	//	'buffer' type=BufferContainerType
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ';';
+	//Buffer returns fmlInfra::Buffer
+	//    : {fmlInfra::Buffer}
+	//        ( visibility=VisibilityKind
+	//          & modifier=Modifier
+	//        )?
+	//        'buffer' type=BufferContainerType
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
+	//    ;
 	public BufferElements getBufferAccess() {
 		return pBuffer;
 	}
@@ -26339,10 +31281,12 @@
 		return getBufferAccess().getRule();
 	}
 	
-	//BufferImpl fmlInfra::Buffer:
-	//	{fmlInfra::Buffer} modifier=Modifier?
-	//	'buffer' type=BufferContainerType
-	//	name=ESIdentifier unrestrictedName=UnrestrictedName? ';';
+	//BufferImpl returns fmlInfra::Buffer
+	//    : {fmlInfra::Buffer}
+	//        ( modifier=Modifier )?
+	//        'buffer' type=BufferContainerType
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )? ';'
+	//    ;
 	public BufferImplElements getBufferImplAccess() {
 		return pBufferImpl;
 	}
@@ -26351,8 +31295,9 @@
 		return getBufferImplAccess().getRule();
 	}
 	
-	//BufferPublic fmlInfra::Buffer:
-	//	BufferImpl;
+	//BufferPublic returns fmlInfra::Buffer
+	//    : BufferImpl
+	//    ;
 	public BufferPublicElements getBufferPublicAccess() {
 		return pBufferPublic;
 	}
@@ -26361,8 +31306,9 @@
 		return getBufferPublicAccess().getRule();
 	}
 	
-	//BufferProtected fmlInfra::Buffer:
-	//	BufferImpl;
+	//BufferProtected returns fmlInfra::Buffer
+	//    : BufferImpl
+	//    ;
 	public BufferProtectedElements getBufferProtectedAccess() {
 		return pBufferProtected;
 	}
@@ -26371,8 +31317,9 @@
 		return getBufferProtectedAccess().getRule();
 	}
 	
-	//BufferPrivate fmlInfra::Buffer:
-	//	BufferImpl;
+	//BufferPrivate returns fmlInfra::Buffer
+	//    : BufferImpl
+	//    ;
 	public BufferPrivateElements getBufferPrivateAccess() {
 		return pBufferPrivate;
 	}
@@ -26384,12 +31331,18 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Port rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Port fmlInfra::Port:
-	//	{fmlInfra::Port} (visibility=VisibilityKind
-	//	& modifier=Modifier)? (direction=ChannelDirection 'port'
-	//	| 'port' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-	//	parameterSet=FormalParameterSet? ')')?
-	//	';';
+	//Port returns fmlInfra::Port
+	//    : {fmlInfra::Port}
+	//        ( visibility=VisibilityKind
+	//          & modifier=Modifier
+	//        )?
+	//        ( direction=ChannelDirection  'port'
+	//        | 'port'  ( direction=ChannelDirection )?
+	//        )
+	//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ';'
+	//    ;
 	public PortElements getPortAccess() {
 		return pPort;
 	}
@@ -26398,11 +31351,16 @@
 		return getPortAccess().getRule();
 	}
 	
-	//PortImpl fmlInfra::Port:
-	//	{fmlInfra::Port} modifier=Modifier? (direction=ChannelDirection 'port'
-	//	| 'port' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-	//	parameterSet=FormalParameterSet? ')')?
-	//	';';
+	//PortImpl returns fmlInfra::Port
+	//    : {fmlInfra::Port}
+	//        ( modifier=Modifier )?
+	//        ( direction=ChannelDirection  'port'
+	//        | 'port'  ( direction=ChannelDirection )?
+	//        )
+	//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ';'
+	//    ;
 	public PortImplElements getPortImplAccess() {
 		return pPortImpl;
 	}
@@ -26411,8 +31369,9 @@
 		return getPortImplAccess().getRule();
 	}
 	
-	//PortPublic fmlInfra::Port:
-	//	PortImpl;
+	//PortPublic returns fmlInfra::Port
+	//    : PortImpl
+	//    ;
 	public PortPublicElements getPortPublicAccess() {
 		return pPortPublic;
 	}
@@ -26421,8 +31380,9 @@
 		return getPortPublicAccess().getRule();
 	}
 	
-	//PortProtected fmlInfra::Port:
-	//	PortImpl;
+	//PortProtected returns fmlInfra::Port
+	//    : PortImpl
+	//    ;
 	public PortProtectedElements getPortProtectedAccess() {
 		return pPortProtected;
 	}
@@ -26431,8 +31391,9 @@
 		return getPortProtectedAccess().getRule();
 	}
 	
-	//PortPrivate fmlInfra::Port:
-	//	PortImpl;
+	//PortPrivate returns fmlInfra::Port
+	//    : PortImpl
+	//    ;
 	public PortPrivateElements getPortPrivateAccess() {
 		return pPortPrivate;
 	}
@@ -26444,11 +31405,16 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Signal rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Signal fmlInfra::Signal:
-	//	{fmlInfra::Signal} visibility=VisibilityKind? (direction=ChannelDirection 'signal'
-	//	| 'signal' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-	//	parameterSet=FormalParameterSet? ')')?
-	//	';';
+	//Signal returns fmlInfra::Signal
+	//    : {fmlInfra::Signal}
+	//        ( visibility=VisibilityKind )?
+	//        ( direction=ChannelDirection  'signal'
+	//        | 'signal'  ( direction=ChannelDirection )?
+	//        )
+	//        name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ';'
+	//    ;
 	public SignalElements getSignalAccess() {
 		return pSignal;
 	}
@@ -26457,11 +31423,15 @@
 		return getSignalAccess().getRule();
 	}
 	
-	//SignalImpl fmlInfra::Signal:
-	//	{fmlInfra::Signal} (direction=ChannelDirection 'signal'
-	//	| 'signal' direction=ChannelDirection?) name=ESIdentifier unrestrictedName=UnrestrictedName? ('('
-	//	parameterSet=FormalParameterSet? ')')?
-	//	';';
+	//SignalImpl returns fmlInfra::Signal
+	//    : {fmlInfra::Signal}
+	//        ( direction=ChannelDirection  'signal'
+	//        | 'signal'  ( direction=ChannelDirection )?
+	//        )
+	//        name=ESIdentifier  ( unrestrictedName=UnrestrictedName )?
+	//        ( '(' ( parameterSet=FormalParameterSet )? ')' )?
+	//        ';'
+	//    ;
 	public SignalImplElements getSignalImplAccess() {
 		return pSignalImpl;
 	}
@@ -26470,8 +31440,9 @@
 		return getSignalImplAccess().getRule();
 	}
 	
-	//SignalPublic fmlInfra::Signal:
-	//	SignalImpl;
+	//SignalPublic returns fmlInfra::Signal
+	//    : SignalImpl
+	//    ;
 	public SignalPublicElements getSignalPublicAccess() {
 		return pSignalPublic;
 	}
@@ -26480,8 +31451,9 @@
 		return getSignalPublicAccess().getRule();
 	}
 	
-	//SignalProtected fmlInfra::Signal:
-	//	SignalImpl;
+	//SignalProtected returns fmlInfra::Signal
+	//    : SignalImpl
+	//    ;
 	public SignalProtectedElements getSignalProtectedAccess() {
 		return pSignalProtected;
 	}
@@ -26490,8 +31462,9 @@
 		return getSignalProtectedAccess().getRule();
 	}
 	
-	//SignalPrivate fmlInfra::Signal:
-	//	SignalImpl;
+	//SignalPrivate returns fmlInfra::Signal
+	//    : SignalImpl
+	//    ;
 	public SignalPrivateElements getSignalPrivateAccess() {
 		return pSignalPrivate;
 	}
@@ -26500,8 +31473,14 @@
 		return getSignalPrivateAccess().getRule();
 	}
 	
-	//enum ChannelDirection returns fmlInfra::ChannelDirection:
-	//	input | inout | output;
+	//////////////////////////////////////////////////////////////////////////////////
+	//// Channel rules
+	//////////////////////////////////////////////////////////////////////////////////
+	//enum ChannelDirection returns fmlInfra::ChannelDirection
+	//    : input  = 'input'
+	//    | inout  = 'inout'
+	//    | output = 'output'
+	//    ;
 	public ChannelDirectionElements getChannelDirectionAccess() {
 		return eChannelDirection;
 	}
@@ -26510,12 +31489,16 @@
 		return getChannelDirectionAccess().getRule();
 	}
 	
-	//Channel fmlInfra::Channel:
-	//	{fmlInfra::Channel} (visibility=VisibilityKind
-	//	& modifier=Modifier)?
-	//	'channel' name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'{' (signal+=SignalReference ';')+
-	//	'}';
+	//Channel returns fmlInfra::Channel
+	//    : {fmlInfra::Channel}
+	//        ( visibility=VisibilityKind
+	//          & modifier=Modifier
+	//        )?
+	//        'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        '{'
+	//            ( signal+=SignalReference ';' )+
+	//        '}'
+	//    ;
 	public ChannelElements getChannelAccess() {
 		return pChannel;
 	}
@@ -26524,8 +31507,9 @@
 		return getChannelAccess().getRule();
 	}
 	
-	//SignalReference fmlInfra::Signal:
-	//	direction=ChannelDirection? name=ESIdentifier;
+	//SignalReference returns fmlInfra::Signal
+	//    : ( direction=ChannelDirection )? name=ESIdentifier
+	//    ;
 	public SignalReferenceElements getSignalReferenceAccess() {
 		return pSignalReference;
 	}
@@ -26534,11 +31518,14 @@
 		return getSignalReferenceAccess().getRule();
 	}
 	
-	//Channelimpl fmlInfra::Channel:
-	//	{fmlInfra::Channel} modifier=Modifier?
-	//	'channel' name=ESIdentifier unrestrictedName=UnrestrictedName?
-	//	'{' (signal+=SignalReference ';')+
-	//	'}';
+	//Channelimpl returns fmlInfra::Channel
+	//    : {fmlInfra::Channel}
+	//        ( modifier=Modifier )?
+	//        'channel' name=ESIdentifier ( unrestrictedName=UnrestrictedName )?
+	//        '{'
+	//            ( signal+=SignalReference ';' )+
+	//        '}'
+	//    ;
 	public ChannelimplElements getChannelimplAccess() {
 		return pChannelimpl;
 	}
@@ -26547,8 +31534,9 @@
 		return getChannelimplAccess().getRule();
 	}
 	
-	//ChannelPublic fmlInfra::Channel:
-	//	Channelimpl;
+	//ChannelPublic returns fmlInfra::Channel
+	//    : Channelimpl
+	//    ;
 	public ChannelPublicElements getChannelPublicAccess() {
 		return pChannelPublic;
 	}
@@ -26557,8 +31545,9 @@
 		return getChannelPublicAccess().getRule();
 	}
 	
-	//ChannelProtected fmlInfra::Channel:
-	//	Channelimpl;
+	//ChannelProtected returns fmlInfra::Channel
+	//    : Channelimpl
+	//    ;
 	public ChannelProtectedElements getChannelProtectedAccess() {
 		return pChannelProtected;
 	}
@@ -26567,8 +31556,9 @@
 		return getChannelProtectedAccess().getRule();
 	}
 	
-	//ChannelPrivate fmlInfra::Channel:
-	//	Channelimpl;
+	//ChannelPrivate returns fmlInfra::Channel
+	//    : Channelimpl
+	//    ;
 	public ChannelPrivateElements getChannelPrivateAccess() {
 		return pChannelPrivate;
 	}
@@ -26580,19 +31570,46 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Section Transition Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Transition fmlStmchn::Transition:
-	//	{fmlStmchn::Transition} transient?='transient'? 'transition'
-	//	moe=TransitionMoe?
-	//	name=ESIdentifier? unrestrictedName=UnrestrictedName? ('{' (('@trigger:' trigger+=TransitionTrigger*)?
-	//	(guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-	//	'@effect:' effect=TransitionEffect?
-	//	| behavior=TransitionBehavior)?
-	//	'}' ('-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ';')?
-	//	| '-->' (target=[fmlStmchn::Vertex|ESUfid] | targetExpression=ValuePureNamedMachineExpression) ('{' (('@trigger:'
-	//	trigger+=TransitionTrigger*)? (guard=TransitionGuard | '@guard:')? (tguard=TransitionTimedGuard | '@tguard:')?
-	//	'@effect:' effect=TransitionEffect?
-	//	| behavior=TransitionBehavior)?
-	//	'}' | ';'));
+	//Transition returns fmlStmchn::Transition
+	//    : {fmlStmchn::Transition} (transient?='transient')? 'transition'
+	//        ( moe=TransitionMoe )?
+	//        ( name=ESIdentifier )?  ( unrestrictedName=UnrestrictedName )?
+	////        ( ( behavior=BlockStatement '-->' target=[fmlStmchn::Vertex|ESUfid] ';' )
+	////        | ( '-->' target=[fmlStmchn::Vertex|ESUfid] (behavior=BlockStatement | ';') )
+	////        )
+	//        ( ( '{'
+	//            ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+	//                ( guard  = TransitionGuard      | '@guard:' )?
+	//                ( tguard = TransitionTimedGuard | '@tguard:')?
+	//                '@effect:'  ( effect = TransitionEffect  )?
+	//              )
+	//            | behavior=TransitionBehavior
+	//            )?
+	//            '}'
+	//            ( '-->'
+	//                ( target=[fmlStmchn::Vertex|ESUfid]
+	//                | targetExpression=ValuePureNamedMachineExpression
+	//                ) ';'
+	//            )?
+	//          )
+	//        | ( '-->'
+	//            ( target=[fmlStmchn::Vertex|ESUfid]
+	//            | targetExpression=ValuePureNamedMachineExpression
+	//            )
+	//            ( ( '{'
+	//                ( ( ( '@trigger:' ( trigger+= TransitionTrigger )* )?
+	//                    ( guard  = TransitionGuard      | '@guard:' )?
+	//                    ( tguard = TransitionTimedGuard | '@tguard:')?
+	//                    '@effect:'  ( effect = TransitionEffect  )?
+	//                  )
+	//                | behavior=TransitionBehavior
+	//                )?
+	//                '}' )
+	//            | ';'
+	//            )
+	//          )
+	//        )
+	//    ;
 	public TransitionElements getTransitionAccess() {
 		return pTransition;
 	}
@@ -26601,11 +31618,16 @@
 		return getTransitionAccess().getRule();
 	}
 	
-	//TransitionMoe fmlStmchn::TransitionMoe:
-	//	'<' ('moc:'? (moc=TransitionMoc ('&' isElse?='else')?
-	//	| isElse?='else') (',' 'prior:'? priority=EInt)?
-	//	| 'prior:'? priority=EInt)
-	//	'>';
+	//TransitionMoe returns fmlStmchn::TransitionMoe
+	//    : '<'
+	//        ( ('moc:')?
+	//            ( moc=TransitionMoc  ( '&' isElse?='else' )?
+	//            | isElse?='else'
+	//            ) ( ',' ( 'prior:' )? priority=EInt )?
+	//        | ( 'prior:' )? priority=EInt
+	//        )
+	//      '>'
+	//    ;
 	public TransitionMoeElements getTransitionMoeAccess() {
 		return pTransitionMoe;
 	}
@@ -26614,8 +31636,11 @@
 		return getTransitionMoeAccess().getRule();
 	}
 	
-	//enum TransitionMoc returns fmlStmchn::TransitionMoc:
-	//	simple | abort | final;
+	//enum TransitionMoc returns fmlStmchn::TransitionMoc
+	//    : simple = 'simple'
+	//    | abort  = 'abort'
+	//    | final  = 'final'
+	//    ;
 	public TransitionMocElements getTransitionMocAccess() {
 		return eTransitionMoc;
 	}
@@ -26624,9 +31649,11 @@
 		return getTransitionMocAccess().getRule();
 	}
 	
-	//TransitionBehavior fmlStmnt::BlockStatement:
-	//	{fmlStmnt::BlockStatement} op=BlockStatementScheduler?
-	//	statement+=Statement*;
+	//TransitionBehavior returns fmlStmnt::BlockStatement
+	//    : {fmlStmnt::BlockStatement}
+	//        ( op=BlockStatementScheduler )?
+	//         ( statement+=Statement )*
+	//    ;
 	public TransitionBehaviorElements getTransitionBehaviorAccess() {
 		return pTransitionBehavior;
 	}
@@ -26635,8 +31662,9 @@
 		return getTransitionBehaviorAccess().getRule();
 	}
 	
-	//TransitionTrigger fmlStmnt::InputComStatement:
-	//	InputComStatement;
+	//TransitionTrigger returns fmlStmnt::InputComStatement
+	//    : InputComStatement
+	//    ;
 	public TransitionTriggerElements getTransitionTriggerAccess() {
 		return pTransitionTrigger;
 	}
@@ -26645,13 +31673,19 @@
 		return getTransitionTriggerAccess().getRule();
 	}
 	
-	//TransitionGuard fmlStmnt::AbstractGuardStatement:
-	//	{fmlStmnt::GuardStatement}
-	//	'@guard<' condition=TransitionGuardExpression
-	//	| '@guard:' ({fmlStmnt::GuardStatement} ('[' condition=Expression ']'
-	//	| condition=Expression) | GuardStatement
-	//	| EventGuardStatement
-	//	| CheckSatGuardStatement);
+	//TransitionGuard returns fmlStmnt::AbstractGuardStatement
+	//    : {fmlStmnt::GuardStatement}
+	//        '@guard<' condition=TransitionGuardExpression
+	//    | '@guard:'
+	//        ( {fmlStmnt::GuardStatement}
+	//            ( '[' condition=Expression ']'
+	//            | condition=Expression
+	//            )
+	//        | GuardStatement
+	//        | EventGuardStatement
+	//        | CheckSatGuardStatement
+	//        )
+	//    ;
 	public TransitionGuardElements getTransitionGuardAccess() {
 		return pTransitionGuard;
 	}
@@ -26660,9 +31694,11 @@
 		return getTransitionGuardAccess().getRule();
 	}
 	
-	//TransitionGuardExpression fmlExpr::Expression:
-	//	{fmlExpr::LogicalAssociativeExpression} operator=('&&' | 'and' | '||' | 'or') '>:'
-	//	operand+=BitwiseOrExpression+;
+	//TransitionGuardExpression returns fmlExpr::Expression
+	//    : {fmlExpr::LogicalAssociativeExpression}
+	//        operator=( '&&' | 'and' | '||' | 'or' ) '>:'
+	//        ( operand+=BitwiseOrExpression )+
+	//    ;
 	public TransitionGuardExpressionElements getTransitionGuardExpressionAccess() {
 		return pTransitionGuardExpression;
 	}
@@ -26671,11 +31707,17 @@
 		return getTransitionGuardExpressionAccess().getRule();
 	}
 	
-	//TransitionTimedGuard fmlStmnt::TimedGuardStatement:
-	//	{fmlStmnt::TimedGuardStatement}
-	//	'@tguard<' condition=TransitionGuardExpression
-	//	| '@tguard:' ({fmlStmnt::TimedGuardStatement} ('{' condition=Expression '}'
-	//	| condition=Expression) | TimedGuardStatement);
+	//TransitionTimedGuard returns fmlStmnt::TimedGuardStatement
+	//    : {fmlStmnt::TimedGuardStatement}
+	//        '@tguard<' condition=TransitionGuardExpression
+	//    | '@tguard:'
+	//        ( {fmlStmnt::TimedGuardStatement}
+	//            ( '{' condition=Expression '}'
+	//            | condition=Expression
+	//            )
+	//        | TimedGuardStatement
+	//        )
+	//    ;
 	public TransitionTimedGuardElements getTransitionTimedGuardAccess() {
 		return pTransitionTimedGuard;
 	}
@@ -26684,8 +31726,12 @@
 		return getTransitionTimedGuardAccess().getRule();
 	}
 	
-	//TransitionEffect fmlStmnt::Statement:
-	//	TransitionEffectStatement ({fmlStmnt::BlockStatement.statement+=current} statement+=TransitionEffectStatement)*;
+	//TransitionEffect returns fmlStmnt::Statement
+	//    : TransitionEffectStatement
+	//        ( {fmlStmnt::BlockStatement.statement+=current}
+	//            statement+=TransitionEffectStatement
+	//        )*
+	//    ;
 	public TransitionEffectElements getTransitionEffectAccess() {
 		return pTransitionEffect;
 	}
@@ -26694,17 +31740,18 @@
 		return getTransitionEffectAccess().getRule();
 	}
 	
-	//TransitionEffectStatement fmlStmnt::Statement:
-	//	ExpressionStatement
-	//	| OutputComStatement
-	//	| IfStatement
-	//	| WhileDoStatement
-	//	| DoWhileStatement
-	//	| ForStatement
-	//	| ForEachStatement
-	//	| InterruptStatement
-	//	| ActivityStatement
-	//	| InvokeStatement;
+	//TransitionEffectStatement returns fmlStmnt::Statement
+	//    : ExpressionStatement
+	//    | OutputComStatement
+	//    | IfStatement
+	//    | WhileDoStatement
+	//    | DoWhileStatement
+	//    | ForStatement
+	//    | ForEachStatement
+	//    | InterruptStatement
+	//    | ActivityStatement
+	//    | InvokeStatement
+	//    ;
 	public TransitionEffectStatementElements getTransitionEffectStatementAccess() {
 		return pTransitionEffectStatement;
 	}
@@ -26716,26 +31763,26 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Statement Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Statement fmlStmnt::Statement:
-	//	BlockStatement
-	//	| ExpressionStatement
-	//	| GuardStatement
-	//	| TimedGuardStatement
-	//	| EventGuardStatement
-	//	| CheckSatGuardStatement
-	//	| InputComStatement
-	//	| OutputComStatement
-	//	| IfStatement
-	//	| WhileDoStatement
-	//	| DoWhileStatement
-	//	| ForStatement
-	//	| ForEachStatement
-	//	| InterruptStatement
-	//	| ActivityStatement
-	//	| InvokeStatement
-	//	//	| ObserverStatement
-	//
-	//	| MetaStatement;
+	//Statement returns fmlStmnt::Statement
+	//     : BlockStatement
+	//     | ExpressionStatement
+	//    | GuardStatement
+	//    | TimedGuardStatement
+	//    | EventGuardStatement
+	//    | CheckSatGuardStatement
+	//    | InputComStatement
+	//    | OutputComStatement
+	//    | IfStatement
+	//    | WhileDoStatement
+	//    | DoWhileStatement
+	//    | ForStatement
+	//    | ForEachStatement
+	//    | InterruptStatement
+	//    | ActivityStatement
+	//    | InvokeStatement
+	////    | ObserverStatement
+	//    | MetaStatement
+	//    ;
 	public StatementElements getStatementAccess() {
 		return pStatement;
 	}
@@ -26744,12 +31791,13 @@
 		return getStatementAccess().getRule();
 	}
 	
-	//BlockStatement fmlStmnt::BlockStatement:
-	//	{fmlStmnt::BlockStatement}
-	//	'{'
-	//	op=BlockStatementScheduler?
-	//	statement+=Statement*
-	//	'}';
+	//BlockStatement returns fmlStmnt::BlockStatement
+	//    : {fmlStmnt::BlockStatement}
+	//        '{'
+	//            ( op=BlockStatementScheduler )?
+	//             ( statement+=Statement )*
+	//         '}'
+	//    ;
 	public BlockStatementElements getBlockStatementAccess() {
 		return pBlockStatement;
 	}
@@ -26758,17 +31806,18 @@
 		return getBlockStatementAccess().getRule();
 	}
 	
-	//BlockStatementScheduler:
-	//	'|;|' | '|§|' | '|;;|' | '|.|' | '|/;|'
-	//	| '|i|' | '|interleaving|'
-	//	| '|~|' | '|partial-order|'
-	//	| '|,|' | '|parallel|'
-	//	| '|a|' | '|async|'
-	//	| '|partial-order|'
-	//	| '|and|' | '|or|'
-	//	| '|and#then|' | '|or#else|'
-	//	| '|indet|' | '|/\\|'
-	//	| '|fork|' | '|join|';
+	//BlockStatementScheduler
+	//    : '|;|' | '|§|' | '|;;|' | '|.|' | '|/;|'
+	//    | '|i|' | '|interleaving|'
+	//    | '|~|' | '|partial-order|'
+	//    | '|,|' | '|parallel|'
+	//    | '|a|' | '|async|'
+	//    | '|partial-order|'
+	//    | '|and|' | '|or|'
+	//    | '|and#then|' | '|or#else|'
+	//    | '|indet|' | '|/\\|'
+	//    | '|fork|' | '|join|'
+	//    ;
 	public BlockStatementSchedulerElements getBlockStatementSchedulerAccess() {
 		return pBlockStatementScheduler;
 	}
@@ -26784,15 +31833,14 @@
 	//// ++lv --lv
 	//// lv++  lv--
 	///////////////////////////////////////////
-	//ExpressionStatement fmlStmnt::ExpressionStatement:
-	//	expression=AssignmentExpression ';'
-	//	| expression=NewfreshExpression ';'
-	//	| expression=IncrementOrDecrementPrefixExpression ';'
-	//	| expression=IncrementOrDecrementPostfixExpression ';'
-	//	//	| expression=DynamicInstantiationExpression ';'
-	//
-	//	//	| expression=InvokeExpression ';'
-	//;
+	//ExpressionStatement returns fmlStmnt::ExpressionStatement
+	//    : expression=AssignmentExpression ';'
+	//    | expression=NewfreshExpression ';'
+	//    | expression=IncrementOrDecrementPrefixExpression  ';'
+	//    | expression=IncrementOrDecrementPostfixExpression ';'
+	////    | expression=DynamicInstantiationExpression ';'
+	////    | expression=InvokeExpression ';'
+	//    ;
 	public ExpressionStatementElements getExpressionStatementAccess() {
 		return pExpressionStatement;
 	}
@@ -26804,8 +31852,9 @@
 	/////////////////////////////////////////////
 	////// Guard Rules
 	/////////////////////////////////////////////
-	//GuardStatement fmlStmnt::GuardStatement:
-	//	'guard' condition=Expression ';';
+	//GuardStatement returns fmlStmnt::GuardStatement
+	//    : 'guard' condition=Expression ';'
+	//    ;
 	public GuardStatementElements getGuardStatementAccess() {
 		return pGuardStatement;
 	}
@@ -26814,8 +31863,9 @@
 		return getGuardStatementAccess().getRule();
 	}
 	
-	//TimedGuardStatement fmlStmnt::TimedGuardStatement:
-	//	'tguard' condition=Expression ';';
+	//TimedGuardStatement returns fmlStmnt::TimedGuardStatement
+	//    : 'tguard' condition=Expression ';'
+	//    ;
 	public TimedGuardStatementElements getTimedGuardStatementAccess() {
 		return pTimedGuardStatement;
 	}
@@ -26824,8 +31874,9 @@
 		return getTimedGuardStatementAccess().getRule();
 	}
 	
-	//EventGuardStatement fmlStmnt::EventGuardStatement:
-	//	'event' condition=Expression ';';
+	//EventGuardStatement returns fmlStmnt::EventGuardStatement
+	//    : 'event' condition=Expression ';'
+	//    ;
 	public EventGuardStatementElements getEventGuardStatementAccess() {
 		return pEventGuardStatement;
 	}
@@ -26834,8 +31885,9 @@
 		return getEventGuardStatementAccess().getRule();
 	}
 	
-	//CheckSatGuardStatement fmlStmnt::CheckSatGuardStatement:
-	//	'checksat' '<' solver=ESIdentifier '>' condition=Expression ';';
+	//CheckSatGuardStatement returns fmlStmnt::CheckSatGuardStatement
+	//    : 'checksat' '<' solver=ESIdentifier '>' condition=Expression ';'
+	//    ;
 	public CheckSatGuardStatementElements getCheckSatGuardStatementAccess() {
 		return pCheckSatGuardStatement;
 	}
@@ -26848,10 +31900,14 @@
 	////
 	////// Communication Rules
 	/////////////////////////////////////////////
-	//InputComStatement fmlStmnt::InputComStatement:
-	//	'input' port=LitteralComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-	//	target=LiteralPureReferenceExpression)?
-	//	& (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+	//InputComStatement returns fmlStmnt::InputComStatement
+	//    : 'input' port=LitteralComElement //ExpressionAsPort
+	//        ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+	////        ( ( '<--' target=ValuePureNamedMachineExpression )?
+	//        ( ( '<--' target=LiteralPureReferenceExpression )?
+	//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+	//        ) ';'
+	//    ;
 	public InputComStatementElements getInputComStatementAccess() {
 		return pInputComStatement;
 	}
@@ -26860,10 +31916,14 @@
 		return getInputComStatementAccess().getRule();
 	}
 	
-	//OutputComStatement fmlStmnt::OutputComStatement:
-	//	'output' port=LitteralComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-	//	target=LiteralPureReferenceExpression)?
-	//	& (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+	//OutputComStatement returns fmlStmnt::OutputComStatement
+	//    : 'output' port=LitteralComElement //port=ExpressionAsPort
+	//        ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+	////        ( ( '-->' target=ValuePureNamedMachineExpression )?
+	//        ( ( '-->' target=LiteralPureReferenceExpression )?
+	//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+	//        ) ';'
+	//    ;
 	public OutputComStatementElements getOutputComStatementAccess() {
 		return pOutputComStatement;
 	}
@@ -26872,8 +31932,12 @@
 		return getOutputComStatementAccess().getRule();
 	}
 	
-	//LitteralComElement fmlExpr::LiteralReferenceElement:
-	//	element=[fmlCommon::NamedElement|ESIdentifier];
+	//LitteralComElement returns fmlExpr::LiteralReferenceElement
+	//    : element=[fmlCommon::NamedElement|ESIdentifier]
+	////    | element=[fmlInfra::Port|ESIdentifier]
+	////    | element=[fmlInfra::Signal|ESIdentifier]
+	////    | element=[fmlInfra::Message|ESIdentifier]
+	//    ;
 	public LitteralComElementElements getLitteralComElementAccess() {
 		return pLitteralComElement;
 	}
@@ -26885,10 +31949,12 @@
 	/////////////////////////////////////////////
 	////// If - Conditional Rules
 	/////////////////////////////////////////////
-	//IfStatement fmlStmnt::IfStatement:
-	//	'if' condition=Expression
-	//	bodyBlock=BlockStatement
-	//	elseifStatement+=ElseIfStatement* ('else' elseBlock=BlockStatement)?;
+	//IfStatement returns fmlStmnt::IfStatement
+	//    : 'if' condition=Expression
+	//        bodyBlock=BlockStatement
+	//        ( elseifStatement+=ElseIfStatement )*
+	//        ( 'else' elseBlock=BlockStatement )?
+	//    ;
 	public IfStatementElements getIfStatementAccess() {
 		return pIfStatement;
 	}
@@ -26897,9 +31963,10 @@
 		return getIfStatementAccess().getRule();
 	}
 	
-	//ElseIfStatement fmlStmnt::ConditionalBlockStatement:
-	//	('elseif' | 'else' 'if') condition=Expression
-	//	bodyBlock=BlockStatement;
+	//ElseIfStatement returns fmlStmnt::ConditionalBlockStatement
+	//    : ( 'elseif' | 'else' 'if' ) condition=Expression
+	//        bodyBlock=BlockStatement
+	//    ;
 	public ElseIfStatementElements getElseIfStatementAccess() {
 		return pElseIfStatement;
 	}
@@ -26911,8 +31978,9 @@
 	///////////////////////////////////////////
 	//// Loop - Iteration Rules
 	///////////////////////////////////////////
-	//WhileDoStatement fmlStmnt::WhileDoStatement:
-	//	'while' condition=Expression bodyBlock=BlockStatement;
+	//WhileDoStatement returns fmlStmnt::WhileDoStatement
+	//    : 'while' condition=Expression  bodyBlock=BlockStatement
+	//    ;
 	public WhileDoStatementElements getWhileDoStatementAccess() {
 		return pWhileDoStatement;
 	}
@@ -26921,8 +31989,9 @@
 		return getWhileDoStatementAccess().getRule();
 	}
 	
-	//DoWhileStatement fmlStmnt::DoWhileStatement:
-	//	'do' bodyBlock=BlockStatement 'while' condition=Expression ';';
+	//DoWhileStatement returns fmlStmnt::DoWhileStatement
+	//    : 'do' bodyBlock=BlockStatement  'while' condition=Expression ';'
+	//    ;
 	public DoWhileStatementElements getDoWhileStatementAccess() {
 		return pDoWhileStatement;
 	}
@@ -26931,13 +32000,14 @@
 		return getDoWhileStatementAccess().getRule();
 	}
 	
-	//ForStatement fmlStmnt::ForStatement:
-	//	'for' init=ForAssignmentExpression? ';'
-	//	condition=Expression ';' iterate=ForAssignmentExpression?
-	//	bodyBlock=BlockStatement
-	//	| 'for' '(' init=ForAssignmentExpression? ';'
-	//	condition=Expression ';' iterate=ForAssignmentExpression? ')'
-	//	bodyBlock=BlockStatement;
+	//ForStatement returns fmlStmnt::ForStatement
+	//    : 'for' ( init=ForAssignmentExpression ) ? ';'
+	//        condition=Expression ';' ( iterate=ForAssignmentExpression )?
+	//        bodyBlock=BlockStatement
+	//    | 'for' '(' ( init=ForAssignmentExpression ) ? ';'
+	//        condition=Expression ';' ( iterate=ForAssignmentExpression )? ')'
+	//        bodyBlock=BlockStatement
+	//    ;
 	public ForStatementElements getForStatementAccess() {
 		return pForStatement;
 	}
@@ -26946,10 +32016,11 @@
 		return getForStatementAccess().getRule();
 	}
 	
-	//ForAssignmentExpression fmlExpr::Expression:
-	//	AssignmentExpression
-	//	| IncrementOrDecrementPrefixExpression
-	//	| IncrementOrDecrementPostfixExpression;
+	//ForAssignmentExpression returns fmlExpr::Expression
+	//    : AssignmentExpression
+	//    | IncrementOrDecrementPrefixExpression
+	//    | IncrementOrDecrementPostfixExpression
+	//    ;
 	public ForAssignmentExpressionElements getForAssignmentExpressionAccess() {
 		return pForAssignmentExpression;
 	}
@@ -26958,11 +32029,12 @@
 		return getForAssignmentExpressionAccess().getRule();
 	}
 	
-	//ForEachStatement fmlStmnt::ForEachStatement:
-	//	'for' iterator=LeftHandSideExpression ':' enumeration=Expression
-	//	bodyBlock=BlockStatement
-	//	| 'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
-	//	bodyBlock=BlockStatement;
+	//ForEachStatement returns fmlStmnt::ForEachStatement
+	//    : 'for' iterator=LeftHandSideExpression ':' enumeration=Expression
+	//        bodyBlock=BlockStatement
+	//    | 'for' '(' iterator=LeftHandSideExpression ':' enumeration=Expression ')'
+	//        bodyBlock=BlockStatement
+	//    ;
 	public ForEachStatementElements getForEachStatementAccess() {
 		return pForEachStatement;
 	}
@@ -26974,9 +32046,12 @@
 	///////////////////////////////////////////
 	//// Interrupt Rules
 	///////////////////////////////////////////
-	//InterruptStatement fmlStmnt::InterruptStatement:
-	//	kind=InterruptStatementKind (expr+=Expression
-	//	| '(' expr+=Expression (',' expr+=Expression)* ')')? ';';
+	//InterruptStatement returns fmlStmnt::InterruptStatement
+	//    : kind=InterruptStatementKind
+	//        ( expr+=Expression
+	//        | '(' expr+=Expression ( ',' expr+=Expression )* ')'
+	//        )? ';'
+	//    ;
 	public InterruptStatementElements getInterruptStatementAccess() {
 		return pInterruptStatement;
 	}
@@ -26985,8 +32060,12 @@
 		return getInterruptStatementAccess().getRule();
 	}
 	
-	//enum InterruptStatementKind returns fmlStmnt::InterruptStatementKind:
-	//	break | continue | return | exit;
+	//enum InterruptStatementKind returns fmlStmnt::InterruptStatementKind
+	//    : break    = 'break'
+	//    | continue = 'continue'
+	//    | return   = 'return'
+	//    | exit     = 'exit'
+	//    ;
 	public InterruptStatementKindElements getInterruptStatementKindAccess() {
 		return eInterruptStatementKind;
 	}
@@ -26998,12 +32077,17 @@
 	/////////////////////////////////////////////
 	////// Activity Rules
 	/////////////////////////////////////////////
-	//ActivityStatement fmlStmnt::ActivityStatement:
-	//	{fmlStmnt::ActivityStatement} op=OPERATOR_ACTIVITY (machine=ValuePureNamedMachineExpression
-	//	(tuple=TupleParameterExpression? ';'
-	//	//			| '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
-	//
-	//	| '{' (slot+=SlotProperty ';')* '}') | ';')?;
+	//ActivityStatement returns fmlStmnt::ActivityStatement
+	//    : {fmlStmnt::ActivityStatement}
+	//        op=OPERATOR_ACTIVITY
+	//        ( machine=ValuePureNamedMachineExpression
+	//            ( ( tuple=TupleParameterExpression )? ';'
+	////            | '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')'  ';'
+	//            | '{' ( slot+=SlotProperty ';' )*  '}'
+	//            )
+	//        | ';'
+	//        )?
+	//    ;
 	public ActivityStatementElements getActivityStatementAccess() {
 		return pActivityStatement;
 	}
@@ -27012,9 +32096,26 @@
 		return getActivityStatementAccess().getRule();
 	}
 	
-	//enum OPERATOR_ACTIVITY returns fmlStmnt::ActivityStatementKind:
-	//	init | final | new | destroy | start | stop | restart | suspend | resume | wait | disable | enable | abort | goto |
-	//	schedule | irun | run | rtc;
+	//enum OPERATOR_ACTIVITY returns fmlStmnt::ActivityStatementKind
+	//    : init     = 'init'
+	//    | final    = 'final'
+	//    | new      = 'new'
+	//    | destroy  = 'destroy'
+	//    | start    = 'start'
+	//    | stop     = 'stop'
+	//    | restart  = 'restart'
+	//    | suspend  = 'suspend'
+	//    | resume   = 'resume'
+	//    | wait     = 'wait'
+	//    | disable  = 'disable'
+	//    | enable   = 'enable'
+	//    | abort    = 'abort'
+	//    | goto     = 'goto'
+	//    | schedule = 'schedule'
+	//    | irun = 'irun'
+	//    | run  = 'run'
+	//    | rtc  = 'rtc'
+	//    ;
 	public OPERATOR_ACTIVITYElements getOPERATOR_ACTIVITYAccess() {
 		return eOPERATOR_ACTIVITY;
 	}
@@ -27023,20 +32124,36 @@
 		return getOPERATOR_ACTIVITYAccess().getRule();
 	}
 	
-	//InvokeStatement fmlStmnt::InvokeStatement:
-	//	expression=InvokeExpressionDeprecated ';'
-	//	// Exec Routine
-	//	| invokable=[fmlCommon::NamedElement|ESUfid] execRoutine?='(' args=MixTupleExpressionList? ')' ('-->'
-	//	(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-	//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';'
-	//	// Exec Routine
-	//	| execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
-	//	'(' args=MixTupleExpressionList? ')' ('-->' (rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-	//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';'
-	//	// Call Procedure
-	//	| callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid] args=MixTupleExpressionList? ('-->'
-	//	(rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])*
-	//	| '(' rets+=[fmlInfra::Variable] (',' rets+=[fmlInfra::Variable])* ')'))? ';';
+	//InvokeStatement returns fmlStmnt::InvokeStatement
+	//    : expression=InvokeExpressionDeprecated ';'
+	//    // Exec Routine
+	//    |  invokable=[fmlCommon::NamedElement|ESUfid]
+	//        execRoutine?='(' ( args=MixTupleExpressionList )? ')'
+	//        ( '-->'
+	//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+	//            | '(' rets+=[fmlInfra::Variable]
+	//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+	//            )
+	//        )? ';'
+	//    // Exec Routine
+	//    | execRoutine?='exec' invokable=[fmlCommon::NamedElement|ESUfid]
+	//        '(' ( args=MixTupleExpressionList )? ')'
+	//        ( '-->'
+	//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+	//            | '(' rets+=[fmlInfra::Variable]
+	//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+	//            )
+	//        )? ';'
+	//    // Call Procedure
+	//    | callProcedure?='call' invokable=[fmlCommon::NamedElement|ESUfid]
+	//        ( args=MixTupleExpressionList )?
+	//        ( '-->'
+	//            ( rets+=[fmlInfra::Variable] ( ',' rets+=[fmlInfra::Variable] )*
+	//            | '(' rets+=[fmlInfra::Variable]
+	//                ( ',' rets+=[fmlInfra::Variable] )* ')'
+	//            )
+	//        )? ';'
+	//    ;
 	public InvokeStatementElements getInvokeStatementAccess() {
 		return pInvokeStatement;
 	}
@@ -27048,13 +32165,20 @@
 	/////////////////////////////////////////////
 	////// ObsStatement Rules
 	/////////////////////////////////////////////
-	//ObserverStatement fmlStmnt::ObserverStatement:
-	//	{fmlStmnt::ObserverStatement} ('@observe' | '@obs') ('(' 'ctx:' context=ValuePureNamedMachineExpression ')')?
-	//	'{'
-	//	statement=ObservableStatement
-	//	'}' (('provided:' postCondition=Expression
-	//	| '[' postCondition=Expression ']')
-	//	';')?;
+	//ObserverStatement returns fmlStmnt::ObserverStatement
+	//    : {fmlStmnt::ObserverStatement}
+	//        ( '@observe' | '@obs' )
+	//        ( '('  'ctx:'  context=ValuePureNamedMachineExpression  ')'  )?
+	//          '{'
+	//               statement=ObservableStatement
+	//          '}'
+	//        (
+	//        ( 'provided:' postCondition=Expression
+	//         | '[' postCondition=Expression ']'
+	//         )
+	//        ';'
+	//        )?
+	//    ;
 	public ObserverStatementElements getObserverStatementAccess() {
 		return pObserverStatement;
 	}
@@ -27063,9 +32187,10 @@
 		return getObserverStatementAccess().getRule();
 	}
 	
-	//ObservableStatement fmlStmnt::Statement:
-	//	ObsInputComStatement
-	//	| ObsOutputComStatement;
+	//ObservableStatement returns fmlStmnt::Statement
+	//    : ObsInputComStatement
+	//    | ObsOutputComStatement
+	//    ;
 	public ObservableStatementElements getObservableStatementAccess() {
 		return pObservableStatement;
 	}
@@ -27074,10 +32199,13 @@
 		return getObservableStatementAccess().getRule();
 	}
 	
-	//ObsInputComStatement fmlStmnt::InputComStatement:
-	//	'input' port=ObsComElement ('(' leftValue+=Expression (',' leftValue+=Expression)* ')')? (('<--'
-	//	target=ValuePureNamedMachineExpression)?
-	//	& (('<==' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+	//ObsInputComStatement returns fmlStmnt::InputComStatement
+	//    : 'input' port=ObsComElement
+	//        ( '(' leftValue+=Expression ( ',' leftValue+= Expression )* ')' )?
+	//        ( ( '<--' target=ValuePureNamedMachineExpression )?
+	//        & ( ( '<==' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+	//        ) ';'
+	//    ;
 	public ObsInputComStatementElements getObsInputComStatementAccess() {
 		return pObsInputComStatement;
 	}
@@ -27086,10 +32214,13 @@
 		return getObsInputComStatementAccess().getRule();
 	}
 	
-	//ObsOutputComStatement fmlStmnt::OutputComStatement:
-	//	'output' port=ObsComElement ('(' rightValue+=Expression (',' rightValue+=Expression)* ')')? (('-->'
-	//	target=ValuePureNamedMachineExpression)?
-	//	& (('==>' | 'via') route=[fmlInfra::Channel|ESUfid])?) ';';
+	//ObsOutputComStatement returns fmlStmnt::OutputComStatement
+	//    : 'output' port=ObsComElement
+	//        ( '(' rightValue+=Expression ( ',' rightValue+=Expression )* ')' )?
+	//        ( ( '-->' target=ValuePureNamedMachineExpression )?
+	//        & ( ( '==>' | 'via' ) route=[fmlInfra::Channel|ESUfid]/*ExpressionAsChannel*/ )?
+	//        ) ';'
+	//    ;
 	public ObsOutputComStatementElements getObsOutputComStatementAccess() {
 		return pObsOutputComStatement;
 	}
@@ -27098,13 +32229,14 @@
 		return getObsOutputComStatementAccess().getRule();
 	}
 	
-	//ObsComElement fmlExpr::ValueElementSpecification:
-	//	parent=LiteralPureReferenceExpression
-	//	//	: ( parent=ValuePureNamedInstanceExpression
-	//	//		// ( '.' | '->' ) element
-	//	//		kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-	//?
-	//	element=[fmlCommon::NamedElement|ESIdentifier];
+	//ObsComElement returns fmlExpr::ValueElementSpecification
+	//    : ( parent=LiteralPureReferenceExpression
+	////    : ( parent=ValuePureNamedInstanceExpression
+	////        // ( '.' | '->' ) element
+	////        kind=( ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+	//      )?
+	//      element=[fmlCommon::NamedElement|ESIdentifier]
+	//    ;
 	public ObsComElementElements getObsComElementAccess() {
 		return pObsComElement;
 	}
@@ -27114,23 +32246,29 @@
 	}
 	
 	////ValuePureNamedInstanceExpression returns fmlExpr::Expression
-	////	: LiteralPureReferenceExpression
+	////    : LiteralPureReferenceExpression
 	////
-	////		// ( '.' | '->' ) element
-	////		( { fmlExpr::ValueElementSpecification.parent=current }
-	//////			kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
-	////			kind=ValueDotFieldExpressionKind
-	////			element=[fmlCommon::NamedElement|ESIdentifier]
-	////		)*
-	////	;
+	////        // ( '.' | '->' ) element
+	////        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//////            kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+	////            kind=ValueDotFieldExpressionKind
+	////            element=[fmlCommon::NamedElement|ESIdentifier]
+	////        )*
+	////    ;
 	/////////////////////////////////////////////
 	////// MetaStatement Rules
 	/////////////////////////////////////////////
-	//MetaStatement fmlStmnt::MetaStatement:
-	//	{fmlStmnt::MetaStatement} op=OPERATOR_META ('{' (operand+=Statement+
-	//	| operand+=Expression+)
-	//	'}'
-	//	| operand+=Expression+ ';');
+	//MetaStatement returns fmlStmnt::MetaStatement
+	//    : {fmlStmnt::MetaStatement}
+	//        op=OPERATOR_META
+	//        ( '{'
+	//            ( ( operand+=Statement  )+
+	//            | ( operand+=Expression )+
+	//            )
+	//            '}'
+	//        | ( operand+=Expression )+  ';'
+	//          )
+	//    ;
 	public MetaStatementElements getMetaStatementAccess() {
 		return pMetaStatement;
 	}
@@ -27139,14 +32277,15 @@
 		return getMetaStatementAccess().getRule();
 	}
 	
-	//enum OPERATOR_META returns fmlStmnt::MetaStatementKind:
-	//	informal='@informal'
-	//	| trace='@trace'
-	//	| debug='@debug'
-	//	| comment='@comment'
-	//	| quote='@quote'
-	//	| eval='@eval'
-	//	| run='@run';
+	//enum OPERATOR_META returns fmlStmnt::MetaStatementKind
+	//    : informal = '@informal'
+	//    | trace    = '@trace'
+	//    | debug    = '@debug'
+	//    | comment  = '@comment'
+	//    | quote    = '@quote'
+	//    | eval     = '@eval'
+	//    | run      = '@run'
+	//    ;
 	public OPERATOR_METAElements getOPERATOR_METAAccess() {
 		return eOPERATOR_META;
 	}
@@ -27158,9 +32297,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//Expression fmlExpr::Expression:
-	//	AssignmentExpression
-	//	| ConditionalTestExpression;
+	//Expression returns fmlExpr::Expression
+	//    : AssignmentExpression
+	//    | ConditionalTestExpression
+	//    ;
 	public ExpressionElements getExpressionAccess() {
 		return pExpression;
 	}
@@ -27170,9 +32310,10 @@
 	}
 	
 	//// Assignment Expression
-	//AssignmentExpression fmlExpr::AssignmentExpression:
-	//	leftHandSide=LeftHandSideExpression
-	//	operator=AssignmentOperator rightHandSide=Expression;
+	//AssignmentExpression returns fmlExpr::AssignmentExpression
+	//    : leftHandSide=LeftHandSideExpression
+	//        operator=AssignmentOperator rightHandSide=Expression
+	//    ;
 	public AssignmentExpressionElements getAssignmentExpressionAccess() {
 		return pAssignmentExpression;
 	}
@@ -27181,18 +32322,19 @@
 		return getAssignmentExpressionAccess().getRule();
 	}
 	
-	//AssignmentOperator:
-	//	'=' | ':=' | '::='
-	//	| '+=' | '-='
-	//	| '*=' | '/=' | '%='
-	//	| '&&=' | '||='
-	//	| '&=' | '|=' | '^='
-	//	| '<<=' | '>>=' | '>>>='
-	//	// queue operation: push, assign_top, top, pop
-	//	| '<=<'
-	//	| '^=<'
-	//	| '^=>'
-	//	| '>=>';
+	//AssignmentOperator
+	//    : '='   | ':='  | '::='
+	//    | '+='  | '-='
+	//    | '*='  | '/='  | '%='
+	//    | '&&=' | '||='
+	//    | '&='  | '|='    | '^='
+	//    | '<<=' | '>>=' | '>>>='
+	//// queue operation: push, assign_top, top, pop
+	//    | '<=<'
+	//    | '^=<'
+	//    | '^=>'
+	//    | '>=>'
+	//    ;
 	public AssignmentOperatorElements getAssignmentOperatorAccess() {
 		return pAssignmentOperator;
 	}
@@ -27201,9 +32343,13 @@
 		return getAssignmentOperatorAccess().getRule();
 	}
 	
-	//LeftHandSideExpression fmlExpr::LeftHandSideExpression:
-	//	{fmlExpr::LeftHandSideExpression} (lvalue=ValueSelectionExpression
-	//	| '(' lvalue=ValueSelectionExpression ')');
+	//LeftHandSideExpression returns fmlExpr::LeftHandSideExpression
+	//    : { fmlExpr::LeftHandSideExpression }
+	////        lvalue=PrimaryExpression
+	//        ( lvalue=ValueSelectionExpression
+	//        | '(' lvalue=ValueSelectionExpression ')'
+	//        )
+	//    ;
 	public LeftHandSideExpressionElements getLeftHandSideExpressionAccess() {
 		return pLeftHandSideExpression;
 	}
@@ -27213,10 +32359,13 @@
 	}
 	
 	//// Conditional Test Expression
-	//ConditionalTestExpression fmlExpr::Expression:
-	//	LogicalOrExpression ({fmlExpr::ConditionalTestExpression.condition=current} operator='?' thenOperand=Expression
-	//	elseSeparator=':'
-	//	elseOperand=Expression)?;
+	//ConditionalTestExpression returns fmlExpr::Expression
+	//    : LogicalOrExpression
+	//        ( {fmlExpr::ConditionalTestExpression.condition=current}
+	//            operator='?' thenOperand=Expression elseSeparator=':'
+	//            elseOperand=Expression
+	//        )?
+	//    ;
 	public ConditionalTestExpressionElements getConditionalTestExpressionAccess() {
 		return pConditionalTestExpression;
 	}
@@ -27226,9 +32375,13 @@
 	}
 	
 	//// Logical Expression
-	//LogicalOrExpression fmlExpr::Expression:
-	//	LogicalAndExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('||' | 'or')
-	//	operand+=LogicalAndExpression (('||' | 'or') operand+=LogicalAndExpression)*)?;
+	//LogicalOrExpression returns fmlExpr::Expression
+	//    : LogicalAndExpression
+	//        ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+	//            operator=( '||' | 'or' ) operand+=LogicalAndExpression
+	//            ( ( '||' | 'or' ) operand+=LogicalAndExpression )*
+	//        )?
+	//    ;
 	public LogicalOrExpressionElements getLogicalOrExpressionAccess() {
 		return pLogicalOrExpression;
 	}
@@ -27237,9 +32390,13 @@
 		return getLogicalOrExpressionAccess().getRule();
 	}
 	
-	//LogicalAndExpression fmlExpr::Expression:
-	//	BitwiseOrExpression ({fmlExpr::LogicalAssociativeExpression.operand+=current} operator=('&&' | 'and')
-	//	operand+=BitwiseOrExpression (('&&' | 'and') operand+=BitwiseOrExpression)*)?;
+	//LogicalAndExpression returns fmlExpr::Expression
+	//    : BitwiseOrExpression
+	//        ( {fmlExpr::LogicalAssociativeExpression.operand+=current}
+	//            operator=( '&&' | 'and' ) operand+=BitwiseOrExpression
+	//            ( ( '&&' | 'and' ) operand+=BitwiseOrExpression )*
+	//        )?
+	//    ;
 	public LogicalAndExpressionElements getLogicalAndExpressionAccess() {
 		return pLogicalAndExpression;
 	}
@@ -27249,9 +32406,13 @@
 	}
 	
 	//// Bitwise Expression
-	//BitwiseOrExpression fmlExpr::Expression:
-	//	BitwiseXorExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='|'
-	//	operand+=BitwiseXorExpression ('|' operand+=BitwiseXorExpression)*)?;
+	//BitwiseOrExpression returns fmlExpr::Expression
+	//    : BitwiseXorExpression
+	//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+	//            operator='|' operand+=BitwiseXorExpression
+	//            ( '|' operand+=BitwiseXorExpression )*
+	//        )?
+	//    ;
 	public BitwiseOrExpressionElements getBitwiseOrExpressionAccess() {
 		return pBitwiseOrExpression;
 	}
@@ -27260,9 +32421,13 @@
 		return getBitwiseOrExpressionAccess().getRule();
 	}
 	
-	//BitwiseXorExpression fmlExpr::Expression:
-	//	BitwiseAndExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='^'
-	//	operand+=BitwiseAndExpression ('^' operand+=BitwiseAndExpression)*)?;
+	//BitwiseXorExpression returns fmlExpr::Expression
+	//    : BitwiseAndExpression
+	//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+	//            operator='^' operand+=BitwiseAndExpression
+	//            ( '^' operand+=BitwiseAndExpression )*
+	//        )?
+	//    ;
 	public BitwiseXorExpressionElements getBitwiseXorExpressionAccess() {
 		return pBitwiseXorExpression;
 	}
@@ -27271,9 +32436,13 @@
 		return getBitwiseXorExpressionAccess().getRule();
 	}
 	
-	//BitwiseAndExpression fmlExpr::Expression:
-	//	EqualityExpression ({fmlExpr::BitwiseAssociativeExpression.operand+=current} operator='&' operand+=EqualityExpression
-	//	('&' operand+=EqualityExpression)*)?;
+	//BitwiseAndExpression returns fmlExpr::Expression
+	//    : EqualityExpression
+	//        ( {fmlExpr::BitwiseAssociativeExpression.operand+=current}
+	//            operator='&' operand+=EqualityExpression
+	//            ( '&' operand+=EqualityExpression )*
+	//        )?
+	//    ;
 	public BitwiseAndExpressionElements getBitwiseAndExpressionAccess() {
 		return pBitwiseAndExpression;
 	}
@@ -27283,9 +32452,12 @@
 	}
 	
 	//// Equality Expression
-	//EqualityExpression fmlExpr::Expression:
-	//	RelationalExpression ({fmlExpr::EqualityBinaryExpression.leftOperand=current} operator=EqualityOperator
-	//	rightOperand=RelationalExpression)?;
+	//EqualityExpression returns fmlExpr::Expression
+	//    : RelationalExpression
+	//        ( {fmlExpr::EqualityBinaryExpression.leftOperand=current}
+	//            operator=EqualityOperator rightOperand=RelationalExpression
+	//        )?
+	//    ;
 	public EqualityExpressionElements getEqualityExpressionAccess() {
 		return pEqualityExpression;
 	}
@@ -27294,8 +32466,9 @@
 		return getEqualityExpressionAccess().getRule();
 	}
 	
-	//EqualityOperator:
-	//	'==' | '!=' | '===' | '!==' | '=!=' | '=/=';
+	//EqualityOperator
+	//    : '==' | '!=' | '===' | '!==' | '=!=' | '=/='
+	//    ;
 	public EqualityOperatorElements getEqualityOperatorAccess() {
 		return pEqualityOperator;
 	}
@@ -27305,10 +32478,15 @@
 	}
 	
 	//// Relational Binary Expression
-	//RelationalExpression fmlExpr::Expression:
-	//	AdditiveExpression ({fmlExpr::RelationalBinaryExpression.leftOperand=current} operator=RelationalOperator
-	//	rightOperand=AdditiveExpression ({fmlExpr::RelationalTernaryExpression.leftRelation=current}
-	//	rightOperator=RelationalOperator rightOperand=AdditiveExpression)?)?;
+	//RelationalExpression returns fmlExpr::Expression
+	//    : AdditiveExpression
+	//        ( {fmlExpr::RelationalBinaryExpression.leftOperand=current}
+	//            operator=RelationalOperator rightOperand=AdditiveExpression
+	//            ( {fmlExpr::RelationalTernaryExpression.leftRelation=current}
+	//                rightOperator=RelationalOperator rightOperand=AdditiveExpression
+	//            )?
+	//        )?
+	//    ;
 	public RelationalExpressionElements getRelationalExpressionAccess() {
 		return pRelationalExpression;
 	}
@@ -27317,8 +32495,9 @@
 		return getRelationalExpressionAccess().getRule();
 	}
 	
-	//RelationalOperator:
-	//	'<' | '>' | '<=' | '>=' | 'in';
+	//RelationalOperator
+	//    : '<' | '>' | '<=' | '>=' | 'in'
+	//    ;
 	public RelationalOperatorElements getRelationalOperatorAccess() {
 		return pRelationalOperator;
 	}
@@ -27328,11 +32507,16 @@
 	}
 	
 	//// Arithmetic Associative (left) Expression
-	//AdditiveExpression fmlExpr::Expression:
-	//	MultiplicativeExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='+'
-	//	operand+=MultiplicativeExpression ('+' operand+=MultiplicativeExpression)* |
-	//	{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='-' operand+=MultiplicativeExpression ('-'
-	//	operand+=MultiplicativeExpression)*)*;
+	//AdditiveExpression returns fmlExpr::Expression
+	//    : MultiplicativeExpression
+	//        ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='+' operand+=MultiplicativeExpression
+	//            ( '+' operand+=MultiplicativeExpression )* )
+	//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='-' operand+=MultiplicativeExpression
+	//            ( '-' operand+=MultiplicativeExpression )* )
+	//        )*
+	//    ;
 	public AdditiveExpressionElements getAdditiveExpressionAccess() {
 		return pAdditiveExpression;
 	}
@@ -27341,13 +32525,22 @@
 		return getAdditiveExpressionAccess().getRule();
 	}
 	
-	//MultiplicativeExpression fmlExpr::Expression:
-	//	UnaryExpression ({fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='*' operand+=UnaryExpression
-	//	('*' operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='**'
-	//	operand+=UnaryExpression ('**' operand+=UnaryExpression)* |
-	//	{fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='/' operand+=UnaryExpression ('/'
-	//	operand+=UnaryExpression)* | {fmlExpr::ArithmeticAssociativeExpression.operand+=current} operator='%'
-	//	operand+=UnaryExpression ('%' operand+=UnaryExpression)*)*;
+	//MultiplicativeExpression returns fmlExpr::Expression
+	//    : UnaryExpression
+	//        ( ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='*' operand+=UnaryExpression
+	//            ( '*' operand+=UnaryExpression )* )
+	//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='**' operand+=UnaryExpression
+	//            ( '**' operand+=UnaryExpression )* )
+	//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='/' operand+=UnaryExpression
+	//            ( '/' operand+=UnaryExpression )* )
+	//        | ( {fmlExpr::ArithmeticAssociativeExpression.operand+=current}
+	//            operator='%' operand+=UnaryExpression
+	//            ( '%' operand+=UnaryExpression )* )
+	//        )*
+	//    ;
 	public MultiplicativeExpressionElements getMultiplicativeExpressionAccess() {
 		return pMultiplicativeExpression;
 	}
@@ -27357,19 +32550,19 @@
 	}
 	
 	//// Unary Expression
-	//UnaryExpression fmlExpr::Expression:
-	//	LiteralTerminalExpression
-	//	| ArithmeticUnaryExpression
-	//	| LogicalUnaryExpression
-	//	| QuantifiedLogicalExpression
-	//	| BitwiseUnaryExpression
-	//	| NewfreshExpression
-	//	| CastExpression
-	//	//	| CollectionFunctionExpression
-	//
-	//	| PrefixUnaryExpression
-	//	| PostfixUnaryExpression
-	//	| PrimaryExpression;
+	//UnaryExpression returns fmlExpr::Expression
+	//    : LiteralTerminalExpression
+	//    | ArithmeticUnaryExpression
+	//    | LogicalUnaryExpression
+	//    | QuantifiedLogicalExpression
+	//    | BitwiseUnaryExpression
+	//    | NewfreshExpression
+	//    | CastExpression
+	////    | CollectionFunctionExpression
+	//    | PrefixUnaryExpression
+	//    | PostfixUnaryExpression
+	//    | PrimaryExpression
+	//    ;
 	public UnaryExpressionElements getUnaryExpressionAccess() {
 		return pUnaryExpression;
 	}
@@ -27379,8 +32572,9 @@
 	}
 	
 	//// Postfix Increment or Decrement Expression
-	//PostfixUnaryExpression fmlExpr::Expression:
-	//	IncrementOrDecrementPostfixExpression;
+	//PostfixUnaryExpression returns fmlExpr::Expression
+	//    : IncrementOrDecrementPostfixExpression
+	//    ;
 	public PostfixUnaryExpressionElements getPostfixUnaryExpressionAccess() {
 		return pPostfixUnaryExpression;
 	}
@@ -27389,8 +32583,9 @@
 		return getPostfixUnaryExpressionAccess().getRule();
 	}
 	
-	//IncrementOrDecrementPostfixExpression fmlExpr::IncrementOrDecrementPostfixExpression:
-	//	leftHandSide=LeftHandSideExpression operator=(AffixOperator | '>=>');
+	//IncrementOrDecrementPostfixExpression returns fmlExpr::IncrementOrDecrementPostfixExpression
+	//    : leftHandSide=LeftHandSideExpression operator=(AffixOperator  | '>=>')
+	//    ;
 	public IncrementOrDecrementPostfixExpressionElements getIncrementOrDecrementPostfixExpressionAccess() {
 		return pIncrementOrDecrementPostfixExpression;
 	}
@@ -27400,8 +32595,9 @@
 	}
 	
 	//// Prefix Increment or Decrement Expression
-	//PrefixUnaryExpression fmlExpr::Expression:
-	//	IncrementOrDecrementPrefixExpression;
+	//PrefixUnaryExpression returns fmlExpr::Expression
+	//    : IncrementOrDecrementPrefixExpression
+	//    ;
 	public PrefixUnaryExpressionElements getPrefixUnaryExpressionAccess() {
 		return pPrefixUnaryExpression;
 	}
@@ -27410,8 +32606,9 @@
 		return getPrefixUnaryExpressionAccess().getRule();
 	}
 	
-	//IncrementOrDecrementPrefixExpression fmlExpr::IncrementOrDecrementPrefixExpression:
-	//	operator=AffixOperator leftHandSide=LeftHandSideExpression;
+	//IncrementOrDecrementPrefixExpression returns fmlExpr::IncrementOrDecrementPrefixExpression
+	//    : operator=AffixOperator leftHandSide=LeftHandSideExpression
+	//    ;
 	public IncrementOrDecrementPrefixExpressionElements getIncrementOrDecrementPrefixExpressionAccess() {
 		return pIncrementOrDecrementPrefixExpression;
 	}
@@ -27420,8 +32617,9 @@
 		return getIncrementOrDecrementPrefixExpressionAccess().getRule();
 	}
 	
-	//AffixOperator:
-	//	'++' | '--';
+	//AffixOperator
+	//    : '++' | '--'
+	//    ;
 	public AffixOperatorElements getAffixOperatorAccess() {
 		return pAffixOperator;
 	}
@@ -27431,9 +32629,10 @@
 	}
 	
 	//// Newfresh Unary Expression
-	//NewfreshExpression fmlExpr::NewfreshExpression:
-	//	'newfresh' leftHandSide=LeftHandSideExpression
-	//	| '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')';
+	//NewfreshExpression returns fmlExpr::NewfreshExpression
+	//    : 'newfresh' leftHandSide=LeftHandSideExpression
+	//    | '(:' leftHandSide=LeftHandSideExpression 'newfresh' ')'
+	//    ;
 	public NewfreshExpressionElements getNewfreshExpressionAccess() {
 		return pNewfreshExpression;
 	}
@@ -27443,9 +32642,10 @@
 	}
 	
 	//// Cast Expression
-	//CastExpression fmlExpr::CastExpression:
-	//	'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>'
-	//	'(' operand=Expression ')';
+	//CastExpression returns fmlExpr::CastExpression
+	//    : 'ctor' '<' datatype=[fmlType::DataType|ESUfid] '>'
+	//         '(' operand=Expression ')'
+	//    ;
 	public CastExpressionElements getCastExpressionAccess() {
 		return pCastExpression;
 	}
@@ -27455,10 +32655,11 @@
 	}
 	
 	////CollectionFunctionExpression  fmlExpr::MixTupleExpression
-	//CollectionFunctionExpression fmlExpr::Expression:
-	//	'empty(' Expression ')'
-	//	| 'nonempty(' Expression ')'
-	//	| 'size(' Expression ')';
+	//CollectionFunctionExpression returns fmlExpr::Expression
+	//    : 'empty('    Expression ')'
+	//    | 'nonempty(' Expression ')'
+	//    | 'size('     Expression ')'
+	//    ;
 	public CollectionFunctionExpressionElements getCollectionFunctionExpressionAccess() {
 		return pCollectionFunctionExpression;
 	}
@@ -27468,8 +32669,9 @@
 	}
 	
 	//// Arithmetic Unary Expression
-	//ArithmeticUnaryExpression fmlExpr::ArithmeticUnaryExpression:
-	//	operator=ArithmeticUnaryOperator operand=UnaryExpression;
+	//ArithmeticUnaryExpression returns fmlExpr::ArithmeticUnaryExpression
+	//    : operator=ArithmeticUnaryOperator operand=UnaryExpression
+	//;
 	public ArithmeticUnaryExpressionElements getArithmeticUnaryExpressionAccess() {
 		return pArithmeticUnaryExpression;
 	}
@@ -27478,8 +32680,9 @@
 		return getArithmeticUnaryExpressionAccess().getRule();
 	}
 	
-	//ArithmeticUnaryOperator:
-	//	'+' | '-';
+	//ArithmeticUnaryOperator
+	//    : '+' | '-'
+	//    ;
 	public ArithmeticUnaryOperatorElements getArithmeticUnaryOperatorAccess() {
 		return pArithmeticUnaryOperator;
 	}
@@ -27489,10 +32692,11 @@
 	}
 	
 	//// Logical Quantified Expression
-	//QuantifiedLogicalExpression fmlExpr::QuantifiedLogicalExpression:
-	//	quantifier=('forall' | 'exists')
-	//	'<' variable+=BoundVariable (',' variable+=BoundVariable)* '>'
-	//	'(' predicate=Expression ')';
+	//QuantifiedLogicalExpression returns fmlExpr::QuantifiedLogicalExpression
+	//    : quantifier=( 'forall' | 'exists' )
+	//      '<'  variable+=BoundVariable  ( ',' variable+=BoundVariable )*  '>'
+	//      '('  predicate=Expression  ')'
+	//    ;
 	public QuantifiedLogicalExpressionElements getQuantifiedLogicalExpressionAccess() {
 		return pQuantifiedLogicalExpression;
 	}
@@ -27501,8 +32705,9 @@
 		return getQuantifiedLogicalExpressionAccess().getRule();
 	}
 	
-	//BoundVariable fmlInfra::Variable:
-	//	name=ESIdentifier ':' type=DataType;
+	//BoundVariable returns fmlInfra::Variable
+	//    : name=ESIdentifier  ':'  type=DataType
+	//    ;
 	public BoundVariableElements getBoundVariableAccess() {
 		return pBoundVariable;
 	}
@@ -27512,8 +32717,9 @@
 	}
 	
 	//// Logical Unary Expression
-	//LogicalUnaryExpression fmlExpr::LogicalUnaryExpression:
-	//	operator=('!' | 'not') operand=UnaryExpression;
+	//LogicalUnaryExpression returns fmlExpr::LogicalUnaryExpression
+	//    : operator=('!' | 'not') operand=UnaryExpression
+	//    ;
 	public LogicalUnaryExpressionElements getLogicalUnaryExpressionAccess() {
 		return pLogicalUnaryExpression;
 	}
@@ -27523,8 +32729,9 @@
 	}
 	
 	//// Logical Unary Expression
-	//BitwiseUnaryExpression fmlExpr::BitwiseUnaryExpression:
-	//	operator='~' operand=UnaryExpression;
+	//BitwiseUnaryExpression returns fmlExpr::BitwiseUnaryExpression
+	//    :operator='~' operand=UnaryExpression
+	//    ;
 	public BitwiseUnaryExpressionElements getBitwiseUnaryExpressionAccess() {
 		return pBitwiseUnaryExpression;
 	}
@@ -27533,26 +32740,45 @@
 		return getBitwiseUnaryExpressionAccess().getRule();
 	}
 	
-	//PrimaryExpression fmlExpr::Expression:
-	//	BaseExpression ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'.' //kind=ValueDotFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	// '(' parameter ',' ... ',' parameter ')'
-	//	| kind=ValueParameterExpressionKind
-	//	arg=MixTupleExpressionList ')')?)* ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'->' //kind=ValueArrowFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	// '(' parameter ',' ... ',' parameter ')'
-	//	| kind=ValueParameterExpressionKind
-	//	arg=MixTupleExpressionList ')')? ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'.' //kind=ValueDotFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	// '(' parameter ',' ... ',' parameter ')'
-	//	| kind=ValueParameterExpressionKind
-	//	arg=MixTupleExpressionList ')')?)*)?;
+	//PrimaryExpression returns fmlExpr::Expression
+	//    : BaseExpression
+	//        // '.' element
+	//        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//            '.' //kind=ValueDotFieldExpressionKind
+	//            element=[fmlCommon::NamedElement|ESIdentifier]
+	//            // '[' index ',' ... ',' index ']'
+	//            ( kind=ValueIndexExpressionKind
+	//                arg=PositionalTupleExpressionList  ']'
+	//            // '(' parameter ',' ... ',' parameter ')'
+	//            | kind=ValueParameterExpressionKind
+	//                arg=MixTupleExpressionList  ')'
+	//            )?
+	//        )*
+	//        // '->' element
+	//        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//            '->' //kind=ValueArrowFieldExpressionKind
+	//            element=[fmlCommon::NamedElement|ESIdentifier]
+	//            // '[' index ',' ... ',' index ']'
+	//            ( kind=ValueIndexExpressionKind
+	//                arg=PositionalTupleExpressionList  ']'
+	//            // '(' parameter ',' ... ',' parameter ')'
+	//            | kind=ValueParameterExpressionKind
+	//                arg=MixTupleExpressionList  ')'
+	//            )?
+	//            // '.' element
+	//            ( { fmlExpr::ValueElementSpecification.parent=current }
+	//                 '.' //kind=ValueDotFieldExpressionKind
+	//                element=[fmlCommon::NamedElement|ESIdentifier]
+	//                // '[' index ',' ... ',' index ']'
+	//                ( kind=ValueIndexExpressionKind
+	//                    arg=PositionalTupleExpressionList  ']'
+	//                // '(' parameter ',' ... ',' parameter ')'
+	//                | kind=ValueParameterExpressionKind
+	//                    arg=MixTupleExpressionList  ')'
+	//                )?
+	//            )*
+	//        )?
+	//    ;
 	public PrimaryExpressionElements getPrimaryExpressionAccess() {
 		return pPrimaryExpression;
 	}
@@ -27561,13 +32787,13 @@
 		return getPrimaryExpressionAccess().getRule();
 	}
 	
-	//BaseExpression fmlExpr::Expression:
-	//	LiteralReferenceableExpression
-	//	| '(' Expression ')'
-	//	| InvokeExpressionDeprecated
-	//	| DynamicInstantiationExpression
-	//	//	| NamedExpression
-	//;
+	//BaseExpression returns fmlExpr::Expression
+	//    : LiteralReferenceableExpression
+	//    | '(' Expression ')'
+	//    | InvokeExpressionDeprecated
+	//    | DynamicInstantiationExpression
+	////    | NamedExpression
+	//    ;
 	public BaseExpressionElements getBaseExpressionAccess() {
 		return pBaseExpression;
 	}
@@ -27577,8 +32803,10 @@
 	}
 	
 	//// Behavior Invoke Expression
-	//InvokeExpression fmlExpr::InvokeExpression:
-	//	{fmlExpr::InvokeExpression} invokable=ValueSelectionExpression;
+	//InvokeExpression returns fmlExpr::InvokeExpression
+	//    : {fmlExpr::InvokeExpression}
+	//        invokable=ValueSelectionExpression
+	//    ;
 	public InvokeExpressionElements getInvokeExpressionAccess() {
 		return pInvokeExpression;
 	}
@@ -27587,9 +32815,10 @@
 		return getInvokeExpressionAccess().getRule();
 	}
 	
-	//InvokeExpressionDeprecated fmlExpr::InvokeExpression:
-	//	{fmlExpr::InvokeExpression}
-	//	'(:' args+=Expression invokable=LiteralReferenceElement args+=Expression* ')';
+	//InvokeExpressionDeprecated returns fmlExpr::InvokeExpression
+	//    : {fmlExpr::InvokeExpression}
+	//        '(:' args+=Expression invokable=LiteralReferenceElement ( args+=Expression )* ')'
+	//    ;
 	public InvokeExpressionDeprecatedElements getInvokeExpressionDeprecatedAccess() {
 		return pInvokeExpressionDeprecated;
 	}
@@ -27598,9 +32827,10 @@
 		return getInvokeExpressionDeprecatedAccess().getRule();
 	}
 	
-	//DynamicInstantiationExpression fmlExpr::InstantiationExpression:
-	//	{fmlExpr::InstantiationExpression}
-	//	'new' instance=InstanceSpecification;
+	//DynamicInstantiationExpression returns fmlExpr::InstantiationExpression
+	//    : {fmlExpr::InstantiationExpression}
+	//        'new' instance=InstanceSpecification
+	//    ;
 	public DynamicInstantiationExpressionElements getDynamicInstantiationExpressionAccess() {
 		return pDynamicInstantiationExpression;
 	}
@@ -27609,9 +32839,13 @@
 		return getDynamicInstantiationExpressionAccess().getRule();
 	}
 	
-	//InstanceSpecification fmlInfra::InstanceMachine:
-	//	{fmlInfra::InstanceMachine} model=[fmlInfra::Machine|ESIdentifier] ('(' (slot+=SlotParameter (','
-	//	slot+=SlotParameter)*)? ')')? ('{' (slot+=SlotProperty ';')* '}')?;
+	//InstanceSpecification returns fmlInfra::InstanceMachine
+	//    : {fmlInfra::InstanceMachine}
+	//        model=[fmlInfra::Machine|ESIdentifier]
+	////        ( '(' arg=MixTupleExpressionList ')'
+	//        ( '(' ( slot+=SlotParameter ( ',' slot+=SlotParameter )* )? ')' )?
+	//        ( '{' ( slot+=SlotProperty ';' )*  '}' )?
+	//    ;
 	public InstanceSpecificationElements getInstanceSpecificationAccess() {
 		return pInstanceSpecification;
 	}
@@ -27621,8 +32855,9 @@
 	}
 	
 	//// Tuple Expression
-	//TupleParameterExpression fmlExpr::TupleExpression:
-	//	'(' MixTupleExpressionList ')';
+	//TupleParameterExpression returns fmlExpr::TupleExpression
+	//    : '('  MixTupleExpressionList  ')'
+	//    ;
 	public TupleParameterExpressionElements getTupleParameterExpressionAccess() {
 		return pTupleParameterExpression;
 	}
@@ -27631,8 +32866,11 @@
 		return getTupleParameterExpressionAccess().getRule();
 	}
 	
-	//MixTupleExpressionList fmlExpr::MixTupleExpression:
-	//	{fmlExpr::MixTupleExpression} value+=(Expression | NamedExpression) (',' value+=(Expression | NamedExpression))*;
+	//MixTupleExpressionList returns fmlExpr::MixTupleExpression
+	//    : {fmlExpr::MixTupleExpression}
+	//        value+=( Expression | NamedExpression )
+	//        ( ',' value+=( Expression | NamedExpression ) )*
+	//    ;
 	public MixTupleExpressionListElements getMixTupleExpressionListAccess() {
 		return pMixTupleExpressionList;
 	}
@@ -27643,29 +32881,30 @@
 	
 	////// At least one NamedExpression
 	////FormalMixTupleExpressionList returns fmlExpr::MixTupleExpression
-	////	: {fmlExpr::MixTupleExpression}
-	////		( value+=Expression  ( ',' value+=Expression )*
-	////			( ',' value+=NamedExpression )
-	////		| value+=NamedExpression
-	////		)
-	////		( ',' value+=( Expression | NamedExpression ) )*
-	////	;
+	////    : {fmlExpr::MixTupleExpression}
+	////        ( value+=Expression  ( ',' value+=Expression )*
+	////            ( ',' value+=NamedExpression )
+	////        | value+=NamedExpression
+	////        )
+	////        ( ',' value+=( Expression | NamedExpression ) )*
+	////    ;
 	////
 	////// NamedExpression only at the end
 	////EndingMixTupleExpressionList returns fmlExpr::MixTupleExpression
-	////	: {fmlExpr::MixTupleExpression}
-	////		( value+=Expression  ( ',' value+=Expression )*
-	////		| value+=NamedExpression
-	////		)
-	////		( ',' value+=NamedExpression )*
-	////	;
+	////    : {fmlExpr::MixTupleExpression}
+	////        ( value+=Expression  ( ',' value+=Expression )*
+	////        | value+=NamedExpression
+	////        )
+	////        ( ',' value+=NamedExpression )*
+	////    ;
 	////
 	////
 	////NamedTupleExpressionList returns fmlExpr::NamedTupleExpression
-	////	: value+=NamedExpression ( ',' value+=NamedExpression )*
-	////	;
-	//PositionalTupleExpressionList fmlExpr::PositionalTupleExpression:
-	//	value+=Expression (',' value+=Expression)*;
+	////    : value+=NamedExpression ( ',' value+=NamedExpression )*
+	////    ;
+	//PositionalTupleExpressionList returns fmlExpr::PositionalTupleExpression
+	//    : value+=Expression ( ',' value+=Expression )*
+	//    ;
 	public PositionalTupleExpressionListElements getPositionalTupleExpressionListAccess() {
 		return pPositionalTupleExpressionList;
 	}
@@ -27674,8 +32913,11 @@
 		return getPositionalTupleExpressionListAccess().getRule();
 	}
 	
-	//NamedExpression fmlExpr::NamedExpression:
-	//	name=XLIA_ID (':' | '=>' | '<-') expression=Expression;
+	//NamedExpression returns fmlExpr::NamedExpression
+	//    : //target=[fmlCommon::NamedElement|ESIdentifier]
+	//        name=XLIA_ID
+	//        ( ':' | '=>' | '<-' ) expression=Expression
+	//    ;
 	public NamedExpressionElements getNamedExpressionAccess() {
 		return pNamedExpression;
 	}
@@ -27685,15 +32927,16 @@
 	}
 	
 	////NotificationComExpression returns fmlExpr::Expression
-	////	: { fmlExpr::Expression }
-	////		symbol=( 'present' | 'absent' )  operand+=Expression
-	////	;
+	////    : { fmlExpr::Expression }
+	////        symbol=( 'present' | 'absent' )  operand+=Expression
+	////    ;
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralExpression fmlExpr::LiteralExpression:
-	//	LiteralTerminalExpression
-	//	| LiteralReferenceableExpression;
+	//LiteralExpression returns fmlExpr::LiteralExpression
+	//    : LiteralTerminalExpression
+	//    | LiteralReferenceableExpression
+	//    ;
 	public LiteralExpressionElements getLiteralExpressionAccess() {
 		return pLiteralExpression;
 	}
@@ -27702,9 +32945,10 @@
 		return getLiteralExpressionAccess().getRule();
 	}
 	
-	//LiteralReferenceableExpression fmlExpr::LiteralExpression:
-	//	LiteralCollectionExpression
-	//	| LiteralReferenceExpression;
+	//LiteralReferenceableExpression returns fmlExpr::LiteralExpression
+	//    : LiteralCollectionExpression
+	//    | LiteralReferenceExpression
+	//    ;
 	public LiteralReferenceableExpressionElements getLiteralReferenceableExpressionAccess() {
 		return pLiteralReferenceableExpression;
 	}
@@ -27713,18 +32957,19 @@
 		return getLiteralReferenceableExpressionAccess().getRule();
 	}
 	
-	//LiteralTerminalExpression fmlExpr::LiteralExpression:
-	//	LiteralBooleanExpression
-	//	| LiteralIntegerExpression
-	//	| LiteralRationalExpression
-	//	| LiteralFloatExpression
-	//	| LiteralCharacterExpression
-	//	| LiteralStringExpression
-	//	| LiteralNullExpression
-	//	| LiteralAnyValueExpression
-	//	| LiteralOptionalValueExpression
-	//	| LiteralNoneValueExpression
-	//	| LiteralAnyOrNoneValueExpression;
+	//LiteralTerminalExpression returns fmlExpr::LiteralExpression
+	//    : LiteralBooleanExpression
+	//    | LiteralIntegerExpression
+	//    | LiteralRationalExpression
+	//    | LiteralFloatExpression
+	//    | LiteralCharacterExpression
+	//    | LiteralStringExpression
+	//    | LiteralNullExpression
+	//    | LiteralAnyValueExpression
+	//    | LiteralOptionalValueExpression
+	//    | LiteralNoneValueExpression
+	//    | LiteralAnyOrNoneValueExpression
+	//    ;
 	public LiteralTerminalExpressionElements getLiteralTerminalExpressionAccess() {
 		return pLiteralTerminalExpression;
 	}
@@ -27736,8 +32981,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Boolean / Numeric Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralBooleanExpression fmlExpr::LiteralBooleanExpression:
-	//	{fmlExpr::LiteralBooleanExpression} value=EBoolean;
+	//LiteralBooleanExpression returns fmlExpr::LiteralBooleanExpression
+	//    : {fmlExpr::LiteralBooleanExpression}
+	//        value=EBoolean
+	//    ;
 	public LiteralBooleanExpressionElements getLiteralBooleanExpressionAccess() {
 		return pLiteralBooleanExpression;
 	}
@@ -27746,8 +32993,10 @@
 		return getLiteralBooleanExpressionAccess().getRule();
 	}
 	
-	//LiteralIntegerExpression fmlExpr::LiteralIntegerExpression:
-	//	{fmlExpr::LiteralIntegerExpression} value=EInteger;
+	//LiteralIntegerExpression returns fmlExpr::LiteralIntegerExpression
+	//    : {fmlExpr::LiteralIntegerExpression}
+	//        value=EInteger
+	//    ;
 	public LiteralIntegerExpressionElements getLiteralIntegerExpressionAccess() {
 		return pLiteralIntegerExpression;
 	}
@@ -27756,8 +33005,10 @@
 		return getLiteralIntegerExpressionAccess().getRule();
 	}
 	
-	//LiteralRationalExpression fmlExpr::LiteralRationalExpression:
-	//	{fmlExpr::LiteralRationalExpression} numerator=EInteger '/' denominator=EInteger;
+	//LiteralRationalExpression returns fmlExpr::LiteralRationalExpression
+	//    : {fmlExpr::LiteralRationalExpression}
+	//        numerator=EInteger '/' denominator=EInteger
+	//    ;
 	public LiteralRationalExpressionElements getLiteralRationalExpressionAccess() {
 		return pLiteralRationalExpression;
 	}
@@ -27766,8 +33017,10 @@
 		return getLiteralRationalExpressionAccess().getRule();
 	}
 	
-	//LiteralFloatExpression fmlExpr::LiteralFloatExpression:
-	//	{fmlExpr::LiteralFloatExpression} value=EDouble;
+	//LiteralFloatExpression returns fmlExpr::LiteralFloatExpression
+	//    : {fmlExpr::LiteralFloatExpression}
+	//        value=EDouble
+	//    ;
 	public LiteralFloatExpressionElements getLiteralFloatExpressionAccess() {
 		return pLiteralFloatExpression;
 	}
@@ -27779,8 +33032,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Character / String Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralCharacterExpression fmlExpr::LiteralCharacterExpression:
-	//	{fmlExpr::LiteralCharacterExpression} value=ECharacter;
+	//LiteralCharacterExpression returns fmlExpr::LiteralCharacterExpression
+	//    : {fmlExpr::LiteralCharacterExpression}
+	//        value=ECharacter
+	//    ;
 	public LiteralCharacterExpressionElements getLiteralCharacterExpressionAccess() {
 		return pLiteralCharacterExpression;
 	}
@@ -27789,8 +33044,10 @@
 		return getLiteralCharacterExpressionAccess().getRule();
 	}
 	
-	//LiteralStringExpression fmlExpr::LiteralStringExpression:
-	//	{fmlExpr::LiteralStringExpression} value=EString;
+	//LiteralStringExpression returns fmlExpr::LiteralStringExpression
+	//    : {fmlExpr::LiteralStringExpression}
+	//        value=EString
+	//    ;
 	public LiteralStringExpressionElements getLiteralStringExpressionAccess() {
 		return pLiteralStringExpression;
 	}
@@ -27802,9 +33059,11 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Null Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralNullExpression fmlExpr::LiteralNullExpression:
-	//	{fmlExpr::LiteralNullExpression}
-	//	'$null' ('<' type=NullPrimitiveInstanceType '>')?;
+	//LiteralNullExpression returns fmlExpr::LiteralNullExpression
+	//    : {fmlExpr::LiteralNullExpression}
+	//        '$null' //type=AnyNullPrimitiveInstanceType
+	//        ( '<'  type=NullPrimitiveInstanceType  '>' )?
+	//    ;
 	public LiteralNullExpressionElements getLiteralNullExpressionAccess() {
 		return pLiteralNullExpression;
 	}
@@ -27813,8 +33072,10 @@
 		return getLiteralNullExpressionAccess().getRule();
 	}
 	
-	//AnyNullPrimitiveInstanceType fmlType::PrimitiveInstanceType:
-	//	{fmlType::PrimitiveInstanceType} expected=AnyPrimitiveInstanceKind;
+	//AnyNullPrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+	//    : { fmlType::PrimitiveInstanceType }
+	//        expected=AnyPrimitiveInstanceKind
+	//    ;
 	public AnyNullPrimitiveInstanceTypeElements getAnyNullPrimitiveInstanceTypeAccess() {
 		return pAnyNullPrimitiveInstanceType;
 	}
@@ -27823,8 +33084,9 @@
 		return getAnyNullPrimitiveInstanceTypeAccess().getRule();
 	}
 	
-	//enum AnyPrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind:
-	//	any='$null';
+	//enum AnyPrimitiveInstanceKind returns fmlType::PrimitiveInstanceKind
+	//    : any='$null'
+	//    ;
 	public AnyPrimitiveInstanceKindElements getAnyPrimitiveInstanceKindAccess() {
 		return eAnyPrimitiveInstanceKind;
 	}
@@ -27833,9 +33095,12 @@
 		return getAnyPrimitiveInstanceKindAccess().getRule();
 	}
 	
-	//NullPrimitiveInstanceType fmlType::PrimitiveInstanceType:
-	//	{fmlType::PrimitiveInstanceType} expected=PrimitiveInstanceKind
-	//	| {fmlType::PrimitiveInstanceType} model=[fmlCommon::NamedElement|ESIdentifier];
+	//NullPrimitiveInstanceType returns fmlType::PrimitiveInstanceType
+	//    : { fmlType::PrimitiveInstanceType }
+	//        expected=PrimitiveInstanceKind
+	//    | { fmlType::PrimitiveInstanceType }
+	//        model=[fmlCommon::NamedElement|ESIdentifier]
+	//    ;
 	public NullPrimitiveInstanceTypeElements getNullPrimitiveInstanceTypeAccess() {
 		return pNullPrimitiveInstanceType;
 	}
@@ -27847,10 +33112,15 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Predefined Constant Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//AnyDataTypeReference fmlType::DataType:
-	//	SimpleDataType ({fmlType::DataTypeReference.support=current}
-	//	'[' multiplicity=DataTypeMultiplicity ']')?
-	//	| {fmlType::DataTypeReference} typeref=[fmlType::DataType|ESUfid] ('[' multiplicity=DataTypeMultiplicity ']')?;
+	//AnyDataTypeReference returns fmlType::DataType
+	//    : SimpleDataType
+	//        ( {fmlType::DataTypeReference.support=current}
+	//            '[' multiplicity=DataTypeMultiplicity ']'
+	//        )?
+	//    | {fmlType::DataTypeReference}
+	//        typeref=[fmlType::DataType|ESUfid]
+	//        ( '[' multiplicity=DataTypeMultiplicity ']' )?
+	//    ;
 	public AnyDataTypeReferenceElements getAnyDataTypeReferenceAccess() {
 		return pAnyDataTypeReference;
 	}
@@ -27859,9 +33129,11 @@
 		return getAnyDataTypeReferenceAccess().getRule();
 	}
 	
-	//LiteralAnyValueExpression fmlExpr::LiteralAnyValueExpression:
-	//	{fmlExpr::LiteralAnyValueExpression}
-	//	'$any' ('<' type=AnyDataTypeReference '>')?;
+	//LiteralAnyValueExpression returns fmlExpr::LiteralAnyValueExpression
+	//    : {fmlExpr::LiteralAnyValueExpression}
+	//        '$any'
+	//        ( '<'  type=AnyDataTypeReference  '>' )?
+	//    ;
 	public LiteralAnyValueExpressionElements getLiteralAnyValueExpressionAccess() {
 		return pLiteralAnyValueExpression;
 	}
@@ -27870,9 +33142,11 @@
 		return getLiteralAnyValueExpressionAccess().getRule();
 	}
 	
-	//LiteralOptionalValueExpression fmlExpr::LiteralOptionalValueExpression:
-	//	{fmlExpr::LiteralOptionalValueExpression}
-	//	'$optional' ('<' type=AnyDataTypeReference '>')?;
+	//LiteralOptionalValueExpression returns fmlExpr::LiteralOptionalValueExpression
+	//    : {fmlExpr::LiteralOptionalValueExpression}
+	//        '$optional'
+	//        ( '<'  type=AnyDataTypeReference  '>' )?
+	//    ;
 	public LiteralOptionalValueExpressionElements getLiteralOptionalValueExpressionAccess() {
 		return pLiteralOptionalValueExpression;
 	}
@@ -27881,9 +33155,11 @@
 		return getLiteralOptionalValueExpressionAccess().getRule();
 	}
 	
-	//LiteralNoneValueExpression fmlExpr::LiteralNoneValueExpression:
-	//	{fmlExpr::LiteralNoneValueExpression}
-	//	'$none' ('<' type=AnyDataTypeReference '>')?;
+	//LiteralNoneValueExpression returns fmlExpr::LiteralNoneValueExpression
+	//    : {fmlExpr::LiteralNoneValueExpression}
+	//        '$none'
+	//        ( '<'  type=AnyDataTypeReference  '>' )?
+	//    ;
 	public LiteralNoneValueExpressionElements getLiteralNoneValueExpressionAccess() {
 		return pLiteralNoneValueExpression;
 	}
@@ -27892,9 +33168,11 @@
 		return getLiteralNoneValueExpressionAccess().getRule();
 	}
 	
-	//LiteralAnyOrNoneValueExpression fmlExpr::LiteralAnyOrNoneValueExpression:
-	//	{fmlExpr::LiteralAnyOrNoneValueExpression}
-	//	'$any$none' ('<' type=AnyDataTypeReference '>')?;
+	//LiteralAnyOrNoneValueExpression returns fmlExpr::LiteralAnyOrNoneValueExpression
+	//    : {fmlExpr::LiteralAnyOrNoneValueExpression}
+	//        '$any$none'
+	//        ( '<'  type=AnyDataTypeReference  '>' )?
+	//    ;
 	public LiteralAnyOrNoneValueExpressionElements getLiteralAnyOrNoneValueExpressionAccess() {
 		return pLiteralAnyOrNoneValueExpression;
 	}
@@ -27906,9 +33184,15 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Collection Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralCollectionExpression fmlExpr::LiteralCollectionExpression:
-	//	{fmlExpr::LiteralCollectionExpression} ('<' datatype=DataType '>')?
-	//	'{' ((value+=Expression | value+=NamedExpression) (',' (value+=Expression | value+=NamedExpression))*)? '}';
+	//LiteralCollectionExpression returns fmlExpr::LiteralCollectionExpression
+	//    : {fmlExpr::LiteralCollectionExpression}
+	////        ( 'new' datatype=DataType )?
+	//        ( '<' datatype=DataType '>')?
+	//        '{' (
+	//            ( value+=Expression | value+=NamedExpression )
+	//            ( ',' ( value+=Expression | value+=NamedExpression ) )*
+	//        )? '}'
+	//    ;
 	public LiteralCollectionExpressionElements getLiteralCollectionExpressionAccess() {
 		return pLiteralCollectionExpression;
 	}
@@ -27920,11 +33204,12 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Literal Reference Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralReferenceExpression fmlExpr::LiteralReferenceExpression:
-	//	LiteralReferenceElement
-	//	| LiteralReferenceVariableContext
-	//	| LiteralReferenceMachineContext
-	//	| LiteralEnvExpression;
+	//LiteralReferenceExpression returns fmlExpr::LiteralReferenceExpression
+	//    : LiteralReferenceElement
+	//    | LiteralReferenceVariableContext
+	//    | LiteralReferenceMachineContext
+	//    | LiteralEnvExpression
+	//    ;
 	public LiteralReferenceExpressionElements getLiteralReferenceExpressionAccess() {
 		return pLiteralReferenceExpression;
 	}
@@ -27933,13 +33218,17 @@
 		return getLiteralReferenceExpressionAccess().getRule();
 	}
 	
-	//LiteralReferenceElement fmlExpr::LiteralReferenceElement:
-	//	{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier]
-	//	(kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	// '(' parameter ',' ... ',' parameter ')'
-	//	| kind=ValueParameterExpressionKind
-	//	arg=MixTupleExpressionList ')')?;
+	//LiteralReferenceElement returns fmlExpr::LiteralReferenceElement
+	//    : {fmlExpr::LiteralReferenceElement}
+	//        ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
+	//        // '[' index ',' ... ',' index ']'
+	//        ( kind=ValueIndexExpressionKind
+	//            arg=PositionalTupleExpressionList  ']'
+	//        // '(' parameter ',' ... ',' parameter ')'
+	//        | kind=ValueParameterExpressionKind
+	//            arg=MixTupleExpressionList  ')'
+	//        )?
+	//    ;
 	public LiteralReferenceElementElements getLiteralReferenceElementAccess() {
 		return pLiteralReferenceElement;
 	}
@@ -27948,8 +33237,10 @@
 		return getLiteralReferenceElementAccess().getRule();
 	}
 	
-	//LiteralPureReferenceElement fmlExpr::LiteralReferenceElement:
-	//	{fmlExpr::LiteralReferenceElement} ('spec::' | '::')? element=[fmlCommon::NamedElement|ESIdentifier];
+	//LiteralPureReferenceElement returns fmlExpr::LiteralReferenceElement
+	//    : {fmlExpr::LiteralReferenceElement}
+	//        ( 'spec::' | '::' )?  element=[fmlCommon::NamedElement|ESIdentifier]
+	//    ;
 	public LiteralPureReferenceElementElements getLiteralPureReferenceElementAccess() {
 		return pLiteralPureReferenceElement;
 	}
@@ -27958,11 +33249,12 @@
 		return getLiteralPureReferenceElementAccess().getRule();
 	}
 	
-	//LiteralReferenceVariableContext fmlExpr::LiteralReferenceExpression:
-	//	LiteralTimeExpression
-	//	| LiteralTimeDeltaExpression
-	//	| LiteralTimeInitialExpression
-	//	| LiteralTimeDeltaInitialExpression;
+	//LiteralReferenceVariableContext returns fmlExpr::LiteralReferenceExpression
+	//    : LiteralTimeExpression
+	//    | LiteralTimeDeltaExpression
+	//    | LiteralTimeInitialExpression
+	//    | LiteralTimeDeltaInitialExpression
+	//    ;
 	public LiteralReferenceVariableContextElements getLiteralReferenceVariableContextAccess() {
 		return pLiteralReferenceVariableContext;
 	}
@@ -27971,8 +33263,9 @@
 		return getLiteralReferenceVariableContextAccess().getRule();
 	}
 	
-	//LiteralTimeExpression fmlExpr::LiteralTimeExpression:
-	//	{fmlExpr::LiteralTimeExpression} '$time';
+	//LiteralTimeExpression returns fmlExpr::LiteralTimeExpression
+	//    : {fmlExpr::LiteralTimeExpression} ( '$time' )
+	//    ;
 	public LiteralTimeExpressionElements getLiteralTimeExpressionAccess() {
 		return pLiteralTimeExpression;
 	}
@@ -27981,8 +33274,9 @@
 		return getLiteralTimeExpressionAccess().getRule();
 	}
 	
-	//LiteralTimeInitialExpression fmlExpr::LiteralTimeExpression:
-	//	{fmlExpr::LiteralTimeExpression} '$time#initial';
+	//LiteralTimeInitialExpression returns fmlExpr::LiteralTimeExpression
+	//    : {fmlExpr::LiteralTimeExpression} ( '$time#initial' )
+	//    ;
 	public LiteralTimeInitialExpressionElements getLiteralTimeInitialExpressionAccess() {
 		return pLiteralTimeInitialExpression;
 	}
@@ -27991,8 +33285,9 @@
 		return getLiteralTimeInitialExpressionAccess().getRule();
 	}
 	
-	//LiteralTimeDeltaExpression fmlExpr::LiteralTimeDeltaExpression:
-	//	{fmlExpr::LiteralTimeDeltaExpression} '$delta';
+	//LiteralTimeDeltaExpression returns fmlExpr::LiteralTimeDeltaExpression
+	//    : {fmlExpr::LiteralTimeDeltaExpression} ( '$delta' )
+	//    ;
 	public LiteralTimeDeltaExpressionElements getLiteralTimeDeltaExpressionAccess() {
 		return pLiteralTimeDeltaExpression;
 	}
@@ -28001,8 +33296,9 @@
 		return getLiteralTimeDeltaExpressionAccess().getRule();
 	}
 	
-	//LiteralTimeDeltaInitialExpression fmlExpr::LiteralTimeDeltaExpression:
-	//	{fmlExpr::LiteralTimeDeltaExpression} '$delta#initial';
+	//LiteralTimeDeltaInitialExpression returns fmlExpr::LiteralTimeDeltaExpression
+	//    : {fmlExpr::LiteralTimeDeltaExpression} ( '$delta#initial' )
+	//    ;
 	public LiteralTimeDeltaInitialExpressionElements getLiteralTimeDeltaInitialExpressionAccess() {
 		return pLiteralTimeDeltaInitialExpression;
 	}
@@ -28011,13 +33307,14 @@
 		return getLiteralTimeDeltaInitialExpressionAccess().getRule();
 	}
 	
-	//LiteralReferenceMachineContext fmlExpr::LiteralReferenceExpression:
-	//	LiteralThisExpression
-	//	| LiteralSelfExpression
-	//	| LiteralParentExpression
-	//	| LiteralSuperExpression
-	//	| LiteralSystemExpression
-	//	| LiteralEnvExpression;
+	//LiteralReferenceMachineContext returns fmlExpr::LiteralReferenceExpression
+	//    : LiteralThisExpression
+	//    | LiteralSelfExpression
+	//    | LiteralParentExpression
+	//    | LiteralSuperExpression
+	//    | LiteralSystemExpression
+	//    | LiteralEnvExpression
+	//    ;
 	public LiteralReferenceMachineContextElements getLiteralReferenceMachineContextAccess() {
 		return pLiteralReferenceMachineContext;
 	}
@@ -28026,8 +33323,9 @@
 		return getLiteralReferenceMachineContextAccess().getRule();
 	}
 	
-	//LiteralThisExpression fmlExpr::LiteralThisExpression:
-	//	{fmlExpr::LiteralThisExpression} '$this';
+	//LiteralThisExpression returns fmlExpr::LiteralThisExpression
+	//    : {fmlExpr::LiteralThisExpression} ( '$this' )
+	//    ;
 	public LiteralThisExpressionElements getLiteralThisExpressionAccess() {
 		return pLiteralThisExpression;
 	}
@@ -28036,8 +33334,10 @@
 		return getLiteralThisExpressionAccess().getRule();
 	}
 	
-	//LiteralSelfExpression fmlExpr::LiteralSelfExpression:
-	//	{fmlExpr::LiteralSelfExpression} '$self' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+	//LiteralSelfExpression returns fmlExpr::LiteralSelfExpression
+	//    : {fmlExpr::LiteralSelfExpression} ( '$self' )
+	//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+	//    ;
 	public LiteralSelfExpressionElements getLiteralSelfExpressionAccess() {
 		return pLiteralSelfExpression;
 	}
@@ -28046,8 +33346,10 @@
 		return getLiteralSelfExpressionAccess().getRule();
 	}
 	
-	//LiteralParentExpression fmlExpr::LiteralParentExpression:
-	//	{fmlExpr::LiteralParentExpression} '$parent' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+	//LiteralParentExpression returns fmlExpr::LiteralParentExpression
+	//    : {fmlExpr::LiteralParentExpression} ( '$parent' )
+	//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+	//    ;
 	public LiteralParentExpressionElements getLiteralParentExpressionAccess() {
 		return pLiteralParentExpression;
 	}
@@ -28056,8 +33358,10 @@
 		return getLiteralParentExpressionAccess().getRule();
 	}
 	
-	//LiteralSuperExpression fmlExpr::LiteralSuperExpression:
-	//	{fmlExpr::LiteralSuperExpression} '$super' ('<' 'model:'? model=[fmlInfra::Machine|ESUfid] '>')?;
+	//LiteralSuperExpression returns fmlExpr::LiteralSuperExpression
+	//    : {fmlExpr::LiteralSuperExpression} ( '$super' )
+	//        ( '<' ( 'model:' )? model=[fmlInfra::Machine|ESUfid] '>' )?
+	//    ;
 	public LiteralSuperExpressionElements getLiteralSuperExpressionAccess() {
 		return pLiteralSuperExpression;
 	}
@@ -28066,8 +33370,9 @@
 		return getLiteralSuperExpressionAccess().getRule();
 	}
 	
-	//LiteralSystemExpression fmlExpr::LiteralSystemExpression:
-	//	{fmlExpr::LiteralSystemExpression} '$system';
+	//LiteralSystemExpression returns fmlExpr::LiteralSystemExpression
+	//    : {fmlExpr::LiteralSystemExpression} ( '$system' )
+	//    ;
 	public LiteralSystemExpressionElements getLiteralSystemExpressionAccess() {
 		return pLiteralSystemExpression;
 	}
@@ -28076,8 +33381,9 @@
 		return getLiteralSystemExpressionAccess().getRule();
 	}
 	
-	//LiteralEnvExpression fmlExpr::LiteralEnvExpression:
-	//	{fmlExpr::LiteralEnvExpression} '$env';
+	//LiteralEnvExpression returns fmlExpr::LiteralEnvExpression
+	//    : {fmlExpr::LiteralEnvExpression} ( '$env' )
+	//    ;
 	public LiteralEnvExpressionElements getLiteralEnvExpressionAccess() {
 		return pLiteralEnvExpression;
 	}
@@ -28089,9 +33395,10 @@
 	//////////////////////////////////////////////////////////////////////////////////
 	//// Value Element Specification Expression Rules
 	//////////////////////////////////////////////////////////////////////////////////
-	//LiteralPureReferenceExpression fmlExpr::LiteralReferenceExpression:
-	//	LiteralPureReferenceElement
-	//	| LiteralReferenceMachineContext;
+	//LiteralPureReferenceExpression returns fmlExpr::LiteralReferenceExpression
+	//    : LiteralPureReferenceElement
+	//    | LiteralReferenceMachineContext
+	//    ;
 	public LiteralPureReferenceExpressionElements getLiteralPureReferenceExpressionAccess() {
 		return pLiteralPureReferenceExpression;
 	}
@@ -28100,9 +33407,11 @@
 		return getLiteralPureReferenceExpressionAccess().getRule();
 	}
 	
-	//LiteralReferenceSpecification fmlExpr::LiteralReferenceSpecification:
-	//	{fmlExpr::LiteralReferenceSpecification} (parent+=LiteralReferenceExpression ('.' | '->'))*
-	//	element=LiteralReferenceExpression;
+	//LiteralReferenceSpecification returns fmlExpr::LiteralReferenceSpecification
+	//    : { fmlExpr::LiteralReferenceSpecification }
+	//        ( parent+=LiteralReferenceExpression ( '.'  |  '->' ) )*
+	//        element=LiteralReferenceExpression
+	//    ;
 	public LiteralReferenceSpecificationElements getLiteralReferenceSpecificationAccess() {
 		return pLiteralReferenceSpecification;
 	}
@@ -28111,29 +33420,45 @@
 		return getLiteralReferenceSpecificationAccess().getRule();
 	}
 	
-	//ValueSelectionExpression fmlExpr::Expression:
-	//	LiteralReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'.' //kind=ValueDotFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	//			// TODO '(' parameter ',' ... ',' parameter ')'
-	//	//			| kind=ValueParameterExpressionKind
-	//	//				arg=MixTupleExpressionList  ')'
-	//)?)* ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'->' //kind=ValueArrowFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	//			// TODO '(' parameter ',' ... ',' parameter ')'
-	//	//			| kind=ValueParameterExpressionKind
-	//	//				arg=MixTupleExpressionList  ')'
-	//)? ({fmlExpr::ValueElementSpecification.parent=current}
-	//	'.' //kind=ValueDotFieldExpressionKind
-	//	element=[fmlCommon::NamedElement|ESIdentifier] (kind=ValueIndexExpressionKind
-	//	arg=PositionalTupleExpressionList ']'
-	//	//				// TODO '(' parameter ',' ... ',' parameter ')'
-	//	//				| kind=ValueParameterExpressionKind
-	//	//					arg=MixTupleExpressionList  ')'
-	//)?)*)?;
+	//ValueSelectionExpression returns fmlExpr::Expression
+	//    : LiteralReferenceExpression
+	//        // '.' element
+	//        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//            '.' //kind=ValueDotFieldExpressionKind
+	//            element=[fmlCommon::NamedElement|ESIdentifier]
+	//            // '[' index ',' ... ',' index ']'
+	//            ( kind=ValueIndexExpressionKind
+	//                arg=PositionalTupleExpressionList  ']'
+	////            // TODO '(' parameter ',' ... ',' parameter ')'
+	////            | kind=ValueParameterExpressionKind
+	////                arg=MixTupleExpressionList  ')'
+	//            )?
+	//        )*
+	//        // '->' element
+	//        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//            '->' //kind=ValueArrowFieldExpressionKind
+	//            element=[fmlCommon::NamedElement|ESIdentifier]
+	//            // '[' index ',' ... ',' index ']'
+	//            ( kind=ValueIndexExpressionKind
+	//                arg=PositionalTupleExpressionList  ']'
+	////            // TODO '(' parameter ',' ... ',' parameter ')'
+	////            | kind=ValueParameterExpressionKind
+	////                arg=MixTupleExpressionList  ')'
+	//            )?
+	//            // '.' element
+	//            ( { fmlExpr::ValueElementSpecification.parent=current }
+	//                 '.' //kind=ValueDotFieldExpressionKind
+	//                element=[fmlCommon::NamedElement|ESIdentifier]
+	//                // '[' index ',' ... ',' index ']'
+	//                ( kind=ValueIndexExpressionKind
+	//                    arg=PositionalTupleExpressionList  ']'
+	////                // TODO '(' parameter ',' ... ',' parameter ')'
+	////                | kind=ValueParameterExpressionKind
+	////                    arg=MixTupleExpressionList  ')'
+	//                )?
+	//            )*
+	//        )?
+	//    ;
 	public ValueSelectionExpressionElements getValueSelectionExpressionAccess() {
 		return pValueSelectionExpression;
 	}
@@ -28144,29 +33469,34 @@
 	
 	////ValuePureNamedElementExpression
 	////ValuePureNamedElementExpression returns fmlExpr::Expression
-	////	: LiteralPureReferenceExpression
+	////    : LiteralPureReferenceExpression
 	////
-	////		// '.' element
-	////		( { fmlExpr::ValueElementSpecification.parent=current }
-	////			kind=ValueDotFieldExpressionKind
-	////			element=[fmlCommon::NamedElement|ESIdentifier]
-	////		)*
+	////        // '.' element
+	////        ( { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueDotFieldExpressionKind
+	////            element=[fmlCommon::NamedElement|ESIdentifier]
+	////        )*
 	////
-	////		// '->' element
-	////		( { fmlExpr::ValueElementSpecification.parent=current }
-	////			kind=ValueArrowFieldExpressionKind
-	////			element=[fmlCommon::NamedElement|ESIdentifier]
+	////        // '->' element
+	////        ( { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueArrowFieldExpressionKind
+	////            element=[fmlCommon::NamedElement|ESIdentifier]
 	////
-	////			// '.' element
-	////			( { fmlExpr::ValueElementSpecification.parent=current }
-	////				kind=ValueDotFieldExpressionKind
-	////				element=[fmlCommon::NamedElement|ESIdentifier]
-	////			)*
-	////		)?
-	////	;
-	//ValuePureNamedMachineExpression fmlExpr::Expression:
-	//	LiteralPureReferenceExpression ({fmlExpr::ValueElementSpecification.parent=current} kind=(ValueDotFieldExpressionKind
-	//	| ValueArrowFieldExpressionKind) element=[fmlCommon::NamedElement|ESIdentifier])*;
+	////            // '.' element
+	////            ( { fmlExpr::ValueElementSpecification.parent=current }
+	////                kind=ValueDotFieldExpressionKind
+	////                element=[fmlCommon::NamedElement|ESIdentifier]
+	////            )*
+	////        )?
+	////    ;
+	//ValuePureNamedMachineExpression returns fmlExpr::Expression
+	//    : LiteralPureReferenceExpression
+	//        // ( '.' | '->' ) element
+	//        ( { fmlExpr::ValueElementSpecification.parent=current }
+	//            kind=(ValueDotFieldExpressionKind | ValueArrowFieldExpressionKind )
+	//            element=[fmlCommon::NamedElement|ESIdentifier]
+	//        )*
+	//    ;
 	public ValuePureNamedMachineExpressionElements getValuePureNamedMachineExpressionAccess() {
 		return pValuePureNamedMachineExpression;
 	}
@@ -28175,8 +33505,54 @@
 		return getValuePureNamedMachineExpressionAccess().getRule();
 	}
 	
-	//enum ValueDotFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	field='.';
+	////ValueAnyElementExpression returns fmlExpr::ValueElementSpecification
+	////    : element=[fmlCommon::NamedElement|ESIdentifier]
+	////
+	////        // '.' element
+	////        ( { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueDotFieldExpressionKind
+	////            element=[fmlCommon::NamedElement|ESIdentifier]
+	////
+	////        // '[' index ',' ... ',' index ']'
+	////        | { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueIndexExpressionKind
+	////            arg=PositionalTupleExpressionList
+	////            ']'
+	////
+	////        // '(' parameter ',' ... ',' parameter ')'
+	////        | { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueParameterExpressionKind
+	////            arg=MixTupleExpressionList
+	////            ')'
+	////        )*
+	////
+	////        // '->' element
+	////        ( { fmlExpr::ValueElementSpecification.parent=current }
+	////            kind=ValueArrowFieldExpressionKind
+	////            element=[fmlCommon::NamedElement|ESIdentifier]
+	////
+	////            // '.' element
+	////            ( { fmlExpr::ValueElementSpecification.parent=current }
+	////                kind=ValueDotFieldExpressionKind
+	////                element=[fmlCommon::NamedElement|ESIdentifier]
+	////
+	////            // '[' index ',' ... ',' index ']'
+	////            | { fmlExpr::ValueElementSpecification.parent=current }
+	////                kind=ValueIndexExpressionKind
+	////                arg=PositionalTupleExpressionList
+	////                ']'
+	////
+	////            // '(' parameter ',' ... ',' parameter ')'
+	////            | { fmlExpr::ValueElementSpecification.parent=current }
+	////                kind=ValueParameterExpressionKind
+	////                arg=MixTupleExpressionList
+	////                ')'
+	////            )*
+	////        )?
+	////    ;
+	//enum ValueDotFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : field='.'
+	//    ;
 	public ValueDotFieldExpressionKindElements getValueDotFieldExpressionKindAccess() {
 		return eValueDotFieldExpressionKind;
 	}
@@ -28185,8 +33561,9 @@
 		return getValueDotFieldExpressionKindAccess().getRule();
 	}
 	
-	//enum ValueColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	field=':';
+	//enum ValueColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : field=':'
+	//    ;
 	public ValueColonFieldExpressionKindElements getValueColonFieldExpressionKindAccess() {
 		return eValueColonFieldExpressionKind;
 	}
@@ -28195,8 +33572,9 @@
 		return getValueColonFieldExpressionKindAccess().getRule();
 	}
 	
-	//enum ValueDoubleColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	field='::';
+	//enum ValueDoubleColonFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : field='::'
+	//    ;
 	public ValueDoubleColonFieldExpressionKindElements getValueDoubleColonFieldExpressionKindAccess() {
 		return eValueDoubleColonFieldExpressionKind;
 	}
@@ -28205,8 +33583,9 @@
 		return getValueDoubleColonFieldExpressionKindAccess().getRule();
 	}
 	
-	//enum ValueArrowFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	field='->';
+	//enum ValueArrowFieldExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : field='->'
+	//    ;
 	public ValueArrowFieldExpressionKindElements getValueArrowFieldExpressionKindAccess() {
 		return eValueArrowFieldExpressionKind;
 	}
@@ -28215,8 +33594,9 @@
 		return getValueArrowFieldExpressionKindAccess().getRule();
 	}
 	
-	//enum ValueIndexExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	index='[';
+	//enum ValueIndexExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : index='['
+	//    ;
 	public ValueIndexExpressionKindElements getValueIndexExpressionKindAccess() {
 		return eValueIndexExpressionKind;
 	}
@@ -28225,8 +33605,9 @@
 		return getValueIndexExpressionKindAccess().getRule();
 	}
 	
-	//enum ValueParameterExpressionKind returns fmlExpr::ValueElementSpecificationKind:
-	//	parameter='(';
+	//enum ValueParameterExpressionKind returns fmlExpr::ValueElementSpecificationKind
+	//    : parameter='('
+	//    ;
 	public ValueParameterExpressionKindElements getValueParameterExpressionKindAccess() {
 		return eValueParameterExpressionKind;
 	}
@@ -28235,39 +33616,35 @@
 		return getValueParameterExpressionKindAccess().getRule();
 	}
 	
-	//terminal ID:
-	//	'^'? ('a'..'z' | 'A'..'Z' | '_') ('a'..'z' | 'A'..'Z' | '_' | '0'..'9')*;
+	//terminal ID: '^'?('a'..'z'|'A'..'Z'|'_') ('a'..'z'|'A'..'Z'|'_'|'0'..'9')*;
 	public TerminalRule getIDRule() {
 		return gaTerminals.getIDRule();
 	}
 	
 	//terminal STRING:
-	//	'"' ('\\' . | !('\\' | '"'))* '"' |
-	//	"'" ('\\' . | !('\\' | "'"))* "'";
+	//            '"' ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|'"') )* '"' |
+	//            "'" ( '\\' . /* 'b'|'t'|'n'|'f'|'r'|'u'|'"'|"'"|'\\' */ | !('\\'|"'") )* "'"
+	//        ;
 	public TerminalRule getSTRINGRule() {
 		return gaTerminals.getSTRINGRule();
 	}
 	
-	//terminal ML_COMMENT:
-	//	'/*'->'*/';
+	//terminal ML_COMMENT : '/*' -> '*/';
 	public TerminalRule getML_COMMENTRule() {
 		return gaTerminals.getML_COMMENTRule();
 	}
 	
-	//terminal SL_COMMENT:
-	//	'//' !('\n' | '\r')* ('\r'? '\n')?;
+	//terminal SL_COMMENT : '//' !('\n'|'\r')* ('\r'? '\n')?;
 	public TerminalRule getSL_COMMENTRule() {
 		return gaTerminals.getSL_COMMENTRule();
 	}
 	
-	//terminal WS:
-	//	' ' | '\t' | '\r' | '\n'+;
+	//terminal WS         : (' '|'\t'|'\r'|'\n')+;
 	public TerminalRule getWSRule() {
 		return gaTerminals.getWSRule();
 	}
 	
-	//terminal ANY_OTHER:
-	//	.;
+	//terminal ANY_OTHER: .;
 	public TerminalRule getANY_OTHERRule() {
 		return gaTerminals.getANY_OTHERRule();
 	}
diff --git a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/validation/AbstractFormalMLValidator.java b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/validation/AbstractFormalMLValidator.java
index 64cee28..9ed326a 100644
--- a/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/validation/AbstractFormalMLValidator.java
+++ b/editor/xlia/org.eclipse.efm.formalml.xtext/src-gen/org/eclipse/efm/formalml/xtext/validation/AbstractFormalMLValidator.java
@@ -11,7 +11,7 @@
 *  - Initial API and implementation
 *
 ******************************************************************************
-* Generated by Xtext 2.21.0
+* Generated by Xtext 2.25.0
 *****************************************************************************/
 package org.eclipse.efm.formalml.xtext.validation;
 
diff --git a/editor/xlia/pom.xml b/editor/xlia/pom.xml
index 814dbd3..0efc45c 100644
--- a/editor/xlia/pom.xml
+++ b/editor/xlia/pom.xml
@@ -27,6 +27,7 @@
 
 	<modules>
 		<module>org.eclipse.efm.formalml.ecore</module>
+		<module>org.eclipse.efm.formalml.plantuml</module>
 		<module>org.eclipse.efm.formalml.xtext</module>
 		<module>org.eclipse.efm.formalml.xtext.ide</module>
 		<module>org.eclipse.efm.formalml.xtext.tests</module>
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/.classpath b/execution/org.eclipse.efm.execution.configuration.common.ui/.classpath
index 7d64b57..3ec8668 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/.classpath
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry excluding="org/eclipse/efm/execution/configuration/common/ui/editors/table/TraceElementTableViewer2.java|org/eclipse/efm/execution/configuration/common/ui/util/GenericCompositeCreator.java" kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/execution/org.eclipse.efm.execution.configuration.common.ui/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.configuration.common.ui/META-INF/MANIFEST.MF
index c48092a..57dda32 100644
--- a/execution/org.eclipse.efm.execution.configuration.common.ui/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.configuration.common.ui/META-INF/MANIFEST.MF
@@ -12,7 +12,7 @@
  org.eclipse.ui.forms,
  org.eclipse.jface,
  org.eclipse.core.resources
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.efm.execution.configuration.common.ui.api,
  org.eclipse.efm.execution.configuration.common.ui.editors,
diff --git a/execution/org.eclipse.efm.execution.core/.classpath b/execution/org.eclipse.efm.execution.core/.classpath
index f2b475a..dcfdc28 100644
--- a/execution/org.eclipse.efm.execution.core/.classpath
+++ b/execution/org.eclipse.efm.execution.core/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src-gen"/>
 	<classpathentry kind="src" path="src"/>
diff --git a/execution/org.eclipse.efm.execution.core/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.core/META-INF/MANIFEST.MF
index 38aeb19..143d481 100644
--- a/execution/org.eclipse.efm.execution.core/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.core/META-INF/MANIFEST.MF
@@ -14,7 +14,7 @@
  org.eclipse.emf.mwe.utils,
  com.google.guava,
  org.eclipse.xtext
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.execution.core,
  org.eclipse.efm.execution.core.preferences,
  org.eclipse.efm.execution.core.util,
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/.classpath b/execution/org.eclipse.efm.execution.launchconfiguration/.classpath
index b862a29..ca3785c 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/.classpath
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
index 31c7b58..eb17069 100644
--- a/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.launchconfiguration/META-INF/MANIFEST.MF
@@ -31,7 +31,7 @@
  org.eclipse.efm.modeling.doc.helpcontents,
  org.eclipse.efm.execution.configuration.common.ui,
  org.eclipse.efm.modeling.codegen.xlia.sdf.polygraph
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Export-Package: org.eclipse.efm.execution.launchconfiguration,
  org.eclipse.efm.execution.launchconfiguration.job
 Bundle-ActivationPolicy: lazy
diff --git a/execution/org.eclipse.efm.execution.ui.views/.classpath b/execution/org.eclipse.efm.execution.ui.views/.classpath
index b862a29..ca3785c 100644
--- a/execution/org.eclipse.efm.execution.ui.views/.classpath
+++ b/execution/org.eclipse.efm.execution.ui.views/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
index 32537f8..d6d238e 100644
--- a/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.ui.views/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Views
 Bundle-SymbolicName: org.eclipse.efm.execution.ui.views;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.core.runtime,
  org.eclipse.ui,
  org.eclipse.jface,
@@ -17,8 +17,6 @@
  org.eclipse.efm.execution.core,
  org.eclipse.efm.execution.launchconfiguration,
  org.eclipse.ui.dialogs,
- org.eclipse.ui.forms.events,
- org.eclipse.ui.forms.widgets,
  org.eclipse.ui.model,
  org.eclipse.ui.views.navigator
 Bundle-Activator: org.eclipse.efm.execution.ui.views.Activator
diff --git a/execution/org.eclipse.efm.execution.ui/.classpath b/execution/org.eclipse.efm.execution.ui/.classpath
index b862a29..ca3785c 100644
--- a/execution/org.eclipse.efm.execution.ui/.classpath
+++ b/execution/org.eclipse.efm.execution.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/execution/org.eclipse.efm.execution.ui/META-INF/MANIFEST.MF b/execution/org.eclipse.efm.execution.ui/META-INF/MANIFEST.MF
index db39eb5..6fe721a 100644
--- a/execution/org.eclipse.efm.execution.ui/META-INF/MANIFEST.MF
+++ b/execution/org.eclipse.efm.execution.ui/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.efm.execution.ui.views,
  org.eclipse.efm.execution.launchconfiguration,
  org.eclipse.ui.console
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.efm.execution.ui
 Automatic-Module-Name: org.eclipse.efm.execution.ui
diff --git a/features/org.eclipse.efm.modeling.dependencies.feature/feature.xml b/features/org.eclipse.efm.modeling.dependencies.feature/feature.xml
index 49cfbd3..385d2bb 100644
--- a/features/org.eclipse.efm.modeling.dependencies.feature/feature.xml
+++ b/features/org.eclipse.efm.modeling.dependencies.feature/feature.xml
@@ -94,86 +94,86 @@
          version="0.0.0"/>
 
    <requires>
-      <import plugin="org.eclipse.emf.codegen.ecore" version="2.7.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.ecore.xmi" version="2.7.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.edit" version="2.7.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.common" version="1.4.0" match="compatible"/>
-      <import plugin="org.eclipse.jface.databinding" version="1.2.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.core.databinding.beans" version="1.1.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.swt" version="3.4.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.core.databinding" version="1.1.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.jface" version="3.4.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.core.databinding.property" version="1.1.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.equinox.common" version="3.4.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.ui" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.uml2.codegen.ecore" version="1.8.0"/>
-      <import plugin="org.eclipse.uml2.uml.resources" version="4.0.0"/>
-      <import plugin="org.eclipse.ocl.pivot" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.essentialocl" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.pivot.uml" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.completeocl.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclstdlib.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.core.filesystem" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.debug.core" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.ui.console" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.ui.navigator" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.ui.forms" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.uml2.uml" version="4.0.0"/>
-      <import plugin="org.eclipse.ocl.examples.debug" version="2.1.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.examples.debug.vm.ui" version="2.1.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.examples.debug.vm" version="2.1.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.base" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.completeocl" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclinecore.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ui.ide" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.common.ui" version="1.2.200" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.markup.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.apache.xerces" version="2.9.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.codegen" version="2.6.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.base" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.markup" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.base.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.jdt.core" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.ecore.editor" version="2.7.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.essentialocl.ui" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclinecore" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.examples.ui" version="1.4.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclstdlib" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.debug.ui" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.equinox.frameworkadmin.equinox" version="1.0.0" match="compatible"/>
-      <import plugin="org.eclipse.pde.core" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.core.expressions" version="3.6.0" match="compatible"/>
-      <import plugin="org.eclipse.core.runtime" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.core.resources" version="3.5.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.common" version="1.0.0" match="compatible"/>
-      <import plugin="org.eclipse.xtext.ui" version="2.9.0" match="compatible"/>
-      <import plugin="org.eclipse.xtext.ui.shared" version="2.9.0" match="compatible"/>
-      <import plugin="org.eclipse.core.expressions" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.essentialocl.ui" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.completeocl" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclinecore" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.xtext.oclstdlib" version="1.2.0" match="compatible"/>
-      <import plugin="org.eclipse.xtext.builder" version="2.9.0" match="compatible"/>
-      <import plugin="org.eclipse.ocl.examples.emf.validation.validity.ui" version="2.4.0" match="compatible"/>
-      <import plugin="org.eclipse.core.runtime" version="3.14.0" match="compatible"/>
-      <import plugin="org.eclipse.core.resources" version="3.13.0" match="compatible"/>
-      <import plugin="org.eclipse.wst.common.uriresolver" version="1.2.300" match="compatible"/>
-      <import plugin="org.eclipse.wst.sse.core" version="1.2.0" match="equivalent"/>
-      <import plugin="org.eclipse.wst.common.core" version="1.3.0" match="compatible"/>
-      <import plugin="org.eclipse.osgi.services" version="3.7.0" match="compatible"/>
-      <import plugin="org.eclipse.core.runtime" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.core.resources" version="3.4.0" match="compatible"/>
-      <import plugin="org.eclipse.xtext" version="2.9.0" match="compatible"/>
-      <import plugin="org.eclipse.jdt.core" version="3.7.0" match="compatible"/>
-      <import plugin="org.eclipse.text" version="3.6.0" match="compatible"/>
-      <import plugin="org.eclipse.core.jobs" version="3.10.0" match="compatible"/>
-      <import plugin="org.eclipse.core.filebuffers" version="3.6.0" match="compatible"/>
-      <import plugin="org.eclipse.emf.common" version="2.14.0" match="compatible"/>
-      <import plugin="org.eclipse.core.filesystem" version="1.7.0" match="compatible"/>
-      <import plugin="org.eclipse.core.expressions" version="3.6.100" match="compatible"/>
-      <import plugin="org.eclipse.core.runtime" version="3.15.0" match="compatible"/>
-      <import plugin="org.eclipse.core.resources" version="3.12.0" match="compatible"/>
-      <import feature="org.eclipse.nebula.widgets.cdatetime.feature" version="1.3.0.201812241324"/>
+      <import plugin="org.eclipse.emf.codegen.ecore"/>
+      <import plugin="org.eclipse.emf.ecore.xmi"/>
+      <import plugin="org.eclipse.emf.edit"/>
+      <import plugin="org.eclipse.ocl.common"/>
+      <import plugin="org.eclipse.jface.databinding"/>
+      <import plugin="org.eclipse.core.databinding.beans"/>
+      <import plugin="org.eclipse.swt"/>
+      <import plugin="org.eclipse.core.databinding"/>
+      <import plugin="org.eclipse.jface"/>
+      <import plugin="org.eclipse.core.databinding.property"/>
+      <import plugin="org.eclipse.equinox.common"/>
+      <import plugin="org.eclipse.ui"/>
+      <import plugin="org.eclipse.uml2.codegen.ecore"/>
+      <import plugin="org.eclipse.uml2.uml.resources"/>
+      <import plugin="org.eclipse.ocl.pivot"/>
+      <import plugin="org.eclipse.ocl.xtext.essentialocl"/>
+      <import plugin="org.eclipse.ocl.pivot.uml"/>
+      <import plugin="org.eclipse.ocl.xtext.completeocl.ui"/>
+      <import plugin="org.eclipse.ocl.xtext.oclstdlib.ui"/>
+      <import plugin="org.eclipse.core.filesystem"/>
+      <import plugin="org.eclipse.debug.core"/>
+      <import plugin="org.eclipse.ui.console"/>
+      <import plugin="org.eclipse.ui.navigator"/>
+      <import plugin="org.eclipse.ui.forms"/>
+      <import plugin="org.eclipse.uml2.uml"/>
+      <import plugin="org.eclipse.ocl.examples.debug"/>
+      <import plugin="org.eclipse.ocl.examples.debug.vm.ui"/>
+      <import plugin="org.eclipse.ocl.examples.debug.vm"/>
+      <import plugin="org.eclipse.ocl.xtext.base"/>
+      <import plugin="org.eclipse.ocl.xtext.completeocl"/>
+      <import plugin="org.eclipse.ocl.xtext.oclinecore.ui"/>
+      <import plugin="org.eclipse.ui.ide"/>
+      <import plugin="org.eclipse.ocl.common.ui"/>
+      <import plugin="org.eclipse.ocl.xtext.markup.ui"/>
+      <import plugin="org.apache.xerces"/>
+      <import plugin="org.eclipse.emf.codegen"/>
+      <import plugin="org.eclipse.ocl.xtext.base"/>
+      <import plugin="org.eclipse.ocl.xtext.markup"/>
+      <import plugin="org.eclipse.ocl.xtext.base.ui"/>
+      <import plugin="org.eclipse.jdt.core"/>
+      <import plugin="org.eclipse.emf.ecore.editor"/>
+      <import plugin="org.eclipse.ocl.xtext.essentialocl.ui"/>
+      <import plugin="org.eclipse.ocl.xtext.oclinecore"/>
+      <import plugin="org.eclipse.ocl.examples.ui"/>
+      <import plugin="org.eclipse.ocl.xtext.oclstdlib"/>
+      <import plugin="org.eclipse.debug.ui"/>
+      <import plugin="org.eclipse.equinox.frameworkadmin.equinox"/>
+      <import plugin="org.eclipse.pde.core"/>
+      <import plugin="org.eclipse.core.expressions"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.ocl.common"/>
+      <import plugin="org.eclipse.xtext.ui"/>
+      <import plugin="org.eclipse.xtext.ui.shared"/>
+      <import plugin="org.eclipse.core.expressions"/>
+      <import plugin="org.eclipse.ocl.xtext.essentialocl.ui"/>
+      <import plugin="org.eclipse.ocl.xtext.completeocl"/>
+      <import plugin="org.eclipse.ocl.xtext.oclinecore"/>
+      <import plugin="org.eclipse.ocl.xtext.oclstdlib"/>
+      <import plugin="org.eclipse.xtext.builder"/>
+      <import plugin="org.eclipse.ocl.examples.emf.validation.validity.ui"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.wst.common.uriresolver"/>
+      <import plugin="org.eclipse.wst.sse.core"/>
+      <import plugin="org.eclipse.wst.common.core"/>
+      <import plugin="org.eclipse.osgi.services"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import plugin="org.eclipse.xtext"/>
+      <import plugin="org.eclipse.jdt.core"/>
+      <import plugin="org.eclipse.text"/>
+      <import plugin="org.eclipse.core.jobs"/>
+      <import plugin="org.eclipse.core.filebuffers"/>
+      <import plugin="org.eclipse.emf.common"/>
+      <import plugin="org.eclipse.core.filesystem"/>
+      <import plugin="org.eclipse.core.expressions"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.core.resources"/>
+      <import feature="org.eclipse.nebula.widgets.cdatetime.feature"/>
    </requires>
 
    <plugin
diff --git a/features/org.eclipse.efm.modeling.feature/feature.xml b/features/org.eclipse.efm.modeling.feature/feature.xml
index 0bb78ba..19764ab 100644
--- a/features/org.eclipse.efm.modeling.feature/feature.xml
+++ b/features/org.eclipse.efm.modeling.feature/feature.xml
@@ -30,15 +30,15 @@
          version="0.0.0"/>
 
    <requires>
-      <import plugin="org.eclipse.core.runtime" version="3.11.1" match="compatible"/>
-      <import plugin="org.eclipse.emf.ecore" version="2.11.2" match="compatible"/>
-      <import plugin="org.eclipse.uml2.uml.profile.standard" version="1.0.100" match="compatible"/>
-      <import plugin="org.eclipse.uml2.types" version="2.0.0" match="compatible"/>
-      <import plugin="org.eclipse.uml2.uml" version="5.1.0" match="compatible"/>
-      <import plugin="org.eclipse.uml2.uml.resources" version="5.1.0" match="compatible"/>
+      <import plugin="org.eclipse.core.runtime"/>
+      <import plugin="org.eclipse.emf.ecore"/>
+      <import plugin="org.eclipse.uml2.uml.profile.standard"/>
+      <import plugin="org.eclipse.uml2.types"/>
+      <import plugin="org.eclipse.uml2.uml"/>
+      <import plugin="org.eclipse.uml2.uml.resources"/>
       <import plugin="org.eclipse.xtext"/>
       <import plugin="org.eclipse.xtext.xbase"/>
-      <import plugin="org.eclipse.equinox.common" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.equinox.common"/>
       <import plugin="org.eclipse.uml2.codegen.ecore"/>
       <import plugin="org.eclipse.xtext.xbase.lib"/>
       <import plugin="org.antlr.runtime"/>
@@ -51,16 +51,16 @@
       <import plugin="org.eclipse.xtext.ui"/>
       <import plugin="org.eclipse.xtext.ui.shared"/>
       <import plugin="org.eclipse.xtext.ui.codetemplates.ui"/>
-      <import plugin="org.eclipse.ui.editors" version="3.5.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.ui.ide" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.editors"/>
+      <import plugin="org.eclipse.ui.ide"/>
       <import plugin="org.eclipse.ui"/>
       <import plugin="org.eclipse.compare"/>
       <import plugin="org.eclipse.xtext.builder"/>
-      <import plugin="org.eclipse.papyrus.infra.core.log" version="1.1.3" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.papyrus.infra.core.log"/>
       <import plugin="org.eclipse.papyrus.uml.xtext.integration.ui"/>
       <import plugin="org.eclipse.papyrus.infra.emf"/>
-      <import plugin="org.eclipse.papyrus.infra.core" version="1.1.3" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.efm.formalml" version="0.0.1" match="compatible"/>
+      <import plugin="org.eclipse.papyrus.infra.core"/>
+      <import plugin="org.eclipse.efm.formalml"/>
       <import plugin="org.eclipse.core.resources"/>
       <import plugin="com.google.guava"/>
       <import plugin="org.eclipse.xtend.lib.macro"/>
@@ -74,36 +74,36 @@
       <import plugin="org.eclipse.papyrus.infra.types.core"/>
       <import plugin="org.eclipse.papyrus.views.properties"/>
       <import plugin="org.eclipse.papyrus.infra.newchild"/>
-      <import plugin="org.eclipse.uml2.uml" version="5.2.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.uml2.uml"/>
       <import plugin="org.eclipse.papyrus.infra.viewpoints.policy"/>
-      <import plugin="org.eclipse.efm.formalml.service.types" version="0.0.1" match="compatible"/>
-      <import plugin="org.eclipse.papyrus.uml.service.types" version="2.0.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.papyrus.uml.diagram.composite" version="2.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.efm.formalml.service.types"/>
+      <import plugin="org.eclipse.papyrus.uml.service.types"/>
+      <import plugin="org.eclipse.papyrus.uml.diagram.composite"/>
       <import plugin="org.eclipse.gmf.runtime.diagram.core"/>
       <import plugin="org.eclipse.gmf.runtime.notation"/>
       <import plugin="org.eclipse.papyrus.uml.diagram.clazz"/>
-      <import plugin="org.eclipse.papyrus.uml.diagram.statemachine" version="2.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.papyrus.uml.diagram.statemachine"/>
       <import plugin="org.eclipse.papyrus.uml.tools"/>
       <import plugin="org.eclipse.uml2.common"/>
-      <import plugin="org.eclipse.papyrus.uml.diagram.common" version="2.0.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.papyrus.uml.diagram.common"/>
       <import plugin="org.eclipse.papyrus.infra.properties"/>
-      <import plugin="org.eclipse.papyrus.uml.xtext.integration.ui" version="1.1.3" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.papyrus.uml.xtext.integration.ui"/>
       <import plugin="org.eclipse.papyrus.uml.tools.utils"/>
-      <import plugin="org.eclipse.xtext.ui" version="2.9.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.gmf.runtime.diagram.ui.properties" version="1.7.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.papyrus.infra.emf" version="1.1.3" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.efm.formalml.xtext.ui" version="0.0.1" match="compatible"/>
-      <import plugin="org.eclipse.efm.modeling.codegen.xlia" version="0.0.1" match="compatible"/>
-      <import plugin="org.eclipse.efm.ui" version="0.0.1" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.emf.common.ui" version="2.10.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.emf.edit" version="2.12.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.xtext.ui"/>
+      <import plugin="org.eclipse.gmf.runtime.diagram.ui.properties"/>
+      <import plugin="org.eclipse.papyrus.infra.emf"/>
+      <import plugin="org.eclipse.efm.formalml.xtext.ui"/>
+      <import plugin="org.eclipse.efm.modeling.codegen.xlia"/>
+      <import plugin="org.eclipse.efm.ui"/>
+      <import plugin="org.eclipse.emf.common.ui"/>
+      <import plugin="org.eclipse.emf.edit"/>
       <import plugin="org.eclipse.emf.transaction"/>
       <import plugin="org.eclipse.papyrus.infra.ui"/>
       <import plugin="org.eclipse.papyrus.uml.extensionpoints"/>
-      <import feature="org.eclipse.papyrus.designer.languages.common.feature" version="1.0.4"/>
-      <import feature="org.eclipse.papyrus.sdk.feature" version="3.1.0.201709130748"/>
-      <import feature="org.eclipse.efm.modeling.textual.feature" version="0.0.1.qualifier"/>
-      <import feature="org.eclipse.efm.modeling.dependencies.feature" version="0.0.1.qualifier"/>
+      <import feature="org.eclipse.papyrus.designer.languages.common.feature"/>
+      <import feature="org.eclipse.papyrus.sdk.feature"/>
+      <import feature="org.eclipse.efm.modeling.textual.feature"/>
+      <import feature="org.eclipse.efm.modeling.dependencies.feature"/>
    </requires>
 
    <plugin
diff --git a/features/org.eclipse.efm.modeling.textual.dependencies.feature/feature.xml b/features/org.eclipse.efm.modeling.textual.dependencies.feature/feature.xml
index e1d3048..e56c72c 100644
--- a/features/org.eclipse.efm.modeling.textual.dependencies.feature/feature.xml
+++ b/features/org.eclipse.efm.modeling.textual.dependencies.feature/feature.xml
@@ -85,7 +85,7 @@
       <import plugin="org.eclipse.xtext.xbase.lib"/>
       <import plugin="org.eclipse.emf.ecore"/>
       <import plugin="org.eclipse.core.runtime"/>
-      <import plugin="org.eclipse.emf.mwe2.runtime" version="2.9.1" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.emf.mwe2.runtime"/>
       <import plugin="org.eclipse.emf.ecore.xmi"/>
       <import plugin="org.eclipse.jdt.debug.ui"/>
       <import plugin="org.eclipse.jdt.launching"/>
@@ -97,20 +97,20 @@
       <import plugin="org.eclipse.ui.editors"/>
       <import plugin="org.eclipse.ui.ide"/>
       <import plugin="org.eclipse.core.expressions"/>
-      <import plugin="org.apache.commons.lang" version="2.0.0" match="compatible"/>
-      <import plugin="org.apache.commons.logging" version="1.0.0" match="compatible"/>
+      <import plugin="org.apache.commons.lang"/>
+      <import plugin="org.apache.commons.logging"/>
       <import plugin="org.antlr.runtime" match="perfect"/>
       <import plugin="org.eclipse.emf.common"/>
       <import plugin="org.eclipse.xtext"/>
       <import plugin="org.eclipse.xtext.builder.standalone"/>
-      <import feature="net.sourceforge.plantuml.feature" version="1.1.20"/>
-      <import feature="net.sourceforge.plantuml.lib.feature" version="1.2018.9"/>
-      <import feature="org.eclipse.gef.dot" version="5.0.100.201805280201"/>
-      <import feature="org.eclipse.gef.dot.ui" version="5.0.100.201805280201"/>
-      <import feature="org.eclipse.gef.dot.user" version="5.0.100.201805280201"/>
-      <import feature="org.eclipse.gef.fx" version="5.0.1.201805280201"/>
-      <import feature="org.eclipse.gef.fx.jface" version="5.0.2.201805280201"/>
-      <import feature="org.eclipse.gef.fx.swt" version="5.0.2.201805280201"/>
+      <import feature="net.sourceforge.plantuml.feature"/>
+      <import feature="net.sourceforge.plantuml.lib.feature"/>
+      <import feature="org.eclipse.gef.dot"/>
+      <import feature="org.eclipse.gef.dot.ui"/>
+      <import feature="org.eclipse.gef.dot.user"/>
+      <import feature="org.eclipse.gef.fx"/>
+      <import feature="org.eclipse.gef.fx.jface"/>
+      <import feature="org.eclipse.gef.fx.swt"/>
    </requires>
 
    <plugin
diff --git a/features/org.eclipse.efm.modeling.textual.feature/feature.xml b/features/org.eclipse.efm.modeling.textual.feature/feature.xml
index 9900268..5918cd2 100644
--- a/features/org.eclipse.efm.modeling.textual.feature/feature.xml
+++ b/features/org.eclipse.efm.modeling.textual.feature/feature.xml
@@ -26,16 +26,16 @@
          version="0.0.0"/>
 
    <requires>
-      <import feature="org.eclipse.xtext.xbase.lib" version="2.12.0.v20170518-0758"/>
-      <import feature="org.eclipse.xtext.ui" version="2.10.0.v201605250459"/>
-      <import feature="org.eclipse.xtext.ui" version="2.10.0.v201605250459"/>
-      <import feature="org.eclipse.platform" version="4.6.2.v20161124-1529"/>
-      <import feature="org.eclipse.xtext.runtime" version="2.12.0.v20170519-1412"/>
-      <import feature="org.eclipse.xtend" version="2.2.0.v201605260315"/>
-      <import feature="org.eclipse.xtext.xbase.lib" version="2.12.0.v20170518-0758"/>
-      <import feature="org.eclipse.xtend.ui" version="2.2.0.v201605260315"/>
-      <import feature="org.eclipse.emf.mwe2.runtime.sdk" version="2.9.1.201705291011"/>
-      <import feature="org.eclipse.efm.modeling.textual.dependencies.feature" version="0.0.1.qualifier"/>
+      <import feature="org.eclipse.xtext.xbase.lib"/>
+      <import feature="org.eclipse.xtext.ui"/>
+      <import feature="org.eclipse.xtext.ui"/>
+      <import feature="org.eclipse.platform"/>
+      <import feature="org.eclipse.xtext.runtime"/>
+      <import feature="org.eclipse.xtend"/>
+      <import feature="org.eclipse.xtext.xbase.lib"/>
+      <import feature="org.eclipse.xtend.ui"/>
+      <import feature="org.eclipse.emf.mwe2.runtime.sdk"/>
+      <import feature="org.eclipse.efm.modeling.textual.dependencies.feature"/>
       <import plugin="org.eclipse.ui"/>
       <import plugin="org.eclipse.core.runtime"/>
       <import plugin="org.eclipse.emf.ecore"/>
@@ -51,11 +51,11 @@
       <import plugin="org.eclipse.xtext.xbase.ide"/>
       <import plugin="org.eclipse.xtext.ui.shared"/>
       <import plugin="org.eclipse.xtext.ui.codetemplates.ui"/>
-      <import plugin="org.eclipse.ui.editors" version="3.5.0" match="greaterOrEqual"/>
-      <import plugin="org.eclipse.ui.ide" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.editors"/>
+      <import plugin="org.eclipse.ui.ide"/>
       <import plugin="org.eclipse.compare"/>
       <import plugin="org.eclipse.xtext.builder"/>
-      <import plugin="org.eclipse.equinox.common" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.equinox.common"/>
       <import plugin="org.eclipse.ui.console"/>
       <import plugin="org.eclipse.debug.core"/>
       <import plugin="org.eclipse.emf.mwe.utils"/>
@@ -74,11 +74,11 @@
       <import plugin="org.eclipse.ui.views"/>
       <import plugin="org.eclipse.jface.text"/>
       <import plugin="org.eclipse.ui.views.properties.tabbed"/>
-      <import plugin="org.eclipse.core.runtime" version="3.12.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.core.runtime"/>
       <import plugin="org.eclipse.emf.common.ui"/>
       <import plugin="org.eclipse.ui.intro"/>
       <import plugin="org.eclipse.ui.intro.quicklinks"/>
-      <import plugin="org.eclipse.ui.cheatsheets" version="3.5.0" match="greaterOrEqual"/>
+      <import plugin="org.eclipse.ui.cheatsheets"/>
    </requires>
 
    <plugin
@@ -235,4 +235,11 @@
          version="0.0.0"
          unpack="false"/>
 
+   <plugin
+         id="org.eclipse.efm.formalml.plantuml"
+         download-size="0"
+         install-size="0"
+         version="0.0.0"
+         unpack="false"/>
+
 </feature>
diff --git a/gui/org.eclipse.efm.editing.ui/.classpath b/gui/org.eclipse.efm.editing.ui/.classpath
index b862a29..ca3785c 100644
--- a/gui/org.eclipse.efm.editing.ui/.classpath
+++ b/gui/org.eclipse.efm.editing.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/gui/org.eclipse.efm.editing.ui/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.editing.ui/META-INF/MANIFEST.MF
index e0a9877..1582330 100644
--- a/gui/org.eclipse.efm.editing.ui/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.editing.ui/META-INF/MANIFEST.MF
@@ -7,5 +7,5 @@
 Bundle-Vendor: %pluginVendor
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.examples/.classpath b/gui/org.eclipse.efm.modeling.ui.newproject.examples/.classpath
index 43b9862..1db08c6 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.examples/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.examples/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.examples/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.modeling.ui.newproject.examples/.settings/org.eclipse.jdt.core.prefs
index a698e59..a58ebdc 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.examples/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.examples/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,15 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.examples/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui.newproject.examples/META-INF/MANIFEST.MF
index 71b9d85..59cb0f2 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.examples/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.examples/META-INF/MANIFEST.MF
@@ -4,7 +4,7 @@
 Bundle-SymbolicName: org.eclipse.efm.modeling.ui.newproject.examples;singleton:=true
 Bundle-Version: 0.0.1.qualifier
 Bundle-Vendor: CEA - LIST
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Require-Bundle: org.eclipse.ui,
  org.eclipse.emf.common.ui,
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.templates/.classpath b/gui/org.eclipse.efm.modeling.ui.newproject.templates/.classpath
index 43b9862..ce9e006 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.templates/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.templates/.classpath
@@ -1,7 +1,11 @@
-<?xml version="1.0" encoding="UTF-8"?>
-<classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
-	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
-	<classpathentry kind="src" path="src"/>
-	<classpathentry kind="output" path="target/classes"/>
-</classpath>
+<?xml version="1.0" encoding="UTF-8"?>
+<classpath>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11">
+		<attributes>
+			<attribute name="module" value="true"/>
+		</attributes>
+	</classpathentry>
+	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
+	<classpathentry kind="src" path="src"/>
+	<classpathentry kind="output" path="target/classes"/>
+</classpath>
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.templates/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.modeling.ui.newproject.templates/.settings/org.eclipse.jdt.core.prefs
index a698e59..a58ebdc 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.templates/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.templates/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,15 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject.templates/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui.newproject.templates/META-INF/MANIFEST.MF
index e225dac..a5b38e6 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject.templates/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui.newproject.templates/META-INF/MANIFEST.MF
@@ -9,8 +9,10 @@
  org.eclipse.uml2.uml,
  org.eclipse.papyrus.uml.diagram.common;bundle-version="2.0.0",
  org.eclipse.efm.ui,
- org.eclipse.papyrus.infra.architecture;bundle-version="2.0.0"
+ org.eclipse.papyrus.infra.architecture;bundle-version="2.0.0",
+ org.eclipse.papyrus.infra.core;bundle-version="4.1.0"
 Export-Package: org.eclipse.efm.modeling.ui.newproject.templates
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Automatic-Module-Name: org.eclipse.efm.modeling.ui.newproject.templates
+Import-Package: org.eclipse.papyrus.uml.tools.utils
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject/.classpath b/gui/org.eclipse.efm.modeling.ui.newproject/.classpath
index 43b9862..1db08c6 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui.newproject/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.modeling.ui.newproject/.settings/org.eclipse.jdt.core.prefs
index a698e59..a58ebdc 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.modeling.ui.newproject/.settings/org.eclipse.jdt.core.prefs
@@ -1,12 +1,15 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
 org.eclipse.jdt.core.compiler.codegen.methodParameters=do not generate
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
 org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.debug.lineNumber=generate
 org.eclipse.jdt.core.compiler.debug.localVariable=generate
 org.eclipse.jdt.core.compiler.debug.sourceFile=generate
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.modeling.ui.newproject/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui.newproject/META-INF/MANIFEST.MF
index 2330aa0..6ccbfb8 100644
--- a/gui/org.eclipse.efm.modeling.ui.newproject/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui.newproject/META-INF/MANIFEST.MF
@@ -11,7 +11,7 @@
  org.eclipse.emf.common.ui;bundle-version="2.10.0",
  org.eclipse.emf.edit;bundle-version="2.12.0",
  org.eclipse.efm.ui
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Import-Package: org.eclipse.emf.common,
  org.eclipse.emf.common.util,
diff --git a/gui/org.eclipse.efm.modeling.ui.views.common/.classpath b/gui/org.eclipse.efm.modeling.ui.views.common/.classpath
index 43b9862..1db08c6 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.common/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui.views.common/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/gui/org.eclipse.efm.modeling.ui.views.common/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.modeling.ui.views.common/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.common/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.modeling.ui.views.common/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.modeling.ui.views.common/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui.views.common/META-INF/MANIFEST.MF
index 4d7b7ca..d660953 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.common/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui.views.common/META-INF/MANIFEST.MF
@@ -3,7 +3,7 @@
 Bundle-Name: Common
 Bundle-SymbolicName: org.eclipse.efm.modeling.ui.views.common;singleton:=true
 Bundle-Version: 0.0.1.qualifier
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.papyrus.infra.newchild,
  org.eclipse.papyrus.infra.properties,
  org.eclipse.efm.formalml;bundle-version="[0.0.1,1.0.0)",
diff --git a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.classpath b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.classpath
index cf36b56..bc57d23 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src/"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.settings/org.eclipse.jdt.core.prefs
index 295926d..11265a3 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/META-INF/MANIFEST.MF
index 95d18dc..48f1192 100644
--- a/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui.views.property.tab.xlia/META-INF/MANIFEST.MF
@@ -13,10 +13,13 @@
  org.eclipse.efm.formalml.xtext.ui;bundle-version="[0.0.1,1.0.0)",
  org.eclipse.efm.modeling.codegen.xlia;bundle-version="[0.0.1,1.0.0)",
  org.eclipse.efm.formalml;bundle-version="[0.0.1,1.0.0)",
- org.eclipse.efm.ui;bundle-version="0.0.1"
+ org.eclipse.efm.ui;bundle-version="0.0.1",
+ org.eclipse.papyrus.uml.xtext.integration.core;bundle-version="3.0.0"
 Bundle-ActivationPolicy: lazy
 Bundle-Activator: org.eclipse.efm.papyrus.view.property.concretesyntax.ActivatorXLIAProperties
 Bundle-ManifestVersion: 2
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-Vendor: Eclipse Modeling Project
 Automatic-Module-Name: org.eclipse.efm.modeling.ui.views.property.tab.xlia
+Import-Package: org.eclipse.papyrus.infra.core.services,
+ org.eclipse.papyrus.infra.core.utils
diff --git a/gui/org.eclipse.efm.modeling.ui/.classpath b/gui/org.eclipse.efm.modeling.ui/.classpath
index b862a29..ca3785c 100644
--- a/gui/org.eclipse.efm.modeling.ui/.classpath
+++ b/gui/org.eclipse.efm.modeling.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/gui/org.eclipse.efm.modeling.ui/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.modeling.ui/META-INF/MANIFEST.MF
index 4c788a6..a71a78a 100644
--- a/gui/org.eclipse.efm.modeling.ui/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.modeling.ui/META-INF/MANIFEST.MF
@@ -7,5 +7,5 @@
 Bundle-Vendor: %pluginVendor
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/gui/org.eclipse.efm.ui.intro/.classpath b/gui/org.eclipse.efm.ui.intro/.classpath
index b862a29..ca3785c 100644
--- a/gui/org.eclipse.efm.ui.intro/.classpath
+++ b/gui/org.eclipse.efm.ui.intro/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF
index 684ccf1..cd0cde1 100644
--- a/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.ui.intro/META-INF/MANIFEST.MF
@@ -10,5 +10,5 @@
  org.eclipse.ui.intro,
  org.eclipse.ui.intro.quicklinks,
  org.eclipse.efm.modeling.doc.helpcontents
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
diff --git a/gui/org.eclipse.efm.ui/.classpath b/gui/org.eclipse.efm.ui/.classpath
index 54f561c..f656d57 100644
--- a/gui/org.eclipse.efm.ui/.classpath
+++ b/gui/org.eclipse.efm.ui/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="target/classes"/>
diff --git a/gui/org.eclipse.efm.ui/.settings/org.eclipse.jdt.core.prefs b/gui/org.eclipse.efm.ui/.settings/org.eclipse.jdt.core.prefs
index 0c68a61..7adc0fb 100644
--- a/gui/org.eclipse.efm.ui/.settings/org.eclipse.jdt.core.prefs
+++ b/gui/org.eclipse.efm.ui/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/gui/org.eclipse.efm.ui/META-INF/MANIFEST.MF b/gui/org.eclipse.efm.ui/META-INF/MANIFEST.MF
index a9c3d41..9034f10 100644
--- a/gui/org.eclipse.efm.ui/META-INF/MANIFEST.MF
+++ b/gui/org.eclipse.efm.ui/META-INF/MANIFEST.MF
@@ -8,7 +8,7 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.ui.console
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
 Export-Package: org.eclipse.efm.ui,
  org.eclipse.efm.ui.utils
diff --git a/releng/org.eclipse.efm.modeling.product/efm-modeling.papyrus.product b/releng/org.eclipse.efm.modeling.product/efm-modeling.papyrus.product
index 6dd8889..12f28e7 100644
--- a/releng/org.eclipse.efm.modeling.product/efm-modeling.papyrus.product
+++ b/releng/org.eclipse.efm.modeling.product/efm-modeling.papyrus.product
@@ -43,7 +43,7 @@
    </launcher>
 
    <vm>
-      <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</windows>
+      <windows include="false">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11</windows>
    </vm>
 
    <license>
@@ -313,6 +313,7 @@
       <feature id="org.eclipse.emf.databinding" installMode="root"/>
       <feature id="org.eclipse.gef.dot" installMode="root"/>
       <feature id="org.eclipse.efm.modeling.textual.feature" installMode="root"/>
+      <feature id="org.eclipse.jgit.http.apache" installMode="root"/>
    </features>
 
    <configurations>
@@ -323,9 +324,9 @@
       <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
       <plugin id="org.eclipse.update.configurator" autoStart="false" startLevel="3" />
       <property name="file.encoding" value="UTF-8" />
-      <property name="org.eclipse.update.reconcile" value="false" />
-      <property name="osgi.bundles.defaultStartLevel" value="4" />
       <property name="osgi.instance.area.default" value="../workspace-efm" />
+      <property name="osgi.bundles.defaultStartLevel" value="4" />
+      <property name="org.eclipse.update.reconcile" value="false" />
       <property name="osgi.requiredJavaVersion" value="1.8" />
    </configurations>
 
diff --git a/releng/org.eclipse.efm.modeling.product/efm-modeling.textual.product b/releng/org.eclipse.efm.modeling.product/efm-modeling.textual.product
index 4cf53ee..3014591 100644
--- a/releng/org.eclipse.efm.modeling.product/efm-modeling.textual.product
+++ b/releng/org.eclipse.efm.modeling.product/efm-modeling.textual.product
@@ -41,9 +41,8 @@
       </win>
    </launcher>
 
-
    <vm>
-      <windows include="true">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8</windows>
+      <windows include="true">org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11</windows>
    </vm>
 
    <license>
@@ -272,6 +271,7 @@
       <feature id="org.eclipse.xtext.runtime" installMode="root"/>
       <feature id="org.eclipse.emf.edit" installMode="root"/>
       <feature id="org.eclipse.xtext.xbase" installMode="root"/>
+      <feature id="org.eclipse.jgit.http.apache" installMode="root"/>
       <feature id="org.eclipse.emf.codegen.ecore" installMode="root"/>
       <feature id="org.eclipse.emf.converter" installMode="root"/>
       <feature id="org.eclipse.xtend.typesystem.emf" installMode="root"/>
@@ -282,6 +282,7 @@
       <feature id="org.eclipse.ecf.filetransfer.feature" installMode="root"/>
       <feature id="org.eclipse.xtext.ui" installMode="root"/>
       <feature id="org.eclipse.xtend.dependencies" installMode="root"/>
+      <feature id="org.eclipse.jgit.gpg.bc" installMode="root"/>
       <feature id="net.sourceforge.plantuml.feature" installMode="root"/>
       <feature id="org.eclipse.gef.fx.swt" installMode="root"/>
       <feature id="org.eclipse.xtend.ui" installMode="root"/>
@@ -322,20 +323,20 @@
       <plugin id="org.eclipse.equinox.p2.reconciler.dropins" autoStart="true" startLevel="4" />
       <plugin id="org.eclipse.equinox.simpleconfigurator" autoStart="true" startLevel="1" />
       <plugin id="org.eclipse.update.configurator" autoStart="true" startLevel="3" />
-      <property name="file.encoding" value="UTF-8" />
-      <property name="org.eclipse.efm.executable.diversity.default" value="../bin/diversity.exe" />
-      <property name="org.eclipse.efm.executable.graphviz.default" value="../bin/zgrviewer-0.10.0/run.bat" />
-      <property name="org.eclipse.update.reconcile" value="false" />
       <property name="osgi.bundles.defaultStartLevel" value="4" />
-      <property name="osgi.framework.extension" value="org.eclipse.fx.osgi" />
-      <property name="osgi.instance.area.default" value="../workspace" />
+      <property name="org.eclipse.update.reconcile" value="false" />
+      <property name="org.eclipse.efm.executable.diversity.default" value="../bin/diversity.exe" />
       <property name="osgi.requiredJavaVersion" value="1.8" />
+      <property name="osgi.instance.area.default" value="../workspace" />
+      <property name="osgi.framework.extension" value="org.eclipse.fx.osgi" />
+      <property name="org.eclipse.efm.executable.graphviz.default" value="../bin/zgrviewer-0.10.0/run.bat" />
+      <property name="file.encoding" value="UTF-8" />
    </configurations>
 
    <repositories>
       <repository location="http://download.eclipse.org/modeling/mdt/papyrus/components/designer" enabled="true" />
-      <repository location="http://download.eclipse.org/releases/2019-06/" enabled="true" />
-      <repository location="http://https://download.eclipse.org/modeling/mdt/papyrus/updates/releases/2019-06/" enabled="true" />
+      <repository location="http://download.eclipse.org/releases/2020-03/" enabled="true" />
+      <repository location="http://https://download.eclipse.org/modeling/mdt/papyrus/updates/releases/2020-03/" enabled="true" />
    </repositories>
 
    <preferencesInfo>
diff --git a/releng/org.eclipse.efm.modeling.product/pom.xml-textual b/releng/org.eclipse.efm.modeling.product/pom.xml-textual
index 220fc93..ee1de63 100644
--- a/releng/org.eclipse.efm.modeling.product/pom.xml-textual
+++ b/releng/org.eclipse.efm.modeling.product/pom.xml-textual
@@ -27,7 +27,7 @@
 				<groupId>org.eclipse.tycho</groupId>
 				<artifactId>tycho-p2-director-plugin</artifactId>
 				<configuration>
-					<profile>org.eclipse.efm.modeling</profile>
+					<profile>org.eclipse.efm.tooling</profile>
 					<formats>
 						<linux>zip</linux>
 						<macosx>tar.gz</macosx>
diff --git a/releng/org.eclipse.efm.modeling.rcp/.classpath b/releng/org.eclipse.efm.modeling.rcp/.classpath
index 323b07b..cbd391f 100644
--- a/releng/org.eclipse.efm.modeling.rcp/.classpath
+++ b/releng/org.eclipse.efm.modeling.rcp/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="output" path="target/classes"/>
 </classpath>
diff --git a/releng/org.eclipse.efm.modeling.rcp/.settings/org.eclipse.jdt.core.prefs b/releng/org.eclipse.efm.modeling.rcp/.settings/org.eclipse.jdt.core.prefs
index 0c68a61..7adc0fb 100644
--- a/releng/org.eclipse.efm.modeling.rcp/.settings/org.eclipse.jdt.core.prefs
+++ b/releng/org.eclipse.efm.modeling.rcp/.settings/org.eclipse.jdt.core.prefs
@@ -1,7 +1,10 @@
 eclipse.preferences.version=1
 org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled
-org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8
-org.eclipse.jdt.core.compiler.compliance=1.8
+org.eclipse.jdt.core.compiler.codegen.targetPlatform=11
+org.eclipse.jdt.core.compiler.compliance=11
 org.eclipse.jdt.core.compiler.problem.assertIdentifier=error
+org.eclipse.jdt.core.compiler.problem.enablePreviewFeatures=disabled
 org.eclipse.jdt.core.compiler.problem.enumIdentifier=error
-org.eclipse.jdt.core.compiler.source=1.8
+org.eclipse.jdt.core.compiler.problem.reportPreviewFeatures=warning
+org.eclipse.jdt.core.compiler.release=enabled
+org.eclipse.jdt.core.compiler.source=11
diff --git a/releng/org.eclipse.efm.modeling.rcp/META-INF/MANIFEST.MF b/releng/org.eclipse.efm.modeling.rcp/META-INF/MANIFEST.MF
index e97cd7c..09fcd81 100644
--- a/releng/org.eclipse.efm.modeling.rcp/META-INF/MANIFEST.MF
+++ b/releng/org.eclipse.efm.modeling.rcp/META-INF/MANIFEST.MF
@@ -6,6 +6,6 @@
 Bundle-Vendor: %pluginProvider
 Bundle-ActivationPolicy: lazy
 Bundle-Localization: plugin
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Require-Bundle: org.eclipse.e4.ui.css.swt.theme;bundle-version="[0.10.0,1.0.0)"
 Eclipse-BundleShape: dir
diff --git a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/.project b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/.project
index d15b6b8..044523d 100644
--- a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/.project
+++ b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/.project
@@ -6,6 +6,11 @@
 	</projects>
 	<buildSpec>
 		<buildCommand>
+			<name>org.eclipse.xtext.ui.shared.xtextBuilder</name>
+			<arguments>
+			</arguments>
+		</buildCommand>
+		<buildCommand>
 			<name>org.eclipse.m2e.core.maven2Builder</name>
 			<arguments>
 			</arguments>
@@ -13,5 +18,6 @@
 	</buildSpec>
 	<natures>
 		<nature>org.eclipse.m2e.core.maven2Nature</nature>
+		<nature>org.eclipse.xtext.ui.shared.xtextNature</nature>
 	</natures>
 </projectDescription>
diff --git a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.target b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.target
index 52367b2..efbd01f 100644
--- a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.target
+++ b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.target
@@ -1,11 +1,11 @@
 <?xml version="1.0" encoding="UTF-8" standalone="no"?>
 <?pde?>
-<!-- generated with https://github.com/mbarbero/fr.obeo.releng.targetplatform -->
-<target name="Eclipse Formal Modeling Papyrus last-release" sequenceNumber="1570521255">
+<!-- generated with https://github.com/eclipse-cbi/targetplatform-dsl -->
+<target name="Eclipse Formal Modeling Papyrus last-release" sequenceNumber="1620776854">
   <locations>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.cdt.core" version="0.0.0"/>
-      <unit id="org.eclipse.ecf.filetransfer.httpclient45.feature.feature.group" version="1.0.0.v20190530-1947"/>
+      <unit id="org.eclipse.ecf.filetransfer.httpclient45.feature.feature.group" version="1.0.702.v20201025-2303"/>
       <unit id="org.eclipse.egit.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.emf.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.emf.source.feature.group" version="0.0.0"/>
@@ -30,6 +30,7 @@
       <unit id="org.eclipse.gmf.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.jdt.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.jdt.source.feature.group" version="0.0.0"/>
+      <unit id="org.eclipse.jgit.ssh.jsch.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.json" version="0.0.0"/>
       <unit id="org.eclipse.m2m.qvt.oml.sdk.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.m2m.qvt.oml.emf.util" version="0.0.0"/>
@@ -68,17 +69,13 @@
       <unit id="org.eclipse.wst.common.core" version="0.0.0"/>
       <unit id="org.eclipse.wst.sse.core" version="0.0.0"/>
       <unit id="org.eclipse.wst.xml.core" version="0.0.0"/>
-      <repository id="eclipse-2019-09" location="http://download.eclipse.org/releases/2019-09"/>
+      <repository id="eclipse-2021-03" location="http://download.eclipse.org/releases/2021-03"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.papyrus.marte.core.feature.feature.group" version="0.0.0"/>
       <repository id="Papyrus-Marte" location="http://download.eclipse.org/modeling/mdt/papyrus/components/marte"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="org.eclipse.papyrus.moka.feature.feature.group" version="0.0.0"/>
-      <repository id="Papyrus-Moka-Master" location="https://hudson.eclipse.org/papyrus/view/Moka/job/papyrus-moka-master/lastSuccessfulBuild/artifact/releng/org.eclipse.papyrus.moka.p2/target/repository"/>
-    </location>
-    <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="org.eclipse.papyrus.designer.languages.common.feature.feature.group" version="0.0.0"/>
       <unit id="org.eclipse.papyrus.designer.deployment.tools" version="0.0.0"/>
       <unit id="org.eclipse.papyrus.designer.transformation.base" version="0.0.0"/>
@@ -86,6 +83,9 @@
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
       <unit id="net.sourceforge.plantuml.feature.feature.group" version="0.0.0"/>
+      <unit id="net.sourceforge.plantuml.feature.source.feature.group" version="0.0.0"/>
+      <unit id="net.sourceforge.plantuml.ecore.feature.feature.group" version="0.0.0"/>
+      <unit id="net.sourceforge.plantuml.ecore.feature.source.feature.group" version="0.0.0"/>
       <unit id="net.sourceforge.plantuml.lib.feature.feature.group" version="0.0.0"/>
       <repository id="PlantUML" location="http://hallvard.github.io/plantuml"/>
     </location>
@@ -94,17 +94,17 @@
       <repository id="Eclipse-Nebula" location="http://download.eclipse.org/nebula/releases/latest"/>
     </location>
     <location includeMode="planner" includeAllPlatforms="false" includeSource="true" includeConfigurePhase="false" type="InstallableUnit">
-      <unit id="com.google.guava" version="27.1.0.v20190517-1946"/>
-      <unit id="com.google.guava.source" version="27.1.0.v20190517-1946"/>
-      <unit id="com.google.gson" version="2.8.2.v20180104-1110"/>
-      <unit id="com.google.gson.source" version="2.8.2.v20180104-1110"/>
-      <unit id="com.google.inject.multibindings" version="3.0.0.v201605172100"/>
-      <unit id="com.google.inject.multibindings.source" version="3.0.0.v201605172100"/>
-      <unit id="org.apache.commons.lang3" version="3.1.0.v201403281430"/>
-      <unit id="org.apache.commons.lang3.source" version="3.1.0.v201403281430"/>
-      <unit id="org.objectweb.asm" version="7.1.0.v20190412-2143"/>
-      <unit id="org.objectweb.asm.source" version="7.1.0.v20190412-2143"/>
-      <repository id="orbit" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20190827152740/repository"/>
+      <unit id="com.google.guava" version="0.0.0"/>
+      <unit id="com.google.guava.source" version="0.0.0"/>
+      <unit id="com.google.gson" version="0.0.0"/>
+      <unit id="com.google.gson.source" version="0.0.0"/>
+      <unit id="com.google.inject.multibindings" version="0.0.0"/>
+      <unit id="com.google.inject.multibindings.source" version="0.0.0"/>
+      <unit id="org.apache.commons.lang3" version="0.0.0"/>
+      <unit id="org.apache.commons.lang3.source" version="0.0.0"/>
+      <unit id="org.objectweb.asm" version="0.0.0"/>
+      <unit id="org.objectweb.asm.source" version="0.0.0"/>
+      <repository id="orbit" location="https://download.eclipse.org/tools/orbit/downloads/drops/R20210223232630/repository"/>
     </location>
   </locations>
 </target>
diff --git a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.tpd b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.tpd
index f951e12..1baab0c 100644
--- a/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.tpd
+++ b/targetplatform/org.eclipse.efm.modeling.targetplatform.last-release-papyrus/org.eclipse.efm.modeling.targetplatform.last-release-papyrus.tpd
@@ -3,7 +3,7 @@
 with source requirements
 
 //location "http://download.eclipse.org/releases/latest/" eclipse-latest {
-location "http://download.eclipse.org/releases/2019-09" eclipse-2019-09 {
+location "http://download.eclipse.org/releases/2021-03" eclipse-2021-03 {
  org.eclipse.cdt.core lazy
  
  org.eclipse.ecf.filetransfer.httpclient45.feature.feature.group
@@ -38,6 +38,8 @@
  org.eclipse.jdt.feature.group lazy
  org.eclipse.jdt.source.feature.group lazy
  
+ org.eclipse.jgit.ssh.jsch.feature.group lazy
+ 
  org.eclipse.json lazy
  
  org.eclipse.m2m.qvt.oml.sdk.feature.group lazy
@@ -54,7 +56,7 @@
  org.eclipse.papyrus.infra.viewpoints.policy lazy
  org.eclipse.papyrus.sdk.feature.feature.group lazy
 // org.eclipse.papyrus.views.properties.model.xwt lazy
- 
+
  org.eclipse.platform.feature.group lazy
  org.eclipse.rcp.feature.group lazy
 // org.eclipse.uml2.codegen.ecore lazy
@@ -103,11 +105,11 @@
 // org.eclipse.papyrus.marte.static.profile lazy
 }
 
-//location "http://download.eclipse.org/modeling/mdt/papyrus/components/moka" Papyrus-Moka {
-location "https://hudson.eclipse.org/papyrus/view/Moka/job/papyrus-moka-master/lastSuccessfulBuild/artifact/releng/org.eclipse.papyrus.moka.p2/target/repository" Papyrus-Moka-Master {
- org.eclipse.papyrus.moka.feature.feature.group lazy
-// org.eclipse.papyrus.moka.simex lazy
-}
+////location "http://download.eclipse.org/modeling/mdt/papyrus/components/moka" Papyrus-Moka {
+//location "https://hudson.eclipse.org/papyrus/view/Moka/job/papyrus-moka-master/lastSuccessfulBuild/artifact/releng/org.eclipse.papyrus.moka.p2/target/repository" Papyrus-Moka-Master {
+// org.eclipse.papyrus.moka.feature.feature.group lazy
+//// org.eclipse.papyrus.moka.simex lazy
+//}
 
 location "http://download.eclipse.org/modeling/mdt/papyrus/components/designer" Papyrus-Designer {
  org.eclipse.papyrus.designer.languages.common.feature.feature.group lazy
@@ -117,6 +119,9 @@
 
 location "http://hallvard.github.io/plantuml" PlantUML {
  net.sourceforge.plantuml.feature.feature.group  lazy
+ net.sourceforge.plantuml.feature.source.feature.group lazy
+ net.sourceforge.plantuml.ecore.feature.feature.group  lazy
+ net.sourceforge.plantuml.ecore.feature.source.feature.group lazy
  net.sourceforge.plantuml.lib.feature.feature.group lazy
 }
 
@@ -151,17 +156,20 @@
 
 //location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/S20190129210011/repository" {
 //location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20190602212107/repository" {
-location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20190827152740/repository" {
-	com.google.guava //[21.0.0,22.0.0)
-	com.google.guava.source
- 	com.google.gson
-	com.google.gson.source
-	com.google.inject.multibindings
-	com.google.inject.multibindings.source
- 	org.apache.commons.lang3
-	org.apache.commons.lang3.source
- 	org.objectweb.asm
-	org.objectweb.asm.source
+//location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20190827152740/repository" {
+//location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20191126223242/repository" {
+//location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20200224183213/repository" {
+location orbit "https://download.eclipse.org/tools/orbit/downloads/drops/R20210223232630/repository" {
+	com.google.guava lazy //[21.0.0,22.0.0)
+	com.google.guava.source lazy
+ 	com.google.gson lazy
+	com.google.gson.source lazy
+	com.google.inject.multibindings lazy
+	com.google.inject.multibindings.source lazy
+ 	org.apache.commons.lang3 lazy
+	org.apache.commons.lang3.source lazy
+ 	org.objectweb.asm lazy
+	org.objectweb.asm.source lazy
 	
 //	com.google.guava 21.0.0
 //	com.google.guava.source 21.0.0
@@ -174,10 +182,3 @@
 	// The batik plugins are transitively fetched through GMF_Runtime sdk's org.eclipse.gmf.runtime.thirdparty
 	// see the pom.xml under main/site
 }
-
-
-
-//location "http://download.eclipse.org/tools/orbit/downloads/drops/R20181128170323/repository/" orbit-last {
-// com.google.guava lazy
-//}
-
diff --git a/tutorial/org.eclipse.efm.tutorial.thermostat/.classpath b/tutorial/org.eclipse.efm.tutorial.thermostat/.classpath
index b862a29..ca3785c 100644
--- a/tutorial/org.eclipse.efm.tutorial.thermostat/.classpath
+++ b/tutorial/org.eclipse.efm.tutorial.thermostat/.classpath
@@ -1,6 +1,6 @@
 <?xml version="1.0" encoding="UTF-8"?>
 <classpath>
-	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8"/>
+	<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-11"/>
 	<classpathentry kind="con" path="org.eclipse.pde.core.requiredPlugins"/>
 	<classpathentry kind="src" path="src"/>
 	<classpathentry kind="output" path="bin"/>
diff --git a/tutorial/org.eclipse.efm.tutorial.thermostat/META-INF/MANIFEST.MF b/tutorial/org.eclipse.efm.tutorial.thermostat/META-INF/MANIFEST.MF
index 68bec75..aadaaea 100644
--- a/tutorial/org.eclipse.efm.tutorial.thermostat/META-INF/MANIFEST.MF
+++ b/tutorial/org.eclipse.efm.tutorial.thermostat/META-INF/MANIFEST.MF
@@ -8,5 +8,5 @@
 Require-Bundle: org.eclipse.ui,
  org.eclipse.core.runtime,
  org.eclipse.ui.cheatsheets;bundle-version="3.5.0"
-Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-RequiredExecutionEnvironment: JavaSE-11
 Bundle-ActivationPolicy: lazy
